diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 7dcb9941..680687f7 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -9,7 +9,7 @@ jobs: strategy: matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ steps: diff --git a/README.md b/README.md index ff9a5f10..f965947a 100644 --- a/README.md +++ b/README.md @@ -201,6 +201,9 @@ Schema, such as `@hyperjump/json-schema/draft-2020-12`. * **unregisterSchema**: (uri: string) => void Remove a schema from the local schema registry. +* **getAllRegisteredSchemaUris**: () => string[] + + This function returns the URIs of all registered schemas * **hasSchema**: (uri: string) => boolean Check if a schema with the given URI is already registered. @@ -209,11 +212,11 @@ Schema, such as `@hyperjump/json-schema/draft-2020-12`. Load a schema manually rather than fetching it from the filesystem or over the network. Any schema already registered with the same identifier will be replaced with no warning. -* **validate**: (schemaURI: string, instance: any, outputFormat: OutputFormat = FLAG) => Promise\ +* **validate**: (schemaURI: string, instance: any, outputFormat: ValidationOptions | OutputFormat = FLAG) => Promise\ Validate an instance against a schema. This function is curried to allow compiling the schema once and applying it to multiple instances. -* **validate**: (schemaURI: string) => Promise\<(instance: any, outputFormat: OutputFormat = FLAG) => OutputUnit> +* **validate**: (schemaURI: string) => Promise\<(instance: any, outputFormat: ValidationOptions | OutputFormat = FLAG) => OutputUnit> Compiling a schema to a validation function. * **FLAG**: "FLAG" @@ -245,13 +248,17 @@ The following types are used in the above definitions * **OutputFormat**: **FLAG** - Only the `FLAG` output format is part of the Stable API. Additional output - formats are included as part of the Experimental API. + Only the `FLAG` output format is part of the Stable API. Additional [output + formats](#output-formats) are included as part of the Experimental API. * **OutputUnit**: { valid: boolean } Output is an experimental feature of the JSON Schema specification. There may be additional fields present in the OutputUnit, but only the `valid` property should be considered part of the Stable API. +* **ValidationOptions**: + + * outputFormat?: OutputFormat + * plugins?: EvaluationPlugin[] ## Bundling @@ -333,7 +340,8 @@ These are available from the `@hyperjump/json-schema/bundle` export. The `FLAG` output format isn't very informative. You can change the output format used for validation to get more information about failures. The official output format is still evolving, so these may change or be replaced in the -future. +future. This implementation currently supports the BASIC and DETAILED output +formats. ```javascript import { BASIC } from "@hyperjump/json-schema/experimental"; @@ -399,9 +407,9 @@ addKeyword({ // ); }, - interpret: (implies, instance, ast, dynamicAnchors, quiet) => { + interpret: (implies, instance, context) => { return implies.reduce((valid, schema) => { - return !valid || Validation.interpret(schema, instance, ast, dynamicAnchors, quiet); + return !valid || Validation.interpret(schema, instance, context); }, true); } }); @@ -500,6 +508,57 @@ registerSchema({ const output = await validate("https://example.com/schema1", 42); // Expect InvalidSchemaError ``` +### EvaluationPlugins + +EvaluationPlugins allow you to hook into the validation process for various +purposes. There are hooks for before an after schema evaluation and before and +after keyword evaluation. (See the API section for the full interface) The +following is a simple example to record all the schema locations that were +evaluated. This could be used as part of a solution for determining test +coverage for a schema. + +```JavaScript +import { registerSchema, validate } from "@hyperjump/json-schema/draft-2020-12"; +import { BASIC } from "@hyperjump/json-schema/experimental.js"; + +class EvaluatedKeywordsPlugin { + constructor() { + this.schemaLocations = new Set(); + } + + beforeKeyword([, schemaUri]) { + this.schemaLocations.add(schemaUri); + } +} + +registerSchema({ + $schema: "https://json-schema.org/draft/2020-12/schema", + type: "object", + properties: { + foo: { type: "number" }, + bar: { type: "boolean" } + }, + required: ["foo"] +}, "https://schemas.hyperjump.io/main"); + +const evaluatedKeywordPlugin = new EvaluatedKeywordsPlugin(); + +await validate("https://schemas.hyperjump.io/main", { foo: 42 }, { + outputFormat: BASIC, + plugins: [evaluatedKeywordPlugin] +}); + +console.log(evaluatedKeywordPlugin.schemaLocations); +// Set(4) { +// 'https://schemas.hyperjump.io/main#/type', +// 'https://schemas.hyperjump.io/main#/properties', +// 'https://schemas.hyperjump.io/main#/properties/foo/type', +// 'https://schemas.hyperjump.io/main#/required' +// } + +// NOTE: #/properties/bar is not in the list because the instance doesn't include that property. +``` + ### API These are available from the `@hyperjump/json-schema/experimental` export. @@ -521,23 +580,31 @@ These are available from the `@hyperjump/json-schema/experimental` export. is needed for compiling sub-schemas. The `parentSchema` parameter is primarily useful for looking up the value of an adjacent keyword that might effect this one. - * interpret: (compiledKeywordValue: any, instance: JsonNode, ast: AST, dynamicAnchors: object, quiet: boolean, schemaLocation: string) => boolean + * interpret: (compiledKeywordValue: any, instance: JsonNode, context: ValidationContext) => boolean This function takes the value returned by the `compile` function and the instance value that is being validated and returns whether the value is valid or not. The other parameters are only needed for validating sub-schemas. - * collectEvaluatedProperties?: (compiledKeywordValue: any, instance: JsonNode, ast: AST, dynamicAnchors: object) => Set\ | false + * simpleApplicator?: boolean - If the keyword is an applicator, it will need to implement this - function for `unevaluatedProperties` to work as expected. - * collectEvaluatedItems?: (compiledKeywordValue: A, instance: JsonNode, ast: AST, dynamicAnchors: object) => Set\ | false + Some applicator keywords just apply schemas and don't do any + validation of its own. In these cases, it isn't helpful to include + them in BASIC output. This flag is used to trim those nodes from the + output. + * annotation?: (compiledKeywordValue: any) => any | undefined - If the keyword is an applicator, it will need to implement this - function for `unevaluatedItems` to work as expected. - * collectExternalIds?: (visited: Set\, parentSchema: Browser, schema: Browser) => Set\ - If the keyword is an applicator, it will need to implement this - function to work properly with the [bundle](#bundling) feature. + If the keyword is an annotation, it will need to implement this + function to return the annotation. + * plugin?: EvaluationPlugin + + If the keyword needs to track state during the evaluation process, you + can include an EvaluationPlugin that will get added only when this + keyword is present in the schema. + + * **ValidationContext**: object + * ast: AST + * plugins: EvaluationPlugins[] * **defineVocabulary**: (id: string, keywords: { [keyword: string]: string }) => void Define a vocabulary that maps keyword name to keyword URIs defined using @@ -576,7 +643,7 @@ These are available from the `@hyperjump/json-schema/experimental` export. * **getSchema**: (uri: string, browser?: Browser) => Promise\ Get a schema by it's URI taking the local schema registry into account. -* buildSchemaDocument: (schema: SchemaObject | boolean, retrievalUri?: string, contextDialectId?: string) => SchemaDocument +* **buildSchemaDocument**: (schema: SchemaObject | boolean, retrievalUri?: string, contextDialectId?: string) => SchemaDocument Build a SchemaDocument from a JSON-compatible value. You might use this if you're creating a custom media type plugin, such as supporting JSON Schemas @@ -616,6 +683,12 @@ These are available from the `@hyperjump/json-schema/experimental` export. include annotations or human readable error messages. The output can be processed to create human readable error messages as needed. +* **EvaluationPlugin**: object + * 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 + * afterSchema?(url: string, instance: JsonNode, context: Context, valid: boolean): void + ## Instance API (experimental) These functions are available from the @@ -680,7 +753,7 @@ Schema. ### Usage An annotated JSON document is represented as a -(JsonNode)[#/instance-api-experimental] AST. You can use this AST to traverse +(JsonNode)[#instance-api-experimental] AST. You can use this AST to traverse the data structure and get annotations for the values it represents. ```javascript @@ -780,7 +853,7 @@ following functions are available in addition to the functions available in the * **annotation**: (instance: JsonNode, keyword: string, dialect?: string): any[]; Get the annotations for a keyword for the value represented by the JsonNode. -* **annotatedWith**: (instance: JsonNode, keyword: string, dialect?: string): JsonNode[]; +* **annotatedWith**: (instance: JsonNode, keyword: string, dialect?: string): Generator; Get all JsonNodes that are annotated with the given keyword. * **setAnnotation**: (instance: JsonNode, keywordId: string, value: any) => JsonNode diff --git a/annotations/annotated-instance.d.ts b/annotations/annotated-instance.d.ts index 6d0882da..206df4f9 100644 --- a/annotations/annotated-instance.d.ts +++ b/annotations/annotated-instance.d.ts @@ -1,5 +1,4 @@ -export const setAnnotation: (keywordUri: string, schemaLocation: string, value: string) => void; export const annotation: (instance: JsonNode, keyword: string, dialectUri?: string) => A[]; -export const annotatedWith: (instance: A, keyword: string, dialectUri?: string) => A[]; +export const annotatedWith: (instance: A, keyword: string, dialectUri?: string) => Generator; export * from "../lib/instance.js"; diff --git a/annotations/annotated-instance.js b/annotations/annotated-instance.js index 62c22804..c6d414e2 100644 --- a/annotations/annotated-instance.js +++ b/annotations/annotated-instance.js @@ -1,56 +1,20 @@ -import * as JsonPointer from "@hyperjump/json-pointer"; import * as Instance from "../lib/instance.js"; import { getKeywordId } from "../lib/keywords.js"; const defaultDialectId = "https://json-schema.org/validation"; -export const setAnnotation = (node, keywordUri, schemaLocation, value) => { - if (!(keywordUri in node.annotations)) { - node.annotations[keywordUri] = {}; - } - node.annotations[keywordUri][schemaLocation] = value; -}; - export const annotation = (node, keyword, dialect = defaultDialectId) => { const keywordUri = getKeywordId(keyword, dialect); - - let currentNode = node.root; - const errors = [...invalidSchemas(currentNode)]; - for (let segment of JsonPointer.pointerSegments(node.pointer)) { - segment = segment === "-" && Instance.typeOf(currentNode) === "array" ? Instance.length(currentNode) : segment; - currentNode = Instance.step(segment, currentNode); - errors.push(...invalidSchemas(currentNode)); - } - - const annotations = []; - for (const schemaLocation in node.annotations[keywordUri]) { - if (!errors.some((error) => schemaLocation.startsWith(error))) { - annotations.unshift(node.annotations[keywordUri][schemaLocation]); - } - } - - return annotations; + return node.annotations[keywordUri] ?? []; }; -const invalidSchemas = function* (node) { - for (const error in node.errors) { - if (node.errors[error] === "https://json-schema.org/evaluation/validate") { - yield error; - } - } -}; - -export const annotatedWith = (instance, keyword, dialectId = defaultDialectId) => { - const nodes = []; - +export const annotatedWith = function* (instance, keyword, dialectId = defaultDialectId) { for (const node of Instance.allNodes(instance)) { if (annotation(node, keyword, dialectId).length > 0) { - nodes.push(node); + yield node; } } - - return nodes; }; export * from "../lib/instance.js"; diff --git a/annotations/index.d.ts b/annotations/index.d.ts index 080dd2da..dd28dc62 100644 --- a/annotations/index.d.ts +++ b/annotations/index.d.ts @@ -1,18 +1,18 @@ -import type { OutputFormat, OutputUnit } from "../lib/index.js"; +import type { OutputFormat, OutputUnit, ValidationOptions } from "../lib/index.js"; import type { CompiledSchema } from "../lib/experimental.js"; import type { JsonNode } from "../lib/json-node.js"; import type { Json } from "@hyperjump/json-pointer"; export const annotate: ( - (schemaUrl: string, value: Json, outputFormat?: OutputFormat) => Promise + (schemaUrl: string, value: Json, options?: OutputFormat | ValidationOptions) => Promise ) & ( (schemaUrl: string) => Promise ); -export type Annotator = (value: Json, outputFormat?: OutputFormat) => JsonNode; +export type Annotator = (value: Json, options?: OutputFormat | ValidationOptions) => JsonNode; -export const interpret: (compiledSchema: CompiledSchema, value: JsonNode, outputFormat?: OutputFormat) => JsonNode; +export const interpret: (compiledSchema: CompiledSchema, value: JsonNode, options?: OutputFormat | ValidationOptions) => JsonNode; export class ValidationError extends Error { public output: OutputUnit; diff --git a/annotations/index.js b/annotations/index.js index 3725c9d2..82c3d7fd 100644 --- a/annotations/index.js +++ b/annotations/index.js @@ -1,20 +1,42 @@ import { ValidationError } from "./validation-error.js"; -import { getSchema, compile, interpret as validate, BASIC } from "../lib/experimental.js"; +import { + getSchema, + compile, + interpret as validate, + BASIC, + AnnotationsPlugin +} from "../lib/experimental.js"; import * as Instance from "../lib/instance.js"; -export const annotate = async (schemaUri, json = undefined, outputFormat = undefined) => { +export const annotate = async (schemaUri, json = undefined, options = undefined) => { const schema = await getSchema(schemaUri); const compiled = await compile(schema); - const interpretAst = (json, outputFormat) => interpret(compiled, Instance.fromJs(json), outputFormat); + const interpretAst = (json, options) => interpret(compiled, Instance.fromJs(json), options); - return json === undefined ? interpretAst : interpretAst(json, outputFormat); + return json === undefined ? interpretAst : interpretAst(json, options); }; -export const interpret = ({ ast, schemaUri }, instance, outputFormat = BASIC) => { - const result = validate({ ast, schemaUri }, instance, outputFormat); - if (!result.valid) { - throw new ValidationError(result); +export const interpret = (compiledSchema, instance, options = BASIC) => { + const annotationsPlugin = new AnnotationsPlugin(); + const plugins = options.plugins ?? []; + + const output = validate(compiledSchema, instance, { + outputFormat: typeof options === "string" ? options : options.outputFormat ?? BASIC, + plugins: [annotationsPlugin, ...plugins] + }); + + if (!output.valid) { + throw new ValidationError(output); + } + + for (const annotation of annotationsPlugin.annotations) { + const node = Instance.get(annotation.instanceLocation, instance); + const keyword = annotation.keyword; + if (!node.annotations[keyword]) { + node.annotations[keyword] = []; + } + node.annotations[keyword].unshift(annotation.annotation); } return instance; diff --git a/annotations/index.spec.ts b/annotations/index.spec.ts index c5b38a11..1a449fae 100644 --- a/annotations/index.spec.ts +++ b/annotations/index.spec.ts @@ -1,12 +1,12 @@ import fs from "node:fs"; -import path from "node:path"; -import { fileURLToPath } from "node:url"; -import { describe, it, expect, beforeEach, beforeAll, afterAll } from "vitest"; +import { describe, test, expect, beforeEach, beforeAll, afterAll } from "vitest"; +import { isCompatible } from "./test-utils.js"; import { toAbsoluteIri } from "@hyperjump/uri"; import { annotate } from "./index.js"; import { registerSchema, unregisterSchema } from "../lib/index.js"; import "../stable/index.js"; import "../draft-2020-12/index.js"; +import "../draft-2019-09/index.js"; import "../draft-07/index.js"; import "../draft-06/index.js"; import "../draft-04/index.js"; @@ -19,12 +19,18 @@ import type { Json } from "@hyperjump/json-pointer"; type Suite = { - title: string; + description: string; + suite: TestCase[]; +}; + +type TestCase = { + description: string; + compatibility: string; schema: SchemaObject; - subjects: Subject[]; + tests: Test[]; }; -type Subject = { +type Test = { instance: Json; assertions: Assertion[]; }; @@ -35,57 +41,68 @@ type Assertion = { expected: unknown[]; }; -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - -const dialectId = "https://json-schema.org/validation"; const host = "https://annotations.json-schema.hyperjump.io"; -const testSuiteFilePath = `${__dirname}/tests`; +const testSuiteFilePath = "./node_modules/json-schema-test-suite/annotations/tests"; -describe("Annotations", () => { - fs.readdirSync(testSuiteFilePath, { withFileTypes: true }) - .filter((entry) => entry.isFile() && entry.name.endsWith(".json")) - .forEach((entry) => { - const file = `${testSuiteFilePath}/${entry.name}`; - const suites = JSON.parse(fs.readFileSync(file, "utf8")) as Suite[]; +const testRunner = (version: number, dialect: string) => { + describe(dialect, () => { + fs.readdirSync(testSuiteFilePath, { withFileTypes: true }) + .filter((entry) => entry.isFile() && entry.name.endsWith(".json")) + .forEach((entry) => { + const file = `${testSuiteFilePath}/${entry.name}`; + const suite = JSON.parse(fs.readFileSync(file, "utf8")) as Suite; - suites.forEach((suite) => { - describe(suite.title + "\n" + JSON.stringify(suite.schema, null, " "), () => { - let annotator: Annotator; - let id: string; + for (const testCase of suite.suite) { + if (!isCompatible(testCase.compatibility, version)) { + continue; + } - beforeAll(async () => { - id = `${host}/${encodeURIComponent(suite.title)}`; - registerSchema(suite.schema, id, dialectId); + describe(testCase.description + "\n" + JSON.stringify(testCase.schema, null, " "), () => { + let annotator: Annotator; + let id: string; - annotator = await annotate(id); - }); + beforeAll(async () => { + id = `${host}/${encodeURIComponent(testCase.description)}`; + registerSchema(testCase.schema, id, dialect); - afterAll(() => { - unregisterSchema(id); - }); + annotator = await annotate(id); + }); - suite.subjects.forEach((subject) => { - describe("Instance: " + JSON.stringify(subject.instance), () => { - let instance: JsonNode; + afterAll(() => { + unregisterSchema(id); + }); - beforeEach(() => { - // TODO: What's wrong with the type? - instance = annotator(subject.instance); // eslint-disable-line @typescript-eslint/no-unsafe-assignment - }); + for (const subject of testCase.tests) { + describe("Instance: " + JSON.stringify(subject.instance), () => { + let instance: JsonNode; - subject.assertions.forEach((assertion) => { - it(`${assertion.keyword} annotations at '${assertion.location}' should be ${JSON.stringify(assertion.expected)}`, () => { - const dialect: string | undefined = suite.schema.$schema ? toAbsoluteIri(suite.schema.$schema as string) : undefined; - const subject = Instance.get(assertion.location, instance); - const annotations = subject ? Instance.annotation(subject, assertion.keyword, dialect) : []; - expect(annotations).to.eql(assertion.expected); + beforeEach(() => { + // TODO: What's wrong with the type? + instance = annotator(subject.instance); // eslint-disable-line @typescript-eslint/no-unsafe-assignment }); + + for (const assertion of subject.assertions) { + test(`${assertion.keyword} annotations at '${assertion.location}' should be ${JSON.stringify(assertion.expected)}`, () => { + const dialect: string | undefined = testCase.schema.$schema ? toAbsoluteIri(testCase.schema.$schema as string) : undefined; + const subject = Instance.get(`#${assertion.location}`, instance); + const annotations = subject ? Instance.annotation(subject, assertion.keyword, dialect) : []; + expect(annotations).to.eql(Object.values(assertion.expected)); + }); + } }); - }); + } }); - }); + } }); - }); + }); +}; + +describe("annotations", () => { + testRunner(9999, "https://json-schema.org/validation"); + testRunner(2020, "https://json-schema.org/draft/2020-12/schema"); + testRunner(2019, "https://json-schema.org/draft/2019-09/schema"); + testRunner(7, "http://json-schema.org/draft-07/schema"); + testRunner(6, "http://json-schema.org/draft-06/schema"); + testRunner(4, "http://json-schema.org/draft-04/schema"); }); diff --git a/annotations/test-utils.d.ts b/annotations/test-utils.d.ts new file mode 100644 index 00000000..da8693cf --- /dev/null +++ b/annotations/test-utils.d.ts @@ -0,0 +1 @@ +export const isCompatible: (compatibility: string | undefined, versionUnderTest: number) => boolean; diff --git a/annotations/test-utils.js b/annotations/test-utils.js new file mode 100644 index 00000000..5841ca7f --- /dev/null +++ b/annotations/test-utils.js @@ -0,0 +1,38 @@ +export const isCompatible = (compatibility, versionUnderTest) => { + if (compatibility === undefined) { + return true; + } + + const constraints = compatibility.split(","); + for (const constraint of constraints) { + const matches = /(?<=|>=|=)?(?\d+)/.exec(constraint); + if (!matches) { + throw Error(`Invalid compatibility string: ${compatibility}`); + } + + const operator = matches[1] ?? ">="; + const version = parseInt(matches[2], 10); + + switch (operator) { + case ">=": + if (versionUnderTest < version) { + return false; + } + break; + case "<=": + if (versionUnderTest > version) { + return false; + } + break; + case "=": + if (versionUnderTest !== version) { + return false; + } + break; + default: + throw Error(`Unsupported contraint operator: ${operator}`); + } + } + + return true; +}; diff --git a/annotations/tests/applicators.json b/annotations/tests/applicators.json deleted file mode 100644 index bdc51e26..00000000 --- a/annotations/tests/applicators.json +++ /dev/null @@ -1,375 +0,0 @@ -[ - { - "title": "`properties`, `patternProperties`, and `additionalProperties`", - "schema": { - "properties": { - "foo": { "title": "Foo" } - }, - "patternProperties": { - "^a": { "title": "Bar" } - }, - "additionalProperties": { "title": "Baz" } - }, - "subjects": [ - { - "instance": {}, - "assertions": [ - { - "location": "#/foo", - "keyword": "title", - "expected": [] - }, - { - "location": "#/apple", - "keyword": "title", - "expected": [] - }, - { - "location": "#/bar", - "keyword": "title", - "expected": [] - } - ] - }, - { - "instance": { - "foo": {}, - "apple": {}, - "baz": {} - }, - "assertions": [ - { - "location": "#/foo", - "keyword": "title", - "expected": ["Foo"] - }, - { - "location": "#/apple", - "keyword": "title", - "expected": ["Bar"] - }, - { - "location": "#/baz", - "keyword": "title", - "expected": ["Baz"] - } - ] - } - ] - }, - { - "title": "`propertyNames`", - "schema": { - "propertyNames": { - "const": "foo", - "title": "Foo" - } - }, - "subjects": [ - { - "instance": { "foo": 42 }, - "assertions": [ - { - "location": "#", - "keyword": "propertyNames", - "expected": [] - }, - { - "location": "#/foo", - "keyword": "title", - "expected": [] - } - ] - } - ] - }, - { - "title": "`prefixItems` and `items`", - "schema": { - "prefixItems": [{ "title": "Foo" }], - "items": { "title": "Bar" } - }, - "subjects": [ - { - "instance": ["foo", "bar"], - "assertions": [ - { - "location": "#/0", - "keyword": "title", - "expected": ["Foo"] - }, - { - "location": "#/1", - "keyword": "title", - "expected": ["Bar"] - }, - { - "location": "#/2", - "keyword": "title", - "expected": [] - } - ] - } - ] - }, - { - "title": "`contains`", - "schema": { - "contains": { - "type": "number", - "title": "Foo" - } - }, - "subjects": [ - { - "instance": ["foo", 42, true], - "assertions": [ - { - "location": "#/0", - "keyword": "title", - "expected": [] - }, - { - "location": "#/1", - "keyword": "title", - "expected": ["Foo"] - }, - { - "location": "#/2", - "keyword": "title", - "expected": [] - }, - { - "location": "#/3", - "keyword": "title", - "expected": [] - } - ] - } - ] - }, - { - "title": "`allOf`", - "schema": { - "allOf": [ - { "title": "Foo" }, - { "title": "Bar" } - ] - }, - "subjects": [ - { - "instance": "foo", - "assertions": [ - { - "location": "#", - "keyword": "allOf", - "expected": [] - }, - { - "location": "#", - "keyword": "title", - "expected": ["Bar", "Foo"] - } - ] - } - ] - }, - { - "title": "`anyOf`", - "schema": { - "anyOf": [ - { - "type": "integer", - "title": "Foo" - }, - { - "type": "number", - "title": "Bar" - } - ] - }, - "subjects": [ - { - "instance": 42, - "assertions": [ - { - "location": "#", - "keyword": "anyOf", - "expected": [] - }, - { - "location": "#", - "keyword": "title", - "expected": ["Bar", "Foo"] - } - ] - }, - { - "instance": 4.2, - "assertions": [ - { - "location": "#", - "keyword": "title", - "expected": ["Bar"] - } - ] - } - ] - }, - { - "title": "`oneOf`", - "schema": { - "oneOf": [ - { - "type": "string", - "title": "Foo" - }, - { - "type": "number", - "title": "Bar" - } - ] - }, - "subjects": [ - { - "instance": "foo", - "assertions": [ - { - "location": "#", - "keyword": "oneOf", - "expected": [] - }, - { - "location": "#", - "keyword": "title", - "expected": ["Foo"] - } - ] - }, - { - "instance": 42, - "assertions": [ - { - "location": "#", - "keyword": "title", - "expected": ["Bar"] - } - ] - } - ] - }, - { - "title": "`not`", - "schema": { - "title": "Foo", - "not": { - "not": { "title": "Bar" } - } - }, - "subjects": [ - { - "instance": {}, - "assertions": [ - { - "location": "#", - "keyword": "not", - "expected": [] - }, - { - "location": "#", - "keyword": "title", - "expected": ["Foo"] - } - ] - } - ] - }, - { - "title": "`dependentSchemas`", - "schema": { - "dependentSchemas": { - "foo": { "title": "Foo" } - } - }, - "subjects": [ - { - "instance": { "foo": 42 }, - "assertions": [ - { - "keyword": "dependentSchemas", - "location": "#", - "expected": [] - }, - { - "keyword": "title", - "location": "#", - "expected": ["Foo"] - } - ] - }, - { - "instance": { "foo": 42 }, - "assertions": [ - { - "keyword": "title", - "location": "#/foo", - "expected": [] - } - ] - } - ] - }, - { - "title": "`if`, `then`, and `else`", - "schema": { - "if": { - "title": "If", - "type": "string" - }, - "then": { "title": "Then" }, - "else": { "title": "Else" } - }, - "subjects": [ - { - "instance": "foo", - "assertions": [ - { - "location": "#", - "keyword": "if", - "expected": [] - }, - { - "location": "#", - "keyword": "then", - "expected": [] - }, - { - "location": "#", - "keyword": "title", - "expected": ["Then", "If"] - } - ] - }, - { - "instance": 42, - "assertions": [ - { - "location": "#", - "keyword": "if", - "expected": [] - }, - { - "location": "#", - "keyword": "else", - "expected": [] - }, - { - "location": "#", - "keyword": "title", - "expected": ["Else"] - } - ] - } - ] - } -] diff --git a/annotations/tests/content.json b/annotations/tests/content.json deleted file mode 100644 index 461722cc..00000000 --- a/annotations/tests/content.json +++ /dev/null @@ -1,57 +0,0 @@ -[ - { - "title": "`contentMediaType` is an annotation", - "schema": { - "contentMediaType": "application/json" - }, - "subjects": [ - { - "instance": "{ \"foo\": \"bar\" }", - "assertions": [ - { - "location": "#", - "keyword": "contentMediaType", - "expected": ["application/json"] - } - ] - } - ] - }, - { - "title": "`contentEncoding` is an annotation", - "schema": { - "contentEncoding": "base64" - }, - "subjects": [ - { - "instance": "SGVsbG8gZnJvbSBKU09OIFNjaGVtYQ==", - "assertions": [ - { - "location": "#", - "keyword": "contentEncoding", - "expected": ["base64"] - } - ] - } - ] - }, - { - "title": "`contentSchema` is an annotation", - "schema": { - "$id": "https://annotations.json-schema.org/test/contentSchema-is-an-annotation", - "contentSchema": { "type": "number" } - }, - "subjects": [ - { - "instance": "42", - "assertions": [ - { - "location": "#", - "keyword": "contentSchema", - "expected": ["https://annotations.json-schema.org/test/contentSchema-is-an-annotation#/contentSchema"] - } - ] - } - ] - } -] diff --git a/annotations/tests/core.json b/annotations/tests/core.json deleted file mode 100644 index e8fd7276..00000000 --- a/annotations/tests/core.json +++ /dev/null @@ -1,33 +0,0 @@ -[ - { - "title": "`$ref` and `$defs`", - "schema": { - "$ref": "#/$defs/foo", - "$defs": { - "foo": { "title": "Foo" } - } - }, - "subjects": [ - { - "instance": "foo", - "assertions": [ - { - "location": "#", - "keyword": "$ref", - "expected": [] - }, - { - "location": "#", - "keyword": "$defs", - "expected": [] - }, - { - "location": "#", - "keyword": "title", - "expected": ["Foo"] - } - ] - } - ] - } -] diff --git a/annotations/tests/format.json b/annotations/tests/format.json deleted file mode 100644 index 8ba6979a..00000000 --- a/annotations/tests/format.json +++ /dev/null @@ -1,20 +0,0 @@ -[ - { - "title": "`format` is an annotation", - "schema": { - "format": "email" - }, - "subjects": [ - { - "instance": "foo@bar.com", - "assertions": [ - { - "location": "#", - "keyword": "format", - "expected": ["email"] - } - ] - } - ] - } -] diff --git a/annotations/tests/meta-data.json b/annotations/tests/meta-data.json deleted file mode 100644 index 30dc3866..00000000 --- a/annotations/tests/meta-data.json +++ /dev/null @@ -1,128 +0,0 @@ -[ - { - "title": "`title` is an annotation", - "schema": { - "title": "Foo" - }, - "subjects": [ - { - "instance": 42, - "assertions": [ - { - "location": "#", - "keyword": "title", - "expected": ["Foo"] - } - ] - } - ] - }, - { - "title": "`description` is an annotation", - "schema": { - "description": "Foo" - }, - "subjects": [ - { - "instance": 42, - "assertions": [ - { - "location": "#", - "keyword": "description", - "expected": ["Foo"] - } - ] - } - ] - }, - { - "title": "`default` is an annotation", - "schema": { - "default": "Foo" - }, - "subjects": [ - { - "instance": 42, - "assertions": [ - { - "location": "#", - "keyword": "default", - "expected": ["Foo"] - } - ] - } - ] - }, - { - "title": "`deprecated` is an annotation", - "schema": { - "deprecated": true - }, - "subjects": [ - { - "instance": 42, - "assertions": [ - { - "location": "#", - "keyword": "deprecated", - "expected": [true] - } - ] - } - ] - }, - { - "title": "`readOnly` is an annotation", - "schema": { - "readOnly": true - }, - "subjects": [ - { - "instance": 42, - "assertions": [ - { - "location": "#", - "keyword": "readOnly", - "expected": [true] - } - ] - } - ] - }, - { - "title": "`writeOnly` is an annotation", - "schema": { - "writeOnly": true - }, - "subjects": [ - { - "instance": 42, - "assertions": [ - { - "location": "#", - "keyword": "writeOnly", - "expected": [true] - } - ] - } - ] - }, - { - "title": "`examples` is an annotation", - "schema": { - "examples": ["Foo", "Bar"] - }, - "subjects": [ - { - "instance": "Foo", - "assertions": [ - { - "location": "#", - "keyword": "examples", - "expected": [["Foo", "Bar"]] - } - ] - } - ] - } -] diff --git a/annotations/tests/pointer.json b/annotations/tests/pointer.json deleted file mode 100644 index 484d21c0..00000000 --- a/annotations/tests/pointer.json +++ /dev/null @@ -1,53 +0,0 @@ -[ - { - "title": "annotation pointers are properly decoded", - "schema": { - "properties": { - "paths": { - "properties": { - "/pets/{id}": { - "title": "path", - "properties": { - "get": { - "title": "method" - } - } - } - } - } - } - }, - "subjects": [ - { - "instance": { "paths": { "/pets/{id}": {} } }, - "assertions": [ - { - "location": "#/paths/~1pets~1{id}", - "keyword": "title", - "expected": ["path"] - } - ] - }, - { - "instance": { "paths": { "/pets/{id}": {} } }, - "assertions": [ - { - "location": "#/paths/~1pets~1%7Bid%7D", - "keyword": "title", - "expected": ["path"] - } - ] - }, - { - "instance": { "paths": { "/pets/{id}": { "get": {} } } }, - "assertions": [ - { - "location": "#/paths/~1pets~1%7Bid%7D/get", - "keyword": "title", - "expected": ["method"] - } - ] - } - ] - } -] diff --git a/annotations/tests/unevaluated.json b/annotations/tests/unevaluated.json deleted file mode 100644 index 9733c1a9..00000000 --- a/annotations/tests/unevaluated.json +++ /dev/null @@ -1,557 +0,0 @@ -[ - { - "title": "`unevaluatedProperties` alone", - "schema": { - "unevaluatedProperties": { "title": "Unevaluated" } - }, - "subjects": [ - { - "instance": { "foo": 42, "bar": 24 }, - "assertions": [ - { - "location": "#/foo", - "keyword": "title", - "expected": ["Unevaluated"] - }, - { - "location": "#/bar", - "keyword": "title", - "expected": ["Unevaluated"] - } - ] - } - ] - }, - { - "title": "`unevaluatedProperties` with `properties`", - "schema": { - "properties": { - "foo": { "title": "Evaluated" } - }, - "unevaluatedProperties": { "title": "Unevaluated" } - }, - "subjects": [ - { - "instance": { "foo": 42, "bar": 24 }, - "assertions": [ - { - "location": "#/foo", - "keyword": "title", - "expected": ["Evaluated"] - }, - { - "location": "#/bar", - "keyword": "title", - "expected": ["Unevaluated"] - } - ] - } - ] - }, - { - "title": "`unevaluatedProperties` with `patternProperties`", - "schema": { - "patternProperties": { - "^a": { "title": "Evaluated" } - }, - "unevaluatedProperties": { "title": "Unevaluated" } - }, - "subjects": [ - { - "instance": { "apple": 42, "bar": 24 }, - "assertions": [ - { - "location": "#/apple", - "keyword": "title", - "expected": ["Evaluated"] - }, - { - "location": "#/bar", - "keyword": "title", - "expected": ["Unevaluated"] - } - ] - } - ] - }, - { - "title": "`unevaluatedProperties` with `additionalProperties`", - "schema": { - "additionalProperties": { "title": "Evaluated" }, - "unevaluatedProperties": { "title": "Unevaluated" } - }, - "subjects": [ - { - "instance": { "foo": 42, "bar": 24 }, - "assertions": [ - { - "location": "#/foo", - "keyword": "title", - "expected": ["Evaluated"] - }, - { - "location": "#/bar", - "keyword": "title", - "expected": ["Evaluated"] - } - ] - } - ] - }, - { - "title": "`unevaluatedProperties` with `dependentSchemas`", - "schema": { - "dependentSchemas": { - "foo": { - "properties": { - "bar": { "title": "Evaluated" } - } - } - }, - "unevaluatedProperties": { "title": "Unevaluated" } - }, - "subjects": [ - { - "instance": { "foo": 42, "bar": 24 }, - "assertions": [ - { - "location": "#/foo", - "keyword": "title", - "expected": ["Unevaluated"] - }, - { - "location": "#/bar", - "keyword": "title", - "expected": ["Evaluated"] - } - ] - } - ] - }, - { - "title": "`unevaluatedProperties` with `if`, `then`, and `else`", - "schema": { - "if": { - "properties": { - "foo": { - "type": "string", - "title": "If" - } - } - }, - "then": { - "properties": { - "foo": { "title": "Then" } - } - }, - "else": { - "properties": { - "foo": { "title": "Else" } - } - }, - "unevaluatedProperties": { "title": "Unevaluated" } - }, - "subjects": [ - { - "instance": { "foo": "", "bar": 42 }, - "assertions": [ - { - "location": "#/foo", - "keyword": "title", - "expected": ["Then", "If"] - }, - { - "location": "#/bar", - "keyword": "title", - "expected": ["Unevaluated"] - } - ] - }, - { - "instance": { "foo": 42, "bar": "" }, - "assertions": [ - { - "location": "#/foo", - "keyword": "title", - "expected": ["Else"] - }, - { - "location": "#/bar", - "keyword": "title", - "expected": ["Unevaluated"] - } - ] - } - ] - }, - { - "title": "`unevaluatedProperties` with `allOf`", - "schema": { - "allOf": [ - { - "properties": { - "foo": { "title": "Evaluated" } - } - } - ], - "unevaluatedProperties": { "title": "Unevaluated" } - }, - "subjects": [ - { - "instance": { "foo": 42, "bar": 24 }, - "assertions": [ - { - "location": "#/foo", - "keyword": "title", - "expected": ["Evaluated"] - }, - { - "location": "#/bar", - "keyword": "title", - "expected": ["Unevaluated"] - } - ] - } - ] - }, - { - "title": "`unevaluatedProperties` with `anyOf`", - "schema": { - "anyOf": [ - { - "properties": { - "foo": { "title": "Evaluated" } - } - } - ], - "unevaluatedProperties": { "title": "Unevaluated" } - }, - "subjects": [ - { - "instance": { "foo": 42, "bar": 24 }, - "assertions": [ - { - "location": "#/foo", - "keyword": "title", - "expected": ["Evaluated"] - }, - { - "location": "#/bar", - "keyword": "title", - "expected": ["Unevaluated"] - } - ] - } - ] - }, - { - "title": "`unevaluatedProperties` with `oneOf`", - "schema": { - "oneOf": [ - { - "properties": { - "foo": { "title": "Evaluated" } - } - } - ], - "unevaluatedProperties": { "title": "Unevaluated" } - }, - "subjects": [ - { - "instance": { "foo": 42, "bar": 24 }, - "assertions": [ - { - "location": "#/foo", - "keyword": "title", - "expected": ["Evaluated"] - }, - { - "location": "#/bar", - "keyword": "title", - "expected": ["Unevaluated"] - } - ] - } - ] - }, - { - "title": "`unevaluatedProperties` with `not`", - "schema": { - "not": { - "not": { - "properties": { - "foo": { "title": "Evaluated" } - } - } - }, - "unevaluatedProperties": { "title": "Unevaluated" } - }, - "subjects": [ - { - "instance": { "foo": 42, "bar": 24 }, - "assertions": [ - { - "location": "#/foo", - "keyword": "title", - "expected": ["Unevaluated"] - }, - { - "location": "#/bar", - "keyword": "title", - "expected": ["Unevaluated"] - } - ] - } - ] - }, - { - "title": "`unevaluatedItems` alone", - "schema": { - "unevaluatedItems": { "title": "Unevaluated" } - }, - "subjects": [ - { - "instance": [42, 24], - "assertions": [ - { - "location": "#/0", - "keyword": "title", - "expected": ["Unevaluated"] - }, - { - "location": "#/1", - "keyword": "title", - "expected": ["Unevaluated"] - } - ] - } - ] - }, - { - "title": "`unevaluatedItems` with `prefixItems`", - "schema": { - "prefixItems": [{ "title": "Evaluated" }], - "unevaluatedItems": { "title": "Unevaluated" } - }, - "subjects": [ - { - "instance": [42, 24], - "assertions": [ - { - "location": "#/0", - "keyword": "title", - "expected": ["Evaluated"] - }, - { - "location": "#/1", - "keyword": "title", - "expected": ["Unevaluated"] - } - ] - } - ] - }, - { - "title": "`unevaluatedItems` with `contains`", - "schema": { - "contains": { - "type": "string", - "title": "Evaluated" - }, - "unevaluatedItems": { "title": "Unevaluated" } - }, - "subjects": [ - { - "instance": ["foo", 42], - "assertions": [ - { - "location": "#/0", - "keyword": "title", - "expected": ["Evaluated"] - }, - { - "location": "#/1", - "keyword": "title", - "expected": ["Unevaluated"] - } - ] - } - ] - }, - { - "title": "`unevaluatedItems` with `if`, `then`, and `else`", - "schema": { - "if": { - "prefixItems": [ - { - "type": "string", - "title": "If" - } - ] - }, - "then": { - "prefixItems": [ - { "title": "Then" } - ] - }, - "else": { - "prefixItems": [ - { "title": "Else" } - ] - }, - "unevaluatedItems": { "title": "Unevaluated" } - }, - "subjects": [ - { - "instance": ["", 42], - "assertions": [ - { - "location": "#/0", - "keyword": "title", - "expected": ["Then", "If"] - }, - { - "location": "#/1", - "keyword": "title", - "expected": ["Unevaluated"] - } - ] - }, - { - "instance": [42, ""], - "assertions": [ - { - "location": "#/0", - "keyword": "title", - "expected": ["Else"] - }, - { - "location": "#/1", - "keyword": "title", - "expected": ["Unevaluated"] - } - ] - } - ] - }, - { - "title": "`unevaluatedItems` with `allOf`", - "schema": { - "allOf": [ - { - "prefixItems": [ - { "title": "Evaluated" } - ] - } - ], - "unevaluatedItems": { "title": "Unevaluated" } - }, - "subjects": [ - { - "instance": [42, 24], - "assertions": [ - { - "location": "#/0", - "keyword": "title", - "expected": ["Evaluated"] - }, - { - "location": "#/1", - "keyword": "title", - "expected": ["Unevaluated"] - } - ] - } - ] - }, - { - "title": "`unevaluatedItems` with `anyOf`", - "schema": { - "anyOf": [ - { - "prefixItems": [ - { "title": "Evaluated" } - ] - } - ], - "unevaluatedItems": { "title": "Unevaluated" } - }, - "subjects": [ - { - "instance": [42, 24], - "assertions": [ - { - "location": "#/0", - "keyword": "title", - "expected": ["Evaluated"] - }, - { - "location": "#/1", - "keyword": "title", - "expected": ["Unevaluated"] - } - ] - } - ] - }, - { - "title": "`unevaluatedItems` with `oneOf`", - "schema": { - "oneOf": [ - { - "prefixItems": [ - { "title": "Evaluated" } - ] - } - ], - "unevaluatedItems": { "title": "Unevaluated" } - }, - "subjects": [ - { - "instance": [42, 24], - "assertions": [ - { - "location": "#/0", - "keyword": "title", - "expected": ["Evaluated"] - }, - { - "location": "#/1", - "keyword": "title", - "expected": ["Unevaluated"] - } - ] - } - ] - }, - { - "title": "`unevaluatedItems` with `not`", - "schema": { - "not": { - "not": { - "prefixItems": [ - { "title": "Evaluated" } - ] - } - }, - "unevaluatedItems": { "title": "Unevaluated" } - }, - "subjects": [ - { - "instance": [42, 24], - "assertions": [ - { - "location": "#/0", - "keyword": "title", - "expected": ["Unevaluated"] - }, - { - "location": "#/1", - "keyword": "title", - "expected": ["Unevaluated"] - } - ] - } - ] - } -] diff --git a/annotations/tests/unknown.json b/annotations/tests/unknown.json deleted file mode 100644 index 93033eab..00000000 --- a/annotations/tests/unknown.json +++ /dev/null @@ -1,21 +0,0 @@ -[ - { - "title": "`unknownKeyword` is an annotation", - "schema": { - "$schema": "https://json-schema.org/draft/2020-12/schema", - "unknownKeyword": "Foo" - }, - "subjects": [ - { - "instance": 42, - "assertions": [ - { - "location": "#", - "keyword": "unknownKeyword", - "expected": ["Foo"] - } - ] - } - ] - } -] diff --git a/annotations/tests/validation.json b/annotations/tests/validation.json deleted file mode 100644 index 5488ba04..00000000 --- a/annotations/tests/validation.json +++ /dev/null @@ -1,328 +0,0 @@ -[ - { - "title": "`const` doesn't produce annotations", - "schema": { - "const": "foo" - }, - "subjects": [ - { - "instance": "foo", - "assertions": [ - { - "location": "#", - "keyword": "const", - "expected": [] - } - ] - } - ] - }, - { - "title": "`dependentRequired` doesn't produce annotations", - "schema": { - "dependentRequired": { - "foo": ["bar"] - } - }, - "subjects": [ - { - "instance": { "foo": 1, "bar": 2 }, - "assertions": [ - { - "location": "#", - "keyword": "dependentRequired", - "expected": [] - } - ] - } - ] - }, - { - "title": "`enum` doesn't produce annotations", - "schema": { - "enum": ["foo"] - }, - "subjects": [ - { - "instance": "foo", - "assertions": [ - { - "location": "#", - "keyword": "enum", - "expected": [] - } - ] - } - ] - }, - { - "title": "`exclusiveMaximum` doesn't produce annotations", - "schema": { - "exclusiveMaximum": 50 - }, - "subjects": [ - { - "instance": 42, - "assertions": [ - { - "location": "#", - "keyword": "exclusiveMaximum", - "expected": [] - } - ] - } - ] - }, - { - "title": "`exclusiveMinimum` doesn't produce annotations", - "schema": { - "exclusiveMinimum": 5 - }, - "subjects": [ - { - "instance": 42, - "assertions": [ - { - "location": "#", - "keyword": "exclusiveMinimum", - "expected": [] - } - ] - } - ] - }, - { - "title": "`maxItems` doesn't produce annotations", - "schema": { - "maxItems": 42 - }, - "subjects": [ - { - "instance": ["foo"], - "assertions": [ - { - "location": "#", - "keyword": "maxItems", - "expected": [] - } - ] - } - ] - }, - { - "title": "`maxLength` doesn't produce annotations", - "schema": { - "maxLength": 42 - }, - "subjects": [ - { - "instance": "foo", - "assertions": [ - { - "location": "#", - "keyword": "maxLength", - "expected": [] - } - ] - } - ] - }, - { - "title": "`maxProperties` doesn't produce annotations", - "schema": { - "maxProperties": 42 - }, - "subjects": [ - { - "instance": { "foo": 42 }, - "assertions": [ - { - "location": "#", - "keyword": "maxProperties", - "expected": [] - } - ] - } - ] - }, - { - "title": "`maximum` doesn't produce annotations", - "schema": { - "maximum": 50 - }, - "subjects": [ - { - "instance": 42, - "assertions": [ - { - "location": "#", - "keyword": "maximum", - "expected": [] - } - ] - } - ] - }, - { - "title": "`minItems` doesn't produce annotations", - "schema": { - "minItems": 2 - }, - "subjects": [ - { - "instance": ["a", "b"], - "assertions": [ - { - "location": "#", - "keyword": "minItems", - "expected": [] - } - ] - } - ] - }, - { - "title": "`minLength` doesn't produce annotations", - "schema": { - "minLength": 2 - }, - "subjects": [ - { - "instance": "foo", - "assertions": [ - { - "location": "#", - "keyword": "minLength", - "expected": [] - } - ] - } - ] - }, - { - "title": "`minProperties` doesn't produce annotations", - "schema": { - "minProperties": 2 - }, - "subjects": [ - { - "instance": { "foo": 42, "bar": 24 }, - "assertions": [ - { - "location": "#", - "keyword": "minProperties", - "expected": [] - } - ] - } - ] - }, - { - "title": "`minimum` doesn't produce annotations", - "schema": { - "minimum": 42 - }, - "subjects": [ - { - "instance": 50, - "assertions": [ - { - "location": "#", - "keyword": "minimum", - "expected": [] - } - ] - } - ] - }, - { - "title": "`multipleOf` doesn't produce annotations", - "schema": { - "multipleOf": 2 - }, - "subjects": [ - { - "instance": 42, - "assertions": [ - { - "location": "#", - "keyword": "multipleOf", - "expected": [] - } - ] - } - ] - }, - { - "title": "`pattern` doesn't produce annotations", - "schema": { - "pattern": ".*" - }, - "subjects": [ - { - "instance": "foo", - "assertions": [ - { - "location": "#", - "keyword": "pattern", - "expected": [] - } - ] - } - ] - }, - { - "title": "`required` doesn't produce annotations", - "schema": { - "required": ["foo"] - }, - "subjects": [ - { - "instance": { "foo": 42 }, - "assertions": [ - { - "location": "#", - "keyword": "required", - "expected": [] - } - ] - } - ] - }, - { - "title": "`type` doesn't produce annotations", - "schema": { - "type": "string" - }, - "subjects": [ - { - "instance": "foo", - "assertions": [ - { - "location": "#", - "keyword": "type", - "expected": [] - } - ] - } - ] - }, - { - "title": "`uniqueItems` doesn't produce annotations", - "schema": { - "uniqueItems": true - }, - "subjects": [ - { - "instance": ["foo", "bar"], - "assertions": [ - { - "location": "#", - "keyword": "uniqueItems", - "expected": [] - } - ] - } - ] - } -] diff --git a/bundle/generate-snapshots.js b/bundle/generate-snapshots.js index 18e29df2..e558e38b 100644 --- a/bundle/generate-snapshots.js +++ b/bundle/generate-snapshots.js @@ -1,6 +1,6 @@ import { writeFile, mkdir, rm } from "node:fs/promises"; -import { isCompatible, md5, loadSchemas, testSuite, toOutput, unloadSchemas } from "./test-utils.js"; -import { compile, getSchema, interpret } from "../lib/experimental.js"; +import { isCompatible, md5, loadSchemas, testSuite, unloadSchemas } from "./test-utils.js"; +import { AnnotationsPlugin, compile, DetailedOutputPlugin, getSchema, Validation } from "../lib/experimental.js"; import "../stable/index.js"; import "../draft-2020-12/index.js"; import "../draft-2019-09/index.js"; @@ -23,11 +23,22 @@ const snapshotGenerator = async (version, dialect) => { let testIndex = 0; for (const test of testCase.tests) { loadSchemas(testCase, mainSchemaUri, dialect); + const schema = await getSchema(mainSchemaUri); - const compiledSchema = await compile(schema); + const { ast, schemaUri } = await compile(schema); + const annotationsPlugin = new AnnotationsPlugin(); + const detailedOutputPlugin = new DetailedOutputPlugin(); + const instance = Instance.fromJs(test.instance); - interpret(compiledSchema, instance); - const expectedOutput = toOutput(instance); + const context = { ast, plugins: [detailedOutputPlugin, annotationsPlugin, ...ast.plugins] }; + const valid = Validation.interpret(schemaUri, instance, context); + + const expectedOutput = { + valid, + errors: detailedOutputPlugin.errors, + annotations: annotationsPlugin.annotations + }; + unloadSchemas(testCase, mainSchemaUri); const testId = md5(`${version}|${dialect}|${testCase.description}|${testIndex}`); diff --git a/bundle/index.js b/bundle/index.js index db0c1ec7..99c6fe94 100644 --- a/bundle/index.js +++ b/bundle/index.js @@ -1,13 +1,8 @@ -import curry from "just-curry-it"; import { v4 as uuid } from "uuid"; -import * as Browser from "@hyperjump/browser"; +import { jrefTypeOf } from "@hyperjump/browser/jref"; import * as JsonPointer from "@hyperjump/json-pointer"; -import { asyncCollectSet, asyncFilter, asyncFlatten, asyncMap, pipe } from "@hyperjump/pact"; -import { - Validation, - canonicalUri, getSchema, toSchema, - getKeywordName, getKeyword, getKeywordByName -} from "../lib/experimental.js"; +import { resolveIri, toAbsoluteIri } from "@hyperjump/uri"; +import { getSchema, toSchema, getKeywordName } from "../lib/experimental.js"; export const URI = "uri", UUID = "uuid"; @@ -19,32 +14,36 @@ const defaultOptions = { }; export const bundle = async (url, options = {}) => { - loadKeywordSupport(); const fullOptions = { ...defaultOptions, ...options }; const mainSchema = await getSchema(url); - const contextUri = mainSchema.document.baseUri; - const contextDialectId = mainSchema.document.dialectId; + fullOptions.contextUri = mainSchema.document.baseUri; + fullOptions.contextDialectId = mainSchema.document.dialectId; + const bundled = toSchema(mainSchema); + fullOptions.bundlingLocation = "/" + getKeywordName(fullOptions.contextDialectId, "https://json-schema.org/keyword/definitions"); + if (JsonPointer.get(fullOptions.bundlingLocation, bundled) === undefined) { + JsonPointer.assign(fullOptions.bundlingLocation, bundled, {}); + } - const externalIds = await Validation.collectExternalIds(new Set(), mainSchema, mainSchema); + return await doBundling(mainSchema.uri, bundled, fullOptions); +}; - // Bundle - const bundlingLocation = "/" + getKeywordName(contextDialectId, "https://json-schema.org/keyword/definitions"); - if (JsonPointer.get(bundlingLocation, bundled) === undefined && externalIds.size > 0) { - JsonPointer.assign(bundlingLocation, bundled, {}); - } +const doBundling = async (schemaUri, bundled, fullOptions, contextSchema, visited = new Set()) => { + visited.add(schemaUri); - for (const uri of externalIds) { - if (fullOptions.externalSchemas.includes(uri)) { + const schema = await getSchema(schemaUri, contextSchema); + for (const reference of allReferences(schema.document.root)) { + const uri = toAbsoluteIri(resolveIri(reference.href, schema.document.baseUri)); + if (visited.has(uri) || fullOptions.externalSchemas.includes(uri) || (uri in schema.document.embedded && !(uri in schema._cache))) { continue; } - const externalSchema = await getSchema(uri); + const externalSchema = await getSchema(uri, contextSchema); const embeddedSchema = toSchema(externalSchema, { - contextUri: externalSchema.document.baseUri.startsWith("file:") ? contextUri : undefined, + contextUri: externalSchema.document.baseUri.startsWith("file:") ? fullOptions.contextUri : undefined, includeDialect: fullOptions.alwaysIncludeDialect ? "always" : "auto", - contextDialectId: contextDialectId + contextDialectId: fullOptions.contextDialectId }); let id; if (fullOptions.definitionNamingStrategy === URI) { @@ -56,216 +55,29 @@ export const bundle = async (url, options = {}) => { } else { throw Error(`Unknown definition naming stragety: ${fullOptions.definitionNamingStrategy}`); } - const pointer = JsonPointer.append(id, bundlingLocation); + const pointer = JsonPointer.append(id, fullOptions.bundlingLocation); JsonPointer.assign(pointer, bundled, embeddedSchema); + + bundled = await doBundling(uri, bundled, fullOptions, schema, visited); } return bundled; }; -Validation.collectExternalIds = curry(async (visited, parentSchema, schema) => { - const uri = canonicalUri(schema); - if (visited.has(uri) || Browser.typeOf(schema) === "boolean") { - return new Set(); - } - - visited.add(uri); - - const externalIds = await pipe( - Browser.entries(schema), - asyncMap(async ([keyword, keywordSchema]) => { - const keywordHandler = getKeywordByName(keyword, schema.document.dialectId); - - return "collectExternalIds" in keywordHandler - ? await keywordHandler.collectExternalIds(visited, schema, keywordSchema) - : new Set(); - }), - asyncFlatten, - asyncCollectSet - ); - - if (parentSchema.document.baseUri !== schema.document.baseUri - && (!(schema.document.baseUri in parentSchema.document.embedded) || schema.document.baseUri in parentSchema._cache) - ) { - externalIds.add(schema.document.baseUri); - } - - return externalIds; -}); - -const collectExternalIdsFromArrayOfSchemas = (visited, parentSchema, schema) => pipe( - Browser.iter(schema), - asyncMap(Validation.collectExternalIds(visited, parentSchema)), - asyncFlatten, - asyncCollectSet -); - -const collectExternalIdsFromObjectOfSchemas = async (visited, parentSchema, schema) => pipe( - Browser.values(schema), - asyncMap(Validation.collectExternalIds(visited, parentSchema)), - asyncFlatten, - asyncCollectSet -); - -const loadKeywordSupport = () => { - // Stable - - const additionalProperties = getKeyword("https://json-schema.org/keyword/additionalProperties"); - if (additionalProperties) { - additionalProperties.collectExternalIds = Validation.collectExternalIds; - } - - const allOf = getKeyword("https://json-schema.org/keyword/allOf"); - if (allOf) { - allOf.collectExternalIds = collectExternalIdsFromArrayOfSchemas; - } - - const anyOf = getKeyword("https://json-schema.org/keyword/anyOf"); - if (anyOf) { - anyOf.collectExternalIds = collectExternalIdsFromArrayOfSchemas; - } - - const contains = getKeyword("https://json-schema.org/keyword/contains"); - if (contains) { - contains.collectExternalIds = Validation.collectExternalIds; - } - - const dependentSchemas = getKeyword("https://json-schema.org/keyword/dependentSchemas"); - if (dependentSchemas) { - dependentSchemas.collectExternalIds = collectExternalIdsFromObjectOfSchemas; - } - - const if_ = getKeyword("https://json-schema.org/keyword/if"); - if (if_) { - if_.collectExternalIds = Validation.collectExternalIds; - } - - const then = getKeyword("https://json-schema.org/keyword/then"); - if (then) { - then.collectExternalIds = Validation.collectExternalIds; - } - - const else_ = getKeyword("https://json-schema.org/keyword/else"); - if (else_) { - else_.collectExternalIds = Validation.collectExternalIds; - } - - const items = getKeyword("https://json-schema.org/keyword/items"); - if (items) { - items.collectExternalIds = Validation.collectExternalIds; - } - - const not = getKeyword("https://json-schema.org/keyword/not"); - if (not) { - not.collectExternalIds = Validation.collectExternalIds; - } - - const oneOf = getKeyword("https://json-schema.org/keyword/oneOf"); - if (oneOf) { - oneOf.collectExternalIds = collectExternalIdsFromArrayOfSchemas; - } - - const patternProperties = getKeyword("https://json-schema.org/keyword/patternProperties"); - if (patternProperties) { - patternProperties.collectExternalIds = collectExternalIdsFromObjectOfSchemas; - } - - const prefixItems = getKeyword("https://json-schema.org/keyword/prefixItems"); - if (prefixItems) { - prefixItems.collectExternalIds = collectExternalIdsFromArrayOfSchemas; - } - - const properties = getKeyword("https://json-schema.org/keyword/properties"); - if (properties) { - properties.collectExternalIds = collectExternalIdsFromObjectOfSchemas; - } - - const propertyNames = getKeyword("https://json-schema.org/keyword/propertyNames"); - if (propertyNames) { - propertyNames.collectExternalIds = Validation.collectExternalIds; - } - - const ref = getKeyword("https://json-schema.org/keyword/ref"); - if (ref) { - ref.collectExternalIds = Validation.collectExternalIds; - } - - const unevaluatedItems = getKeyword("https://json-schema.org/keyword/unevaluatedItems"); - if (unevaluatedItems) { - unevaluatedItems.collectExternalIds = Validation.collectExternalIds; - } - - const unevaluatedProperties = getKeyword("https://json-schema.org/keyword/unevaluatedProperties"); - if (unevaluatedProperties) { - unevaluatedProperties.collectExternalIds = Validation.collectExternalIds; - } - - // Draft-04 - - const additionalItems4 = getKeyword("https://json-schema.org/keyword/draft-04/additionalItems"); - if (additionalItems4) { - additionalItems4.collectExternalIds = Validation.collectExternalIds; - } - - const dependencies = getKeyword("https://json-schema.org/keyword/draft-04/dependencies"); - if (dependencies) { - dependencies.collectExternalIds = (visited, parentSchema, schema) => pipe( - Browser.values(schema), - asyncFilter((subSchema) => Browser.typeOf(subSchema) === "object"), - asyncMap(Validation.collectExternalIds(visited, parentSchema)), - asyncFlatten, - asyncCollectSet - ); - } - - const items4 = getKeyword("https://json-schema.org/keyword/draft-04/items"); - if (items4) { - items4.collectExternalIds = (visited, parentSchema, schema) => Browser.typeOf(schema) === "array" - ? collectExternalIdsFromArrayOfSchemas(visited, parentSchema, schema) - : Validation.collectExternalIds(visited, parentSchema, schema); - } - - // Draft-06 - - const contains6 = getKeyword("https://json-schema.org/keyword/draft-06/contains"); - if (contains6) { - contains6.collectExternalIds = Validation.collectExternalIds; - } - - // Draft-2019-09 - - const contains19 = getKeyword("https://json-schema.org/keyword/draft-2019-09/contains"); - if (contains19) { - contains19.collectExternalIds = Validation.collectExternalIds; - } - - // Extensions - - const propertyDependencies = getKeyword("https://json-schema.org/keyword/propertyDependencies"); - if (propertyDependencies) { - propertyDependencies.collectExternalIds = (visited, parentSchema, schema) => pipe( - Browser.values(schema), - asyncMap((mapping) => Browser.values(mapping)), - asyncFlatten, - asyncMap(Validation.collectExternalIds(visited, parentSchema)), - asyncFlatten, - asyncCollectSet - ); - } - - const conditional = getKeyword("https://json-schema.org/keyword/conditional"); - if (conditional) { - conditional.collectExternalIds = collectExternalIdsFromArrayOfSchemas; - } - - const itemPattern = getKeyword("https://json-schema.org/keyword/itemPattern"); - if (itemPattern) { - itemPattern.collectExternalIds = (visited, parentSchema, schema) => pipe( - Browser.iter(schema), - asyncFilter((item) => Browser.typeOf(item) === "object"), - asyncMap(Validation.collectExternalIds(visited, parentSchema)), - asyncFlatten, - asyncCollectSet - ); +const allReferences = function* (node) { + switch (jrefTypeOf(node)) { + case "object": + for (const property in node) { + yield* allReferences(node[property]); + } + break; + case "array": + for (const item of node) { + yield* allReferences(item); + } + break; + case "reference": + yield node; + break; } }; diff --git a/bundle/snapshots/0176f79e8816433f3b23683ba5f38ace b/bundle/snapshots/0176f79e8816433f3b23683ba5f38ace index fee53123..a434102c 100644 --- a/bundle/snapshots/0176f79e8816433f3b23683ba5f38ace +++ b/bundle/snapshots/0176f79e8816433f3b23683ba5f38ace @@ -1,9 +1,11 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/type", + "instanceLocation": "#" + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/01be86475358c8fa8bd0cbb66acffae9 b/bundle/snapshots/01be86475358c8fa8bd0cbb66acffae9 index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/01be86475358c8fa8bd0cbb66acffae9 +++ b/bundle/snapshots/01be86475358c8fa8bd0cbb66acffae9 @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/0257ca47cb26d95af6cddee31dc7ad4c b/bundle/snapshots/0257ca47cb26d95af6cddee31dc7ad4c index 6bb689f3..94f5788d 100644 --- a/bundle/snapshots/0257ca47cb26d95af6cddee31dc7ad4c +++ b/bundle/snapshots/0257ca47cb26d95af6cddee31dc7ad4c @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/unevaluatedProperties": "https://json-schema.org/keyword/unevaluatedProperties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/unevaluatedProperties/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/unevaluatedProperties": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/unevaluatedProperties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/unevaluatedProperties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/unevaluatedProperties/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/02c66554839e629b28f800fe38f4c622 b/bundle/snapshots/02c66554839e629b28f800fe38f4c622 index e796134d..c9eb0753 100644 --- a/bundle/snapshots/02c66554839e629b28f800fe38f4c622 +++ b/bundle/snapshots/02c66554839e629b28f800fe38f4c622 @@ -1,13 +1,11 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/not": "https://json-schema.org/keyword/not", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/not", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/not", + "instanceLocation": "#" } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/047b47772606c7120c55e3e5a7630890 b/bundle/snapshots/047b47772606c7120c55e3e5a7630890 index 5d2dcfeb..ae696782 100644 --- a/bundle/snapshots/047b47772606c7120c55e3e5a7630890 +++ b/bundle/snapshots/047b47772606c7120c55e3e5a7630890 @@ -1,10 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/05009caa10a942d85c5fe0515b7eb0d9 b/bundle/snapshots/05009caa10a942d85c5fe0515b7eb0d9 index c492b31f..f1a63aba 100644 --- a/bundle/snapshots/05009caa10a942d85c5fe0515b7eb0d9 +++ b/bundle/snapshots/05009caa10a942d85c5fe0515b7eb0d9 @@ -1,24 +1,32 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/$defs/string/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/$defs/string": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/$defs/string/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/077aa87e28ba586d7bf9bed115391f1c b/bundle/snapshots/077aa87e28ba586d7bf9bed115391f1c index 981f9c3f..ae696782 100644 --- a/bundle/snapshots/077aa87e28ba586d7bf9bed115391f1c +++ b/bundle/snapshots/077aa87e28ba586d7bf9bed115391f1c @@ -1,8 +1,5 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/if": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/0847cca3f53b9cd12c08b8ab83d7486b b/bundle/snapshots/0847cca3f53b9cd12c08b8ab83d7486b index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/0847cca3f53b9cd12c08b8ab83d7486b +++ b/bundle/snapshots/0847cca3f53b9cd12c08b8ab83d7486b @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/09363ddcdd594c48891fa5b808f41d8f b/bundle/snapshots/09363ddcdd594c48891fa5b808f41d8f index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/09363ddcdd594c48891fa5b808f41d8f +++ b/bundle/snapshots/09363ddcdd594c48891fa5b808f41d8f @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/0967a0f89901e6f14b26914653134b1d b/bundle/snapshots/0967a0f89901e6f14b26914653134b1d index 4e92908d..ae696782 100644 --- a/bundle/snapshots/0967a0f89901e6f14b26914653134b1d +++ b/bundle/snapshots/0967a0f89901e6f14b26914653134b1d @@ -1,14 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/foo/0": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/0968dc2e0f7f9d0fb95859803d130bcf b/bundle/snapshots/0968dc2e0f7f9d0fb95859803d130bcf index 981f9c3f..ae696782 100644 --- a/bundle/snapshots/0968dc2e0f7f9d0fb95859803d130bcf +++ b/bundle/snapshots/0968dc2e0f7f9d0fb95859803d130bcf @@ -1,8 +1,5 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/if": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/09b5adea8278afad071a2d7b5ac4fc81 b/bundle/snapshots/09b5adea8278afad071a2d7b5ac4fc81 index a49babcc..356a1acb 100644 --- a/bundle/snapshots/09b5adea8278afad071a2d7b5ac4fc81 +++ b/bundle/snapshots/09b5adea8278afad071a2d7b5ac4fc81 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/patternProperties": "https://json-schema.org/keyword/patternProperties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/patternProperties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/patternProperties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/09ecbfa9dbd81a38f0984dba2c5dba2f b/bundle/snapshots/09ecbfa9dbd81a38f0984dba2c5dba2f index c492b31f..f1a63aba 100644 --- a/bundle/snapshots/09ecbfa9dbd81a38f0984dba2c5dba2f +++ b/bundle/snapshots/09ecbfa9dbd81a38f0984dba2c5dba2f @@ -1,24 +1,32 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/$defs/string/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/$defs/string": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/$defs/string/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/0a5429dfef8968c6bd88ac3922f55cbc b/bundle/snapshots/0a5429dfef8968c6bd88ac3922f55cbc index 89bb5e03..a61530af 100644 --- a/bundle/snapshots/0a5429dfef8968c6bd88ac3922f55cbc +++ b/bundle/snapshots/0a5429dfef8968c6bd88ac3922f55cbc @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/items": "https://json-schema.org/keyword/items", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/items/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/items": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/items", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/items", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/items/$ref", + "instanceLocation": "#/0", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/0" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/0ada8a1e7e71d8771e5fefbf455bcb0d b/bundle/snapshots/0ada8a1e7e71d8771e5fefbf455bcb0d index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/0ada8a1e7e71d8771e5fefbf455bcb0d +++ b/bundle/snapshots/0ada8a1e7e71d8771e5fefbf455bcb0d @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/0b6b4d6720813b423142725687ee3573 b/bundle/snapshots/0b6b4d6720813b423142725687ee3573 index 08e064ba..ae696782 100644 --- a/bundle/snapshots/0b6b4d6720813b423142725687ee3573 +++ b/bundle/snapshots/0b6b4d6720813b423142725687ee3573 @@ -1,6 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/0b798cb59af7fb9cfc7249535bd8c234 b/bundle/snapshots/0b798cb59af7fb9cfc7249535bd8c234 index fee53123..a434102c 100644 --- a/bundle/snapshots/0b798cb59af7fb9cfc7249535bd8c234 +++ b/bundle/snapshots/0b798cb59af7fb9cfc7249535bd8c234 @@ -1,9 +1,11 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/type", + "instanceLocation": "#" + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/0c35d06197a49d13face4aa23020ee13 b/bundle/snapshots/0c35d06197a49d13face4aa23020ee13 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/0c35d06197a49d13face4aa23020ee13 +++ b/bundle/snapshots/0c35d06197a49d13face4aa23020ee13 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/0ce5981a970aa2c374dc9921ca3e3745 b/bundle/snapshots/0ce5981a970aa2c374dc9921ca3e3745 index d937ccf1..8cc085d6 100644 --- a/bundle/snapshots/0ce5981a970aa2c374dc9921ca3e3745 +++ b/bundle/snapshots/0ce5981a970aa2c374dc9921ca3e3745 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/additionalProperties": "https://json-schema.org/keyword/additionalProperties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/additionalProperties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/additionalProperties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/0dcb5cd590f2b70cd9ddbc0ad8f045ce b/bundle/snapshots/0dcb5cd590f2b70cd9ddbc0ad8f045ce index 5afd60d5..72ec87ad 100644 --- a/bundle/snapshots/0dcb5cd590f2b70cd9ddbc0ad8f045ce +++ b/bundle/snapshots/0dcb5cd590f2b70cd9ddbc0ad8f045ce @@ -1,14 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/then/maxLength": "https://json-schema.org/keyword/maxLength", - "https://bundler.hyperjump.io/main#/then": "https://json-schema.org/keyword/then", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/then", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/then", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/maxLength", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/then/maxLength", + "instanceLocation": "#" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/0e5d4e29ac0020de6434c0e6250738ec b/bundle/snapshots/0e5d4e29ac0020de6434c0e6250738ec index c492b31f..f1a63aba 100644 --- a/bundle/snapshots/0e5d4e29ac0020de6434c0e6250738ec +++ b/bundle/snapshots/0e5d4e29ac0020de6434c0e6250738ec @@ -1,24 +1,32 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/$defs/string/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/$defs/string": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/$defs/string/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/0fdaaa6dcec04489e9ad4964be3bf39e b/bundle/snapshots/0fdaaa6dcec04489e9ad4964be3bf39e index fee53123..a434102c 100644 --- a/bundle/snapshots/0fdaaa6dcec04489e9ad4964be3bf39e +++ b/bundle/snapshots/0fdaaa6dcec04489e9ad4964be3bf39e @@ -1,9 +1,11 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/type", + "instanceLocation": "#" + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/114681e245a0b42f2313fc2e0315a1e7 b/bundle/snapshots/114681e245a0b42f2313fc2e0315a1e7 index 4e2b7ad8..aa59fe4e 100644 --- a/bundle/snapshots/114681e245a0b42f2313fc2e0315a1e7 +++ b/bundle/snapshots/114681e245a0b42f2313fc2e0315a1e7 @@ -1,15 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/120a1e86ded8c56db704fe602846c6b8 b/bundle/snapshots/120a1e86ded8c56db704fe602846c6b8 index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/120a1e86ded8c56db704fe602846c6b8 +++ b/bundle/snapshots/120a1e86ded8c56db704fe602846c6b8 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/12253ba41692833b0fe811b2f5529805 b/bundle/snapshots/12253ba41692833b0fe811b2f5529805 index 2968a408..ae696782 100644 --- a/bundle/snapshots/12253ba41692833b0fe811b2f5529805 +++ b/bundle/snapshots/12253ba41692833b0fe811b2f5529805 @@ -1,10 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/12a929ec4027ac23a3bfd2a485688590 b/bundle/snapshots/12a929ec4027ac23a3bfd2a485688590 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/12a929ec4027ac23a3bfd2a485688590 +++ b/bundle/snapshots/12a929ec4027ac23a3bfd2a485688590 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/12e5d143b07d6a7353a00207cb117789 b/bundle/snapshots/12e5d143b07d6a7353a00207cb117789 index 1d76dece..37301b68 100644 --- a/bundle/snapshots/12e5d143b07d6a7353a00207cb117789 +++ b/bundle/snapshots/12e5d143b07d6a7353a00207cb117789 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/13588b2ac26c9d54b3616b15944012f1 b/bundle/snapshots/13588b2ac26c9d54b3616b15944012f1 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/13588b2ac26c9d54b3616b15944012f1 +++ b/bundle/snapshots/13588b2ac26c9d54b3616b15944012f1 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/139365710fd189f2fd51509dc69cec43 b/bundle/snapshots/139365710fd189f2fd51509dc69cec43 index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/139365710fd189f2fd51509dc69cec43 +++ b/bundle/snapshots/139365710fd189f2fd51509dc69cec43 @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/1398f4f3aaf34a96688a7768cbf41ff0 b/bundle/snapshots/1398f4f3aaf34a96688a7768cbf41ff0 index 40da83b1..d29b3d28 100644 --- a/bundle/snapshots/1398f4f3aaf34a96688a7768cbf41ff0 +++ b/bundle/snapshots/1398f4f3aaf34a96688a7768cbf41ff0 @@ -1,31 +1,39 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/tree": { - "errors": { - "https://test.json-schema.org/tree#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/tree#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/tree/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/tree": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/tree/leaf": { - "errors": {}, - "annotations": {} - }, - "#/tree/branch": { - "errors": { - "https://test.json-schema.org/tree#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/tree#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/tree#/properties/branch/$ref": "https://json-schema.org/keyword/ref", - "https://test.json-schema.org/tree#/properties/branch": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/tree/$ref", + "instanceLocation": "#/tree", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/tree#/properties", + "instanceLocation": "#/tree", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://test.json-schema.org/tree#/properties/branch/$ref", + "instanceLocation": "#/tree/branch", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/tree#/type", + "instanceLocation": "#/tree/branch" + } + ] + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/139eaf7720391e4c1e25605f6e21410f b/bundle/snapshots/139eaf7720391e4c1e25605f6e21410f index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/139eaf7720391e4c1e25605f6e21410f +++ b/bundle/snapshots/139eaf7720391e4c1e25605f6e21410f @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/140107810716e03ab58f4dcf4e4764e5 b/bundle/snapshots/140107810716e03ab58f4dcf4e4764e5 index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/140107810716e03ab58f4dcf4e4764e5 +++ b/bundle/snapshots/140107810716e03ab58f4dcf4e4764e5 @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/145eeaee28b6389d709d2c98e008a0da b/bundle/snapshots/145eeaee28b6389d709d2c98e008a0da index 1d76dece..37301b68 100644 --- a/bundle/snapshots/145eeaee28b6389d709d2c98e008a0da +++ b/bundle/snapshots/145eeaee28b6389d709d2c98e008a0da @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/14a1fe027d91308e0ad53459d6d36724 b/bundle/snapshots/14a1fe027d91308e0ad53459d6d36724 index 89bb5e03..a61530af 100644 --- a/bundle/snapshots/14a1fe027d91308e0ad53459d6d36724 +++ b/bundle/snapshots/14a1fe027d91308e0ad53459d6d36724 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/items": "https://json-schema.org/keyword/items", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/items/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/items": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/items", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/items", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/items/$ref", + "instanceLocation": "#/0", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/0" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/16362d4681a7fc02b09b9af24ae23e82 b/bundle/snapshots/16362d4681a7fc02b09b9af24ae23e82 index 12dbb5b2..7ead60f9 100644 --- a/bundle/snapshots/16362d4681a7fc02b09b9af24ae23e82 +++ b/bundle/snapshots/16362d4681a7fc02b09b9af24ae23e82 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/unevaluatedItems": "https://json-schema.org/keyword/unevaluatedItems", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/unevaluatedItems/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/unevaluatedItems": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/unevaluatedItems", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/unevaluatedItems", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/unevaluatedItems/$ref", + "instanceLocation": "#/0", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/0" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/164201e3f9fb61bd594cc5f47cb94d55 b/bundle/snapshots/164201e3f9fb61bd594cc5f47cb94d55 index 5afd60d5..72ec87ad 100644 --- a/bundle/snapshots/164201e3f9fb61bd594cc5f47cb94d55 +++ b/bundle/snapshots/164201e3f9fb61bd594cc5f47cb94d55 @@ -1,14 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/then/maxLength": "https://json-schema.org/keyword/maxLength", - "https://bundler.hyperjump.io/main#/then": "https://json-schema.org/keyword/then", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/then", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/then", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/maxLength", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/then/maxLength", + "instanceLocation": "#" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/17a2e2c02ca51cfc306983ed174445be b/bundle/snapshots/17a2e2c02ca51cfc306983ed174445be index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/17a2e2c02ca51cfc306983ed174445be +++ b/bundle/snapshots/17a2e2c02ca51cfc306983ed174445be @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/17d84f87c2eae257b78e5a71047a5ad0 b/bundle/snapshots/17d84f87c2eae257b78e5a71047a5ad0 index f6b3deda..fe10aa35 100644 --- a/bundle/snapshots/17d84f87c2eae257b78e5a71047a5ad0 +++ b/bundle/snapshots/17d84f87c2eae257b78e5a71047a5ad0 @@ -1,22 +1,18 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" + }, + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } - } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/1839eb3563f23d86ce8b82968a925bc6 b/bundle/snapshots/1839eb3563f23d86ce8b82968a925bc6 index 5b8cca74..ae696782 100644 --- a/bundle/snapshots/1839eb3563f23d86ce8b82968a925bc6 +++ b/bundle/snapshots/1839eb3563f23d86ce8b82968a925bc6 @@ -1,13 +1,5 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/if": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } - } - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/185e15fd0af7f6485875e6a467f013cf b/bundle/snapshots/185e15fd0af7f6485875e6a467f013cf index 16694994..40895042 100644 --- a/bundle/snapshots/185e15fd0af7f6485875e6a467f013cf +++ b/bundle/snapshots/185e15fd0af7f6485875e6a467f013cf @@ -1,18 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/bar", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/19c55f511be1beb3e693bac16d756f4a b/bundle/snapshots/19c55f511be1beb3e693bac16d756f4a index 7aa83ef6..552bf809 100644 --- a/bundle/snapshots/19c55f511be1beb3e693bac16d756f4a +++ b/bundle/snapshots/19c55f511be1beb3e693bac16d756f4a @@ -1,31 +1,39 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/tree": { - "errors": { - "https://test.json-schema.org/tree#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/tree#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/tree/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/tree": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/tree/leaf": { - "errors": {}, - "annotations": {} - }, - "#/tree/branch": { - "errors": { - "https://test.json-schema.org/tree#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/tree#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/tree#/properties/branch/$recursiveRef": "https://json-schema.org/keyword/draft-2020-12/dynamicRef", - "https://test.json-schema.org/tree#/properties/branch": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/tree/$ref", + "instanceLocation": "#/tree", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/tree#/properties", + "instanceLocation": "#/tree", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/draft-2020-12/dynamicRef", + "absoluteKeywordLocation": "https://test.json-schema.org/tree#/properties/branch/$recursiveRef", + "instanceLocation": "#/tree/branch", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/tree#/type", + "instanceLocation": "#/tree/branch" + } + ] + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/1a625d786c7bb443da8af47f719908da b/bundle/snapshots/1a625d786c7bb443da8af47f719908da index dd7ab016..3dd8160e 100644 --- a/bundle/snapshots/1a625d786c7bb443da8af47f719908da +++ b/bundle/snapshots/1a625d786c7bb443da8af47f719908da @@ -1,17 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf/0/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/allOf/0": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf/0/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/1b4dbf42e23483d5bd7ca98b00aaaee0 b/bundle/snapshots/1b4dbf42e23483d5bd7ca98b00aaaee0 index dd7ab016..3dd8160e 100644 --- a/bundle/snapshots/1b4dbf42e23483d5bd7ca98b00aaaee0 +++ b/bundle/snapshots/1b4dbf42e23483d5bd7ca98b00aaaee0 @@ -1,17 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf/0/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/allOf/0": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf/0/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/1b50751e8a7dafa55c763c9aec465703 b/bundle/snapshots/1b50751e8a7dafa55c763c9aec465703 index 1d76dece..37301b68 100644 --- a/bundle/snapshots/1b50751e8a7dafa55c763c9aec465703 +++ b/bundle/snapshots/1b50751e8a7dafa55c763c9aec465703 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/1b9f06a2dd38791a0f07e262b40986c0 b/bundle/snapshots/1b9f06a2dd38791a0f07e262b40986c0 index a7138e86..bb96913a 100644 --- a/bundle/snapshots/1b9f06a2dd38791a0f07e262b40986c0 +++ b/bundle/snapshots/1b9f06a2dd38791a0f07e262b40986c0 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/1c1ed0f8ee99ed8ae221aa8cd069ac6c b/bundle/snapshots/1c1ed0f8ee99ed8ae221aa8cd069ac6c index e0411e4b..ae696782 100644 --- a/bundle/snapshots/1c1ed0f8ee99ed8ae221aa8cd069ac6c +++ b/bundle/snapshots/1c1ed0f8ee99ed8ae221aa8cd069ac6c @@ -1,15 +1,5 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/conditional/0/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/conditional/0": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } - } - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/1c5b525dd9558bb3bd0db3a72cda5e5e b/bundle/snapshots/1c5b525dd9558bb3bd0db3a72cda5e5e index 4e2b7ad8..aa59fe4e 100644 --- a/bundle/snapshots/1c5b525dd9558bb3bd0db3a72cda5e5e +++ b/bundle/snapshots/1c5b525dd9558bb3bd0db3a72cda5e5e @@ -1,15 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/1cea49df736e17a985371c89f01452da b/bundle/snapshots/1cea49df736e17a985371c89f01452da index ecd020ed..6a230992 100644 --- a/bundle/snapshots/1cea49df736e17a985371c89f01452da +++ b/bundle/snapshots/1cea49df736e17a985371c89f01452da @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/0", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/1d8100c94cb9a7cfc0026b535cf41a34 b/bundle/snapshots/1d8100c94cb9a7cfc0026b535cf41a34 index c492b31f..f1a63aba 100644 --- a/bundle/snapshots/1d8100c94cb9a7cfc0026b535cf41a34 +++ b/bundle/snapshots/1d8100c94cb9a7cfc0026b535cf41a34 @@ -1,24 +1,32 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/$defs/string/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/$defs/string": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/$defs/string/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/1d97116a722902353c4c7c69d7a45df8 b/bundle/snapshots/1d97116a722902353c4c7c69d7a45df8 index ecd020ed..6a230992 100644 --- a/bundle/snapshots/1d97116a722902353c4c7c69d7a45df8 +++ b/bundle/snapshots/1d97116a722902353c4c7c69d7a45df8 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/0", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/1ef0aeba519a35c6a083cb650433fc6c b/bundle/snapshots/1ef0aeba519a35c6a083cb650433fc6c index 1d76dece..37301b68 100644 --- a/bundle/snapshots/1ef0aeba519a35c6a083cb650433fc6c +++ b/bundle/snapshots/1ef0aeba519a35c6a083cb650433fc6c @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/1efa6ede7b177dcaf2acf457c73b680b b/bundle/snapshots/1efa6ede7b177dcaf2acf457c73b680b index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/1efa6ede7b177dcaf2acf457c73b680b +++ b/bundle/snapshots/1efa6ede7b177dcaf2acf457c73b680b @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/1fa7f5692e8b36aef495e649b044cab0 b/bundle/snapshots/1fa7f5692e8b36aef495e649b044cab0 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/1fa7f5692e8b36aef495e649b044cab0 +++ b/bundle/snapshots/1fa7f5692e8b36aef495e649b044cab0 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/237670c373245028c385958495661c99 b/bundle/snapshots/237670c373245028c385958495661c99 index fee53123..a434102c 100644 --- a/bundle/snapshots/237670c373245028c385958495661c99 +++ b/bundle/snapshots/237670c373245028c385958495661c99 @@ -1,9 +1,11 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/type", + "instanceLocation": "#" + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/23ce37639303c4cdb4fa6dfe040fc0ff b/bundle/snapshots/23ce37639303c4cdb4fa6dfe040fc0ff index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/23ce37639303c4cdb4fa6dfe040fc0ff +++ b/bundle/snapshots/23ce37639303c4cdb4fa6dfe040fc0ff @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/23cf9422bf26e5159ea8c7fa1a1b43ff b/bundle/snapshots/23cf9422bf26e5159ea8c7fa1a1b43ff index c492b31f..f1a63aba 100644 --- a/bundle/snapshots/23cf9422bf26e5159ea8c7fa1a1b43ff +++ b/bundle/snapshots/23cf9422bf26e5159ea8c7fa1a1b43ff @@ -1,24 +1,32 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/$defs/string/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/$defs/string": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/$defs/string/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/23e41888dc468f92d7165c0d76363bf5 b/bundle/snapshots/23e41888dc468f92d7165c0d76363bf5 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/23e41888dc468f92d7165c0d76363bf5 +++ b/bundle/snapshots/23e41888dc468f92d7165c0d76363bf5 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/260f9529ba78c8d79d2b84d0b63d2464 b/bundle/snapshots/260f9529ba78c8d79d2b84d0b63d2464 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/260f9529ba78c8d79d2b84d0b63d2464 +++ b/bundle/snapshots/260f9529ba78c8d79d2b84d0b63d2464 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/26ad73a9da1d5b5a6c552b858a9d69c3 b/bundle/snapshots/26ad73a9da1d5b5a6c552b858a9d69c3 index dfc403a6..ae696782 100644 --- a/bundle/snapshots/26ad73a9da1d5b5a6c552b858a9d69c3 +++ b/bundle/snapshots/26ad73a9da1d5b5a6c552b858a9d69c3 @@ -1,22 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/tree": { - "errors": {}, - "annotations": {} - }, - "#/tree/leaf": { - "errors": {}, - "annotations": {} - }, - "#/tree/branch": { - "errors": {}, - "annotations": {} - }, - "#/tree/branch/leaf": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/27ffd8e930b580ee7b546c29856991ec b/bundle/snapshots/27ffd8e930b580ee7b546c29856991ec index dfc403a6..ae696782 100644 --- a/bundle/snapshots/27ffd8e930b580ee7b546c29856991ec +++ b/bundle/snapshots/27ffd8e930b580ee7b546c29856991ec @@ -1,22 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/tree": { - "errors": {}, - "annotations": {} - }, - "#/tree/leaf": { - "errors": {}, - "annotations": {} - }, - "#/tree/branch": { - "errors": {}, - "annotations": {} - }, - "#/tree/branch/leaf": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/28c04cb59d9a3e0d0caacbf60dc8404c b/bundle/snapshots/28c04cb59d9a3e0d0caacbf60dc8404c index 16694994..40895042 100644 --- a/bundle/snapshots/28c04cb59d9a3e0d0caacbf60dc8404c +++ b/bundle/snapshots/28c04cb59d9a3e0d0caacbf60dc8404c @@ -1,18 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/bar", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/295e24d541e261e7fc1145930673ec37 b/bundle/snapshots/295e24d541e261e7fc1145930673ec37 index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/295e24d541e261e7fc1145930673ec37 +++ b/bundle/snapshots/295e24d541e261e7fc1145930673ec37 @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/2a079a2f1d3d38713c5857b5126380e3 b/bundle/snapshots/2a079a2f1d3d38713c5857b5126380e3 index 1d76dece..37301b68 100644 --- a/bundle/snapshots/2a079a2f1d3d38713c5857b5126380e3 +++ b/bundle/snapshots/2a079a2f1d3d38713c5857b5126380e3 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/2a2f29a42be7c37c15ade2a4d3b1d606 b/bundle/snapshots/2a2f29a42be7c37c15ade2a4d3b1d606 index 65f7b5dd..c37a8d82 100644 --- a/bundle/snapshots/2a2f29a42be7c37c15ade2a4d3b1d606 +++ b/bundle/snapshots/2a2f29a42be7c37c15ade2a4d3b1d606 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/items": "https://json-schema.org/keyword/draft-04/items", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/draft-04/items", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/items", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/0" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/2ac064532f0fce1c30efb679eed17b8e b/bundle/snapshots/2ac064532f0fce1c30efb679eed17b8e index 1fa46623..ae696782 100644 --- a/bundle/snapshots/2ac064532f0fce1c30efb679eed17b8e +++ b/bundle/snapshots/2ac064532f0fce1c30efb679eed17b8e @@ -1,14 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/2c8965601028dfe1a687613b46f8ca6f b/bundle/snapshots/2c8965601028dfe1a687613b46f8ca6f index 981f9c3f..ae696782 100644 --- a/bundle/snapshots/2c8965601028dfe1a687613b46f8ca6f +++ b/bundle/snapshots/2c8965601028dfe1a687613b46f8ca6f @@ -1,8 +1,5 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/if": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/2cf8396e0620ac5ec71a5d9a79be3e42 b/bundle/snapshots/2cf8396e0620ac5ec71a5d9a79be3e42 index 65f7b5dd..c37a8d82 100644 --- a/bundle/snapshots/2cf8396e0620ac5ec71a5d9a79be3e42 +++ b/bundle/snapshots/2cf8396e0620ac5ec71a5d9a79be3e42 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/items": "https://json-schema.org/keyword/draft-04/items", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/draft-04/items", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/items", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/0" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/2d53e6a2d0101794d6d63def48bfa2fc b/bundle/snapshots/2d53e6a2d0101794d6d63def48bfa2fc index 16694994..40895042 100644 --- a/bundle/snapshots/2d53e6a2d0101794d6d63def48bfa2fc +++ b/bundle/snapshots/2d53e6a2d0101794d6d63def48bfa2fc @@ -1,18 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/bar", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/2dea693c807fe392ffd4d0f31bf3e719 b/bundle/snapshots/2dea693c807fe392ffd4d0f31bf3e719 index 4e92908d..ae696782 100644 --- a/bundle/snapshots/2dea693c807fe392ffd4d0f31bf3e719 +++ b/bundle/snapshots/2dea693c807fe392ffd4d0f31bf3e719 @@ -1,14 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/foo/0": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/2e4080f67b91b77b1b5d2147b47c8a2e b/bundle/snapshots/2e4080f67b91b77b1b5d2147b47c8a2e index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/2e4080f67b91b77b1b5d2147b47c8a2e +++ b/bundle/snapshots/2e4080f67b91b77b1b5d2147b47c8a2e @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/2f48ec33c3279dc7b8a49c068792dc13 b/bundle/snapshots/2f48ec33c3279dc7b8a49c068792dc13 index 22341916..72b66a8d 100644 --- a/bundle/snapshots/2f48ec33c3279dc7b8a49c068792dc13 +++ b/bundle/snapshots/2f48ec33c3279dc7b8a49c068792dc13 @@ -1,22 +1,39 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foo#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foo#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/foobar#/$ref": "https://json-schema.org/keyword/ref", - "https://test.json-schema.org/foobar#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://test.json-schema.org/string#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/string#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/foo#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://test.json-schema.org/foo#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://test.json-schema.org/foobar#/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/2f7960c00691f686f3c067cffb02f4c1 b/bundle/snapshots/2f7960c00691f686f3c067cffb02f4c1 index 6bb689f3..94f5788d 100644 --- a/bundle/snapshots/2f7960c00691f686f3c067cffb02f4c1 +++ b/bundle/snapshots/2f7960c00691f686f3c067cffb02f4c1 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/unevaluatedProperties": "https://json-schema.org/keyword/unevaluatedProperties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/unevaluatedProperties/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/unevaluatedProperties": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/unevaluatedProperties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/unevaluatedProperties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/unevaluatedProperties/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/306aab4965c938883dcdf33ac166c126 b/bundle/snapshots/306aab4965c938883dcdf33ac166c126 index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/306aab4965c938883dcdf33ac166c126 +++ b/bundle/snapshots/306aab4965c938883dcdf33ac166c126 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/315fa750fea0c01f430ff0851285d350 b/bundle/snapshots/315fa750fea0c01f430ff0851285d350 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/315fa750fea0c01f430ff0851285d350 +++ b/bundle/snapshots/315fa750fea0c01f430ff0851285d350 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/3223bc30e1c92f0566849c6940bab742 b/bundle/snapshots/3223bc30e1c92f0566849c6940bab742 index 84eb7caa..5e367641 100644 --- a/bundle/snapshots/3223bc30e1c92f0566849c6940bab742 +++ b/bundle/snapshots/3223bc30e1c92f0566849c6940bab742 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/patternProperties": "https://json-schema.org/keyword/patternProperties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/patternProperties//$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/patternProperties/": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/patternProperties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/patternProperties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/patternProperties//$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/33e5e6eebbbb677a7401180f969c9050 b/bundle/snapshots/33e5e6eebbbb677a7401180f969c9050 index 1d0ff209..d13d819a 100644 --- a/bundle/snapshots/33e5e6eebbbb677a7401180f969c9050 +++ b/bundle/snapshots/33e5e6eebbbb677a7401180f969c9050 @@ -1,18 +1,25 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foo#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foo#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://test.json-schema.org/string#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/33f50872f240cb902c6196c518e53d80 b/bundle/snapshots/33f50872f240cb902c6196c518e53d80 index ef8bfa2d..23589a1a 100644 --- a/bundle/snapshots/33f50872f240cb902c6196c518e53d80 +++ b/bundle/snapshots/33f50872f240cb902c6196c518e53d80 @@ -1,20 +1,32 @@ { - "#": { - "errors": { - "https://test.json-schema.org/list#/items": "https://json-schema.org/keyword/items", - "https://test.json-schema.org/list#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/main#/$defs/element/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/main#/$defs/element": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/list#/items/$dynamicRef": "https://json-schema.org/keyword/dynamicRef", - "https://test.json-schema.org/list#/items": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/items", + "absoluteKeywordLocation": "https://test.json-schema.org/list#/items", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/dynamicRef", + "absoluteKeywordLocation": "https://test.json-schema.org/list#/items/$dynamicRef", + "instanceLocation": "#/0", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/$defs/element/type", + "instanceLocation": "#/0" + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/3473c9bdcb047b6543fb424c8623313e b/bundle/snapshots/3473c9bdcb047b6543fb424c8623313e index ecd020ed..6a230992 100644 --- a/bundle/snapshots/3473c9bdcb047b6543fb424c8623313e +++ b/bundle/snapshots/3473c9bdcb047b6543fb424c8623313e @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/0", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/3506fd4483c140b60a6ad8b0e7c371f2 b/bundle/snapshots/3506fd4483c140b60a6ad8b0e7c371f2 index a7138e86..bb96913a 100644 --- a/bundle/snapshots/3506fd4483c140b60a6ad8b0e7c371f2 +++ b/bundle/snapshots/3506fd4483c140b60a6ad8b0e7c371f2 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/35a365d04a84908c6a6b71df77a6cfc0 b/bundle/snapshots/35a365d04a84908c6a6b71df77a6cfc0 index ecd020ed..6a230992 100644 --- a/bundle/snapshots/35a365d04a84908c6a6b71df77a6cfc0 +++ b/bundle/snapshots/35a365d04a84908c6a6b71df77a6cfc0 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/0", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/361635a018008bcd5f70257cc035a909 b/bundle/snapshots/361635a018008bcd5f70257cc035a909 index ecd020ed..6a230992 100644 --- a/bundle/snapshots/361635a018008bcd5f70257cc035a909 +++ b/bundle/snapshots/361635a018008bcd5f70257cc035a909 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/0", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/36b5b64c677a80297dc2d5e932a54b58 b/bundle/snapshots/36b5b64c677a80297dc2d5e932a54b58 index ecd020ed..6a230992 100644 --- a/bundle/snapshots/36b5b64c677a80297dc2d5e932a54b58 +++ b/bundle/snapshots/36b5b64c677a80297dc2d5e932a54b58 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/0", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/379f482275fa7144adc6eb8061b633e2 b/bundle/snapshots/379f482275fa7144adc6eb8061b633e2 index eba2d4c8..45917ebc 100644 --- a/bundle/snapshots/379f482275fa7144adc6eb8061b633e2 +++ b/bundle/snapshots/379f482275fa7144adc6eb8061b633e2 @@ -1,11 +1,18 @@ { - "#": { - "errors": { - "https://test.json-schema.org/short-string#/maxLength": "https://json-schema.org/keyword/maxLength", - "https://test.json-schema.org/short-string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/then": "https://json-schema.org/keyword/then", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/then", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/then", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/maxLength", + "absoluteKeywordLocation": "https://test.json-schema.org/short-string#/maxLength", + "instanceLocation": "#" + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/37a40c54ccbfb5d2a83bd9ac6b5c117a b/bundle/snapshots/37a40c54ccbfb5d2a83bd9ac6b5c117a index f6b3deda..fe10aa35 100644 --- a/bundle/snapshots/37a40c54ccbfb5d2a83bd9ac6b5c117a +++ b/bundle/snapshots/37a40c54ccbfb5d2a83bd9ac6b5c117a @@ -1,22 +1,18 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" + }, + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } - } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/37cf51cc927985382a5a870e89138cc1 b/bundle/snapshots/37cf51cc927985382a5a870e89138cc1 index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/37cf51cc927985382a5a870e89138cc1 +++ b/bundle/snapshots/37cf51cc927985382a5a870e89138cc1 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/38e3d0fe6da335bf3be09d75dec08db7 b/bundle/snapshots/38e3d0fe6da335bf3be09d75dec08db7 index 9bfeabdc..c91aba64 100644 --- a/bundle/snapshots/38e3d0fe6da335bf3be09d75dec08db7 +++ b/bundle/snapshots/38e3d0fe6da335bf3be09d75dec08db7 @@ -1,13 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/if": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/short-string#/maxLength": "https://json-schema.org/keyword/maxLength", - "https://test.json-schema.org/short-string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/else/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/else": "https://json-schema.org/keyword/else", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/else", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/else", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/else/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/maxLength", + "absoluteKeywordLocation": "https://test.json-schema.org/short-string#/maxLength", + "instanceLocation": "#" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/395d3d08843ac8abba09eb133e7978cd b/bundle/snapshots/395d3d08843ac8abba09eb133e7978cd index 08e064ba..ae696782 100644 --- a/bundle/snapshots/395d3d08843ac8abba09eb133e7978cd +++ b/bundle/snapshots/395d3d08843ac8abba09eb133e7978cd @@ -1,6 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/398f49c7510a4ce7675d27f2872a94c8 b/bundle/snapshots/398f49c7510a4ce7675d27f2872a94c8 index 7776ccaf..c3d4af05 100644 --- a/bundle/snapshots/398f49c7510a4ce7675d27f2872a94c8 +++ b/bundle/snapshots/398f49c7510a4ce7675d27f2872a94c8 @@ -1,15 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/oneOf": "https://json-schema.org/keyword/oneOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/oneOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/3b583d182b168837010145a6bfc28896 b/bundle/snapshots/3b583d182b168837010145a6bfc28896 index ad5e1549..3b6cc0ed 100644 --- a/bundle/snapshots/3b583d182b168837010145a6bfc28896 +++ b/bundle/snapshots/3b583d182b168837010145a6bfc28896 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/bar/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/bar": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/3e016af6c2bc7f7658ee0a739c238680 b/bundle/snapshots/3e016af6c2bc7f7658ee0a739c238680 index 307d3876..d8885897 100644 --- a/bundle/snapshots/3e016af6c2bc7f7658ee0a739c238680 +++ b/bundle/snapshots/3e016af6c2bc7f7658ee0a739c238680 @@ -1,15 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/anyOf": "https://json-schema.org/keyword/anyOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/anyOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/anyOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/3e2d02b8cae2a253ea69ed381a8b9d98 b/bundle/snapshots/3e2d02b8cae2a253ea69ed381a8b9d98 index 307d3876..d8885897 100644 --- a/bundle/snapshots/3e2d02b8cae2a253ea69ed381a8b9d98 +++ b/bundle/snapshots/3e2d02b8cae2a253ea69ed381a8b9d98 @@ -1,15 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/anyOf": "https://json-schema.org/keyword/anyOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/anyOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/anyOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/3e668d38678948523249b79c5c21b47e b/bundle/snapshots/3e668d38678948523249b79c5c21b47e index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/3e668d38678948523249b79c5c21b47e +++ b/bundle/snapshots/3e668d38678948523249b79c5c21b47e @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/3e9eede60da0b5be63b9867c4f025f09 b/bundle/snapshots/3e9eede60da0b5be63b9867c4f025f09 index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/3e9eede60da0b5be63b9867c4f025f09 +++ b/bundle/snapshots/3e9eede60da0b5be63b9867c4f025f09 @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/3f3dee627fbfc887cff9045580b1964d b/bundle/snapshots/3f3dee627fbfc887cff9045580b1964d index 65f7b5dd..c37a8d82 100644 --- a/bundle/snapshots/3f3dee627fbfc887cff9045580b1964d +++ b/bundle/snapshots/3f3dee627fbfc887cff9045580b1964d @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/items": "https://json-schema.org/keyword/draft-04/items", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/draft-04/items", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/items", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/0" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/40c0113f25d0f0302def3b49c18d7610 b/bundle/snapshots/40c0113f25d0f0302def3b49c18d7610 index 9ded3dfa..989d48d3 100644 --- a/bundle/snapshots/40c0113f25d0f0302def3b49c18d7610 +++ b/bundle/snapshots/40c0113f25d0f0302def3b49c18d7610 @@ -1,26 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/dependencies/foo/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#/dependencies/foo": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/dependencies": "https://json-schema.org/keyword/draft-04/dependencies", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/draft-04/dependencies", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/dependencies", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/dependencies/foo/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/bar" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/413b750c53f86e1c95e2c75cc930e84e b/bundle/snapshots/413b750c53f86e1c95e2c75cc930e84e index 1d76dece..37301b68 100644 --- a/bundle/snapshots/413b750c53f86e1c95e2c75cc930e84e +++ b/bundle/snapshots/413b750c53f86e1c95e2c75cc930e84e @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/41a68d14acb0dc09c57e948216e5a735 b/bundle/snapshots/41a68d14acb0dc09c57e948216e5a735 index 155d88a9..6f57d045 100644 --- a/bundle/snapshots/41a68d14acb0dc09c57e948216e5a735 +++ b/bundle/snapshots/41a68d14acb0dc09c57e948216e5a735 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/contains": "https://json-schema.org/keyword/contains", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/contains/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/contains": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/contains", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/contains", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/contains/$ref", + "instanceLocation": "#/0", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/0" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/441aabbe9efb26a2c634cd494c07aa1a b/bundle/snapshots/441aabbe9efb26a2c634cd494c07aa1a index a7138e86..bb96913a 100644 --- a/bundle/snapshots/441aabbe9efb26a2c634cd494c07aa1a +++ b/bundle/snapshots/441aabbe9efb26a2c634cd494c07aa1a @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/4445a88a53e9d8f8d69e8acd369f5254 b/bundle/snapshots/4445a88a53e9d8f8d69e8acd369f5254 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/4445a88a53e9d8f8d69e8acd369f5254 +++ b/bundle/snapshots/4445a88a53e9d8f8d69e8acd369f5254 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/44bbf1c8fe84f62e0fc89472a32441de b/bundle/snapshots/44bbf1c8fe84f62e0fc89472a32441de index fc96902e..e6d09c7d 100644 --- a/bundle/snapshots/44bbf1c8fe84f62e0fc89472a32441de +++ b/bundle/snapshots/44bbf1c8fe84f62e0fc89472a32441de @@ -1,18 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/45e4100de0755bfb3b5e7f78acf0d2b1 b/bundle/snapshots/45e4100de0755bfb3b5e7f78acf0d2b1 index 30889dd3..074cb3ab 100644 --- a/bundle/snapshots/45e4100de0755bfb3b5e7f78acf0d2b1 +++ b/bundle/snapshots/45e4100de0755bfb3b5e7f78acf0d2b1 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/contains": "https://json-schema.org/keyword/draft-06/contains", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/draft-06/contains", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/contains", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/0" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/46083f579195b95d9b2928e15f896230 b/bundle/snapshots/46083f579195b95d9b2928e15f896230 index 155d88a9..6f57d045 100644 --- a/bundle/snapshots/46083f579195b95d9b2928e15f896230 +++ b/bundle/snapshots/46083f579195b95d9b2928e15f896230 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/contains": "https://json-schema.org/keyword/contains", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/contains/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/contains": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/contains", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/contains", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/contains/$ref", + "instanceLocation": "#/0", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/0" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/46c15f106452fb1e8856066491320b0f b/bundle/snapshots/46c15f106452fb1e8856066491320b0f index 12dbb5b2..7ead60f9 100644 --- a/bundle/snapshots/46c15f106452fb1e8856066491320b0f +++ b/bundle/snapshots/46c15f106452fb1e8856066491320b0f @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/unevaluatedItems": "https://json-schema.org/keyword/unevaluatedItems", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/unevaluatedItems/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/unevaluatedItems": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/unevaluatedItems", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/unevaluatedItems", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/unevaluatedItems/$ref", + "instanceLocation": "#/0", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/0" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/47dd56964bedafeb0be6f463294df290 b/bundle/snapshots/47dd56964bedafeb0be6f463294df290 index ad5e1549..3b6cc0ed 100644 --- a/bundle/snapshots/47dd56964bedafeb0be6f463294df290 +++ b/bundle/snapshots/47dd56964bedafeb0be6f463294df290 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/bar/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/bar": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/47f0de21a982f0768ceffb58d44a06e9 b/bundle/snapshots/47f0de21a982f0768ceffb58d44a06e9 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/47f0de21a982f0768ceffb58d44a06e9 +++ b/bundle/snapshots/47f0de21a982f0768ceffb58d44a06e9 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/48b9f39400d58f56b7248e301ad7e7de b/bundle/snapshots/48b9f39400d58f56b7248e301ad7e7de index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/48b9f39400d58f56b7248e301ad7e7de +++ b/bundle/snapshots/48b9f39400d58f56b7248e301ad7e7de @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/4954d2a7bb33977e76dc4adb10333cb8 b/bundle/snapshots/4954d2a7bb33977e76dc4adb10333cb8 index fc96902e..e6d09c7d 100644 --- a/bundle/snapshots/4954d2a7bb33977e76dc4adb10333cb8 +++ b/bundle/snapshots/4954d2a7bb33977e76dc4adb10333cb8 @@ -1,18 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/49e532f70ff30fa595e9aef33fadb7d9 b/bundle/snapshots/49e532f70ff30fa595e9aef33fadb7d9 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/49e532f70ff30fa595e9aef33fadb7d9 +++ b/bundle/snapshots/49e532f70ff30fa595e9aef33fadb7d9 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/4d0ddb9a2f9c4cea66f2d2438f9198ad b/bundle/snapshots/4d0ddb9a2f9c4cea66f2d2438f9198ad index 84eb7caa..5e367641 100644 --- a/bundle/snapshots/4d0ddb9a2f9c4cea66f2d2438f9198ad +++ b/bundle/snapshots/4d0ddb9a2f9c4cea66f2d2438f9198ad @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/patternProperties": "https://json-schema.org/keyword/patternProperties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/patternProperties//$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/patternProperties/": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/patternProperties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/patternProperties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/patternProperties//$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/4da98c63a6fb5cf4ccdd1bd18ecee508 b/bundle/snapshots/4da98c63a6fb5cf4ccdd1bd18ecee508 index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/4da98c63a6fb5cf4ccdd1bd18ecee508 +++ b/bundle/snapshots/4da98c63a6fb5cf4ccdd1bd18ecee508 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/4dab68f5d2365c143fb07630081c77f6 b/bundle/snapshots/4dab68f5d2365c143fb07630081c77f6 index 5d2dcfeb..ae696782 100644 --- a/bundle/snapshots/4dab68f5d2365c143fb07630081c77f6 +++ b/bundle/snapshots/4dab68f5d2365c143fb07630081c77f6 @@ -1,10 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/4e5064b8cfdbf3699cb3801b6130d41d b/bundle/snapshots/4e5064b8cfdbf3699cb3801b6130d41d index 2968a408..ae696782 100644 --- a/bundle/snapshots/4e5064b8cfdbf3699cb3801b6130d41d +++ b/bundle/snapshots/4e5064b8cfdbf3699cb3801b6130d41d @@ -1,10 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/4e7597c82e2c012d71fc5af69aae016e b/bundle/snapshots/4e7597c82e2c012d71fc5af69aae016e index 981f9c3f..ae696782 100644 --- a/bundle/snapshots/4e7597c82e2c012d71fc5af69aae016e +++ b/bundle/snapshots/4e7597c82e2c012d71fc5af69aae016e @@ -1,8 +1,5 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/if": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/4ee232632e2175763e5b0d9095a0c96f b/bundle/snapshots/4ee232632e2175763e5b0d9095a0c96f index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/4ee232632e2175763e5b0d9095a0c96f +++ b/bundle/snapshots/4ee232632e2175763e5b0d9095a0c96f @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/4f0fd0ffa38dffa6db8a3d1d5d463bcc b/bundle/snapshots/4f0fd0ffa38dffa6db8a3d1d5d463bcc index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/4f0fd0ffa38dffa6db8a3d1d5d463bcc +++ b/bundle/snapshots/4f0fd0ffa38dffa6db8a3d1d5d463bcc @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/4f19f85845f2e6b0bccfaf8817df9949 b/bundle/snapshots/4f19f85845f2e6b0bccfaf8817df9949 index 7e0a0397..0fb7c9d1 100644 --- a/bundle/snapshots/4f19f85845f2e6b0bccfaf8817df9949 +++ b/bundle/snapshots/4f19f85845f2e6b0bccfaf8817df9949 @@ -1,22 +1,39 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foo#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foo#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf/0/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/allOf/0": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://test.json-schema.org/string#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/string#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/foo#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://test.json-schema.org/foo#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf/0/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/50170aa57fcf4eb7d8818e849d9a59a3 b/bundle/snapshots/50170aa57fcf4eb7d8818e849d9a59a3 index eb71647c..a36a5ea5 100644 --- a/bundle/snapshots/50170aa57fcf4eb7d8818e849d9a59a3 +++ b/bundle/snapshots/50170aa57fcf4eb7d8818e849d9a59a3 @@ -1,20 +1,32 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foo#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foo#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/foobar#/allOf": "https://json-schema.org/keyword/allOf", - "https://test.json-schema.org/foobar#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://test.json-schema.org/string#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://test.json-schema.org/foobar#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/508ffacb2607d2d9d5e522aa88aa7085 b/bundle/snapshots/508ffacb2607d2d9d5e522aa88aa7085 index 08e064ba..ae696782 100644 --- a/bundle/snapshots/508ffacb2607d2d9d5e522aa88aa7085 +++ b/bundle/snapshots/508ffacb2607d2d9d5e522aa88aa7085 @@ -1,6 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/50b03a5e75eb98b3e2d3a57b58e9bcaa b/bundle/snapshots/50b03a5e75eb98b3e2d3a57b58e9bcaa index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/50b03a5e75eb98b3e2d3a57b58e9bcaa +++ b/bundle/snapshots/50b03a5e75eb98b3e2d3a57b58e9bcaa @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/51843eb00b24ce54724d656356a1a3d9 b/bundle/snapshots/51843eb00b24ce54724d656356a1a3d9 index 08e064ba..ae696782 100644 --- a/bundle/snapshots/51843eb00b24ce54724d656356a1a3d9 +++ b/bundle/snapshots/51843eb00b24ce54724d656356a1a3d9 @@ -1,6 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/53489b6846585e5710b6c31d6794072e b/bundle/snapshots/53489b6846585e5710b6c31d6794072e index 80ec520f..46c610aa 100644 --- a/bundle/snapshots/53489b6846585e5710b6c31d6794072e +++ b/bundle/snapshots/53489b6846585e5710b6c31d6794072e @@ -1,18 +1,25 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foobar#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foobar#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://test.json-schema.org/number#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/number#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foobar#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/number#/type", + "instanceLocation": "#/bar" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/53c1950ab641eabdb75f07f0ef9eb3a5 b/bundle/snapshots/53c1950ab641eabdb75f07f0ef9eb3a5 index 5d2dcfeb..ae696782 100644 --- a/bundle/snapshots/53c1950ab641eabdb75f07f0ef9eb3a5 +++ b/bundle/snapshots/53c1950ab641eabdb75f07f0ef9eb3a5 @@ -1,10 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/53f38f6440fff5a02a2fd3114a74cc0a b/bundle/snapshots/53f38f6440fff5a02a2fd3114a74cc0a index ecd020ed..6a230992 100644 --- a/bundle/snapshots/53f38f6440fff5a02a2fd3114a74cc0a +++ b/bundle/snapshots/53f38f6440fff5a02a2fd3114a74cc0a @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/0", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/5403e6e1f28a5125876658ff3d751cd1 b/bundle/snapshots/5403e6e1f28a5125876658ff3d751cd1 index 73f29199..ae696782 100644 --- a/bundle/snapshots/5403e6e1f28a5125876658ff3d751cd1 +++ b/bundle/snapshots/5403e6e1f28a5125876658ff3d751cd1 @@ -1,13 +1,5 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } - } - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/540fa5cca68cc5fc017971fe949ec744 b/bundle/snapshots/540fa5cca68cc5fc017971fe949ec744 index f6b3deda..fe10aa35 100644 --- a/bundle/snapshots/540fa5cca68cc5fc017971fe949ec744 +++ b/bundle/snapshots/540fa5cca68cc5fc017971fe949ec744 @@ -1,22 +1,18 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" + }, + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } - } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/54140ad057190e00ab9871e4da51e291 b/bundle/snapshots/54140ad057190e00ab9871e4da51e291 index 2968a408..ae696782 100644 --- a/bundle/snapshots/54140ad057190e00ab9871e4da51e291 +++ b/bundle/snapshots/54140ad057190e00ab9871e4da51e291 @@ -1,10 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/54608e2ab681d8d36b330e7ce94d0fac b/bundle/snapshots/54608e2ab681d8d36b330e7ce94d0fac index ad5e1549..3b6cc0ed 100644 --- a/bundle/snapshots/54608e2ab681d8d36b330e7ce94d0fac +++ b/bundle/snapshots/54608e2ab681d8d36b330e7ce94d0fac @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/bar/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/bar": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/54e7e0f163e8df9b57359ebfaa226a94 b/bundle/snapshots/54e7e0f163e8df9b57359ebfaa226a94 index 981f9c3f..ae696782 100644 --- a/bundle/snapshots/54e7e0f163e8df9b57359ebfaa226a94 +++ b/bundle/snapshots/54e7e0f163e8df9b57359ebfaa226a94 @@ -1,8 +1,5 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/if": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/57c4f6aefa5b3379d5d51cd4f117df24 b/bundle/snapshots/57c4f6aefa5b3379d5d51cd4f117df24 index fc96902e..e6d09c7d 100644 --- a/bundle/snapshots/57c4f6aefa5b3379d5d51cd4f117df24 +++ b/bundle/snapshots/57c4f6aefa5b3379d5d51cd4f117df24 @@ -1,18 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/588ce3c3d051294f32f288dc107aeb2a b/bundle/snapshots/588ce3c3d051294f32f288dc107aeb2a index fc96902e..e6d09c7d 100644 --- a/bundle/snapshots/588ce3c3d051294f32f288dc107aeb2a +++ b/bundle/snapshots/588ce3c3d051294f32f288dc107aeb2a @@ -1,18 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/58990e97544d58f01c0480e37a0d68de b/bundle/snapshots/58990e97544d58f01c0480e37a0d68de index 1d76dece..37301b68 100644 --- a/bundle/snapshots/58990e97544d58f01c0480e37a0d68de +++ b/bundle/snapshots/58990e97544d58f01c0480e37a0d68de @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/58ba828516dc2a7dd11b211e7b0a4aea b/bundle/snapshots/58ba828516dc2a7dd11b211e7b0a4aea index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/58ba828516dc2a7dd11b211e7b0a4aea +++ b/bundle/snapshots/58ba828516dc2a7dd11b211e7b0a4aea @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/590bff4705440957e5a8b2ca6d90f7c1 b/bundle/snapshots/590bff4705440957e5a8b2ca6d90f7c1 index 981f9c3f..ae696782 100644 --- a/bundle/snapshots/590bff4705440957e5a8b2ca6d90f7c1 +++ b/bundle/snapshots/590bff4705440957e5a8b2ca6d90f7c1 @@ -1,8 +1,5 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/if": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/59ef6a103c67e9a30f20398cbf777603 b/bundle/snapshots/59ef6a103c67e9a30f20398cbf777603 index ecd020ed..6a230992 100644 --- a/bundle/snapshots/59ef6a103c67e9a30f20398cbf777603 +++ b/bundle/snapshots/59ef6a103c67e9a30f20398cbf777603 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/0", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/5b709ee8ce260b37316a856c1dd3af8e b/bundle/snapshots/5b709ee8ce260b37316a856c1dd3af8e index a7138e86..bb96913a 100644 --- a/bundle/snapshots/5b709ee8ce260b37316a856c1dd3af8e +++ b/bundle/snapshots/5b709ee8ce260b37316a856c1dd3af8e @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/5cd2ea1dea2487662f9eac9b36f99844 b/bundle/snapshots/5cd2ea1dea2487662f9eac9b36f99844 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/5cd2ea1dea2487662f9eac9b36f99844 +++ b/bundle/snapshots/5cd2ea1dea2487662f9eac9b36f99844 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/5d1169fc5ced59e974bb0c760165a205 b/bundle/snapshots/5d1169fc5ced59e974bb0c760165a205 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/5d1169fc5ced59e974bb0c760165a205 +++ b/bundle/snapshots/5d1169fc5ced59e974bb0c760165a205 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/5e868f5f65688fa850bab82568dd25cf b/bundle/snapshots/5e868f5f65688fa850bab82568dd25cf index 7e0a0397..0fb7c9d1 100644 --- a/bundle/snapshots/5e868f5f65688fa850bab82568dd25cf +++ b/bundle/snapshots/5e868f5f65688fa850bab82568dd25cf @@ -1,22 +1,39 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foo#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foo#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf/0/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/allOf/0": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://test.json-schema.org/string#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/string#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/foo#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://test.json-schema.org/foo#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf/0/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/5fca886a4f6fbc1b3db0089ad60349f4 b/bundle/snapshots/5fca886a4f6fbc1b3db0089ad60349f4 index 1fa46623..ae696782 100644 --- a/bundle/snapshots/5fca886a4f6fbc1b3db0089ad60349f4 +++ b/bundle/snapshots/5fca886a4f6fbc1b3db0089ad60349f4 @@ -1,14 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/603a07855d1c473b3008bdcd0cd8f730 b/bundle/snapshots/603a07855d1c473b3008bdcd0cd8f730 index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/603a07855d1c473b3008bdcd0cd8f730 +++ b/bundle/snapshots/603a07855d1c473b3008bdcd0cd8f730 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/61200e833299e7e89f2db13461a60700 b/bundle/snapshots/61200e833299e7e89f2db13461a60700 index 08e064ba..ae696782 100644 --- a/bundle/snapshots/61200e833299e7e89f2db13461a60700 +++ b/bundle/snapshots/61200e833299e7e89f2db13461a60700 @@ -1,6 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/615e7ebc2b2e6d54eaba9fcc4250b963 b/bundle/snapshots/615e7ebc2b2e6d54eaba9fcc4250b963 index 5d2dcfeb..ae696782 100644 --- a/bundle/snapshots/615e7ebc2b2e6d54eaba9fcc4250b963 +++ b/bundle/snapshots/615e7ebc2b2e6d54eaba9fcc4250b963 @@ -1,10 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/6168882c1056e6815be5413e2a1f5055 b/bundle/snapshots/6168882c1056e6815be5413e2a1f5055 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/6168882c1056e6815be5413e2a1f5055 +++ b/bundle/snapshots/6168882c1056e6815be5413e2a1f5055 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/616cc7e409e5bff800d4b7320389ccd2 b/bundle/snapshots/616cc7e409e5bff800d4b7320389ccd2 index 885c871a..5ef007e1 100644 --- a/bundle/snapshots/616cc7e409e5bff800d4b7320389ccd2 +++ b/bundle/snapshots/616cc7e409e5bff800d4b7320389ccd2 @@ -1,17 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/anyOf/0/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/anyOf/0": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/anyOf": "https://json-schema.org/keyword/anyOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/anyOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/anyOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/anyOf/0/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/6183fe3ae5936b60f09dda163ec612f0 b/bundle/snapshots/6183fe3ae5936b60f09dda163ec612f0 index 981f9c3f..ae696782 100644 --- a/bundle/snapshots/6183fe3ae5936b60f09dda163ec612f0 +++ b/bundle/snapshots/6183fe3ae5936b60f09dda163ec612f0 @@ -1,8 +1,5 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/if": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/622f70ca5abdb1c83791e4af90532927 b/bundle/snapshots/622f70ca5abdb1c83791e4af90532927 index 7e0a0397..0fb7c9d1 100644 --- a/bundle/snapshots/622f70ca5abdb1c83791e4af90532927 +++ b/bundle/snapshots/622f70ca5abdb1c83791e4af90532927 @@ -1,22 +1,39 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foo#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foo#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf/0/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/allOf/0": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://test.json-schema.org/string#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/string#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/foo#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://test.json-schema.org/foo#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf/0/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/62cb227d489063c9e34bd0b20205b3f8 b/bundle/snapshots/62cb227d489063c9e34bd0b20205b3f8 index a49babcc..356a1acb 100644 --- a/bundle/snapshots/62cb227d489063c9e34bd0b20205b3f8 +++ b/bundle/snapshots/62cb227d489063c9e34bd0b20205b3f8 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/patternProperties": "https://json-schema.org/keyword/patternProperties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/patternProperties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/patternProperties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/631601f0587d028272797790d9a69293 b/bundle/snapshots/631601f0587d028272797790d9a69293 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/631601f0587d028272797790d9a69293 +++ b/bundle/snapshots/631601f0587d028272797790d9a69293 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/63cd868ff1cbf34a8528d4d242558f2a b/bundle/snapshots/63cd868ff1cbf34a8528d4d242558f2a index fc96902e..e6d09c7d 100644 --- a/bundle/snapshots/63cd868ff1cbf34a8528d4d242558f2a +++ b/bundle/snapshots/63cd868ff1cbf34a8528d4d242558f2a @@ -1,18 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/64240263623b2ea8361210d15f510542 b/bundle/snapshots/64240263623b2ea8361210d15f510542 index dfc403a6..ae696782 100644 --- a/bundle/snapshots/64240263623b2ea8361210d15f510542 +++ b/bundle/snapshots/64240263623b2ea8361210d15f510542 @@ -1,22 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/tree": { - "errors": {}, - "annotations": {} - }, - "#/tree/leaf": { - "errors": {}, - "annotations": {} - }, - "#/tree/branch": { - "errors": {}, - "annotations": {} - }, - "#/tree/branch/leaf": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/64913f6902288200f4baf65507d25418 b/bundle/snapshots/64913f6902288200f4baf65507d25418 index 328f4ef9..f14456c3 100644 --- a/bundle/snapshots/64913f6902288200f4baf65507d25418 +++ b/bundle/snapshots/64913f6902288200f4baf65507d25418 @@ -1,27 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/tree": { - "errors": { - "https://test.json-schema.org/tree#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/tree#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/tree/leaf": { - "errors": {}, - "annotations": {} - }, - "#/tree/branch": { - "errors": { - "https://test.json-schema.org/tree#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/tree#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/tree#/properties", + "instanceLocation": "#/tree", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/tree#/type", + "instanceLocation": "#/tree/branch" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/64c6bad0f116a7630121c60f853d058d b/bundle/snapshots/64c6bad0f116a7630121c60f853d058d index a7138e86..bb96913a 100644 --- a/bundle/snapshots/64c6bad0f116a7630121c60f853d058d +++ b/bundle/snapshots/64c6bad0f116a7630121c60f853d058d @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/668a142b92014d8a44b96c8ea8d9bd5a b/bundle/snapshots/668a142b92014d8a44b96c8ea8d9bd5a index 1d76dece..37301b68 100644 --- a/bundle/snapshots/668a142b92014d8a44b96c8ea8d9bd5a +++ b/bundle/snapshots/668a142b92014d8a44b96c8ea8d9bd5a @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/66a532315c257b4ea8d0e223eb416c51 b/bundle/snapshots/66a532315c257b4ea8d0e223eb416c51 index 7776ccaf..c3d4af05 100644 --- a/bundle/snapshots/66a532315c257b4ea8d0e223eb416c51 +++ b/bundle/snapshots/66a532315c257b4ea8d0e223eb416c51 @@ -1,15 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/oneOf": "https://json-schema.org/keyword/oneOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/oneOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/66c548e3bf559604741d9ed259ed34d7 b/bundle/snapshots/66c548e3bf559604741d9ed259ed34d7 index ecd020ed..6a230992 100644 --- a/bundle/snapshots/66c548e3bf559604741d9ed259ed34d7 +++ b/bundle/snapshots/66c548e3bf559604741d9ed259ed34d7 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/0", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/66e9dd8ee0228ecdcf6bd47108b92b3d b/bundle/snapshots/66e9dd8ee0228ecdcf6bd47108b92b3d index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/66e9dd8ee0228ecdcf6bd47108b92b3d +++ b/bundle/snapshots/66e9dd8ee0228ecdcf6bd47108b92b3d @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/68b09d584199e39d8c997a45df01121f b/bundle/snapshots/68b09d584199e39d8c997a45df01121f index 1d76dece..37301b68 100644 --- a/bundle/snapshots/68b09d584199e39d8c997a45df01121f +++ b/bundle/snapshots/68b09d584199e39d8c997a45df01121f @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/68d8c9a93b5ad1e128f083aea3674876 b/bundle/snapshots/68d8c9a93b5ad1e128f083aea3674876 index 08e064ba..ae696782 100644 --- a/bundle/snapshots/68d8c9a93b5ad1e128f083aea3674876 +++ b/bundle/snapshots/68d8c9a93b5ad1e128f083aea3674876 @@ -1,6 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/6968c38a401b0688b45288e0ec95c885 b/bundle/snapshots/6968c38a401b0688b45288e0ec95c885 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/6968c38a401b0688b45288e0ec95c885 +++ b/bundle/snapshots/6968c38a401b0688b45288e0ec95c885 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/69b106c927b7f7981fd36a8438bace2b b/bundle/snapshots/69b106c927b7f7981fd36a8438bace2b index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/69b106c927b7f7981fd36a8438bace2b +++ b/bundle/snapshots/69b106c927b7f7981fd36a8438bace2b @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/69c91d8e93aff9925828b4aaa405dcf2 b/bundle/snapshots/69c91d8e93aff9925828b4aaa405dcf2 index fc96902e..e6d09c7d 100644 --- a/bundle/snapshots/69c91d8e93aff9925828b4aaa405dcf2 +++ b/bundle/snapshots/69c91d8e93aff9925828b4aaa405dcf2 @@ -1,18 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/6a4ae86f7a8d2c1d88cd2288eaac3e35 b/bundle/snapshots/6a4ae86f7a8d2c1d88cd2288eaac3e35 index ad5e1549..3b6cc0ed 100644 --- a/bundle/snapshots/6a4ae86f7a8d2c1d88cd2288eaac3e35 +++ b/bundle/snapshots/6a4ae86f7a8d2c1d88cd2288eaac3e35 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/bar/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/bar": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/6a64bc6825952d799e3b90acb9a198f1 b/bundle/snapshots/6a64bc6825952d799e3b90acb9a198f1 index ad5e1549..3b6cc0ed 100644 --- a/bundle/snapshots/6a64bc6825952d799e3b90acb9a198f1 +++ b/bundle/snapshots/6a64bc6825952d799e3b90acb9a198f1 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/bar/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/bar": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/6ab177eb2011f6de8e7c36352c166bc8 b/bundle/snapshots/6ab177eb2011f6de8e7c36352c166bc8 index 12dbb5b2..7ead60f9 100644 --- a/bundle/snapshots/6ab177eb2011f6de8e7c36352c166bc8 +++ b/bundle/snapshots/6ab177eb2011f6de8e7c36352c166bc8 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/unevaluatedItems": "https://json-schema.org/keyword/unevaluatedItems", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/unevaluatedItems/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/unevaluatedItems": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/unevaluatedItems", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/unevaluatedItems", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/unevaluatedItems/$ref", + "instanceLocation": "#/0", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/0" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/6adbb440ad31560a4a6466c5298e3a60 b/bundle/snapshots/6adbb440ad31560a4a6466c5298e3a60 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/6adbb440ad31560a4a6466c5298e3a60 +++ b/bundle/snapshots/6adbb440ad31560a4a6466c5298e3a60 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/6b01a0eaa2125bf3ed257022d3b3afdf b/bundle/snapshots/6b01a0eaa2125bf3ed257022d3b3afdf index 16694994..40895042 100644 --- a/bundle/snapshots/6b01a0eaa2125bf3ed257022d3b3afdf +++ b/bundle/snapshots/6b01a0eaa2125bf3ed257022d3b3afdf @@ -1,18 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/bar", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/6b386352a3bdc92c705312c051682d06 b/bundle/snapshots/6b386352a3bdc92c705312c051682d06 index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/6b386352a3bdc92c705312c051682d06 +++ b/bundle/snapshots/6b386352a3bdc92c705312c051682d06 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/6c7c3ba005dbd555285361370ee102d8 b/bundle/snapshots/6c7c3ba005dbd555285361370ee102d8 index ecd020ed..6a230992 100644 --- a/bundle/snapshots/6c7c3ba005dbd555285361370ee102d8 +++ b/bundle/snapshots/6c7c3ba005dbd555285361370ee102d8 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/0", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/6cdfc10761bf99bf875f463ba7ab3b94 b/bundle/snapshots/6cdfc10761bf99bf875f463ba7ab3b94 index 7e0a0397..0fb7c9d1 100644 --- a/bundle/snapshots/6cdfc10761bf99bf875f463ba7ab3b94 +++ b/bundle/snapshots/6cdfc10761bf99bf875f463ba7ab3b94 @@ -1,22 +1,39 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foo#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foo#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf/0/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/allOf/0": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://test.json-schema.org/string#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/string#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/foo#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://test.json-schema.org/foo#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf/0/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/6f095742f6db8534ecd5b6ccd293d37e b/bundle/snapshots/6f095742f6db8534ecd5b6ccd293d37e index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/6f095742f6db8534ecd5b6ccd293d37e +++ b/bundle/snapshots/6f095742f6db8534ecd5b6ccd293d37e @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/6f2d46005bed2363d10c8dc12fb0bfb9 b/bundle/snapshots/6f2d46005bed2363d10c8dc12fb0bfb9 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/6f2d46005bed2363d10c8dc12fb0bfb9 +++ b/bundle/snapshots/6f2d46005bed2363d10c8dc12fb0bfb9 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/6f544c2096b37a690163579f5e728919 b/bundle/snapshots/6f544c2096b37a690163579f5e728919 index 1d76dece..37301b68 100644 --- a/bundle/snapshots/6f544c2096b37a690163579f5e728919 +++ b/bundle/snapshots/6f544c2096b37a690163579f5e728919 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/7167dbda4b0815b291cd8895b4b36a70 b/bundle/snapshots/7167dbda4b0815b291cd8895b4b36a70 index fc96902e..e6d09c7d 100644 --- a/bundle/snapshots/7167dbda4b0815b291cd8895b4b36a70 +++ b/bundle/snapshots/7167dbda4b0815b291cd8895b4b36a70 @@ -1,18 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/71e98466e3ed19ba6a721195cc02ce64 b/bundle/snapshots/71e98466e3ed19ba6a721195cc02ce64 index f6b3deda..fe10aa35 100644 --- a/bundle/snapshots/71e98466e3ed19ba6a721195cc02ce64 +++ b/bundle/snapshots/71e98466e3ed19ba6a721195cc02ce64 @@ -1,22 +1,18 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" + }, + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } - } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/72bf4a748844347b9d25e2a72729a7eb b/bundle/snapshots/72bf4a748844347b9d25e2a72729a7eb index f6b3deda..fe10aa35 100644 --- a/bundle/snapshots/72bf4a748844347b9d25e2a72729a7eb +++ b/bundle/snapshots/72bf4a748844347b9d25e2a72729a7eb @@ -1,22 +1,18 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" + }, + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } - } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/72c6d83249113f6fecb541dcf540f493 b/bundle/snapshots/72c6d83249113f6fecb541dcf540f493 index e796134d..c9eb0753 100644 --- a/bundle/snapshots/72c6d83249113f6fecb541dcf540f493 +++ b/bundle/snapshots/72c6d83249113f6fecb541dcf540f493 @@ -1,13 +1,11 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/not": "https://json-schema.org/keyword/not", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/not", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/not", + "instanceLocation": "#" } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/72f6d93d93ad69b9ecb3f6a6a983d233 b/bundle/snapshots/72f6d93d93ad69b9ecb3f6a6a983d233 index 08e064ba..ae696782 100644 --- a/bundle/snapshots/72f6d93d93ad69b9ecb3f6a6a983d233 +++ b/bundle/snapshots/72f6d93d93ad69b9ecb3f6a6a983d233 @@ -1,6 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/743690d9928397863e6c3a28937acdd9 b/bundle/snapshots/743690d9928397863e6c3a28937acdd9 index 4e2b7ad8..aa59fe4e 100644 --- a/bundle/snapshots/743690d9928397863e6c3a28937acdd9 +++ b/bundle/snapshots/743690d9928397863e6c3a28937acdd9 @@ -1,15 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/751061810ec20f303494c7bf3ec7735d b/bundle/snapshots/751061810ec20f303494c7bf3ec7735d index f6b3deda..fe10aa35 100644 --- a/bundle/snapshots/751061810ec20f303494c7bf3ec7735d +++ b/bundle/snapshots/751061810ec20f303494c7bf3ec7735d @@ -1,22 +1,18 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" + }, + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } - } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/75b29268d2cceed3c9894ff6a81235ef b/bundle/snapshots/75b29268d2cceed3c9894ff6a81235ef index a2db3b62..23853d65 100644 --- a/bundle/snapshots/75b29268d2cceed3c9894ff6a81235ef +++ b/bundle/snapshots/75b29268d2cceed3c9894ff6a81235ef @@ -1,25 +1,32 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://test.json-schema.org/tuple#/items": "https://json-schema.org/keyword/draft-04/items", - "https://test.json-schema.org/tuple#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo/0": { - "errors": { - "https://test.json-schema.org/tuple#/items/0/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/tuple#/items/0": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/draft-04/items", + "absoluteKeywordLocation": "https://test.json-schema.org/tuple#/items", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/tuple#/items/0/type", + "instanceLocation": "#/foo/0" + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/75cd205ad240fa2f9c65a803920cedd6 b/bundle/snapshots/75cd205ad240fa2f9c65a803920cedd6 index 65f7b5dd..c37a8d82 100644 --- a/bundle/snapshots/75cd205ad240fa2f9c65a803920cedd6 +++ b/bundle/snapshots/75cd205ad240fa2f9c65a803920cedd6 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/items": "https://json-schema.org/keyword/draft-04/items", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/draft-04/items", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/items", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/0" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/76142a2cb0bab3c94e8411c90b50ac61 b/bundle/snapshots/76142a2cb0bab3c94e8411c90b50ac61 index fc96902e..e6d09c7d 100644 --- a/bundle/snapshots/76142a2cb0bab3c94e8411c90b50ac61 +++ b/bundle/snapshots/76142a2cb0bab3c94e8411c90b50ac61 @@ -1,18 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/7617d040bceda39dd57eb9510703ad14 b/bundle/snapshots/7617d040bceda39dd57eb9510703ad14 index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/7617d040bceda39dd57eb9510703ad14 +++ b/bundle/snapshots/7617d040bceda39dd57eb9510703ad14 @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/76330d600d3b15fd30b669ddc4776ae8 b/bundle/snapshots/76330d600d3b15fd30b669ddc4776ae8 index ecdbb38d..ae696782 100644 --- a/bundle/snapshots/76330d600d3b15fd30b669ddc4776ae8 +++ b/bundle/snapshots/76330d600d3b15fd30b669ddc4776ae8 @@ -1,15 +1,5 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/not/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/not": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } - } - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/771d2d9d4912ce8383b5fd727f395aa6 b/bundle/snapshots/771d2d9d4912ce8383b5fd727f395aa6 index 1fa46623..ae696782 100644 --- a/bundle/snapshots/771d2d9d4912ce8383b5fd727f395aa6 +++ b/bundle/snapshots/771d2d9d4912ce8383b5fd727f395aa6 @@ -1,14 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/773f35ea98a5b0395940a1a24bb66f63 b/bundle/snapshots/773f35ea98a5b0395940a1a24bb66f63 index a7138e86..bb96913a 100644 --- a/bundle/snapshots/773f35ea98a5b0395940a1a24bb66f63 +++ b/bundle/snapshots/773f35ea98a5b0395940a1a24bb66f63 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/77834ece32f1a31063e01f3ec4fa9053 b/bundle/snapshots/77834ece32f1a31063e01f3ec4fa9053 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/77834ece32f1a31063e01f3ec4fa9053 +++ b/bundle/snapshots/77834ece32f1a31063e01f3ec4fa9053 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/7788783f799c519551627f00d0bb9cec b/bundle/snapshots/7788783f799c519551627f00d0bb9cec index 2ca0f02a..536bb4c5 100644 --- a/bundle/snapshots/7788783f799c519551627f00d0bb9cec +++ b/bundle/snapshots/7788783f799c519551627f00d0bb9cec @@ -1,28 +1,32 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/dependentSchemas/foo/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#/dependentSchemas/foo": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/dependentSchemas": "https://json-schema.org/keyword/dependentSchemas", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/dependentSchemas/foo/properties/bar/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/dependentSchemas/foo/properties/bar": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/dependentSchemas", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/dependentSchemas", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/dependentSchemas/foo/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/dependentSchemas/foo/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/bar" + } + ] + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/77a11629cbbbf038001f606f30435472 b/bundle/snapshots/77a11629cbbbf038001f606f30435472 index 84d9ffa0..3327f727 100644 --- a/bundle/snapshots/77a11629cbbbf038001f606f30435472 +++ b/bundle/snapshots/77a11629cbbbf038001f606f30435472 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/prefixItems": "https://json-schema.org/keyword/prefixItems", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/prefixItems/0/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/prefixItems/0": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/prefixItems", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/prefixItems", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/prefixItems/0/$ref", + "instanceLocation": "#/0", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/0" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/7870eeab5f8ca9101ad59356ae80d8cf b/bundle/snapshots/7870eeab5f8ca9101ad59356ae80d8cf index 7fbab9f1..7c0ec1d7 100644 --- a/bundle/snapshots/7870eeab5f8ca9101ad59356ae80d8cf +++ b/bundle/snapshots/7870eeab5f8ca9101ad59356ae80d8cf @@ -1,13 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/propertyNames": "https://json-schema.org/keyword/propertyNames", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foobar": { - "errors": {}, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/propertyNames", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/propertyNames", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/propertyNames/$ref", + "instanceLocation": "#*/foobar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/maxLength", + "absoluteKeywordLocation": "https://test.json-schema.org/short-string#/maxLength", + "instanceLocation": "#*/foobar" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/795cae84dab790d15cda3a397cfd708a b/bundle/snapshots/795cae84dab790d15cda3a397cfd708a index 155d88a9..6f57d045 100644 --- a/bundle/snapshots/795cae84dab790d15cda3a397cfd708a +++ b/bundle/snapshots/795cae84dab790d15cda3a397cfd708a @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/contains": "https://json-schema.org/keyword/contains", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/contains/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/contains": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/contains", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/contains", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/contains/$ref", + "instanceLocation": "#/0", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/0" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/7972d01ec0044d17b1ad698a09a20893 b/bundle/snapshots/7972d01ec0044d17b1ad698a09a20893 index 7e0a0397..0fb7c9d1 100644 --- a/bundle/snapshots/7972d01ec0044d17b1ad698a09a20893 +++ b/bundle/snapshots/7972d01ec0044d17b1ad698a09a20893 @@ -1,22 +1,39 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foo#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foo#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf/0/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/allOf/0": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://test.json-schema.org/string#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/string#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/foo#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://test.json-schema.org/foo#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf/0/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/7a1bcb8d5b6c7d2da38c2fe4b6dfb779 b/bundle/snapshots/7a1bcb8d5b6c7d2da38c2fe4b6dfb779 index 2ca0f02a..536bb4c5 100644 --- a/bundle/snapshots/7a1bcb8d5b6c7d2da38c2fe4b6dfb779 +++ b/bundle/snapshots/7a1bcb8d5b6c7d2da38c2fe4b6dfb779 @@ -1,28 +1,32 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/dependentSchemas/foo/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#/dependentSchemas/foo": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/dependentSchemas": "https://json-schema.org/keyword/dependentSchemas", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/dependentSchemas/foo/properties/bar/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/dependentSchemas/foo/properties/bar": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/dependentSchemas", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/dependentSchemas", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/dependentSchemas/foo/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/dependentSchemas/foo/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/bar" + } + ] + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/7a2c563c23faa7d9aff4f943b978cfde b/bundle/snapshots/7a2c563c23faa7d9aff4f943b978cfde index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/7a2c563c23faa7d9aff4f943b978cfde +++ b/bundle/snapshots/7a2c563c23faa7d9aff4f943b978cfde @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/7a67d89678cd91c5f1697da5aaa3f9f4 b/bundle/snapshots/7a67d89678cd91c5f1697da5aaa3f9f4 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/7a67d89678cd91c5f1697da5aaa3f9f4 +++ b/bundle/snapshots/7a67d89678cd91c5f1697da5aaa3f9f4 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/7a8b3a53063ecb110cbaff5b1f230335 b/bundle/snapshots/7a8b3a53063ecb110cbaff5b1f230335 index 307d3876..d8885897 100644 --- a/bundle/snapshots/7a8b3a53063ecb110cbaff5b1f230335 +++ b/bundle/snapshots/7a8b3a53063ecb110cbaff5b1f230335 @@ -1,15 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/anyOf": "https://json-schema.org/keyword/anyOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/anyOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/anyOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/7acc7b0c7341e2712d25763364a74ab2 b/bundle/snapshots/7acc7b0c7341e2712d25763364a74ab2 index 5d3d1a0e..4b0bce12 100644 --- a/bundle/snapshots/7acc7b0c7341e2712d25763364a74ab2 +++ b/bundle/snapshots/7acc7b0c7341e2712d25763364a74ab2 @@ -1,15 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/conditional/1/maxLength": "https://json-schema.org/keyword/maxLength", - "https://bundler.hyperjump.io/main#/conditional/1": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/conditional": "https://json-schema.org/keyword/conditional", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/conditional", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/conditional", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/maxLength", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/conditional/1/maxLength", + "instanceLocation": "#" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/7add5d300125d4643ff534a1883bb27a b/bundle/snapshots/7add5d300125d4643ff534a1883bb27a index 981f9c3f..ae696782 100644 --- a/bundle/snapshots/7add5d300125d4643ff534a1883bb27a +++ b/bundle/snapshots/7add5d300125d4643ff534a1883bb27a @@ -1,8 +1,5 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/if": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/7b7ea518fd130e2b1711645fcd7f2b28 b/bundle/snapshots/7b7ea518fd130e2b1711645fcd7f2b28 index 0ecf8604..89f86098 100644 --- a/bundle/snapshots/7b7ea518fd130e2b1711645fcd7f2b28 +++ b/bundle/snapshots/7b7ea518fd130e2b1711645fcd7f2b28 @@ -1,17 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/oneOf/0/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/oneOf/0": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/oneOf": "https://json-schema.org/keyword/oneOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/oneOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/oneOf/0/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/7bdde7578270e5f3427150a988a3b1c5 b/bundle/snapshots/7bdde7578270e5f3427150a988a3b1c5 index e796134d..c9eb0753 100644 --- a/bundle/snapshots/7bdde7578270e5f3427150a988a3b1c5 +++ b/bundle/snapshots/7bdde7578270e5f3427150a988a3b1c5 @@ -1,13 +1,11 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/not": "https://json-schema.org/keyword/not", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/not", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/not", + "instanceLocation": "#" } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/7cdc21f87f18840944e4158fa9138d0f b/bundle/snapshots/7cdc21f87f18840944e4158fa9138d0f index f6b3deda..fe10aa35 100644 --- a/bundle/snapshots/7cdc21f87f18840944e4158fa9138d0f +++ b/bundle/snapshots/7cdc21f87f18840944e4158fa9138d0f @@ -1,22 +1,18 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" + }, + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } - } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/7e6fb0ca2cd5abd9626db94aa9dc9407 b/bundle/snapshots/7e6fb0ca2cd5abd9626db94aa9dc9407 index 08e064ba..ae696782 100644 --- a/bundle/snapshots/7e6fb0ca2cd5abd9626db94aa9dc9407 +++ b/bundle/snapshots/7e6fb0ca2cd5abd9626db94aa9dc9407 @@ -1,6 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/7ec506bd89f8ff00deff19be525fbadf b/bundle/snapshots/7ec506bd89f8ff00deff19be525fbadf index 30889dd3..074cb3ab 100644 --- a/bundle/snapshots/7ec506bd89f8ff00deff19be525fbadf +++ b/bundle/snapshots/7ec506bd89f8ff00deff19be525fbadf @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/contains": "https://json-schema.org/keyword/draft-06/contains", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/draft-06/contains", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/contains", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/0" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/7ec890dc859d4c3f364263b647178797 b/bundle/snapshots/7ec890dc859d4c3f364263b647178797 index 5d2dcfeb..ae696782 100644 --- a/bundle/snapshots/7ec890dc859d4c3f364263b647178797 +++ b/bundle/snapshots/7ec890dc859d4c3f364263b647178797 @@ -1,10 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/7ecb6ad65392ca8b8e34aa3dc0c80986 b/bundle/snapshots/7ecb6ad65392ca8b8e34aa3dc0c80986 index 328f4ef9..f14456c3 100644 --- a/bundle/snapshots/7ecb6ad65392ca8b8e34aa3dc0c80986 +++ b/bundle/snapshots/7ecb6ad65392ca8b8e34aa3dc0c80986 @@ -1,27 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/tree": { - "errors": { - "https://test.json-schema.org/tree#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/tree#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/tree/leaf": { - "errors": {}, - "annotations": {} - }, - "#/tree/branch": { - "errors": { - "https://test.json-schema.org/tree#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/tree#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/tree#/properties", + "instanceLocation": "#/tree", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/tree#/type", + "instanceLocation": "#/tree/branch" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/7ee3fcb0e871c2ec5895c816f3b9578f b/bundle/snapshots/7ee3fcb0e871c2ec5895c816f3b9578f index 22341916..72b66a8d 100644 --- a/bundle/snapshots/7ee3fcb0e871c2ec5895c816f3b9578f +++ b/bundle/snapshots/7ee3fcb0e871c2ec5895c816f3b9578f @@ -1,22 +1,39 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foo#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foo#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/foobar#/$ref": "https://json-schema.org/keyword/ref", - "https://test.json-schema.org/foobar#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://test.json-schema.org/string#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/string#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/foo#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://test.json-schema.org/foo#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://test.json-schema.org/foobar#/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/7ff4acb0cfeaae933408014b06fa6223 b/bundle/snapshots/7ff4acb0cfeaae933408014b06fa6223 index 328f4ef9..f14456c3 100644 --- a/bundle/snapshots/7ff4acb0cfeaae933408014b06fa6223 +++ b/bundle/snapshots/7ff4acb0cfeaae933408014b06fa6223 @@ -1,27 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/tree": { - "errors": { - "https://test.json-schema.org/tree#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/tree#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/tree/leaf": { - "errors": {}, - "annotations": {} - }, - "#/tree/branch": { - "errors": { - "https://test.json-schema.org/tree#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/tree#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/tree#/properties", + "instanceLocation": "#/tree", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/tree#/type", + "instanceLocation": "#/tree/branch" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/805bb0a258628a33d224b7bc628be763 b/bundle/snapshots/805bb0a258628a33d224b7bc628be763 index 56fc4fcb..0ea57ab0 100644 --- a/bundle/snapshots/805bb0a258628a33d224b7bc628be763 +++ b/bundle/snapshots/805bb0a258628a33d224b7bc628be763 @@ -1,17 +1,25 @@ { - "#": { - "errors": { - "https://test.json-schema.org/require-baz#/required": "https://json-schema.org/keyword/required", - "https://test.json-schema.org/require-baz#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/propertyDependencies/foo/bar/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/propertyDependencies/foo/bar": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/propertyDependencies": "https://json-schema.org/keyword/propertyDependencies", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/propertyDependencies", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/propertyDependencies", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/propertyDependencies/foo/bar/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/required", + "absoluteKeywordLocation": "https://test.json-schema.org/require-baz#/required", + "instanceLocation": "#" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/816e852a34eb476ddff3b64b44e6eea4 b/bundle/snapshots/816e852a34eb476ddff3b64b44e6eea4 index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/816e852a34eb476ddff3b64b44e6eea4 +++ b/bundle/snapshots/816e852a34eb476ddff3b64b44e6eea4 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/81b72b7adf719c8bcfb135451475714e b/bundle/snapshots/81b72b7adf719c8bcfb135451475714e index 1fa46623..ae696782 100644 --- a/bundle/snapshots/81b72b7adf719c8bcfb135451475714e +++ b/bundle/snapshots/81b72b7adf719c8bcfb135451475714e @@ -1,14 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/82a595a4d57fd6c27d073bbb2bbd231b b/bundle/snapshots/82a595a4d57fd6c27d073bbb2bbd231b index 16694994..40895042 100644 --- a/bundle/snapshots/82a595a4d57fd6c27d073bbb2bbd231b +++ b/bundle/snapshots/82a595a4d57fd6c27d073bbb2bbd231b @@ -1,18 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/bar", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/8491b9aeef8d7b6daf152fa15d9134a8 b/bundle/snapshots/8491b9aeef8d7b6daf152fa15d9134a8 index 5644a897..a434102c 100644 --- a/bundle/snapshots/8491b9aeef8d7b6daf152fa15d9134a8 +++ b/bundle/snapshots/8491b9aeef8d7b6daf152fa15d9134a8 @@ -1,17 +1,11 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/foo/0": { - "errors": {}, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/type", + "instanceLocation": "#" + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/84cb084a44caafafdc02f9572eae88f1 b/bundle/snapshots/84cb084a44caafafdc02f9572eae88f1 index 9ded3dfa..989d48d3 100644 --- a/bundle/snapshots/84cb084a44caafafdc02f9572eae88f1 +++ b/bundle/snapshots/84cb084a44caafafdc02f9572eae88f1 @@ -1,26 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/dependencies/foo/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#/dependencies/foo": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/dependencies": "https://json-schema.org/keyword/draft-04/dependencies", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/draft-04/dependencies", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/dependencies", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/dependencies/foo/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/bar" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/84f573a1e8cb5220e00dc5e3bfc9735f b/bundle/snapshots/84f573a1e8cb5220e00dc5e3bfc9735f index f6b3deda..fe10aa35 100644 --- a/bundle/snapshots/84f573a1e8cb5220e00dc5e3bfc9735f +++ b/bundle/snapshots/84f573a1e8cb5220e00dc5e3bfc9735f @@ -1,22 +1,18 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" + }, + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } - } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/8584f2ff7840daccfb1ca94df64eae9b b/bundle/snapshots/8584f2ff7840daccfb1ca94df64eae9b index 4509088c..8278e752 100644 --- a/bundle/snapshots/8584f2ff7840daccfb1ca94df64eae9b +++ b/bundle/snapshots/8584f2ff7840daccfb1ca94df64eae9b @@ -1,12 +1,25 @@ { - "#": { - "errors": { - "https://test.json-schema.org/short-string#/maxLength": "https://json-schema.org/keyword/maxLength", - "https://test.json-schema.org/short-string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/then/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/then": "https://json-schema.org/keyword/then", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/then", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/then", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/then/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/maxLength", + "absoluteKeywordLocation": "https://test.json-schema.org/short-string#/maxLength", + "instanceLocation": "#" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/85ec6ca162a3b395988152a9b87636a1 b/bundle/snapshots/85ec6ca162a3b395988152a9b87636a1 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/85ec6ca162a3b395988152a9b87636a1 +++ b/bundle/snapshots/85ec6ca162a3b395988152a9b87636a1 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/86f2b8ad3e4813d51ef62a5750efff64 b/bundle/snapshots/86f2b8ad3e4813d51ef62a5750efff64 index dfc403a6..ae696782 100644 --- a/bundle/snapshots/86f2b8ad3e4813d51ef62a5750efff64 +++ b/bundle/snapshots/86f2b8ad3e4813d51ef62a5750efff64 @@ -1,22 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/tree": { - "errors": {}, - "annotations": {} - }, - "#/tree/leaf": { - "errors": {}, - "annotations": {} - }, - "#/tree/branch": { - "errors": {}, - "annotations": {} - }, - "#/tree/branch/leaf": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/875bb0e8c8ced01d3cb05a825ae1a583 b/bundle/snapshots/875bb0e8c8ced01d3cb05a825ae1a583 index e796134d..c9eb0753 100644 --- a/bundle/snapshots/875bb0e8c8ced01d3cb05a825ae1a583 +++ b/bundle/snapshots/875bb0e8c8ced01d3cb05a825ae1a583 @@ -1,13 +1,11 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/not": "https://json-schema.org/keyword/not", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/not", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/not", + "instanceLocation": "#" } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/87a12f711d50d5c2cd39b331b3fc6247 b/bundle/snapshots/87a12f711d50d5c2cd39b331b3fc6247 index 6bb689f3..94f5788d 100644 --- a/bundle/snapshots/87a12f711d50d5c2cd39b331b3fc6247 +++ b/bundle/snapshots/87a12f711d50d5c2cd39b331b3fc6247 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/unevaluatedProperties": "https://json-schema.org/keyword/unevaluatedProperties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/unevaluatedProperties/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/unevaluatedProperties": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/unevaluatedProperties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/unevaluatedProperties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/unevaluatedProperties/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/8803185fd392d54d139c871df73eb8e2 b/bundle/snapshots/8803185fd392d54d139c871df73eb8e2 index 40da83b1..d29b3d28 100644 --- a/bundle/snapshots/8803185fd392d54d139c871df73eb8e2 +++ b/bundle/snapshots/8803185fd392d54d139c871df73eb8e2 @@ -1,31 +1,39 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/tree": { - "errors": { - "https://test.json-schema.org/tree#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/tree#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/tree/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/tree": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/tree/leaf": { - "errors": {}, - "annotations": {} - }, - "#/tree/branch": { - "errors": { - "https://test.json-schema.org/tree#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/tree#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/tree#/properties/branch/$ref": "https://json-schema.org/keyword/ref", - "https://test.json-schema.org/tree#/properties/branch": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/tree/$ref", + "instanceLocation": "#/tree", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/tree#/properties", + "instanceLocation": "#/tree", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://test.json-schema.org/tree#/properties/branch/$ref", + "instanceLocation": "#/tree/branch", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/tree#/type", + "instanceLocation": "#/tree/branch" + } + ] + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/885c2c7e506a7b3994ee0712223fe432 b/bundle/snapshots/885c2c7e506a7b3994ee0712223fe432 index 1d76dece..37301b68 100644 --- a/bundle/snapshots/885c2c7e506a7b3994ee0712223fe432 +++ b/bundle/snapshots/885c2c7e506a7b3994ee0712223fe432 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/893afd0ede51aee1c780d05757e7600a b/bundle/snapshots/893afd0ede51aee1c780d05757e7600a index 2968a408..ae696782 100644 --- a/bundle/snapshots/893afd0ede51aee1c780d05757e7600a +++ b/bundle/snapshots/893afd0ede51aee1c780d05757e7600a @@ -1,10 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/89c1a21aabbf3a632255bfcaea39e87f b/bundle/snapshots/89c1a21aabbf3a632255bfcaea39e87f index 1d0ff209..d13d819a 100644 --- a/bundle/snapshots/89c1a21aabbf3a632255bfcaea39e87f +++ b/bundle/snapshots/89c1a21aabbf3a632255bfcaea39e87f @@ -1,18 +1,25 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foo#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foo#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://test.json-schema.org/string#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/8a4bd1aa80fd36bbc9f7625ed7d27c08 b/bundle/snapshots/8a4bd1aa80fd36bbc9f7625ed7d27c08 index f2172f06..ae696782 100644 --- a/bundle/snapshots/8a4bd1aa80fd36bbc9f7625ed7d27c08 +++ b/bundle/snapshots/8a4bd1aa80fd36bbc9f7625ed7d27c08 @@ -1,12 +1,5 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } - } - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/8b6344a7c7b41f1737bbaa41d14ddcb5 b/bundle/snapshots/8b6344a7c7b41f1737bbaa41d14ddcb5 index ecd020ed..6a230992 100644 --- a/bundle/snapshots/8b6344a7c7b41f1737bbaa41d14ddcb5 +++ b/bundle/snapshots/8b6344a7c7b41f1737bbaa41d14ddcb5 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/0", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/8b8822ada3f4768fa7ae924560a73398 b/bundle/snapshots/8b8822ada3f4768fa7ae924560a73398 index d937ccf1..8cc085d6 100644 --- a/bundle/snapshots/8b8822ada3f4768fa7ae924560a73398 +++ b/bundle/snapshots/8b8822ada3f4768fa7ae924560a73398 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/additionalProperties": "https://json-schema.org/keyword/additionalProperties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/additionalProperties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/additionalProperties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/8c14c43b3216be8b16cae4ab91e59c82 b/bundle/snapshots/8c14c43b3216be8b16cae4ab91e59c82 index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/8c14c43b3216be8b16cae4ab91e59c82 +++ b/bundle/snapshots/8c14c43b3216be8b16cae4ab91e59c82 @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/8c6ed6685b94d55160ac6be14fe40ed2 b/bundle/snapshots/8c6ed6685b94d55160ac6be14fe40ed2 index ad5e1549..3b6cc0ed 100644 --- a/bundle/snapshots/8c6ed6685b94d55160ac6be14fe40ed2 +++ b/bundle/snapshots/8c6ed6685b94d55160ac6be14fe40ed2 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/bar/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/bar": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/8d82bbac716ea8d8f1b291a86753d588 b/bundle/snapshots/8d82bbac716ea8d8f1b291a86753d588 index 08e064ba..ae696782 100644 --- a/bundle/snapshots/8d82bbac716ea8d8f1b291a86753d588 +++ b/bundle/snapshots/8d82bbac716ea8d8f1b291a86753d588 @@ -1,6 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/8e314f133062f33b1b6608ebdf0be4af b/bundle/snapshots/8e314f133062f33b1b6608ebdf0be4af index 1d76dece..37301b68 100644 --- a/bundle/snapshots/8e314f133062f33b1b6608ebdf0be4af +++ b/bundle/snapshots/8e314f133062f33b1b6608ebdf0be4af @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/8e80118d776ce2418345110c62c75f24 b/bundle/snapshots/8e80118d776ce2418345110c62c75f24 index 514b60b5..f4b398f6 100644 --- a/bundle/snapshots/8e80118d776ce2418345110c62c75f24 +++ b/bundle/snapshots/8e80118d776ce2418345110c62c75f24 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/items": "https://json-schema.org/keyword/draft-04/items", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/items/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/items": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/draft-04/items", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/items", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/items/$ref", + "instanceLocation": "#/0", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/0" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/8eec74a4158bc9d69cfda1c4a81dde09 b/bundle/snapshots/8eec74a4158bc9d69cfda1c4a81dde09 index dfc403a6..ae696782 100644 --- a/bundle/snapshots/8eec74a4158bc9d69cfda1c4a81dde09 +++ b/bundle/snapshots/8eec74a4158bc9d69cfda1c4a81dde09 @@ -1,22 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/tree": { - "errors": {}, - "annotations": {} - }, - "#/tree/leaf": { - "errors": {}, - "annotations": {} - }, - "#/tree/branch": { - "errors": {}, - "annotations": {} - }, - "#/tree/branch/leaf": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/8ef87b9bde2992f331bc363fdc9f50c6 b/bundle/snapshots/8ef87b9bde2992f331bc363fdc9f50c6 index ad5e1549..3b6cc0ed 100644 --- a/bundle/snapshots/8ef87b9bde2992f331bc363fdc9f50c6 +++ b/bundle/snapshots/8ef87b9bde2992f331bc363fdc9f50c6 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/bar/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/bar": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/8f0a2b5d0ec288a53862f2c2a2632e5b b/bundle/snapshots/8f0a2b5d0ec288a53862f2c2a2632e5b index 7e0a0397..0fb7c9d1 100644 --- a/bundle/snapshots/8f0a2b5d0ec288a53862f2c2a2632e5b +++ b/bundle/snapshots/8f0a2b5d0ec288a53862f2c2a2632e5b @@ -1,22 +1,39 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foo#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foo#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf/0/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/allOf/0": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://test.json-schema.org/string#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/string#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/foo#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://test.json-schema.org/foo#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf/0/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/903105d1609b59a688f9198f51b11b42 b/bundle/snapshots/903105d1609b59a688f9198f51b11b42 index ecd020ed..6a230992 100644 --- a/bundle/snapshots/903105d1609b59a688f9198f51b11b42 +++ b/bundle/snapshots/903105d1609b59a688f9198f51b11b42 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/0", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/9058d063196e4a1b6c023ba7d3975114 b/bundle/snapshots/9058d063196e4a1b6c023ba7d3975114 index 0ac23db7..17bb89bd 100644 --- a/bundle/snapshots/9058d063196e4a1b6c023ba7d3975114 +++ b/bundle/snapshots/9058d063196e4a1b6c023ba7d3975114 @@ -1,20 +1,32 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foobar#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foobar#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://test.json-schema.org/number#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/number#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/foobar#/properties/bar/$ref": "https://json-schema.org/keyword/ref", - "https://test.json-schema.org/foobar#/properties/bar": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foobar#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://test.json-schema.org/foobar#/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/number#/type", + "instanceLocation": "#/bar" + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/91cad3e4c5e08c84328e7ccbed552f83 b/bundle/snapshots/91cad3e4c5e08c84328e7ccbed552f83 index f6b3deda..fe10aa35 100644 --- a/bundle/snapshots/91cad3e4c5e08c84328e7ccbed552f83 +++ b/bundle/snapshots/91cad3e4c5e08c84328e7ccbed552f83 @@ -1,22 +1,18 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" + }, + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } - } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/940e35aea577fa47976f8c6e665f0231 b/bundle/snapshots/940e35aea577fa47976f8c6e665f0231 index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/940e35aea577fa47976f8c6e665f0231 +++ b/bundle/snapshots/940e35aea577fa47976f8c6e665f0231 @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/9439f14bdd1d80840e0dfec5478b6b0d b/bundle/snapshots/9439f14bdd1d80840e0dfec5478b6b0d index ad5e1549..3b6cc0ed 100644 --- a/bundle/snapshots/9439f14bdd1d80840e0dfec5478b6b0d +++ b/bundle/snapshots/9439f14bdd1d80840e0dfec5478b6b0d @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/bar/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/bar": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/951cf14e0d14a1aadf5bdeaa5ed8d2a1 b/bundle/snapshots/951cf14e0d14a1aadf5bdeaa5ed8d2a1 index 5afd60d5..72ec87ad 100644 --- a/bundle/snapshots/951cf14e0d14a1aadf5bdeaa5ed8d2a1 +++ b/bundle/snapshots/951cf14e0d14a1aadf5bdeaa5ed8d2a1 @@ -1,14 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/then/maxLength": "https://json-schema.org/keyword/maxLength", - "https://bundler.hyperjump.io/main#/then": "https://json-schema.org/keyword/then", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/then", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/then", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/maxLength", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/then/maxLength", + "instanceLocation": "#" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/95923c2e8dc7e5a16eecc57b67dbec60 b/bundle/snapshots/95923c2e8dc7e5a16eecc57b67dbec60 index ecd020ed..6a230992 100644 --- a/bundle/snapshots/95923c2e8dc7e5a16eecc57b67dbec60 +++ b/bundle/snapshots/95923c2e8dc7e5a16eecc57b67dbec60 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/0", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/9702cb06b3fcc40e1c5c428042d0e060 b/bundle/snapshots/9702cb06b3fcc40e1c5c428042d0e060 index 2968a408..ae696782 100644 --- a/bundle/snapshots/9702cb06b3fcc40e1c5c428042d0e060 +++ b/bundle/snapshots/9702cb06b3fcc40e1c5c428042d0e060 @@ -1,10 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/9826a4620381995cfc6e938d00979e95 b/bundle/snapshots/9826a4620381995cfc6e938d00979e95 index 80ec520f..46c610aa 100644 --- a/bundle/snapshots/9826a4620381995cfc6e938d00979e95 +++ b/bundle/snapshots/9826a4620381995cfc6e938d00979e95 @@ -1,18 +1,25 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foobar#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foobar#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://test.json-schema.org/number#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/number#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foobar#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/number#/type", + "instanceLocation": "#/bar" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/985e90d7802de7c3349c75843168b801 b/bundle/snapshots/985e90d7802de7c3349c75843168b801 index 5d2dcfeb..ae696782 100644 --- a/bundle/snapshots/985e90d7802de7c3349c75843168b801 +++ b/bundle/snapshots/985e90d7802de7c3349c75843168b801 @@ -1,10 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/990b04d52c40521fb660ded5dc52cdb9 b/bundle/snapshots/990b04d52c40521fb660ded5dc52cdb9 index ad5e1549..3b6cc0ed 100644 --- a/bundle/snapshots/990b04d52c40521fb660ded5dc52cdb9 +++ b/bundle/snapshots/990b04d52c40521fb660ded5dc52cdb9 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/bar/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/bar": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/9980aa3b3e1c4d06966ec347bffa28d3 b/bundle/snapshots/9980aa3b3e1c4d06966ec347bffa28d3 index a7138e86..bb96913a 100644 --- a/bundle/snapshots/9980aa3b3e1c4d06966ec347bffa28d3 +++ b/bundle/snapshots/9980aa3b3e1c4d06966ec347bffa28d3 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/9a690bdcb6c594657cb8df071954baac b/bundle/snapshots/9a690bdcb6c594657cb8df071954baac index fc96902e..e6d09c7d 100644 --- a/bundle/snapshots/9a690bdcb6c594657cb8df071954baac +++ b/bundle/snapshots/9a690bdcb6c594657cb8df071954baac @@ -1,18 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/9b1b667f2966cb8602339540c276802d b/bundle/snapshots/9b1b667f2966cb8602339540c276802d index 4509088c..8278e752 100644 --- a/bundle/snapshots/9b1b667f2966cb8602339540c276802d +++ b/bundle/snapshots/9b1b667f2966cb8602339540c276802d @@ -1,12 +1,25 @@ { - "#": { - "errors": { - "https://test.json-schema.org/short-string#/maxLength": "https://json-schema.org/keyword/maxLength", - "https://test.json-schema.org/short-string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/then/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/then": "https://json-schema.org/keyword/then", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/then", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/then", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/then/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/maxLength", + "absoluteKeywordLocation": "https://test.json-schema.org/short-string#/maxLength", + "instanceLocation": "#" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/9b8b596cd673f6acb6020628b64323f5 b/bundle/snapshots/9b8b596cd673f6acb6020628b64323f5 index 25ca2509..cee873f2 100644 --- a/bundle/snapshots/9b8b596cd673f6acb6020628b64323f5 +++ b/bundle/snapshots/9b8b596cd673f6acb6020628b64323f5 @@ -1,12 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/if": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/short-string#/maxLength": "https://json-schema.org/keyword/maxLength", - "https://test.json-schema.org/short-string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/else": "https://json-schema.org/keyword/else", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/else", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/else", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/maxLength", + "absoluteKeywordLocation": "https://test.json-schema.org/short-string#/maxLength", + "instanceLocation": "#" + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/9bb39281f85726e4d1295c4d9755bbca b/bundle/snapshots/9bb39281f85726e4d1295c4d9755bbca index 28cd6ddc..60476c9e 100644 --- a/bundle/snapshots/9bb39281f85726e4d1295c4d9755bbca +++ b/bundle/snapshots/9bb39281f85726e4d1295c4d9755bbca @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/additionalProperties": "https://json-schema.org/keyword/additionalProperties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/additionalProperties/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/additionalProperties": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/additionalProperties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/additionalProperties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/additionalProperties/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/9c71dbde814fe4eaa77f0d80a8aa9334 b/bundle/snapshots/9c71dbde814fe4eaa77f0d80a8aa9334 index dfc403a6..ae696782 100644 --- a/bundle/snapshots/9c71dbde814fe4eaa77f0d80a8aa9334 +++ b/bundle/snapshots/9c71dbde814fe4eaa77f0d80a8aa9334 @@ -1,22 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/tree": { - "errors": {}, - "annotations": {} - }, - "#/tree/leaf": { - "errors": {}, - "annotations": {} - }, - "#/tree/branch": { - "errors": {}, - "annotations": {} - }, - "#/tree/branch/leaf": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/9c8df8e4b331caba03f41952ff505787 b/bundle/snapshots/9c8df8e4b331caba03f41952ff505787 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/9c8df8e4b331caba03f41952ff505787 +++ b/bundle/snapshots/9c8df8e4b331caba03f41952ff505787 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/9ce4df72dc03b59ccb02217c58c003f6 b/bundle/snapshots/9ce4df72dc03b59ccb02217c58c003f6 index 2968a408..ae696782 100644 --- a/bundle/snapshots/9ce4df72dc03b59ccb02217c58c003f6 +++ b/bundle/snapshots/9ce4df72dc03b59ccb02217c58c003f6 @@ -1,10 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/9d6b6408d87908bfd9f4e34adef25d36 b/bundle/snapshots/9d6b6408d87908bfd9f4e34adef25d36 index 4509088c..8278e752 100644 --- a/bundle/snapshots/9d6b6408d87908bfd9f4e34adef25d36 +++ b/bundle/snapshots/9d6b6408d87908bfd9f4e34adef25d36 @@ -1,12 +1,25 @@ { - "#": { - "errors": { - "https://test.json-schema.org/short-string#/maxLength": "https://json-schema.org/keyword/maxLength", - "https://test.json-schema.org/short-string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/then/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/then": "https://json-schema.org/keyword/then", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/then", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/then", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/then/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/maxLength", + "absoluteKeywordLocation": "https://test.json-schema.org/short-string#/maxLength", + "instanceLocation": "#" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/9e697bcb061c883e23c4e22b4a4b35cb b/bundle/snapshots/9e697bcb061c883e23c4e22b4a4b35cb index a7138e86..bb96913a 100644 --- a/bundle/snapshots/9e697bcb061c883e23c4e22b4a4b35cb +++ b/bundle/snapshots/9e697bcb061c883e23c4e22b4a4b35cb @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/9f117911cdae56755cabb2b3f791f912 b/bundle/snapshots/9f117911cdae56755cabb2b3f791f912 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/9f117911cdae56755cabb2b3f791f912 +++ b/bundle/snapshots/9f117911cdae56755cabb2b3f791f912 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/9fa2e59fd4fd83dee0556463433e63d8 b/bundle/snapshots/9fa2e59fd4fd83dee0556463433e63d8 index 0ecf8604..89f86098 100644 --- a/bundle/snapshots/9fa2e59fd4fd83dee0556463433e63d8 +++ b/bundle/snapshots/9fa2e59fd4fd83dee0556463433e63d8 @@ -1,17 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/oneOf/0/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/oneOf/0": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/oneOf": "https://json-schema.org/keyword/oneOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/oneOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/oneOf/0/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/a0753ba94a4f5d41f8269e93d4822309 b/bundle/snapshots/a0753ba94a4f5d41f8269e93d4822309 index f6b3deda..fe10aa35 100644 --- a/bundle/snapshots/a0753ba94a4f5d41f8269e93d4822309 +++ b/bundle/snapshots/a0753ba94a4f5d41f8269e93d4822309 @@ -1,22 +1,18 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" + }, + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } - } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/a08a7afd39db6237f476bcc7a0aea1fc b/bundle/snapshots/a08a7afd39db6237f476bcc7a0aea1fc index 7fbab9f1..af1a8c44 100644 --- a/bundle/snapshots/a08a7afd39db6237f476bcc7a0aea1fc +++ b/bundle/snapshots/a08a7afd39db6237f476bcc7a0aea1fc @@ -1,13 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/propertyNames": "https://json-schema.org/keyword/propertyNames", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foobar": { - "errors": {}, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/propertyNames", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/propertyNames", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/maxLength", + "absoluteKeywordLocation": "https://test.json-schema.org/short-string#/maxLength", + "instanceLocation": "#*/foobar" + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/a0a9c59df24729670c60574f20bdc496 b/bundle/snapshots/a0a9c59df24729670c60574f20bdc496 index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/a0a9c59df24729670c60574f20bdc496 +++ b/bundle/snapshots/a0a9c59df24729670c60574f20bdc496 @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/a0bb26611b96a65e2b077977fe95b5e5 b/bundle/snapshots/a0bb26611b96a65e2b077977fe95b5e5 index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/a0bb26611b96a65e2b077977fe95b5e5 +++ b/bundle/snapshots/a0bb26611b96a65e2b077977fe95b5e5 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/a1b0605117441433a607b7ffa5f6da29 b/bundle/snapshots/a1b0605117441433a607b7ffa5f6da29 index f6b3deda..fe10aa35 100644 --- a/bundle/snapshots/a1b0605117441433a607b7ffa5f6da29 +++ b/bundle/snapshots/a1b0605117441433a607b7ffa5f6da29 @@ -1,22 +1,18 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" + }, + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } - } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/a1b6eafcdd9db65dbb71758ab4b1ed26 b/bundle/snapshots/a1b6eafcdd9db65dbb71758ab4b1ed26 index e796134d..c9eb0753 100644 --- a/bundle/snapshots/a1b6eafcdd9db65dbb71758ab4b1ed26 +++ b/bundle/snapshots/a1b6eafcdd9db65dbb71758ab4b1ed26 @@ -1,13 +1,11 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/not": "https://json-schema.org/keyword/not", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/not", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/not", + "instanceLocation": "#" } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/a2c2de25cdefa86fb7516d81f3d352db b/bundle/snapshots/a2c2de25cdefa86fb7516d81f3d352db index ecd020ed..6a230992 100644 --- a/bundle/snapshots/a2c2de25cdefa86fb7516d81f3d352db +++ b/bundle/snapshots/a2c2de25cdefa86fb7516d81f3d352db @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/0", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/a33fc45568cb12607871e347eb7777e7 b/bundle/snapshots/a33fc45568cb12607871e347eb7777e7 index 5d2dcfeb..ae696782 100644 --- a/bundle/snapshots/a33fc45568cb12607871e347eb7777e7 +++ b/bundle/snapshots/a33fc45568cb12607871e347eb7777e7 @@ -1,10 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/a3768a2fdf36c7220d9611da76658217 b/bundle/snapshots/a3768a2fdf36c7220d9611da76658217 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/a3768a2fdf36c7220d9611da76658217 +++ b/bundle/snapshots/a3768a2fdf36c7220d9611da76658217 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/a3f3186aa2664c82fef37f6e07bcb141 b/bundle/snapshots/a3f3186aa2664c82fef37f6e07bcb141 index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/a3f3186aa2664c82fef37f6e07bcb141 +++ b/bundle/snapshots/a3f3186aa2664c82fef37f6e07bcb141 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/a44764b7eb85e7c6f7b09ef1bb54dc48 b/bundle/snapshots/a44764b7eb85e7c6f7b09ef1bb54dc48 index 08e064ba..ae696782 100644 --- a/bundle/snapshots/a44764b7eb85e7c6f7b09ef1bb54dc48 +++ b/bundle/snapshots/a44764b7eb85e7c6f7b09ef1bb54dc48 @@ -1,6 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/a46a44d40b69e5a0f9e59f3d5ac39437 b/bundle/snapshots/a46a44d40b69e5a0f9e59f3d5ac39437 index 5afd60d5..72ec87ad 100644 --- a/bundle/snapshots/a46a44d40b69e5a0f9e59f3d5ac39437 +++ b/bundle/snapshots/a46a44d40b69e5a0f9e59f3d5ac39437 @@ -1,14 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/then/maxLength": "https://json-schema.org/keyword/maxLength", - "https://bundler.hyperjump.io/main#/then": "https://json-schema.org/keyword/then", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/then", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/then", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/maxLength", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/then/maxLength", + "instanceLocation": "#" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/a57ab912aaa16c60bad64247e7fccc25 b/bundle/snapshots/a57ab912aaa16c60bad64247e7fccc25 index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/a57ab912aaa16c60bad64247e7fccc25 +++ b/bundle/snapshots/a57ab912aaa16c60bad64247e7fccc25 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/a617dea854db2ec149020fb57eefffa8 b/bundle/snapshots/a617dea854db2ec149020fb57eefffa8 index ecd020ed..6a230992 100644 --- a/bundle/snapshots/a617dea854db2ec149020fb57eefffa8 +++ b/bundle/snapshots/a617dea854db2ec149020fb57eefffa8 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/0", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/a65239996a536da86d96203ed1ed808a b/bundle/snapshots/a65239996a536da86d96203ed1ed808a index 1fa46623..ae696782 100644 --- a/bundle/snapshots/a65239996a536da86d96203ed1ed808a +++ b/bundle/snapshots/a65239996a536da86d96203ed1ed808a @@ -1,14 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/a68555395ebef6cb83c0cd53ef7c6f55 b/bundle/snapshots/a68555395ebef6cb83c0cd53ef7c6f55 index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/a68555395ebef6cb83c0cd53ef7c6f55 +++ b/bundle/snapshots/a68555395ebef6cb83c0cd53ef7c6f55 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/a6a61ea3cecf6acf4c700df42163592e b/bundle/snapshots/a6a61ea3cecf6acf4c700df42163592e index 5b8cca74..ae696782 100644 --- a/bundle/snapshots/a6a61ea3cecf6acf4c700df42163592e +++ b/bundle/snapshots/a6a61ea3cecf6acf4c700df42163592e @@ -1,13 +1,5 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/if": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } - } - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/a6c2814c634490d4878583119d08d68e b/bundle/snapshots/a6c2814c634490d4878583119d08d68e index 7776ccaf..c3d4af05 100644 --- a/bundle/snapshots/a6c2814c634490d4878583119d08d68e +++ b/bundle/snapshots/a6c2814c634490d4878583119d08d68e @@ -1,15 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/oneOf": "https://json-schema.org/keyword/oneOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/oneOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/a81b835b39da6615a9a766df0fad3301 b/bundle/snapshots/a81b835b39da6615a9a766df0fad3301 index ad5e1549..3b6cc0ed 100644 --- a/bundle/snapshots/a81b835b39da6615a9a766df0fad3301 +++ b/bundle/snapshots/a81b835b39da6615a9a766df0fad3301 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/bar/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/bar": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/a8c9019b39529bc40550e1d05b4f8e61 b/bundle/snapshots/a8c9019b39529bc40550e1d05b4f8e61 index 73f29199..ae696782 100644 --- a/bundle/snapshots/a8c9019b39529bc40550e1d05b4f8e61 +++ b/bundle/snapshots/a8c9019b39529bc40550e1d05b4f8e61 @@ -1,13 +1,5 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } - } - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/a8f004bdfb728931d4ef98fb3e581afe b/bundle/snapshots/a8f004bdfb728931d4ef98fb3e581afe index 40da83b1..d29b3d28 100644 --- a/bundle/snapshots/a8f004bdfb728931d4ef98fb3e581afe +++ b/bundle/snapshots/a8f004bdfb728931d4ef98fb3e581afe @@ -1,31 +1,39 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/tree": { - "errors": { - "https://test.json-schema.org/tree#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/tree#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/tree/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/tree": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/tree/leaf": { - "errors": {}, - "annotations": {} - }, - "#/tree/branch": { - "errors": { - "https://test.json-schema.org/tree#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/tree#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/tree#/properties/branch/$ref": "https://json-schema.org/keyword/ref", - "https://test.json-schema.org/tree#/properties/branch": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/tree/$ref", + "instanceLocation": "#/tree", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/tree#/properties", + "instanceLocation": "#/tree", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://test.json-schema.org/tree#/properties/branch/$ref", + "instanceLocation": "#/tree/branch", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/tree#/type", + "instanceLocation": "#/tree/branch" + } + ] + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/a90584694ed77c3c92df6cd3eb2f33f3 b/bundle/snapshots/a90584694ed77c3c92df6cd3eb2f33f3 index 28cd6ddc..60476c9e 100644 --- a/bundle/snapshots/a90584694ed77c3c92df6cd3eb2f33f3 +++ b/bundle/snapshots/a90584694ed77c3c92df6cd3eb2f33f3 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/additionalProperties": "https://json-schema.org/keyword/additionalProperties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/additionalProperties/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/additionalProperties": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/additionalProperties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/additionalProperties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/additionalProperties/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/a9d4bc6419c3955f9d42a176452b9d32 b/bundle/snapshots/a9d4bc6419c3955f9d42a176452b9d32 index a7138e86..bb96913a 100644 --- a/bundle/snapshots/a9d4bc6419c3955f9d42a176452b9d32 +++ b/bundle/snapshots/a9d4bc6419c3955f9d42a176452b9d32 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/aa0a0aed0c2fcea342e956346e0ecc0a b/bundle/snapshots/aa0a0aed0c2fcea342e956346e0ecc0a index 1d0ff209..d13d819a 100644 --- a/bundle/snapshots/aa0a0aed0c2fcea342e956346e0ecc0a +++ b/bundle/snapshots/aa0a0aed0c2fcea342e956346e0ecc0a @@ -1,18 +1,25 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foo#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foo#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://test.json-schema.org/string#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/aa594ba1f60117f136d165089ee87318 b/bundle/snapshots/aa594ba1f60117f136d165089ee87318 index 1d76dece..37301b68 100644 --- a/bundle/snapshots/aa594ba1f60117f136d165089ee87318 +++ b/bundle/snapshots/aa594ba1f60117f136d165089ee87318 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/aabb0f472eda564a689ebcb62227cefd b/bundle/snapshots/aabb0f472eda564a689ebcb62227cefd index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/aabb0f472eda564a689ebcb62227cefd +++ b/bundle/snapshots/aabb0f472eda564a689ebcb62227cefd @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/ab16c3e46683501268ba03cbf4cd96d9 b/bundle/snapshots/ab16c3e46683501268ba03cbf4cd96d9 index eb71647c..a36a5ea5 100644 --- a/bundle/snapshots/ab16c3e46683501268ba03cbf4cd96d9 +++ b/bundle/snapshots/ab16c3e46683501268ba03cbf4cd96d9 @@ -1,20 +1,32 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foo#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foo#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/foobar#/allOf": "https://json-schema.org/keyword/allOf", - "https://test.json-schema.org/foobar#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://test.json-schema.org/string#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://test.json-schema.org/foobar#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/ab51f0cdf303246217f87ce8de260742 b/bundle/snapshots/ab51f0cdf303246217f87ce8de260742 index 7fbab9f1..af1a8c44 100644 --- a/bundle/snapshots/ab51f0cdf303246217f87ce8de260742 +++ b/bundle/snapshots/ab51f0cdf303246217f87ce8de260742 @@ -1,13 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/propertyNames": "https://json-schema.org/keyword/propertyNames", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foobar": { - "errors": {}, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/propertyNames", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/propertyNames", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/maxLength", + "absoluteKeywordLocation": "https://test.json-schema.org/short-string#/maxLength", + "instanceLocation": "#*/foobar" + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/ab6680d8e66585a70b1c57cf8a13d8b6 b/bundle/snapshots/ab6680d8e66585a70b1c57cf8a13d8b6 index f6b3deda..fe10aa35 100644 --- a/bundle/snapshots/ab6680d8e66585a70b1c57cf8a13d8b6 +++ b/bundle/snapshots/ab6680d8e66585a70b1c57cf8a13d8b6 @@ -1,22 +1,18 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" + }, + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } - } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/abaacaaa6fe1fc05fa1a011f49757c5e b/bundle/snapshots/abaacaaa6fe1fc05fa1a011f49757c5e index 1d0ff209..d13d819a 100644 --- a/bundle/snapshots/abaacaaa6fe1fc05fa1a011f49757c5e +++ b/bundle/snapshots/abaacaaa6fe1fc05fa1a011f49757c5e @@ -1,18 +1,25 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foo#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foo#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://test.json-schema.org/string#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/ac4bd6c6837c9be7cbf20f2aa62d0287 b/bundle/snapshots/ac4bd6c6837c9be7cbf20f2aa62d0287 index eb71647c..a36a5ea5 100644 --- a/bundle/snapshots/ac4bd6c6837c9be7cbf20f2aa62d0287 +++ b/bundle/snapshots/ac4bd6c6837c9be7cbf20f2aa62d0287 @@ -1,20 +1,32 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foo#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foo#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/foobar#/allOf": "https://json-schema.org/keyword/allOf", - "https://test.json-schema.org/foobar#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://test.json-schema.org/string#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://test.json-schema.org/foobar#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/ad33cb560813c2806ea52ca22be9615f b/bundle/snapshots/ad33cb560813c2806ea52ca22be9615f index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/ad33cb560813c2806ea52ca22be9615f +++ b/bundle/snapshots/ad33cb560813c2806ea52ca22be9615f @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/aedbee8ad8addf69cd8472bc14456020 b/bundle/snapshots/aedbee8ad8addf69cd8472bc14456020 index 28cd6ddc..60476c9e 100644 --- a/bundle/snapshots/aedbee8ad8addf69cd8472bc14456020 +++ b/bundle/snapshots/aedbee8ad8addf69cd8472bc14456020 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/additionalProperties": "https://json-schema.org/keyword/additionalProperties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/additionalProperties/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/additionalProperties": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/additionalProperties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/additionalProperties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/additionalProperties/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/af8674b9aa39f1247c2e84e529a0bb09 b/bundle/snapshots/af8674b9aa39f1247c2e84e529a0bb09 index 5d2dcfeb..ae696782 100644 --- a/bundle/snapshots/af8674b9aa39f1247c2e84e529a0bb09 +++ b/bundle/snapshots/af8674b9aa39f1247c2e84e529a0bb09 @@ -1,10 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/afa090734d8e0950e64e3edb3b917f7b b/bundle/snapshots/afa090734d8e0950e64e3edb3b917f7b index c492b31f..f1a63aba 100644 --- a/bundle/snapshots/afa090734d8e0950e64e3edb3b917f7b +++ b/bundle/snapshots/afa090734d8e0950e64e3edb3b917f7b @@ -1,24 +1,32 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/$defs/string/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/$defs/string": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/$defs/string/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/afca16bc3569dd90d68489a24733cc12 b/bundle/snapshots/afca16bc3569dd90d68489a24733cc12 index 65f7b5dd..c37a8d82 100644 --- a/bundle/snapshots/afca16bc3569dd90d68489a24733cc12 +++ b/bundle/snapshots/afca16bc3569dd90d68489a24733cc12 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/items": "https://json-schema.org/keyword/draft-04/items", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/draft-04/items", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/items", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/0" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/b17370712f909f37a5634e252a0966cf b/bundle/snapshots/b17370712f909f37a5634e252a0966cf index a2db3b62..23853d65 100644 --- a/bundle/snapshots/b17370712f909f37a5634e252a0966cf +++ b/bundle/snapshots/b17370712f909f37a5634e252a0966cf @@ -1,25 +1,32 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://test.json-schema.org/tuple#/items": "https://json-schema.org/keyword/draft-04/items", - "https://test.json-schema.org/tuple#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo/0": { - "errors": { - "https://test.json-schema.org/tuple#/items/0/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/tuple#/items/0": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/draft-04/items", + "absoluteKeywordLocation": "https://test.json-schema.org/tuple#/items", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/tuple#/items/0/type", + "instanceLocation": "#/foo/0" + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/b22b655de44d97ef175d20dd4ea8a1d6 b/bundle/snapshots/b22b655de44d97ef175d20dd4ea8a1d6 index 08e064ba..ae696782 100644 --- a/bundle/snapshots/b22b655de44d97ef175d20dd4ea8a1d6 +++ b/bundle/snapshots/b22b655de44d97ef175d20dd4ea8a1d6 @@ -1,6 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/b2351c12e1ff2aeba775d10a8b72f47c b/bundle/snapshots/b2351c12e1ff2aeba775d10a8b72f47c index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/b2351c12e1ff2aeba775d10a8b72f47c +++ b/bundle/snapshots/b2351c12e1ff2aeba775d10a8b72f47c @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/b27bf02bb79fd9e56e796e7b28fd85e7 b/bundle/snapshots/b27bf02bb79fd9e56e796e7b28fd85e7 index fee53123..a434102c 100644 --- a/bundle/snapshots/b27bf02bb79fd9e56e796e7b28fd85e7 +++ b/bundle/snapshots/b27bf02bb79fd9e56e796e7b28fd85e7 @@ -1,9 +1,11 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/type", + "instanceLocation": "#" + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/b3385214d199789cf32f79fe3ab32ec8 b/bundle/snapshots/b3385214d199789cf32f79fe3ab32ec8 index ad5e1549..3b6cc0ed 100644 --- a/bundle/snapshots/b3385214d199789cf32f79fe3ab32ec8 +++ b/bundle/snapshots/b3385214d199789cf32f79fe3ab32ec8 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/bar/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/bar": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/b49beb308c2fbc7f119a5b577643e971 b/bundle/snapshots/b49beb308c2fbc7f119a5b577643e971 index 2ca0f02a..536bb4c5 100644 --- a/bundle/snapshots/b49beb308c2fbc7f119a5b577643e971 +++ b/bundle/snapshots/b49beb308c2fbc7f119a5b577643e971 @@ -1,28 +1,32 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/dependentSchemas/foo/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#/dependentSchemas/foo": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/dependentSchemas": "https://json-schema.org/keyword/dependentSchemas", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/dependentSchemas/foo/properties/bar/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/dependentSchemas/foo/properties/bar": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/dependentSchemas", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/dependentSchemas", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/dependentSchemas/foo/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/dependentSchemas/foo/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/bar" + } + ] + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/b4b1ef9324f3a148a6b4011bf1b4a506 b/bundle/snapshots/b4b1ef9324f3a148a6b4011bf1b4a506 index ecd020ed..6a230992 100644 --- a/bundle/snapshots/b4b1ef9324f3a148a6b4011bf1b4a506 +++ b/bundle/snapshots/b4b1ef9324f3a148a6b4011bf1b4a506 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/0", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/b4b4e763abddc958fb3f5e8af1c8eade b/bundle/snapshots/b4b4e763abddc958fb3f5e8af1c8eade index 1fa46623..ae696782 100644 --- a/bundle/snapshots/b4b4e763abddc958fb3f5e8af1c8eade +++ b/bundle/snapshots/b4b4e763abddc958fb3f5e8af1c8eade @@ -1,14 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/b4fe30347745da383dfd315ab1d6db4c b/bundle/snapshots/b4fe30347745da383dfd315ab1d6db4c index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/b4fe30347745da383dfd315ab1d6db4c +++ b/bundle/snapshots/b4fe30347745da383dfd315ab1d6db4c @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/b60562622e7fe9fdc5e3b177e9ce3c1d b/bundle/snapshots/b60562622e7fe9fdc5e3b177e9ce3c1d index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/b60562622e7fe9fdc5e3b177e9ce3c1d +++ b/bundle/snapshots/b60562622e7fe9fdc5e3b177e9ce3c1d @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/b62326334234db25ab5c9e026d673141 b/bundle/snapshots/b62326334234db25ab5c9e026d673141 index a7138e86..bb96913a 100644 --- a/bundle/snapshots/b62326334234db25ab5c9e026d673141 +++ b/bundle/snapshots/b62326334234db25ab5c9e026d673141 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/b645834450a99e98b200bf71d9028ee2 b/bundle/snapshots/b645834450a99e98b200bf71d9028ee2 index 1d76dece..37301b68 100644 --- a/bundle/snapshots/b645834450a99e98b200bf71d9028ee2 +++ b/bundle/snapshots/b645834450a99e98b200bf71d9028ee2 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/b6e79c069c4c8d03af0d6428a6e54f84 b/bundle/snapshots/b6e79c069c4c8d03af0d6428a6e54f84 index f6b3deda..fe10aa35 100644 --- a/bundle/snapshots/b6e79c069c4c8d03af0d6428a6e54f84 +++ b/bundle/snapshots/b6e79c069c4c8d03af0d6428a6e54f84 @@ -1,22 +1,18 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" + }, + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } - } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/b7377b8628b8a1223dba9f9126b69c8d b/bundle/snapshots/b7377b8628b8a1223dba9f9126b69c8d index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/b7377b8628b8a1223dba9f9126b69c8d +++ b/bundle/snapshots/b7377b8628b8a1223dba9f9126b69c8d @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/ba7bac6bfa1fc828bef2f88f76db97ba b/bundle/snapshots/ba7bac6bfa1fc828bef2f88f76db97ba index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/ba7bac6bfa1fc828bef2f88f76db97ba +++ b/bundle/snapshots/ba7bac6bfa1fc828bef2f88f76db97ba @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/bb05a7e41742256f40fbeb98db8f3c66 b/bundle/snapshots/bb05a7e41742256f40fbeb98db8f3c66 index f6b3deda..fe10aa35 100644 --- a/bundle/snapshots/bb05a7e41742256f40fbeb98db8f3c66 +++ b/bundle/snapshots/bb05a7e41742256f40fbeb98db8f3c66 @@ -1,22 +1,18 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" + }, + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } - } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/bc59d5d8465843802e6d0991434a2e69 b/bundle/snapshots/bc59d5d8465843802e6d0991434a2e69 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/bc59d5d8465843802e6d0991434a2e69 +++ b/bundle/snapshots/bc59d5d8465843802e6d0991434a2e69 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/bcda06077e3818330a0949e74f420b1c b/bundle/snapshots/bcda06077e3818330a0949e74f420b1c index 0ac23db7..17bb89bd 100644 --- a/bundle/snapshots/bcda06077e3818330a0949e74f420b1c +++ b/bundle/snapshots/bcda06077e3818330a0949e74f420b1c @@ -1,20 +1,32 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foobar#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foobar#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://test.json-schema.org/number#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/number#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/foobar#/properties/bar/$ref": "https://json-schema.org/keyword/ref", - "https://test.json-schema.org/foobar#/properties/bar": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foobar#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://test.json-schema.org/foobar#/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/number#/type", + "instanceLocation": "#/bar" + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/bd32454ebe7d406fa0c33274b38d77cc b/bundle/snapshots/bd32454ebe7d406fa0c33274b38d77cc index 0ecf8604..89f86098 100644 --- a/bundle/snapshots/bd32454ebe7d406fa0c33274b38d77cc +++ b/bundle/snapshots/bd32454ebe7d406fa0c33274b38d77cc @@ -1,17 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/oneOf/0/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/oneOf/0": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/oneOf": "https://json-schema.org/keyword/oneOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/oneOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/oneOf/0/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/bf1eee446b935f8dc62dfdd9ea492630 b/bundle/snapshots/bf1eee446b935f8dc62dfdd9ea492630 index a5dec88f..b50f59bf 100644 --- a/bundle/snapshots/bf1eee446b935f8dc62dfdd9ea492630 +++ b/bundle/snapshots/bf1eee446b935f8dc62dfdd9ea492630 @@ -1,20 +1,32 @@ { - "#": { - "errors": { - "https://test.json-schema.org/list#/items": "https://json-schema.org/keyword/items", - "https://test.json-schema.org/list#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/main#/$defs/element/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/main#/$defs/element": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/list#/items/$dynamicRef": "https://json-schema.org/keyword/draft-2020-12/dynamicRef", - "https://test.json-schema.org/list#/items": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/items", + "absoluteKeywordLocation": "https://test.json-schema.org/list#/items", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/draft-2020-12/dynamicRef", + "absoluteKeywordLocation": "https://test.json-schema.org/list#/items/$dynamicRef", + "instanceLocation": "#/0", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/$defs/element/type", + "instanceLocation": "#/0" + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/c008f39e63090dabbe08020cf8d8dd46 b/bundle/snapshots/c008f39e63090dabbe08020cf8d8dd46 index 5d2dcfeb..ae696782 100644 --- a/bundle/snapshots/c008f39e63090dabbe08020cf8d8dd46 +++ b/bundle/snapshots/c008f39e63090dabbe08020cf8d8dd46 @@ -1,10 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/c0214836ff6291b6c79b285d44c6e28d b/bundle/snapshots/c0214836ff6291b6c79b285d44c6e28d index ecd020ed..6a230992 100644 --- a/bundle/snapshots/c0214836ff6291b6c79b285d44c6e28d +++ b/bundle/snapshots/c0214836ff6291b6c79b285d44c6e28d @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/0", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/c0332fa29559fa9f027c2590e4178f98 b/bundle/snapshots/c0332fa29559fa9f027c2590e4178f98 index 9bfeabdc..c91aba64 100644 --- a/bundle/snapshots/c0332fa29559fa9f027c2590e4178f98 +++ b/bundle/snapshots/c0332fa29559fa9f027c2590e4178f98 @@ -1,13 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/if": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/short-string#/maxLength": "https://json-schema.org/keyword/maxLength", - "https://test.json-schema.org/short-string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/else/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/else": "https://json-schema.org/keyword/else", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/else", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/else", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/else/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/maxLength", + "absoluteKeywordLocation": "https://test.json-schema.org/short-string#/maxLength", + "instanceLocation": "#" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/c1201e586f9a602a5239f1b86ffe8e07 b/bundle/snapshots/c1201e586f9a602a5239f1b86ffe8e07 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/c1201e586f9a602a5239f1b86ffe8e07 +++ b/bundle/snapshots/c1201e586f9a602a5239f1b86ffe8e07 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/c13c6d3ec550add3c9198ee10f745274 b/bundle/snapshots/c13c6d3ec550add3c9198ee10f745274 index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/c13c6d3ec550add3c9198ee10f745274 +++ b/bundle/snapshots/c13c6d3ec550add3c9198ee10f745274 @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/c26ca442e0696b06b53a6c155ec67eb0 b/bundle/snapshots/c26ca442e0696b06b53a6c155ec67eb0 index 5b8cca74..ae696782 100644 --- a/bundle/snapshots/c26ca442e0696b06b53a6c155ec67eb0 +++ b/bundle/snapshots/c26ca442e0696b06b53a6c155ec67eb0 @@ -1,13 +1,5 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/if": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } - } - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/c3451b13501ff3b224ee15977937e916 b/bundle/snapshots/c3451b13501ff3b224ee15977937e916 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/c3451b13501ff3b224ee15977937e916 +++ b/bundle/snapshots/c3451b13501ff3b224ee15977937e916 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/c35cfac1885964922e77c23599754063 b/bundle/snapshots/c35cfac1885964922e77c23599754063 index fc96902e..e6d09c7d 100644 --- a/bundle/snapshots/c35cfac1885964922e77c23599754063 +++ b/bundle/snapshots/c35cfac1885964922e77c23599754063 @@ -1,18 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/c38b0c2862655f5254c6d38ac0356a40 b/bundle/snapshots/c38b0c2862655f5254c6d38ac0356a40 index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/c38b0c2862655f5254c6d38ac0356a40 +++ b/bundle/snapshots/c38b0c2862655f5254c6d38ac0356a40 @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/c58925536db79e6065161661cd4f34d8 b/bundle/snapshots/c58925536db79e6065161661cd4f34d8 index 1d76dece..37301b68 100644 --- a/bundle/snapshots/c58925536db79e6065161661cd4f34d8 +++ b/bundle/snapshots/c58925536db79e6065161661cd4f34d8 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/c6605616702fffa5a9fa340ce154d937 b/bundle/snapshots/c6605616702fffa5a9fa340ce154d937 index 885c871a..5ef007e1 100644 --- a/bundle/snapshots/c6605616702fffa5a9fa340ce154d937 +++ b/bundle/snapshots/c6605616702fffa5a9fa340ce154d937 @@ -1,17 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/anyOf/0/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/anyOf/0": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/anyOf": "https://json-schema.org/keyword/anyOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/anyOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/anyOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/anyOf/0/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/c6d06fb320d6f79617d612635443d83c b/bundle/snapshots/c6d06fb320d6f79617d612635443d83c index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/c6d06fb320d6f79617d612635443d83c +++ b/bundle/snapshots/c6d06fb320d6f79617d612635443d83c @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/c870653fe1bc1d497875de24b9827a34 b/bundle/snapshots/c870653fe1bc1d497875de24b9827a34 index ecdbb38d..ae696782 100644 --- a/bundle/snapshots/c870653fe1bc1d497875de24b9827a34 +++ b/bundle/snapshots/c870653fe1bc1d497875de24b9827a34 @@ -1,15 +1,5 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/not/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/not": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } - } - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/c882c01d6cd8576e85069ad4a184b9fe b/bundle/snapshots/c882c01d6cd8576e85069ad4a184b9fe index dd7ab016..3dd8160e 100644 --- a/bundle/snapshots/c882c01d6cd8576e85069ad4a184b9fe +++ b/bundle/snapshots/c882c01d6cd8576e85069ad4a184b9fe @@ -1,17 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf/0/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/allOf/0": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf/0/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/c99370f96c34bd44766404a19c5b7e1e b/bundle/snapshots/c99370f96c34bd44766404a19c5b7e1e index a49babcc..356a1acb 100644 --- a/bundle/snapshots/c99370f96c34bd44766404a19c5b7e1e +++ b/bundle/snapshots/c99370f96c34bd44766404a19c5b7e1e @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/patternProperties": "https://json-schema.org/keyword/patternProperties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/patternProperties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/patternProperties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/c9c0a7cd631374e152a023bff8f06c19 b/bundle/snapshots/c9c0a7cd631374e152a023bff8f06c19 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/c9c0a7cd631374e152a023bff8f06c19 +++ b/bundle/snapshots/c9c0a7cd631374e152a023bff8f06c19 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/ca63dcc3736aca6a5a2f7b31dd6c7807 b/bundle/snapshots/ca63dcc3736aca6a5a2f7b31dd6c7807 index 7fbab9f1..7c0ec1d7 100644 --- a/bundle/snapshots/ca63dcc3736aca6a5a2f7b31dd6c7807 +++ b/bundle/snapshots/ca63dcc3736aca6a5a2f7b31dd6c7807 @@ -1,13 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/propertyNames": "https://json-schema.org/keyword/propertyNames", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foobar": { - "errors": {}, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/propertyNames", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/propertyNames", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/propertyNames/$ref", + "instanceLocation": "#*/foobar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/maxLength", + "absoluteKeywordLocation": "https://test.json-schema.org/short-string#/maxLength", + "instanceLocation": "#*/foobar" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/ca9452b58640e30b01a14076ec12ab07 b/bundle/snapshots/ca9452b58640e30b01a14076ec12ab07 index fc96902e..e6d09c7d 100644 --- a/bundle/snapshots/ca9452b58640e30b01a14076ec12ab07 +++ b/bundle/snapshots/ca9452b58640e30b01a14076ec12ab07 @@ -1,18 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/ca9b105131a1da20f404c934adca55c8 b/bundle/snapshots/ca9b105131a1da20f404c934adca55c8 index f6b3deda..fe10aa35 100644 --- a/bundle/snapshots/ca9b105131a1da20f404c934adca55c8 +++ b/bundle/snapshots/ca9b105131a1da20f404c934adca55c8 @@ -1,22 +1,18 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" + }, + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } - } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/caa032701b2f148bbfe5fef80ee5e0f8 b/bundle/snapshots/caa032701b2f148bbfe5fef80ee5e0f8 index a7138e86..bb96913a 100644 --- a/bundle/snapshots/caa032701b2f148bbfe5fef80ee5e0f8 +++ b/bundle/snapshots/caa032701b2f148bbfe5fef80ee5e0f8 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/cabcd717013e39952a0536e1743a6bae b/bundle/snapshots/cabcd717013e39952a0536e1743a6bae index e796134d..c9eb0753 100644 --- a/bundle/snapshots/cabcd717013e39952a0536e1743a6bae +++ b/bundle/snapshots/cabcd717013e39952a0536e1743a6bae @@ -1,13 +1,11 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/not": "https://json-schema.org/keyword/not", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/not", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/not", + "instanceLocation": "#" } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/cabef581515886b32b2c245b6821641c b/bundle/snapshots/cabef581515886b32b2c245b6821641c index ecd020ed..6a230992 100644 --- a/bundle/snapshots/cabef581515886b32b2c245b6821641c +++ b/bundle/snapshots/cabef581515886b32b2c245b6821641c @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/0", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/cafd1c9a61687416b8d79498083e7828 b/bundle/snapshots/cafd1c9a61687416b8d79498083e7828 index ad5e1549..3b6cc0ed 100644 --- a/bundle/snapshots/cafd1c9a61687416b8d79498083e7828 +++ b/bundle/snapshots/cafd1c9a61687416b8d79498083e7828 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/bar/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/bar": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/cdb0a88fdea4d3ecdb9c3d3e533363cc b/bundle/snapshots/cdb0a88fdea4d3ecdb9c3d3e533363cc index 80ec520f..46c610aa 100644 --- a/bundle/snapshots/cdb0a88fdea4d3ecdb9c3d3e533363cc +++ b/bundle/snapshots/cdb0a88fdea4d3ecdb9c3d3e533363cc @@ -1,18 +1,25 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foobar#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foobar#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://test.json-schema.org/number#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/number#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foobar#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/number#/type", + "instanceLocation": "#/bar" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/cdfca9e5b3d8afb4d0d9485648ba95b7 b/bundle/snapshots/cdfca9e5b3d8afb4d0d9485648ba95b7 index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/cdfca9e5b3d8afb4d0d9485648ba95b7 +++ b/bundle/snapshots/cdfca9e5b3d8afb4d0d9485648ba95b7 @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/ce36ff9e106c90dbb7eeaeee1f268316 b/bundle/snapshots/ce36ff9e106c90dbb7eeaeee1f268316 index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/ce36ff9e106c90dbb7eeaeee1f268316 +++ b/bundle/snapshots/ce36ff9e106c90dbb7eeaeee1f268316 @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/cf777f1ce96cfc74d92b461c4e02dc26 b/bundle/snapshots/cf777f1ce96cfc74d92b461c4e02dc26 index 6314152b..ae696782 100644 --- a/bundle/snapshots/cf777f1ce96cfc74d92b461c4e02dc26 +++ b/bundle/snapshots/cf777f1ce96cfc74d92b461c4e02dc26 @@ -1,14 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/baz": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/cf86bf9ab71128c0791c986fd734efe5 b/bundle/snapshots/cf86bf9ab71128c0791c986fd734efe5 index 22341916..72b66a8d 100644 --- a/bundle/snapshots/cf86bf9ab71128c0791c986fd734efe5 +++ b/bundle/snapshots/cf86bf9ab71128c0791c986fd734efe5 @@ -1,22 +1,39 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foo#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foo#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/foobar#/$ref": "https://json-schema.org/keyword/ref", - "https://test.json-schema.org/foobar#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://test.json-schema.org/string#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/string#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/foo#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://test.json-schema.org/foo#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://test.json-schema.org/foobar#/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/d1ec6f594b0418ae1fda1e827f208310 b/bundle/snapshots/d1ec6f594b0418ae1fda1e827f208310 index f6b3deda..fe10aa35 100644 --- a/bundle/snapshots/d1ec6f594b0418ae1fda1e827f208310 +++ b/bundle/snapshots/d1ec6f594b0418ae1fda1e827f208310 @@ -1,22 +1,18 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" + }, + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } - } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/d38405f98674cd4fd4b8862ce702ab4f b/bundle/snapshots/d38405f98674cd4fd4b8862ce702ab4f index dfc403a6..ae696782 100644 --- a/bundle/snapshots/d38405f98674cd4fd4b8862ce702ab4f +++ b/bundle/snapshots/d38405f98674cd4fd4b8862ce702ab4f @@ -1,22 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/tree": { - "errors": {}, - "annotations": {} - }, - "#/tree/leaf": { - "errors": {}, - "annotations": {} - }, - "#/tree/branch": { - "errors": {}, - "annotations": {} - }, - "#/tree/branch/leaf": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/d3979aa57647e490f961d1127c950769 b/bundle/snapshots/d3979aa57647e490f961d1127c950769 index f7866068..4ef3e985 100644 --- a/bundle/snapshots/d3979aa57647e490f961d1127c950769 +++ b/bundle/snapshots/d3979aa57647e490f961d1127c950769 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/definitions/string/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#/definitions/string": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/definitions/string/allOf", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/d423ceb9eae60cd4252d097f17c4fad9 b/bundle/snapshots/d423ceb9eae60cd4252d097f17c4fad9 index 1d76dece..37301b68 100644 --- a/bundle/snapshots/d423ceb9eae60cd4252d097f17c4fad9 +++ b/bundle/snapshots/d423ceb9eae60cd4252d097f17c4fad9 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/d429ff8a61f5b5bdc7c46348508b6214 b/bundle/snapshots/d429ff8a61f5b5bdc7c46348508b6214 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/d429ff8a61f5b5bdc7c46348508b6214 +++ b/bundle/snapshots/d429ff8a61f5b5bdc7c46348508b6214 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/d49ce8dfd404f80b630039a3eed57959 b/bundle/snapshots/d49ce8dfd404f80b630039a3eed57959 index 1d76dece..37301b68 100644 --- a/bundle/snapshots/d49ce8dfd404f80b630039a3eed57959 +++ b/bundle/snapshots/d49ce8dfd404f80b630039a3eed57959 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/d4aaa921d685bd413e4cfa71f94411b8 b/bundle/snapshots/d4aaa921d685bd413e4cfa71f94411b8 index 0ac23db7..17bb89bd 100644 --- a/bundle/snapshots/d4aaa921d685bd413e4cfa71f94411b8 +++ b/bundle/snapshots/d4aaa921d685bd413e4cfa71f94411b8 @@ -1,20 +1,32 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foobar#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foobar#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://test.json-schema.org/number#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/number#": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/foobar#/properties/bar/$ref": "https://json-schema.org/keyword/ref", - "https://test.json-schema.org/foobar#/properties/bar": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foobar#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://test.json-schema.org/foobar#/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/number#/type", + "instanceLocation": "#/bar" + } + ] + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/d655eb92d0db9fc8d684747b65cd5972 b/bundle/snapshots/d655eb92d0db9fc8d684747b65cd5972 index a7138e86..bb96913a 100644 --- a/bundle/snapshots/d655eb92d0db9fc8d684747b65cd5972 +++ b/bundle/snapshots/d655eb92d0db9fc8d684747b65cd5972 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/d6bb3621c75ec4c6e91b5c1daac3d94d b/bundle/snapshots/d6bb3621c75ec4c6e91b5c1daac3d94d index f7866068..4ef3e985 100644 --- a/bundle/snapshots/d6bb3621c75ec4c6e91b5c1daac3d94d +++ b/bundle/snapshots/d6bb3621c75ec4c6e91b5c1daac3d94d @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/definitions/string/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#/definitions/string": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/definitions/string/allOf", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/d72143df035b835bc32fac5bb557c0cc b/bundle/snapshots/d72143df035b835bc32fac5bb557c0cc index 5d2dcfeb..ae696782 100644 --- a/bundle/snapshots/d72143df035b835bc32fac5bb557c0cc +++ b/bundle/snapshots/d72143df035b835bc32fac5bb557c0cc @@ -1,10 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/d791ec0e505586d915f031f02cbaf0d7 b/bundle/snapshots/d791ec0e505586d915f031f02cbaf0d7 index ecd020ed..6a230992 100644 --- a/bundle/snapshots/d791ec0e505586d915f031f02cbaf0d7 +++ b/bundle/snapshots/d791ec0e505586d915f031f02cbaf0d7 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/0", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/d83287ce809cff873331d44c7808486d b/bundle/snapshots/d83287ce809cff873331d44c7808486d index ecd020ed..6a230992 100644 --- a/bundle/snapshots/d83287ce809cff873331d44c7808486d +++ b/bundle/snapshots/d83287ce809cff873331d44c7808486d @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/0", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/d8b04b2893d10452427f09967be07fa0 b/bundle/snapshots/d8b04b2893d10452427f09967be07fa0 index f6b3deda..fe10aa35 100644 --- a/bundle/snapshots/d8b04b2893d10452427f09967be07fa0 +++ b/bundle/snapshots/d8b04b2893d10452427f09967be07fa0 @@ -1,22 +1,18 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" + }, + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } - } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/d9f68ead0cd9d538348a550546d6c90b b/bundle/snapshots/d9f68ead0cd9d538348a550546d6c90b index ad5e1549..3b6cc0ed 100644 --- a/bundle/snapshots/d9f68ead0cd9d538348a550546d6c90b +++ b/bundle/snapshots/d9f68ead0cd9d538348a550546d6c90b @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/bar/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/bar": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/dbe0aff7883d30f1f9eaa4f1bf4d24ef b/bundle/snapshots/dbe0aff7883d30f1f9eaa4f1bf4d24ef index 9ded3dfa..989d48d3 100644 --- a/bundle/snapshots/dbe0aff7883d30f1f9eaa4f1bf4d24ef +++ b/bundle/snapshots/dbe0aff7883d30f1f9eaa4f1bf4d24ef @@ -1,26 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/dependencies/foo/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#/dependencies/foo": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/dependencies": "https://json-schema.org/keyword/draft-04/dependencies", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/draft-04/dependencies", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/dependencies", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/dependencies/foo/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/bar" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/dcaac775bde6c89d70d2ae75671301f7 b/bundle/snapshots/dcaac775bde6c89d70d2ae75671301f7 index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/dcaac775bde6c89d70d2ae75671301f7 +++ b/bundle/snapshots/dcaac775bde6c89d70d2ae75671301f7 @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/dcd9706d1348bdf7b535e8599c91985b b/bundle/snapshots/dcd9706d1348bdf7b535e8599c91985b index 65f7b5dd..c37a8d82 100644 --- a/bundle/snapshots/dcd9706d1348bdf7b535e8599c91985b +++ b/bundle/snapshots/dcd9706d1348bdf7b535e8599c91985b @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/items": "https://json-schema.org/keyword/draft-04/items", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/draft-04/items", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/items", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/0" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/dd5cca331ef1047721dee94ac88b6a62 b/bundle/snapshots/dd5cca331ef1047721dee94ac88b6a62 index 08e064ba..ae696782 100644 --- a/bundle/snapshots/dd5cca331ef1047721dee94ac88b6a62 +++ b/bundle/snapshots/dd5cca331ef1047721dee94ac88b6a62 @@ -1,6 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/ddb9f0e69a28298b274d3a97e0b82dd7 b/bundle/snapshots/ddb9f0e69a28298b274d3a97e0b82dd7 index 1d76dece..37301b68 100644 --- a/bundle/snapshots/ddb9f0e69a28298b274d3a97e0b82dd7 +++ b/bundle/snapshots/ddb9f0e69a28298b274d3a97e0b82dd7 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/df0779461daf1c98199d982f7619f395 b/bundle/snapshots/df0779461daf1c98199d982f7619f395 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/df0779461daf1c98199d982f7619f395 +++ b/bundle/snapshots/df0779461daf1c98199d982f7619f395 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/df5a22f4c0ef094f7f5d83c4d211d23b b/bundle/snapshots/df5a22f4c0ef094f7f5d83c4d211d23b index 73f29199..ae696782 100644 --- a/bundle/snapshots/df5a22f4c0ef094f7f5d83c4d211d23b +++ b/bundle/snapshots/df5a22f4c0ef094f7f5d83c4d211d23b @@ -1,13 +1,5 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } - } - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/dff71e30962f7f91ab6ce0e21dfac07e b/bundle/snapshots/dff71e30962f7f91ab6ce0e21dfac07e index 84d9ffa0..3327f727 100644 --- a/bundle/snapshots/dff71e30962f7f91ab6ce0e21dfac07e +++ b/bundle/snapshots/dff71e30962f7f91ab6ce0e21dfac07e @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/prefixItems": "https://json-schema.org/keyword/prefixItems", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/prefixItems/0/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/prefixItems/0": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/prefixItems", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/prefixItems", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/prefixItems/0/$ref", + "instanceLocation": "#/0", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/0" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/e0927eea8e952454ee1a008c2b52be7e b/bundle/snapshots/e0927eea8e952454ee1a008c2b52be7e index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/e0927eea8e952454ee1a008c2b52be7e +++ b/bundle/snapshots/e0927eea8e952454ee1a008c2b52be7e @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/e0e27b1b6ebc852d2ff7e54c764880ae b/bundle/snapshots/e0e27b1b6ebc852d2ff7e54c764880ae index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/e0e27b1b6ebc852d2ff7e54c764880ae +++ b/bundle/snapshots/e0e27b1b6ebc852d2ff7e54c764880ae @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/e10af529d538f905393cb854c431bdde b/bundle/snapshots/e10af529d538f905393cb854c431bdde index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/e10af529d538f905393cb854c431bdde +++ b/bundle/snapshots/e10af529d538f905393cb854c431bdde @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/e18a9ec9af7a87a7447cbdc6d7b29c97 b/bundle/snapshots/e18a9ec9af7a87a7447cbdc6d7b29c97 index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/e18a9ec9af7a87a7447cbdc6d7b29c97 +++ b/bundle/snapshots/e18a9ec9af7a87a7447cbdc6d7b29c97 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/e262953038466e3ecb384a7203d5afea b/bundle/snapshots/e262953038466e3ecb384a7203d5afea index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/e262953038466e3ecb384a7203d5afea +++ b/bundle/snapshots/e262953038466e3ecb384a7203d5afea @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/e35a3f6c92398728f6100e796bc47b97 b/bundle/snapshots/e35a3f6c92398728f6100e796bc47b97 index 7fbab9f1..7c0ec1d7 100644 --- a/bundle/snapshots/e35a3f6c92398728f6100e796bc47b97 +++ b/bundle/snapshots/e35a3f6c92398728f6100e796bc47b97 @@ -1,13 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/propertyNames": "https://json-schema.org/keyword/propertyNames", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foobar": { - "errors": {}, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/propertyNames", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/propertyNames", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/propertyNames/$ref", + "instanceLocation": "#*/foobar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/maxLength", + "absoluteKeywordLocation": "https://test.json-schema.org/short-string#/maxLength", + "instanceLocation": "#*/foobar" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/e432c6ffcff0a73bc94c0e2172958cbc b/bundle/snapshots/e432c6ffcff0a73bc94c0e2172958cbc index 1d76dece..37301b68 100644 --- a/bundle/snapshots/e432c6ffcff0a73bc94c0e2172958cbc +++ b/bundle/snapshots/e432c6ffcff0a73bc94c0e2172958cbc @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/e519f254c67f814e66cae870e6716027 b/bundle/snapshots/e519f254c67f814e66cae870e6716027 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/e519f254c67f814e66cae870e6716027 +++ b/bundle/snapshots/e519f254c67f814e66cae870e6716027 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/e66fdfb1ce638e361cc818449c04d005 b/bundle/snapshots/e66fdfb1ce638e361cc818449c04d005 index 9bfeabdc..c91aba64 100644 --- a/bundle/snapshots/e66fdfb1ce638e361cc818449c04d005 +++ b/bundle/snapshots/e66fdfb1ce638e361cc818449c04d005 @@ -1,13 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/if": "https://json-schema.org/evaluation/validate", - "https://test.json-schema.org/short-string#/maxLength": "https://json-schema.org/keyword/maxLength", - "https://test.json-schema.org/short-string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/else/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/else": "https://json-schema.org/keyword/else", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/else", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/else", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/else/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/maxLength", + "absoluteKeywordLocation": "https://test.json-schema.org/short-string#/maxLength", + "instanceLocation": "#" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/e7819b00500a9e7b18a09ba725025a56 b/bundle/snapshots/e7819b00500a9e7b18a09ba725025a56 index 08e064ba..ae696782 100644 --- a/bundle/snapshots/e7819b00500a9e7b18a09ba725025a56 +++ b/bundle/snapshots/e7819b00500a9e7b18a09ba725025a56 @@ -1,6 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/e7a858eadabe6443294e88d900450e1a b/bundle/snapshots/e7a858eadabe6443294e88d900450e1a index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/e7a858eadabe6443294e88d900450e1a +++ b/bundle/snapshots/e7a858eadabe6443294e88d900450e1a @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/e7fbf50469cd7d557eb80ef75fd68553 b/bundle/snapshots/e7fbf50469cd7d557eb80ef75fd68553 index ad5e1549..3b6cc0ed 100644 --- a/bundle/snapshots/e7fbf50469cd7d557eb80ef75fd68553 +++ b/bundle/snapshots/e7fbf50469cd7d557eb80ef75fd68553 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/bar/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/bar": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/e8c7875756ba37d64551cf5fba4a3fc3 b/bundle/snapshots/e8c7875756ba37d64551cf5fba4a3fc3 index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/e8c7875756ba37d64551cf5fba4a3fc3 +++ b/bundle/snapshots/e8c7875756ba37d64551cf5fba4a3fc3 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/e8d56f9e3d9452446604a0199497ee93 b/bundle/snapshots/e8d56f9e3d9452446604a0199497ee93 index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/e8d56f9e3d9452446604a0199497ee93 +++ b/bundle/snapshots/e8d56f9e3d9452446604a0199497ee93 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/ea2352cdf899bac5cce60dc463858bc1 b/bundle/snapshots/ea2352cdf899bac5cce60dc463858bc1 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/ea2352cdf899bac5cce60dc463858bc1 +++ b/bundle/snapshots/ea2352cdf899bac5cce60dc463858bc1 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/eabb0530c2ab75ed428030512d0c4106 b/bundle/snapshots/eabb0530c2ab75ed428030512d0c4106 index 54a56aa1..d2f0813e 100644 --- a/bundle/snapshots/eabb0530c2ab75ed428030512d0c4106 +++ b/bundle/snapshots/eabb0530c2ab75ed428030512d0c4106 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/items": "https://json-schema.org/keyword/draft-04/items", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/0": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/items/0/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/items/0": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/draft-04/items", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/items", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/items/0/$ref", + "instanceLocation": "#/0", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/0" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/eb604edda8343fb17d71a50b640b4ecd b/bundle/snapshots/eb604edda8343fb17d71a50b640b4ecd index a7138e86..bb96913a 100644 --- a/bundle/snapshots/eb604edda8343fb17d71a50b640b4ecd +++ b/bundle/snapshots/eb604edda8343fb17d71a50b640b4ecd @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/eb94b6c590a57596a16a7e0361ef5abb b/bundle/snapshots/eb94b6c590a57596a16a7e0361ef5abb index ecdbb38d..ae696782 100644 --- a/bundle/snapshots/eb94b6c590a57596a16a7e0361ef5abb +++ b/bundle/snapshots/eb94b6c590a57596a16a7e0361ef5abb @@ -1,15 +1,5 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/not/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/not": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } - } - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/eb9e3a2c6fb03317f6c3202fe6fc04f3 b/bundle/snapshots/eb9e3a2c6fb03317f6c3202fe6fc04f3 index 44d3f7f7..42fb2bbf 100644 --- a/bundle/snapshots/eb9e3a2c6fb03317f6c3202fe6fc04f3 +++ b/bundle/snapshots/eb9e3a2c6fb03317f6c3202fe6fc04f3 @@ -1,10 +1,12 @@ { - "#": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/ef0836c220d81fc95a69a91860ac048f b/bundle/snapshots/ef0836c220d81fc95a69a91860ac048f index a7138e86..bb96913a 100644 --- a/bundle/snapshots/ef0836c220d81fc95a69a91860ac048f +++ b/bundle/snapshots/ef0836c220d81fc95a69a91860ac048f @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/ef1f88368281d0fcc720f3b903a371ab b/bundle/snapshots/ef1f88368281d0fcc720f3b903a371ab index 16694994..40895042 100644 --- a/bundle/snapshots/ef1f88368281d0fcc720f3b903a371ab +++ b/bundle/snapshots/ef1f88368281d0fcc720f3b903a371ab @@ -1,18 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/bar", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/efb67e749f72fd7d0700399f29fee1b1 b/bundle/snapshots/efb67e749f72fd7d0700399f29fee1b1 index 500aa0cb..5dd8e7b2 100644 --- a/bundle/snapshots/efb67e749f72fd7d0700399f29fee1b1 +++ b/bundle/snapshots/efb67e749f72fd7d0700399f29fee1b1 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/f0f22908fd27214728fb0e8a0ee561eb b/bundle/snapshots/f0f22908fd27214728fb0e8a0ee561eb index 885c871a..5ef007e1 100644 --- a/bundle/snapshots/f0f22908fd27214728fb0e8a0ee561eb +++ b/bundle/snapshots/f0f22908fd27214728fb0e8a0ee561eb @@ -1,17 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/anyOf/0/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/anyOf/0": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/anyOf": "https://json-schema.org/keyword/anyOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/anyOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/anyOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/anyOf/0/$ref", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/f0f565c635e44ddb57b0c049d1b3cc60 b/bundle/snapshots/f0f565c635e44ddb57b0c049d1b3cc60 index ad5e1549..3b6cc0ed 100644 --- a/bundle/snapshots/f0f565c635e44ddb57b0c049d1b3cc60 +++ b/bundle/snapshots/f0f565c635e44ddb57b0c049d1b3cc60 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/bar/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/bar": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/f11a8fcf101803bbaefad6a90cbb589b b/bundle/snapshots/f11a8fcf101803bbaefad6a90cbb589b index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/f11a8fcf101803bbaefad6a90cbb589b +++ b/bundle/snapshots/f11a8fcf101803bbaefad6a90cbb589b @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/f1cb3140a093417545ca0dc8064b39b9 b/bundle/snapshots/f1cb3140a093417545ca0dc8064b39b9 index 1d0ff209..d13d819a 100644 --- a/bundle/snapshots/f1cb3140a093417545ca0dc8064b39b9 +++ b/bundle/snapshots/f1cb3140a093417545ca0dc8064b39b9 @@ -1,18 +1,25 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foo#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foo#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://test.json-schema.org/string#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/f1d52a5f0cf477a97747d789aa3ec636 b/bundle/snapshots/f1d52a5f0cf477a97747d789aa3ec636 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/f1d52a5f0cf477a97747d789aa3ec636 +++ b/bundle/snapshots/f1d52a5f0cf477a97747d789aa3ec636 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/f24cfd1473da309b7ba6998cb28e7eda b/bundle/snapshots/f24cfd1473da309b7ba6998cb28e7eda index f7866068..4ef3e985 100644 --- a/bundle/snapshots/f24cfd1473da309b7ba6998cb28e7eda +++ b/bundle/snapshots/f24cfd1473da309b7ba6998cb28e7eda @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/definitions/string/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#/definitions/string": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/definitions/string/allOf", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/f3924868f51b79fd1d70e5d81fd491dd b/bundle/snapshots/f3924868f51b79fd1d70e5d81fd491dd index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/f3924868f51b79fd1d70e5d81fd491dd +++ b/bundle/snapshots/f3924868f51b79fd1d70e5d81fd491dd @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/f3e0e57930508549d42b59b9e8e8d60f b/bundle/snapshots/f3e0e57930508549d42b59b9e8e8d60f index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/f3e0e57930508549d42b59b9e8e8d60f +++ b/bundle/snapshots/f3e0e57930508549d42b59b9e8e8d60f @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/f3f0d8bb8e194c2c206ee7a1638f7e60 b/bundle/snapshots/f3f0d8bb8e194c2c206ee7a1638f7e60 index fee53123..a434102c 100644 --- a/bundle/snapshots/f3f0d8bb8e194c2c206ee7a1638f7e60 +++ b/bundle/snapshots/f3f0d8bb8e194c2c206ee7a1638f7e60 @@ -1,9 +1,11 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/type", + "instanceLocation": "#" + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/f478763e34af90b0adef3ab65bd4b4c3 b/bundle/snapshots/f478763e34af90b0adef3ab65bd4b4c3 index 1d76dece..37301b68 100644 --- a/bundle/snapshots/f478763e34af90b0adef3ab65bd4b4c3 +++ b/bundle/snapshots/f478763e34af90b0adef3ab65bd4b4c3 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/f4c6697e6f589ec52ec9fd1793a59e09 b/bundle/snapshots/f4c6697e6f589ec52ec9fd1793a59e09 index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/f4c6697e6f589ec52ec9fd1793a59e09 +++ b/bundle/snapshots/f4c6697e6f589ec52ec9fd1793a59e09 @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/f4cc0472dae406d028ad3ef1c677de84 b/bundle/snapshots/f4cc0472dae406d028ad3ef1c677de84 index a7138e86..bb96913a 100644 --- a/bundle/snapshots/f4cc0472dae406d028ad3ef1c677de84 +++ b/bundle/snapshots/f4cc0472dae406d028ad3ef1c677de84 @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/bar": { - "errors": { - "https://bundler.hyperjump.io/number#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/number#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/type", + "instanceLocation": "#/bar" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/f589ce118d41fb3bf98e4286e583c2a3 b/bundle/snapshots/f589ce118d41fb3bf98e4286e583c2a3 index 1d76dece..37301b68 100644 --- a/bundle/snapshots/f589ce118d41fb3bf98e4286e583c2a3 +++ b/bundle/snapshots/f589ce118d41fb3bf98e4286e583c2a3 @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/properties": "https://json-schema.org/keyword/properties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/properties/foo/$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/properties/foo": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/f63f35706381fef03036110d550cfed5 b/bundle/snapshots/f63f35706381fef03036110d550cfed5 index 1d0ff209..d13d819a 100644 --- a/bundle/snapshots/f63f35706381fef03036110d550cfed5 +++ b/bundle/snapshots/f63f35706381fef03036110d550cfed5 @@ -1,18 +1,25 @@ { - "#": { - "errors": { - "https://test.json-schema.org/foo#/properties": "https://json-schema.org/keyword/properties", - "https://test.json-schema.org/foo#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/allOf": "https://json-schema.org/keyword/allOf", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://test.json-schema.org/string#/type": "https://json-schema.org/keyword/type", - "https://test.json-schema.org/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/allOf", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/allOf", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/properties", + "absoluteKeywordLocation": "https://test.json-schema.org/foo#/properties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://test.json-schema.org/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/f67a9dc422577f0eb747c04d60584dea b/bundle/snapshots/f67a9dc422577f0eb747c04d60584dea index 84eb7caa..5e367641 100644 --- a/bundle/snapshots/f67a9dc422577f0eb747c04d60584dea +++ b/bundle/snapshots/f67a9dc422577f0eb747c04d60584dea @@ -1,22 +1,25 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/patternProperties": "https://json-schema.org/keyword/patternProperties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate", - "https://bundler.hyperjump.io/main#/patternProperties//$ref": "https://json-schema.org/keyword/ref", - "https://bundler.hyperjump.io/main#/patternProperties/": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/patternProperties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/patternProperties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/ref", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/patternProperties//$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/f70d11826ecd66006b358de0024c957b b/bundle/snapshots/f70d11826ecd66006b358de0024c957b index d937ccf1..8cc085d6 100644 --- a/bundle/snapshots/f70d11826ecd66006b358de0024c957b +++ b/bundle/snapshots/f70d11826ecd66006b358de0024c957b @@ -1,20 +1,18 @@ { - "#": { - "errors": { - "https://bundler.hyperjump.io/main#/additionalProperties": "https://json-schema.org/keyword/additionalProperties", - "https://bundler.hyperjump.io/main#": "https://json-schema.org/evaluation/validate" - }, - "annotations": {} - }, - "#/foo": { - "errors": { - "https://bundler.hyperjump.io/string#/type": "https://json-schema.org/keyword/type", - "https://bundler.hyperjump.io/string#": "https://json-schema.org/evaluation/validate" - }, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": false, + "errors": [ + { + "keyword": "https://json-schema.org/keyword/additionalProperties", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/main#/additionalProperties", + "instanceLocation": "#", + "errors": [ + { + "keyword": "https://json-schema.org/keyword/type", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/type", + "instanceLocation": "#/foo" + } + ] } - } + ], + "annotations": [] } \ No newline at end of file diff --git a/bundle/snapshots/f8fefeddfe23e1ebaad7631687f2812e b/bundle/snapshots/f8fefeddfe23e1ebaad7631687f2812e index f6b3deda..fe10aa35 100644 --- a/bundle/snapshots/f8fefeddfe23e1ebaad7631687f2812e +++ b/bundle/snapshots/f8fefeddfe23e1ebaad7631687f2812e @@ -1,22 +1,18 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" + }, + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } - } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/f9d0ba32e21e9b95e9354a8abd27a216 b/bundle/snapshots/f9d0ba32e21e9b95e9354a8abd27a216 index fc96902e..e6d09c7d 100644 --- a/bundle/snapshots/f9d0ba32e21e9b95e9354a8abd27a216 +++ b/bundle/snapshots/f9d0ba32e21e9b95e9354a8abd27a216 @@ -1,18 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": {} - }, - "#/bar": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/number#": "Number" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/number#/title", + "instanceLocation": "#/bar", + "annotation": "Number" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/fa45239d4aa24a77460d3c610bf01eba b/bundle/snapshots/fa45239d4aa24a77460d3c610bf01eba index f8bcd0f5..ecc3c45a 100644 --- a/bundle/snapshots/fa45239d4aa24a77460d3c610bf01eba +++ b/bundle/snapshots/fa45239d4aa24a77460d3c610bf01eba @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/foo": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/foo", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/fb0a093c36fe1f1256ec410fa8fe94ad b/bundle/snapshots/fb0a093c36fe1f1256ec410fa8fe94ad index ecd020ed..6a230992 100644 --- a/bundle/snapshots/fb0a093c36fe1f1256ec410fa8fe94ad +++ b/bundle/snapshots/fb0a093c36fe1f1256ec410fa8fe94ad @@ -1,14 +1,12 @@ { - "#": { - "errors": {}, - "annotations": {} - }, - "#/0": { - "errors": {}, - "annotations": { - "https://json-schema.org/keyword/title": { - "https://bundler.hyperjump.io/string#": "String" - } + "valid": true, + "errors": [], + "annotations": [ + { + "keyword": "https://json-schema.org/keyword/title", + "absoluteKeywordLocation": "https://bundler.hyperjump.io/string#/title", + "instanceLocation": "#/0", + "annotation": "String" } - } + ] } \ No newline at end of file diff --git a/bundle/snapshots/ffa03141986d3883b34f4a27356e5fa4 b/bundle/snapshots/ffa03141986d3883b34f4a27356e5fa4 index 08e064ba..ae696782 100644 --- a/bundle/snapshots/ffa03141986d3883b34f4a27356e5fa4 +++ b/bundle/snapshots/ffa03141986d3883b34f4a27356e5fa4 @@ -1,6 +1,5 @@ { - "#": { - "errors": {}, - "annotations": {} - } + "valid": true, + "errors": [], + "annotations": [] } \ No newline at end of file diff --git a/bundle/test-suite.spec.ts b/bundle/test-suite.spec.ts index 3ae2f6d0..3b3199d1 100644 --- a/bundle/test-suite.spec.ts +++ b/bundle/test-suite.spec.ts @@ -1,8 +1,15 @@ import { readFile } from "node:fs/promises"; import { describe, it, expect, beforeAll, afterAll } from "vitest"; -import { isCompatible, md5, loadSchemas, unloadSchemas, toOutput, testSuite } from "./test-utils.js"; +import { isCompatible, md5, loadSchemas, unloadSchemas, testSuite } from "./test-utils.js"; import { registerSchema, unregisterSchema } from "../lib/index.js"; -import { compile, getKeywordName, getSchema, interpret } from "../lib/experimental.js"; +import { + AnnotationsPlugin, + compile, + DetailedOutputPlugin, + getKeywordName, + getSchema, + Validation +} from "../lib/experimental.js"; import * as Instance from "../lib/instance.js"; import "../stable/index.js"; import "../draft-2020-12/index.js"; @@ -14,6 +21,7 @@ import { bundle, URI, UUID } from "./index.js"; import type { BundleOptions } from "./index.js"; import type { OutputUnit } from "../lib/index.js"; +import type { ValidationContext } from "../lib/experimental.js"; const suite = testSuite("./bundle/tests"); @@ -40,9 +48,7 @@ const testRunner = (version: number, dialect: string) => { loadSchemas(testCase, mainSchemaUri, dialect); const bundledSchema = await bundle(mainSchemaUri, options); - if (!bundledSchema[definitionsToken]) { - bundledSchema[definitionsToken] = {}; - } + bundledSchema[definitionsToken] ??= {}; unloadSchemas(testCase, mainSchemaUri, dialect); @@ -57,10 +63,22 @@ const testRunner = (version: number, dialect: string) => { testCase.tests.forEach((test, testIndex) => { it(test.description, async () => { const schema = await getSchema(mainSchemaUri); - const compiledSchema = await compile(schema); + const { ast, schemaUri } = await compile(schema); + + const annotationsPlugin = new AnnotationsPlugin(); + const detailedOutputPlugin = new DetailedOutputPlugin(); const instance = Instance.fromJs(test.instance); - interpret(compiledSchema, instance); - const output = toOutput(instance); + const context: ValidationContext = { + ast, + plugins: [detailedOutputPlugin, annotationsPlugin, ...ast.plugins] + }; + const valid = Validation.interpret(schemaUri, instance, context); + + const output = { + valid, + errors: detailedOutputPlugin.errors, + annotations: annotationsPlugin.annotations + }; const testId = md5(`${version}|${dialect}|${testCase.description}|${testIndex}`); const expectedOutputJson = await readFile(`./bundle/snapshots/${testId}`, "utf-8"); diff --git a/bundle/test-utils.js b/bundle/test-utils.js index fd0eb2a5..a54c0a39 100644 --- a/bundle/test-utils.js +++ b/bundle/test-utils.js @@ -3,7 +3,6 @@ import { readFileSync, readdirSync } from "node:fs"; import { basename, relative } from "node:path"; import { getKeywordName } from "../lib/keywords.js"; import { registerSchema, unregisterSchema } from "../lib/index.js"; -import * as Instance from "../lib/instance.js"; export const testSuite = (path) => { @@ -102,15 +101,3 @@ export const unloadSchemas = (testCase, retrievalUri) => { unregisterSchema(retrievalUri || testCase.externalSchemas[retrievalUri]?.$id || testCase.externalSchemas[retrievalUri]?.id); } }; - -export const toOutput = (root) => { - const output = {}; - for (const node of Instance.allNodes(root)) { - output[Instance.uri(node)] = { - errors: node.errors, - annotations: node.annotations - }; - } - - return output; -}; diff --git a/draft-04/additionalItems.js b/draft-04/additionalItems.js index e852ef0c..da09d332 100644 --- a/draft-04/additionalItems.js +++ b/draft-04/additionalItems.js @@ -1,4 +1,4 @@ -import { pipe, drop, every } from "@hyperjump/pact"; +import { drop } from "@hyperjump/pact"; import * as Browser from "@hyperjump/browser"; import * as Instance from "../lib/instance.js"; import { getKeywordName, Validation } from "../lib/experimental.js"; @@ -14,29 +14,25 @@ const compile = async (schema, ast, parentSchema) => { return [numberOfItems, await Validation.compile(schema, ast)]; }; -const interpret = ([numberOfItems, additionalItems], instance, ast, dynamicAnchors, quiet) => { +const interpret = ([numberOfItems, additionalItems], instance, context) => { if (Instance.typeOf(instance) !== "array") { return true; } - return pipe( - Instance.iter(instance), - drop(numberOfItems), - every((item) => Validation.interpret(additionalItems, item, ast, dynamicAnchors, quiet)) - ); -}; - -const collectEvaluatedItems = (keywordValue, instance, ast, dynamicAnchors) => { - if (!interpret(keywordValue, instance, ast, dynamicAnchors, true)) { - return false; - } + let isValid = true; + let index = numberOfItems; + for (const item of drop(numberOfItems, Instance.iter(instance))) { + if (!Validation.interpret(additionalItems, item, context)) { + isValid = false; + } - const evaluatedIndexes = new Set(); - for (let ndx = keywordValue[0]; ndx < Instance.length(instance); ndx++) { - evaluatedIndexes.add(ndx); + context.evaluatedItems?.add(index); + index++; } - return evaluatedIndexes; + return isValid; }; -export default { id, compile, interpret, collectEvaluatedItems }; +const simpleApplicator = true; + +export default { id, compile, interpret, simpleApplicator }; diff --git a/draft-04/dependencies.js b/draft-04/dependencies.js index 73f8c4d8..60e96ce5 100644 --- a/draft-04/dependencies.js +++ b/draft-04/dependencies.js @@ -15,18 +15,20 @@ const compile = (schema, ast) => pipe( asyncCollectArray ); -const interpret = (dependencies, instance, ast, dynamicAnchors, quiet) => { - const value = Instance.value(instance); +const interpret = (dependencies, instance, context) => { + if (Instance.typeOf(instance) !== "object") { + return true; + } - return Instance.typeOf(instance) !== "object" || dependencies.every(([propertyName, dependency]) => { - if (!(propertyName in value)) { + return dependencies.every(([propertyName, dependency]) => { + if (!Instance.has(propertyName, instance)) { return true; } if (Array.isArray(dependency)) { - return dependency.every((key) => key in value); + return dependency.every((key) => Instance.has(key, instance)); } else { - return Validation.interpret(dependency, instance, ast, dynamicAnchors, quiet); + return Validation.interpret(dependency, instance, context); } }); }; diff --git a/draft-04/items.js b/draft-04/items.js index 5d9e366d..9d1ece4b 100644 --- a/draft-04/items.js +++ b/draft-04/items.js @@ -1,4 +1,4 @@ -import { pipe, asyncMap, asyncCollectArray, every, zip, take, range, collectSet } from "@hyperjump/pact"; +import { pipe, asyncMap, asyncCollectArray, zip } from "@hyperjump/pact"; import * as Browser from "@hyperjump/browser"; import * as Instance from "../lib/instance.js"; import { Validation } from "../lib/experimental.js"; @@ -18,26 +18,40 @@ const compile = (schema, ast) => { } }; -const interpret = (items, instance, ast, dynamicAnchors, quiet) => { +const interpret = (items, instance, context) => { if (Instance.typeOf(instance) !== "array") { return true; } + let isValid = true; + let index = 0; + if (typeof items === "string") { - return every((itemValue) => Validation.interpret(items, itemValue, ast, dynamicAnchors, quiet), Instance.iter(instance)); + for (const item of Instance.iter(instance)) { + if (!Validation.interpret(items, item, context)) { + isValid = false; + } + + context.evaluatedItems?.add(index++); + } } else { - return pipe( - zip(items, Instance.iter(instance)), - take(Instance.length(instance)), - every(([prefixItem, item]) => Validation.interpret(prefixItem, item, ast, dynamicAnchors, quiet)) - ); + for (const [tupleItem, tupleInstance] of zip(items, Instance.iter(instance))) { + if (!tupleInstance) { + break; + } + + if (!Validation.interpret(tupleItem, tupleInstance, context)) { + isValid = false; + } + + context.evaluatedItems?.add(index); + index++; + } } -}; -const collectEvaluatedItems = (items, instance, ast, dynamicAnchors) => { - return interpret(items, instance, ast, dynamicAnchors, true) && (typeof items === "string" - ? collectSet(range(0, Instance.length(instance))) - : collectSet(range(0, items.length))); + return isValid; }; -export default { id, compile, interpret, collectEvaluatedItems }; +const simpleApplicator = true; + +export default { id, compile, interpret, simpleApplicator }; diff --git a/draft-06/contains.js b/draft-06/contains.js index bb185808..628fe03e 100644 --- a/draft-06/contains.js +++ b/draft-06/contains.js @@ -7,8 +7,9 @@ const id = "https://json-schema.org/keyword/draft-06/contains"; const compile = (schema, ast) => Validation.compile(schema, ast); -const interpret = (contains, instance, ast, dynamicAnchors, quiet) => { - return Instance.typeOf(instance) !== "array" || some((item) => Validation.interpret(contains, item, ast, dynamicAnchors, quiet), Instance.iter(instance)); +const interpret = (contains, instance, context) => { + return Instance.typeOf(instance) !== "array" + || some((item) => Validation.interpret(contains, item, context), Instance.iter(instance)); }; export default { id, compile, interpret }; diff --git a/draft-06/index.d.ts b/draft-06/index.d.ts index 44d9c272..becf03fa 100644 --- a/draft-06/index.d.ts +++ b/draft-06/index.d.ts @@ -2,9 +2,10 @@ import type { Json } from "@hyperjump/json-pointer"; import type { JsonSchemaType } from "../lib/common.js"; -export type JsonSchemaDraft06 = boolean | { +export type JsonSchemaDraft06Ref = { $ref: string; -} | { +}; +export type JsonSchemaDraft06Object = { $schema?: "http://json-schema.org/draft-06/schema#"; $id?: string; title?: string; @@ -43,5 +44,6 @@ export type JsonSchemaDraft06 = boolean | { oneOf?: JsonSchemaDraft06[]; not?: JsonSchemaDraft06; }; +export type JsonSchemaDraft06 = boolean | JsonSchemaDraft06Ref | JsonSchemaDraft06Object; export * from "../lib/index.js"; diff --git a/draft-2019-09/index.d.ts b/draft-2019-09/index.d.ts index 4398e5d9..6b332238 100644 --- a/draft-2019-09/index.d.ts +++ b/draft-2019-09/index.d.ts @@ -2,7 +2,7 @@ import type { Json } from "@hyperjump/json-pointer"; import type { JsonSchemaType } from "../lib/common.js"; -export type JsonSchemaDraft201909 = boolean | { +export type JsonSchemaDraft201909Object = { $schema?: "https://json-schema.org/draft/2019-09/schema"; $id?: string; $anchor?: string; @@ -61,5 +61,6 @@ export type JsonSchemaDraft201909 = boolean | { contentEncoding?: string; contentSchema?: JsonSchemaDraft201909; }; +export type JsonSchemaDraft201909 = boolean | JsonSchemaDraft201909Object; export * from "../lib/index.js"; diff --git a/draft-2020-12/dynamicRef.js b/draft-2020-12/dynamicRef.js index 0ef4c8b2..a5f2581b 100644 --- a/draft-2020-12/dynamicRef.js +++ b/draft-2020-12/dynamicRef.js @@ -1,6 +1,6 @@ import * as Browser from "@hyperjump/browser"; import { Validation, canonicalUri } from "../lib/experimental.js"; -import { uriFragment } from "../lib/common.js"; +import { toAbsoluteUri, uriFragment } from "../lib/common.js"; const id = "https://json-schema.org/keyword/draft-2020-12/dynamicRef"; @@ -12,17 +12,27 @@ const compile = async (dynamicRef, ast) => { return [referencedSchema.document.baseUri, fragment, canonicalUri(referencedSchema)]; }; -const evaluate = (strategy, [id, fragment, ref], instance, ast, dynamicAnchors, quiet) => { - if (fragment in ast.metaData[id].dynamicAnchors) { - dynamicAnchors = { ...ast.metaData[id].dynamicAnchors, ...dynamicAnchors }; - return strategy(dynamicAnchors[fragment], instance, ast, dynamicAnchors, quiet); +const interpret = ([id, fragment, ref], instance, context) => { + if (fragment in context.ast.metaData[id].dynamicAnchors) { + context.dynamicAnchors = { ...context.ast.metaData[id].dynamicAnchors, ...context.dynamicAnchors }; + return Validation.interpret(context.dynamicAnchors[fragment], instance, context); } else { - return strategy(ref, instance, ast, dynamicAnchors, quiet); + return Validation.interpret(ref, instance, context); } }; -const interpret = (...args) => evaluate(Validation.interpret, ...args); -const collectEvaluatedProperties = (...args) => evaluate(Validation.collectEvaluatedProperties, ...args); -const collectEvaluatedItems = (...args) => evaluate(Validation.collectEvaluatedItems, ...args); +const simpleApplicator = true; -export default { id, compile, interpret, collectEvaluatedProperties, collectEvaluatedItems }; +const plugin = { + beforeSchema(url, _instance, context) { + context.dynamicAnchors = { + ...context.ast.metaData[toAbsoluteUri(url)].dynamicAnchors, + ...context.dynamicAnchors + }; + }, + beforeKeyword(_url, _instance, context, schemaContext) { + context.dynamicAnchors = schemaContext.dynamicAnchors; + } +}; + +export default { id, compile, interpret, simpleApplicator, plugin }; diff --git a/draft-2020-12/index.d.ts b/draft-2020-12/index.d.ts index 76843673..75f26f9d 100644 --- a/draft-2020-12/index.d.ts +++ b/draft-2020-12/index.d.ts @@ -2,7 +2,7 @@ import type { Json } from "@hyperjump/json-pointer"; import type { JsonSchemaType } from "../lib/common.js"; -export type JsonSchemaDraft202012 = boolean | { +export type JsonSchemaDraft202012Object = { $schema?: "https://json-schema.org/draft/2020-12/schema"; $id?: string; $anchor?: string; @@ -62,5 +62,6 @@ export type JsonSchemaDraft202012 = boolean | { contentEncoding?: string; contentSchema?: JsonSchemaDraft202012; }; +export type JsonSchemaDraft202012 = boolean | JsonSchemaDraft202012Object; export * from "../lib/index.js"; diff --git a/lib/core.js b/lib/core.js index 49168026..51785a6a 100644 --- a/lib/core.js +++ b/lib/core.js @@ -11,29 +11,51 @@ import { InvalidSchemaError } from "./invalid-schema-error.js"; import { getSchema, registerSchema, unregisterSchema as schemaUnregister } from "./schema.js"; import { getKeywordName } from "./keywords.js"; import Validation from "./keywords/validation.js"; -import { toOutputFormat } from "./output.js"; +import { BasicOutputPlugin } from "./evaluation-plugins/basic-output.js"; +import { DetailedOutputPlugin } from "./evaluation-plugins/detailed-output.js"; -export const FLAG = "FLAG", BASIC = "BASIC"; +export const FLAG = "FLAG", BASIC = "BASIC", DETAILED = "DETAILED"; setMetaSchemaOutputFormat(FLAG); -export const validate = async (url, value = undefined, outputFormat = undefined) => { +export const validate = async (url, value = undefined, options = undefined) => { const schema = await getSchema(url); const compiled = await compile(schema); - const interpretAst = (value, outputFormat) => interpret(compiled, Instance.fromJs(value), outputFormat); + const interpretAst = (value, options) => interpret(compiled, Instance.fromJs(value), options); - return value === undefined ? interpretAst : interpretAst(value, outputFormat); + return value === undefined ? interpretAst : interpretAst(value, options); }; export const compile = async (schema) => { - const ast = { metaData: {} }; + const ast = { metaData: {}, plugins: new Set() }; const schemaUri = await Validation.compile(schema, ast); return { ast, schemaUri }; }; -export const interpret = curry(({ ast, schemaUri }, instance, outputFormat = FLAG) => { - Validation.interpret(schemaUri, instance, ast, {}); - return toOutputFormat(instance, outputFormat); +export const interpret = curry(({ ast, schemaUri }, instance, options = FLAG) => { + const outputFormat = typeof options === "string" ? options : options.outputFormat ?? FLAG; + const plugins = options.plugins ?? []; + + const context = { ast, plugins: [...ast.plugins, ...plugins] }; + + let outputPlugin; + switch (outputFormat) { + case FLAG: + break; + case BASIC: + outputPlugin = new BasicOutputPlugin(); + context.plugins.push(outputPlugin); + break; + case DETAILED: + outputPlugin = new DetailedOutputPlugin(); + context.plugins.push(outputPlugin); + break; + default: + throw Error(`Unsupported output format '${outputFormat}'`); + } + + const valid = Validation.interpret(schemaUri, instance, context); + return !valid && outputPlugin ? { valid, errors: outputPlugin.errors } : { valid }; }); const metaValidators = {}; diff --git a/lib/evaluation-plugins/annotations.js b/lib/evaluation-plugins/annotations.js new file mode 100644 index 00000000..1575181b --- /dev/null +++ b/lib/evaluation-plugins/annotations.js @@ -0,0 +1,37 @@ +import * as Instance from "../instance.js"; + + +export class AnnotationsPlugin { + beforeSchema(_url, _instance, context) { + context.annotations ??= []; + context.schemaAnnotations = []; + } + + beforeKeyword(_node, _instance, context) { + context.annotations = []; + } + + afterKeyword(node, instance, context, valid, schemaContext, keyword) { + if (valid) { + const [keywordId, schemaUri, keywordValue] = node; + const annotation = keyword.annotation?.(keywordValue, instance, context); + if (annotation !== undefined) { + schemaContext.schemaAnnotations.push({ + keyword: keywordId, + absoluteKeywordLocation: schemaUri, + instanceLocation: Instance.uri(instance), + annotation: annotation + }); + } + schemaContext.schemaAnnotations.push(...context.annotations); + } + } + + afterSchema(_schemaNode, _instanceNode, context, valid) { + if (valid) { + context.annotations.push(...context.schemaAnnotations); + } + + this.annotations = context.annotations; + } +} diff --git a/lib/evaluation-plugins/basic-output.js b/lib/evaluation-plugins/basic-output.js new file mode 100644 index 00000000..8a82e653 --- /dev/null +++ b/lib/evaluation-plugins/basic-output.js @@ -0,0 +1,39 @@ +import { Validation } from "../experimental.js"; +import * as Instance from "../instance.js"; + + +export class BasicOutputPlugin { + beforeSchema(_url, _intance, context) { + context.errors ??= []; + } + + beforeKeyword(_node, _instance, context) { + context.errors = []; + } + + afterKeyword(node, instance, context, valid, schemaContext, keyword) { + if (!valid) { + if (!keyword.simpleApplicator) { + const [keywordId, schemaUri] = node; + schemaContext.errors.push({ + keyword: keywordId, + absoluteKeywordLocation: schemaUri, + instanceLocation: Instance.uri(instance) + }); + } + schemaContext.errors.push(...context.errors); + } + } + + afterSchema(url, instance, context, valid) { + if (typeof context.ast[url] === "boolean" && !valid) { + context.errors.push({ + keyword: Validation.id, + absoluteKeywordLocation: url, + instanceLocation: Instance.uri(instance) + }); + } + + this.errors = context.errors; + } +} diff --git a/lib/evaluation-plugins/detailed-output.js b/lib/evaluation-plugins/detailed-output.js new file mode 100644 index 00000000..84f5593a --- /dev/null +++ b/lib/evaluation-plugins/detailed-output.js @@ -0,0 +1,41 @@ +import { Validation } from "../experimental.js"; +import * as Instance from "../instance.js"; + + +export class DetailedOutputPlugin { + beforeSchema(_url, _instance, context) { + context.errors ??= []; + } + + beforeKeyword(_node, _instance, context) { + context.errors = []; + } + + afterKeyword(node, instance, context, valid, schemaContext) { + if (!valid) { + const [keywordId, schemaUri] = node; + const outputUnit = { + keyword: keywordId, + absoluteKeywordLocation: schemaUri, + instanceLocation: Instance.uri(instance) + }; + + schemaContext.errors.push(outputUnit); + if (context.errors.length > 0) { + outputUnit.errors = context.errors; + } + } + } + + afterSchema(url, instance, context, valid) { + if (typeof context.ast[url] === "boolean" && !valid) { + context.errors.push({ + keyword: Validation.id, + absoluteKeywordLocation: url, + instanceLocation: Instance.uri(instance) + }); + } + + this.errors = context.errors; + } +} diff --git a/lib/experimental.d.ts b/lib/experimental.d.ts index 4c1127e3..6f5bb35e 100644 --- a/lib/experimental.d.ts +++ b/lib/experimental.d.ts @@ -18,7 +18,8 @@ export type CompiledSchema = { type AST = { metaData: Record; -} & Record[] | boolean>>; + plugins: Set; +} & Record[] | boolean>; type Node = [keywordId: string, schemaUri: string, keywordValue: A]; @@ -32,6 +33,7 @@ type Anchors = Record; // Output Formats export const BASIC: "BASIC"; +export const DETAILED: "DETAILED"; // Schema export const getSchema: (uri: string, browser?: Browser) => Promise>; @@ -64,14 +66,61 @@ export const loadDialect: (dialectId: string, dialect: Record, export const unloadDialect: (dialectId: string) => void; export const hasDialect: (dialectId: string) => boolean; -export type Keyword = { +export type Keyword = { id: string; compile: (schema: Browser, ast: AST, parentSchema: Browser) => Promise; - interpret: (compiledKeywordValue: A, instance: JsonNode, ast: AST, dynamicAnchors: Anchors, quiet: boolean, schemaLocation: string) => boolean; - collectEvaluatedProperties?: (compiledKeywordValue: A, instance: JsonNode, ast: AST, dynamicAnchors: Anchors, isTop?: boolean) => Set | false; - collectEvaluatedItems?: (compiledKeywordValue: A, instance: JsonNode, ast: AST, dynamicAnchors: Anchors, isTop?: boolean) => Set | false; - collectExternalIds?: (visited: Set, parentSchema: Browser, schema: Browser) => Promise>; - annotation?: (compiledKeywordValue: A) => B; + interpret: (compiledKeywordValue: A, instance: JsonNode, context: Context) => boolean; + simpleApplicator?: boolean; + annotation?: (compiledKeywordValue: A, instance: JsonNode) => B | undefined; + plugin?: EvaluationPlugin; +}; + +export type ValidationContext = { + ast: AST; + plugins: EvaluationPlugin[]; +}; + +// Evaluation Plugins +export type EvaluationPlugin = { + 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; + afterSchema?(url: string, instance: JsonNode, context: Context, valid: boolean): void; +}; + +export class BasicOutputPlugin implements EvaluationPlugin { + errors: OutputUnit[]; + + beforeSchema(url: string, instance: JsonNode, context: ErrorsContext): void; + beforeKeyword(keywordNode: Node, instance: JsonNode, context: ErrorsContext, schemaContext: ErrorsContext, keyword: Keyword): void; + afterKeyword(keywordNode: Node, instance: JsonNode, context: ErrorsContext, valid: boolean, schemaContext: ErrorsContext, keyword: Keyword): void; + afterSchema(url: string, instance: JsonNode, context: ErrorsContext, valid: boolean): void; +} + +export class DetailedOutputPlugin implements EvaluationPlugin { + errors: OutputUnit[]; + + beforeSchema(url: string, instance: JsonNode, context: ErrorsContext): void; + beforeKeyword(keywordNode: Node, instance: JsonNode, context: ErrorsContext, schemaContext: ErrorsContext, keyword: Keyword): void; + afterKeyword(keywordNode: Node, instance: JsonNode, context: ErrorsContext, valid: boolean, schemaContext: ErrorsContext, keyword: Keyword): void; + afterSchema(url: string, instance: JsonNode, context: ErrorsContext, valid: boolean): void; +} + +export type ErrorsContext = ValidationContext & { + errors: OutputUnit[]; +}; + +export class AnnotationsPlugin implements EvaluationPlugin { + annotations: OutputUnit[]; + + beforeSchema(url: string, instance: JsonNode, context: AnnotationsContext): void; + beforeKeyword(keywordNode: Node, instance: JsonNode, context: AnnotationsContext, schemaContext: AnnotationsContext, keyword: Keyword): void; + afterKeyword(keywordNode: Node, instance: JsonNode, context: AnnotationsContext, valid: boolean, schemaContext: AnnotationsContext, keyword: Keyword): void; + afterSchema(url: string, instance: JsonNode, context: AnnotationsContext, valid: boolean): void; +} + +export type AnnotationsContext = ValidationContext & { + annotations: OutputUnit[]; }; export const Validation: Keyword; diff --git a/lib/experimental.js b/lib/experimental.js index 6e5ef499..7e91b866 100644 --- a/lib/experimental.js +++ b/lib/experimental.js @@ -1,4 +1,4 @@ -export { compile, interpret, BASIC } from "./core.js"; +export { compile, interpret, BASIC, DETAILED } from "./core.js"; export { addKeyword, getKeyword, getKeywordByName, getKeywordName, getKeywordId, defineVocabulary, @@ -6,3 +6,6 @@ export { } from "./keywords.js"; export { getSchema, toSchema, canonicalUri, buildSchemaDocument } from "./schema.js"; export { default as Validation } from "./keywords/validation.js"; +export * from "./evaluation-plugins/basic-output.js"; +export * from "./evaluation-plugins/detailed-output.js"; +export * from "./evaluation-plugins/annotations.js"; diff --git a/lib/get-all-registered-schemas-uris.spec.ts b/lib/get-all-registered-schemas-uris.spec.ts new file mode 100644 index 00000000..1a786d7d --- /dev/null +++ b/lib/get-all-registered-schemas-uris.spec.ts @@ -0,0 +1,25 @@ +import { test, expect, describe } from "vitest"; +import { registerSchema, getAllRegisteredSchemaUris } from "../draft-07/index.js"; + + +describe("getAllRegisteredSchemaUris function", () => { + test("should return all registered schema URIs", () => { + const schemaUris = getAllRegisteredSchemaUris(); + expect(schemaUris).toEqual([ + "http://json-schema.org/draft-07/schema" + ]); + }); + + test("should return all schemas along with custom registered schemas", () => { + registerSchema({ + "$id": "http://example.com/custom-schema", + "$schema": "http://json-schema.org/draft-07/schema#" + }); + + const schemaUris = getAllRegisteredSchemaUris(); + expect(schemaUris).toEqual([ + "http://json-schema.org/draft-07/schema", + "http://example.com/custom-schema" + ]); + }); +}); diff --git a/lib/index.d.ts b/lib/index.d.ts index 9832fa62..c8d3fc99 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -1,33 +1,41 @@ import type { Json } from "@hyperjump/json-pointer"; +import type { EvaluationPlugin } from "./experimental.js"; export type SchemaFragment = string | number | boolean | null | SchemaObject | SchemaFragment[]; -export type SchemaObject = { // eslint-disable-line @typescript-eslint/consistent-indexed-object-style +export type SchemaObject = { [keyword: string]: SchemaFragment; }; export const registerSchema: (schema: SchemaObject | boolean, retrievalUri?: string, contextDialectId?: string) => void; export const unregisterSchema: (retrievalUri: string) => void; export const hasSchema: (uri: string) => boolean; +export const getAllRegisteredSchemaUris: () => string[]; /** * @deprecated since 1.7.0. Use registerSchema instead. */ export const addSchema: typeof registerSchema; +export type ValidationOptions = { + outputFormat?: OutputFormat; + plugins?: EvaluationPlugin[]; +}; + export const validate: ( - (url: string, value: Json, outputFormat?: OutputFormat) => Promise + (url: string, value: Json, options?: OutputFormat | ValidationOptions) => Promise ) & ( (url: string) => Promise ); -export type Validator = (value: Json, outputFormat?: OutputFormat) => OutputUnit; +export type Validator = (value: Json, options?: OutputFormat | ValidationOptions) => OutputUnit; export type OutputUnit = { keyword: string; absoluteKeywordLocation: string; instanceLocation: string; valid: boolean; + annotation?: unknown; errors?: OutputUnit[]; }; diff --git a/lib/index.js b/lib/index.js index 4cd5bd6e..1c1afe19 100644 --- a/lib/index.js +++ b/lib/index.js @@ -130,7 +130,7 @@ addKeyword(vocabulary); addKeyword(writeOnly); export { addSchema, unregisterSchema, validate, FLAG } from "./core.js"; -export { registerSchema, hasSchema } from "./schema.js"; +export { registerSchema, hasSchema, getAllRegisteredSchemaUris } from "./schema.js"; export { getMetaSchemaOutputFormat, setMetaSchemaOutputFormat, diff --git a/lib/instance.d.ts b/lib/instance.d.ts index 37b81acd..95c922a2 100644 --- a/lib/instance.d.ts +++ b/lib/instance.d.ts @@ -32,8 +32,6 @@ export type JsonNode = { children: JsonNode[]; parent?: JsonNode; root: JsonNode; - valid: boolean; - errors: Record; annotations: Record>; }; diff --git a/lib/instance.js b/lib/instance.js index 72a8f163..de86cdcc 100644 --- a/lib/instance.js +++ b/lib/instance.js @@ -27,7 +27,8 @@ export const fromJs = (value, uri = "", pointer = "", parent = undefined) => { objectNode.children = Object.entries(value).map((entry) => { const propertyPointer = JsonPointer.append(entry[0], pointer); const propertyNode = cons(uri, propertyPointer, undefined, "property", [], objectNode); - propertyNode.children = entry.map((property) => fromJs(property, uri, propertyPointer, propertyNode)); + propertyNode.children[0] = fromJs(entry[0], uri, "*" + propertyPointer, propertyNode); + propertyNode.children[1] = fromJs(entry[1], uri, propertyPointer, propertyNode); return propertyNode; }); return objectNode; @@ -49,8 +50,6 @@ export const cons = (baseUri, pointer, value, type, children, parent) => { type: type, children: children, parent: parent, - valid: true, - errors: {}, annotations: {} }; node.root = parent?.root ?? node; @@ -64,11 +63,19 @@ export const get = (uri, instance) => { throw Error(`Reference '${uri}' is not local to '${instance.baseUri}'`); } - const pointer = uriFragment(uri); - return reduce((node, segment) => { + let isPropertyNamePointer = false; + let pointer = uriFragment(uri); + if (pointer.startsWith("*")) { + pointer = pointer.slice(1); + isPropertyNamePointer = true; + } + + const result = reduce((node, segment) => { segment = segment === "-" && typeOf(node) === "array" ? length(node) : segment; return step(segment, node); }, instance.root, JsonPointer.pointerSegments(pointer)); + + return isPropertyNamePointer ? result.parent.children[0] : result; }; export const uri = (node) => `${node.baseUri}#${encodeURI(node.pointer)}`; diff --git a/lib/keywords.js b/lib/keywords.js index 18c73e4f..59bcac97 100644 --- a/lib/keywords.js +++ b/lib/keywords.js @@ -35,17 +35,19 @@ export const defineVocabulary = (id, keywords) => { }; const _dialects = {}; -const _allowUnknownKeywords = {}; -const _persistentDialects = {}; -export const getKeywordId = (keyword, dialectId) => getDialect(dialectId)?.[keyword] - || (_allowUnknownKeywords[dialectId] || keyword.startsWith("x-")) - && `https://json-schema.org/keyword/unknown#${keyword}`; +export const getKeywordId = (keyword, dialectId) => { + const dialect = getDialect(dialectId); + return dialect.keywords[keyword] + ?? ((dialect.allowUnknownKeywords || keyword.startsWith("x-")) + ? `https://json-schema.org/keyword/unknown#${keyword}` + : undefined); +}; export const getKeywordName = (dialectId, keywordId) => { const dialect = getDialect(dialectId); - for (const keyword in dialect) { - if (dialect[keyword] === keywordId) { + for (const keyword in dialect.keywords) { + if (dialect.keywords[keyword] === keywordId) { return keyword; } } @@ -62,33 +64,31 @@ const getDialect = (dialectId) => { export const hasDialect = (dialectId) => dialectId in _dialects; export const loadDialect = (dialectId, dialect, allowUnknownKeywords = false, isPersistent = true) => { - _allowUnknownKeywords[dialectId] = allowUnknownKeywords; - _persistentDialects[dialectId] = _persistentDialects[dialectId] || isPersistent; - - _dialects[dialectId] = {}; - Object.entries(dialect) - .forEach(([vocabularyId, isRequired]) => { - if (vocabularyId in _vocabularies) { - Object.entries(_vocabularies[vocabularyId]) - .forEach(([keyword, keywordId]) => { - if (!(keywordId in _keywords) && !isRequired) { - // Allow keyword to be ignored - keywordId = `https://json-schema.org/keyword/unknown#${keyword}`; - } - _dialects[dialectId][keyword] = keywordId; - }); - } else if (!allowUnknownKeywords || isRequired) { - delete _dialects[dialectId]; - delete _allowUnknownKeywords[dialectId]; - delete _persistentDialects[dialectId]; - throw Error(`Unrecognized vocabulary: ${vocabularyId}. You can define this vocabulary with the 'defineVocabulary' function.`); + _dialects[dialectId] = { + keywords: {}, + allowUnknownKeywords: allowUnknownKeywords, + persistentDialects: _dialects[dialectId]?.persistentDialects || isPersistent + }; + + for (const vocabularyId in dialect) { + if (vocabularyId in _vocabularies) { + for (const keyword in _vocabularies[vocabularyId]) { + let keywordId = _vocabularies[vocabularyId][keyword]; + if (!(keywordId in _keywords) && !dialect[vocabularyId]) { + // Allow keyword to be ignored + keywordId = `https://json-schema.org/keyword/unknown#${keyword}`; + } + _dialects[dialectId].keywords[keyword] = keywordId; } - }); + } else if (!allowUnknownKeywords || dialect[vocabularyId]) { + delete _dialects[dialectId]; + throw Error(`Unrecognized vocabulary: ${vocabularyId}. You can define this vocabulary with the 'defineVocabulary' function.`); + } + } }; export const unloadDialect = (dialectId) => { - if (!_persistentDialects[dialectId]) { - delete _allowUnknownKeywords[dialectId]; + if (!_dialects[dialectId]?.persistentDialects) { delete _dialects[dialectId]; } }; diff --git a/lib/keywords/additionalProperties.js b/lib/keywords/additionalProperties.js index f42a6096..b937eebf 100644 --- a/lib/keywords/additionalProperties.js +++ b/lib/keywords/additionalProperties.js @@ -31,7 +31,7 @@ const regexEscape = (string) => string .replace(/[|\\{}()[\]^$+*?.]/g, "\\$&") .replace(/-/g, "\\x2d"); -const interpret = ([isDefinedProperty, additionalProperties], instance, ast, dynamicAnchors, quiet) => { +const interpret = ([isDefinedProperty, additionalProperties], instance, context) => { if (Instance.typeOf(instance) !== "object") { return true; } @@ -39,32 +39,20 @@ const interpret = ([isDefinedProperty, additionalProperties], instance, ast, dyn let isValid = true; for (const [propertyNameNode, property] of Instance.entries(instance)) { const propertyName = Instance.value(propertyNameNode); - if (!isDefinedProperty.test(propertyName) && !Validation.interpret(additionalProperties, property, ast, dynamicAnchors, quiet)) { + if (isDefinedProperty.test(propertyName)) { + continue; + } + + if (!Validation.interpret(additionalProperties, property, context)) { isValid = false; } + + context.evaluatedProperties?.add(propertyName); } return isValid; }; -const collectEvaluatedProperties = ([isDefinedProperty, additionalProperties], instance, ast, dynamicAnchors) => { - if (Instance.typeOf(instance) !== "object") { - return true; - } - - const evaluatedPropertyNames = new Set(); - for (const [propertyNameNode, property] of Instance.entries(instance)) { - const propertyName = Instance.value(propertyNameNode); - if (!isDefinedProperty.test(propertyName)) { - if (!Validation.interpret(additionalProperties, property, ast, dynamicAnchors, true)) { - return false; - } - - evaluatedPropertyNames.add(propertyName); - } - } - - return evaluatedPropertyNames; -}; +const simpleApplicator = true; -export default { id, compile, interpret, collectEvaluatedProperties }; +export default { id, compile, interpret, simpleApplicator }; diff --git a/lib/keywords/allOf.js b/lib/keywords/allOf.js index c1170024..fd565a5f 100644 --- a/lib/keywords/allOf.js +++ b/lib/keywords/allOf.js @@ -21,32 +21,6 @@ const interpret = (allOf, instance, ast, dynamicAnchors, quiet) => { return isValid; }; -const collectEvaluatedProperties = (allOf, instance, ast, dynamicAnchors) => { - const evaluatedPropertyNames = new Set(); - for (const schemaUrl of allOf) { - const propertyNames = Validation.collectEvaluatedProperties(schemaUrl, instance, ast, dynamicAnchors); - if (!propertyNames) { - return false; - } - - propertyNames.forEach(evaluatedPropertyNames.add, evaluatedPropertyNames); - } - - return evaluatedPropertyNames; -}; - -const collectEvaluatedItems = (allOf, instance, ast, dynamicAnchors) => { - const evaluatedItemIndexes = new Set(); - for (const schemaUrl of allOf) { - const itemIndexes = Validation.collectEvaluatedItems(schemaUrl, instance, ast, dynamicAnchors); - if (!itemIndexes) { - return false; - } - - itemIndexes.forEach(evaluatedItemIndexes.add, evaluatedItemIndexes); - } - - return evaluatedItemIndexes; -}; +const simpleApplicator = true; -export default { id, compile, interpret, collectEvaluatedProperties, collectEvaluatedItems }; +export default { id, compile, interpret, simpleApplicator }; diff --git a/lib/keywords/anyOf.js b/lib/keywords/anyOf.js index fc759273..0861e7dc 100644 --- a/lib/keywords/anyOf.js +++ b/lib/keywords/anyOf.js @@ -16,30 +16,4 @@ const interpret = (anyOf, instance, ast, dynamicAnchors, quiet) => { return matches.length > 0; }; -const collectEvaluatedProperties = (anyOf, instance, ast, dynamicAnchors) => { - let evaluatedPropertyNames = false; - for (const schemaUrl of anyOf) { - const propertyNames = Validation.collectEvaluatedProperties(schemaUrl, instance, ast, dynamicAnchors); - if (propertyNames) { - evaluatedPropertyNames ||= new Set(); - propertyNames.forEach(evaluatedPropertyNames.add, evaluatedPropertyNames); - } - } - - return evaluatedPropertyNames; -}; - -const collectEvaluatedItems = (anyOf, instance, ast, dynamicAnchors) => { - let evaluatedItemIndexes = false; - for (const schemaUrl of anyOf) { - const itemIndexes = Validation.collectEvaluatedItems(schemaUrl, instance, ast, dynamicAnchors); - if (itemIndexes) { - evaluatedItemIndexes ||= new Set(); - itemIndexes.forEach(evaluatedItemIndexes.add, evaluatedItemIndexes); - } - } - - return evaluatedItemIndexes; -}; - -export default { id, compile, interpret, collectEvaluatedProperties, collectEvaluatedItems }; +export default { id, compile, interpret }; diff --git a/lib/keywords/conditional.js b/lib/keywords/conditional.js index 26083e9c..57e919e2 100644 --- a/lib/keywords/conditional.js +++ b/lib/keywords/conditional.js @@ -12,45 +12,19 @@ const compile = (schema, ast) => pipe( asyncCollectArray ); -const interpret = (conditional, instance, ast, dynamicAnchors, quiet) => { +const interpret = (conditional, instance, context) => { for (let index = 0; index < conditional.length; index += 2) { - const isValid = Validation.interpret(conditional[index], instance, ast, dynamicAnchors, quiet); + const isValid = Validation.interpret(conditional[index], instance, context); if (index + 1 === conditional.length) { return isValid; } else if (isValid) { - return Validation.interpret(conditional[index + 1], instance, ast, dynamicAnchors, quiet); + return Validation.interpret(conditional[index + 1], instance, context); } } return true; }; -const collectEvaluatedProperties = (conditional, instance, ast, dynamicAnchors) => { - for (let index = 0; index < conditional.length; index += 2) { - const unevaluatedProperties = Validation.collectEvaluatedProperties(conditional[index], instance, ast, dynamicAnchors); - if (index + 1 === conditional.length) { - return unevaluatedProperties; - } else if (unevaluatedProperties !== false) { - return Validation.collectEvaluatedProperties(conditional[index + 1], instance, ast, dynamicAnchors); - } - } - - return new Set(); -}; - -const collectEvaluatedItems = (conditional, instance, ast, dynamicAnchors) => { - for (let index = 0; index < conditional.length; index += 2) { - const unevaluatedItems = Validation.collectEvaluatedItems(conditional[index], instance, ast, dynamicAnchors); - if (index + 1 === conditional.length) { - return unevaluatedItems; - } else if (unevaluatedItems !== false) { - return Validation.collectEvaluatedItems(conditional[index + 1], instance, ast, dynamicAnchors); - } - } - - return new Set(); -}; - const schemaFlatten = async function* (iter, depth = 1) { for await (const n of iter) { if (depth > 0 && Browser.typeOf(n) === "array") { @@ -61,4 +35,4 @@ const schemaFlatten = async function* (iter, depth = 1) { } }; -export default { id, compile, interpret, collectEvaluatedProperties, collectEvaluatedItems }; +export default { id, compile, interpret }; diff --git a/lib/keywords/contains.js b/lib/keywords/contains.js index a317f5c1..ce6135cc 100644 --- a/lib/keywords/contains.js +++ b/lib/keywords/contains.js @@ -1,4 +1,3 @@ -import { pipe, filter, reduce, zip, range, map, collectSet } from "@hyperjump/pact"; import * as Browser from "@hyperjump/browser"; import * as Instance from "../instance.js"; import { getKeywordName, Validation } from "../experimental.js"; @@ -20,24 +19,21 @@ const compile = async (schema, ast, parentSchema) => { return { contains, minContains, maxContains }; }; -const interpret = ({ contains, minContains, maxContains }, instance, ast, dynamicAnchors, quiet) => { - const matches = Instance.typeOf(instance) !== "array" || pipe( - Instance.iter(instance), - filter((item) => Validation.interpret(contains, item, ast, dynamicAnchors, quiet)), - reduce((matches) => matches + 1, 0) - ); +const interpret = ({ contains, minContains, maxContains }, instance, context) => { + if (Instance.typeOf(instance) !== "array") { + return true; + } + + let matches = 0; + let index = 0; + for (const item of Instance.iter(instance)) { + if (Validation.interpret(contains, item, context)) { + matches++; + context.evaluatedItems?.add(index); + } + index++; + } return matches >= minContains && matches <= maxContains; }; -const collectEvaluatedItems = (keywordValue, instance, ast, dynamicAnchors) => { - return interpret(keywordValue, instance, ast, dynamicAnchors, true) - && Instance.typeOf(instance) === "array" - && pipe( - zip(Instance.iter(instance), range(0)), - filter(([item]) => Validation.interpret(keywordValue.contains, item, ast, dynamicAnchors, true)), - map(([, itemIndex]) => itemIndex), - collectSet - ); -}; - -export default { id, compile, interpret, collectEvaluatedItems }; +export default { id, compile, interpret }; diff --git a/lib/keywords/contentEncoding.js b/lib/keywords/contentEncoding.js index 4e111020..72436398 100644 --- a/lib/keywords/contentEncoding.js +++ b/lib/keywords/contentEncoding.js @@ -1,14 +1,18 @@ import * as Browser from "@hyperjump/browser"; -import * as Instance from "../../annotations/annotated-instance.js"; +import * as Instance from "../instance.js"; const id = "https://json-schema.org/keyword/contentEncoding"; const compile = (schema) => Browser.value(schema); +const interpret = () => true; -const interpret = (contentEncoding, instance, _ast, _dynamicAnchors, _quiet, schemaLocation) => { - Instance.setAnnotation(instance, id, schemaLocation, contentEncoding); - return true; +const annotation = (contentEncoding, instance) => { + if (Instance.typeOf(instance) !== "string") { + return; + } + + return contentEncoding; }; -export default { id, compile, interpret }; +export default { id, compile, interpret, annotation }; diff --git a/lib/keywords/contentMediaType.js b/lib/keywords/contentMediaType.js index 778a8e17..863e7043 100644 --- a/lib/keywords/contentMediaType.js +++ b/lib/keywords/contentMediaType.js @@ -1,14 +1,18 @@ import * as Browser from "@hyperjump/browser"; -import * as Instance from "../../annotations/annotated-instance.js"; +import * as Instance from "../instance.js"; const id = "https://json-schema.org/keyword/contentMediaType"; const compile = (schema) => Browser.value(schema); +const interpret = () => true; -const interpret = (contentMediaType, instance, _ast, _dynamicAnchors, _quiet, schemaLocation) => { - Instance.setAnnotation(instance, id, schemaLocation, contentMediaType); - return true; +const annotation = (contentMediaType, instance) => { + if (Instance.typeOf(instance) !== "string") { + return; + } + + return contentMediaType; }; -export default { id, compile, interpret }; +export default { id, compile, interpret, annotation }; diff --git a/lib/keywords/contentSchema.js b/lib/keywords/contentSchema.js index d0b314af..95314428 100644 --- a/lib/keywords/contentSchema.js +++ b/lib/keywords/contentSchema.js @@ -1,14 +1,28 @@ -import { canonicalUri } from "../schema.js"; -import * as Instance from "../../annotations/annotated-instance.js"; +import * as Browser from "@hyperjump/browser"; +import * as Instance from "../instance.js"; +import { getKeywordName } from "../keywords.js"; const id = "https://json-schema.org/keyword/contentSchema"; -const compile = (contentSchema) => canonicalUri(contentSchema); +const compile = async (contentSchema, _ast, parentSchema) => { + const contentMediaTypeKeyword = getKeywordName(contentSchema.document.dialectId, "https://json-schema.org/keyword/contentMediaType"); + const contentMediaType = await Browser.step(contentMediaTypeKeyword, parentSchema); + if (Browser.value(contentMediaType) === undefined) { + return; + } -const interpret = (contentSchema, instance, _ast, _dynamicAnchors, _quiet, schemaLocation) => { - Instance.setAnnotation(instance, id, schemaLocation, contentSchema); - return true; + return Browser.value(contentSchema); }; -export default { id, compile, interpret }; +const interpret = () => true; + +const annotation = (contentSchema, instance) => { + if (!contentSchema || Instance.typeOf(instance) !== "string") { + return; + } + + return contentSchema; +}; + +export default { id, compile, interpret, annotation }; diff --git a/lib/keywords/default.js b/lib/keywords/default.js index f6ccf742..085b8a23 100644 --- a/lib/keywords/default.js +++ b/lib/keywords/default.js @@ -1,14 +1,10 @@ import * as Browser from "@hyperjump/browser"; -import * as Instance from "../../annotations/annotated-instance.js"; const id = "https://json-schema.org/keyword/default"; const compile = (schema) => Browser.value(schema); +const interpret = () => true; +const annotation = (value) => value; -const interpret = (value, instance, _ast, _dynamicAnchors, _quiet, schemaLocation) => { - Instance.setAnnotation(instance, id, schemaLocation, value); - return true; -}; - -export default { id, compile, interpret }; +export default { id, compile, interpret, annotation }; diff --git a/lib/keywords/dependentSchemas.js b/lib/keywords/dependentSchemas.js index 535d34fd..6ced882e 100644 --- a/lib/keywords/dependentSchemas.js +++ b/lib/keywords/dependentSchemas.js @@ -12,14 +12,14 @@ const compile = (schema, ast) => pipe( asyncCollectArray ); -const interpret = (dependentSchemas, instance, ast, dynamicAnchors, quiet) => { +const interpret = (dependentSchemas, instance, context) => { if (Instance.typeOf(instance) !== "object") { return true; } let isValid = true; for (const [propertyName, dependentSchema] of dependentSchemas) { - if (Instance.has(propertyName, instance) && !Validation.interpret(dependentSchema, instance, ast, dynamicAnchors, quiet)) { + if (Instance.has(propertyName, instance) && !Validation.interpret(dependentSchema, instance, context)) { isValid = false; } } @@ -27,24 +27,6 @@ const interpret = (dependentSchemas, instance, ast, dynamicAnchors, quiet) => { return isValid; }; -const collectEvaluatedProperties = (dependentSchemas, instance, ast, dynamicAnchors) => { - if (Instance.typeOf(instance) !== "object") { - return false; - } - - const evaluatedPropertyNames = new Set(); - for (const [propertyName, dependentSchema] of dependentSchemas) { - if (Instance.has(propertyName, instance)) { - const propertyNames = Validation.collectEvaluatedProperties(dependentSchema, instance, ast, dynamicAnchors); - if (propertyNames === false) { - return false; - } - - propertyNames.forEach(Set.prototype.add.bind(evaluatedPropertyNames)); - } - } - - return evaluatedPropertyNames; -}; +const simpleApplicator = true; -export default { id, compile, interpret, collectEvaluatedProperties }; +export default { id, compile, interpret, simpleApplicator }; diff --git a/lib/keywords/deprecated.js b/lib/keywords/deprecated.js index df81cef7..58b79327 100644 --- a/lib/keywords/deprecated.js +++ b/lib/keywords/deprecated.js @@ -1,14 +1,10 @@ import * as Browser from "@hyperjump/browser"; -import * as Instance from "../../annotations/annotated-instance.js"; const id = "https://json-schema.org/keyword/deprecated"; const compile = (schema) => Browser.value(schema); +const interpret = () => true; +const annotation = (deprecated) => deprecated; -const interpret = (deprecated, instance, _ast, _dynamicAnchors, _quiet, schemaLocation) => { - Instance.setAnnotation(instance, id, schemaLocation, deprecated); - return true; -}; - -export default { id, compile, interpret }; +export default { id, compile, interpret, annotation }; diff --git a/lib/keywords/description.js b/lib/keywords/description.js index 34eb4dd7..86f9eb5f 100644 --- a/lib/keywords/description.js +++ b/lib/keywords/description.js @@ -1,14 +1,10 @@ import * as Browser from "@hyperjump/browser"; -import * as Instance from "../../annotations/annotated-instance.js"; const id = "https://json-schema.org/keyword/description"; const compile = (schema) => Browser.value(schema); +const interpret = () => true; +const annotation = (description) => description; -const interpret = (description, instance, _ast, _dynamicAnchors, _quiet, schemaLocation) => { - Instance.setAnnotation(instance, id, schemaLocation, description); - return true; -}; - -export default { id, compile, interpret }; +export default { id, compile, interpret, annotation }; diff --git a/lib/keywords/dynamicRef.js b/lib/keywords/dynamicRef.js index 7ef7ccb9..731db46f 100644 --- a/lib/keywords/dynamicRef.js +++ b/lib/keywords/dynamicRef.js @@ -1,5 +1,6 @@ import * as Browser from "@hyperjump/browser"; import { Validation } from "../experimental.js"; +import { toAbsoluteUri } from "../common.js"; const id = "https://json-schema.org/keyword/dynamicRef"; @@ -12,15 +13,25 @@ const compile = async (schema, ast) => { return reference; }; -const evaluate = (strategy, fragment, instance, ast, dynamicAnchors, quiet) => { - if (!(fragment in dynamicAnchors)) { +const interpret = (fragment, instance, context) => { + if (!(fragment in context.dynamicAnchors)) { throw Error(`No dynamic anchor found for "${fragment}"`); } - return strategy(dynamicAnchors[fragment], instance, ast, dynamicAnchors, quiet); + return Validation.interpret(context.dynamicAnchors[fragment], instance, context); }; -const interpret = (...args) => evaluate(Validation.interpret, ...args); -const collectEvaluatedProperties = (...args) => evaluate(Validation.collectEvaluatedProperties, ...args); -const collectEvaluatedItems = (...args) => evaluate(Validation.collectEvaluatedItems, ...args); +const simpleApplicator = true; -export default { id, compile, interpret, collectEvaluatedProperties, collectEvaluatedItems }; +const plugin = { + beforeSchema(url, _instance, context) { + context.dynamicAnchors = { + ...context.ast.metaData[toAbsoluteUri(url)].dynamicAnchors, + ...context.dynamicAnchors + }; + }, + beforeKeyword(_url, _instance, context, schemaContext) { + context.dynamicAnchors = schemaContext.dynamicAnchors; + } +}; + +export default { id, compile, interpret, simpleApplicator, plugin }; diff --git a/lib/keywords/else.js b/lib/keywords/else.js index e0bf42d3..6d35d37e 100644 --- a/lib/keywords/else.js +++ b/lib/keywords/else.js @@ -14,26 +14,12 @@ const compile = async (schema, ast, parentSchema) => { } }; -const interpret = ([ifSchema, elseSchema], instance, ast, dynamicAnchors, quiet) => { +const interpret = ([ifSchema, elseSchema], instance, context) => { return ifSchema === undefined - || Validation.interpret(ifSchema, instance, ast, dynamicAnchors, true) - || Validation.interpret(elseSchema, instance, ast, dynamicAnchors, quiet); + || Validation.interpret(ifSchema, instance, { ...context, plugins: context.ast.plugins }) + || Validation.interpret(elseSchema, instance, context); }; -const collectEvaluatedProperties = ([ifSchema, elseSchema], instance, ast, dynamicAnchors) => { - if (ifSchema === undefined || Validation.interpret(ifSchema, instance, ast, dynamicAnchors, true)) { - return new Set(); - } - - return Validation.collectEvaluatedProperties(elseSchema, instance, ast, dynamicAnchors); -}; - -const collectEvaluatedItems = ([ifSchema, elseSchema], instance, ast, dynamicAnchors) => { - if (ifSchema === undefined || Validation.interpret(ifSchema, instance, ast, dynamicAnchors, true)) { - return new Set(); - } - - return Validation.collectEvaluatedItems(elseSchema, instance, ast, dynamicAnchors); -}; +const simpleApplicator = true; -export default { id, compile, interpret, collectEvaluatedProperties, collectEvaluatedItems }; +export default { id, compile, interpret, simpleApplicator }; diff --git a/lib/keywords/examples.js b/lib/keywords/examples.js index 1f90e1b7..1858dd7f 100644 --- a/lib/keywords/examples.js +++ b/lib/keywords/examples.js @@ -1,14 +1,10 @@ import * as Browser from "@hyperjump/browser"; -import * as Instance from "../../annotations/annotated-instance.js"; const id = "https://json-schema.org/keyword/examples"; const compile = (schema) => Browser.value(schema); +const interpret = () => true; +const annotation = (examples) => examples; -const interpret = (examples, instance, _ast, _dynamicAnchors, _quiet, schemaLocation) => { - Instance.setAnnotation(instance, id, schemaLocation, examples); - return true; -}; - -export default { id, compile, interpret }; +export default { id, compile, interpret, annotation }; diff --git a/lib/keywords/format.js b/lib/keywords/format.js index a48bb1fa..8b1eef62 100644 --- a/lib/keywords/format.js +++ b/lib/keywords/format.js @@ -1,14 +1,10 @@ import * as Browser from "@hyperjump/browser"; -import * as Instance from "../../annotations/annotated-instance.js"; const id = "https://json-schema.org/keyword/format"; const compile = (schema) => Browser.value(schema); +const interpret = () => true; +const annotation = (format) => format; -const interpret = (format, instance, _ast, _dynamicAnchors, _quiet, schemaLocation) => { - Instance.setAnnotation(instance, id, schemaLocation, format); - return true; -}; - -export default { id, compile, interpret }; +export default { id, compile, interpret, annotation }; diff --git a/lib/keywords/if.js b/lib/keywords/if.js index 3832bc7f..a09ac092 100644 --- a/lib/keywords/if.js +++ b/lib/keywords/if.js @@ -5,17 +5,11 @@ const id = "https://json-schema.org/keyword/if"; const compile = (schema, ast) => Validation.compile(schema, ast); -const interpret = (ifSchema, instance, ast, dynamicAnchors) => { - Validation.interpret(ifSchema, instance, ast, dynamicAnchors, true); +const interpret = (ifSchema, instance, context) => { + Validation.interpret(ifSchema, instance, context); return true; }; -const collectEvaluatedProperties = (ifSchema, instance, ast, dynamicAnchors) => { - return Validation.collectEvaluatedProperties(ifSchema, instance, ast, dynamicAnchors) || []; -}; - -const collectEvaluatedItems = (ifSchema, instance, ast, dynamicAnchors) => { - return Validation.collectEvaluatedItems(ifSchema, instance, ast, dynamicAnchors) || new Set(); -}; +const simpleApplicator = true; -export default { id, compile, interpret, collectEvaluatedProperties, collectEvaluatedItems }; +export default { id, compile, interpret, simpleApplicator }; diff --git a/lib/keywords/itemPattern.js b/lib/keywords/itemPattern.js index 65b417de..87d19b61 100644 --- a/lib/keywords/itemPattern.js +++ b/lib/keywords/itemPattern.js @@ -39,7 +39,7 @@ const compile = async (schema, ast) => { .reduce(union); }; -const evaluate = (strategy) => (nfa, instance, ast, dynamicAnchors, quiet) => { +const interpret = (nfa, instance, context) => { if (Instance.typeOf(instance) !== "array") { return true; } @@ -51,7 +51,7 @@ const evaluate = (strategy) => (nfa, instance, ast, dynamicAnchors, quiet) => { const nextStates = []; for (const state of currentStates) { - const nextState = transition(strategy, state.transition, item, ast, dynamicAnchors, quiet); + const nextState = transition(state.transition, item, context); if (nextState) { addNextState(nextState, nextStates, []); } @@ -76,16 +76,12 @@ const addNextState = (state, nextStates, visited) => { } }; -const transition = (strategy, transitions, instance, ast, dynamicAnchors, quiet) => { +const transition = (transitions, instance, context) => { for (const schema in transitions) { - if (strategy(schema, instance, ast, dynamicAnchors, quiet)) { + if (Validation.interpret(schema, instance, context)) { return transitions[schema]; } } }; -const interpret = evaluate(Validation.interpret); -const collectEvalatedProperties = evaluate(Validation.collectEvaluatedProperties); -const collectEvalatedItems = evaluate(Validation.collectEvaluatedItems); - -export default { id, compile, interpret, collectEvalatedProperties, collectEvalatedItems }; +export default { id, compile, interpret }; diff --git a/lib/keywords/items.js b/lib/keywords/items.js index cd6b3ddc..6b9f239a 100644 --- a/lib/keywords/items.js +++ b/lib/keywords/items.js @@ -14,32 +14,25 @@ const compile = async (schema, ast, parentSchema) => { return [numberOfPrefixItems, await Validation.compile(schema, ast)]; }; -const interpret = ([numberOfPrefixItems, items], instance, ast, dynamicAnchors, quiet) => { +const interpret = ([numberOfPrefixItems, items], instance, context) => { if (Instance.typeOf(instance) !== "array") { return true; } let isValid = true; + let index = numberOfPrefixItems; for (const item of drop(numberOfPrefixItems, Instance.iter(instance))) { - if (!Validation.interpret(items, item, ast, dynamicAnchors, quiet)) { + if (!Validation.interpret(items, item, context)) { isValid = false; } + + context.evaluatedItems?.add(index); + index++; } return isValid; }; -const collectEvaluatedItems = (keywordValue, instance, ast, dynamicAnchors) => { - if (!interpret(keywordValue, instance, ast, dynamicAnchors, true)) { - return false; - } - - const evaluatedIndexes = new Set(); - for (let ndx = keywordValue[0]; ndx < Instance.length(instance); ndx++) { - evaluatedIndexes.add(ndx); - } - - return evaluatedIndexes; -}; +const simpleApplicator = true; -export default { id, compile, interpret, collectEvaluatedItems }; +export default { id, compile, interpret, simpleApplicator }; diff --git a/lib/keywords/oneOf.js b/lib/keywords/oneOf.js index a4b8f21f..59cde245 100644 --- a/lib/keywords/oneOf.js +++ b/lib/keywords/oneOf.js @@ -11,10 +11,10 @@ const compile = (schema, ast) => pipe( asyncCollectArray ); -const interpret = (oneOf, instance, ast, dynamicAnchors, quiet) => { +const interpret = (oneOf, instance, context) => { let validCount = 0; for (const schemaUrl of oneOf) { - if (Validation.interpret(schemaUrl, instance, ast, dynamicAnchors, quiet)) { + if (Validation.interpret(schemaUrl, instance, context)) { validCount++; } } @@ -22,36 +22,4 @@ const interpret = (oneOf, instance, ast, dynamicAnchors, quiet) => { return validCount === 1; }; -const collectEvaluatedProperties = (oneOf, instance, ast, dynamicAnchors) => { - let evaluatedProperties = false; - for (const schemaUrl of oneOf) { - const propertyNames = Validation.collectEvaluatedProperties(schemaUrl, instance, ast, dynamicAnchors); - if (propertyNames) { - if (evaluatedProperties) { - return false; - } - - evaluatedProperties = propertyNames; - } - } - - return evaluatedProperties; -}; - -const collectEvaluatedItems = (oneOf, instance, ast, dynamicAnchors) => { - let evaluatedItemIndexes = false; - for (const schemaUrl of oneOf) { - const itemIndexes = Validation.collectEvaluatedItems(schemaUrl, instance, ast, dynamicAnchors); - if (itemIndexes) { - if (evaluatedItemIndexes) { - return false; - } - - evaluatedItemIndexes = itemIndexes; - } - } - - return evaluatedItemIndexes; -}; - -export default { id, compile, interpret, collectEvaluatedProperties, collectEvaluatedItems }; +export default { id, compile, interpret }; diff --git a/lib/keywords/patternProperties.js b/lib/keywords/patternProperties.js index 798229cb..dc859908 100644 --- a/lib/keywords/patternProperties.js +++ b/lib/keywords/patternProperties.js @@ -15,7 +15,7 @@ const compile = (schema, ast) => pipe( asyncCollectArray ); -const interpret = (patternProperties, instance, ast, dynamicAnchors, quiet) => { +const interpret = (patternProperties, instance, context) => { if (Instance.typeOf(instance) !== "object") { return true; } @@ -23,36 +23,20 @@ const interpret = (patternProperties, instance, ast, dynamicAnchors, quiet) => { let isValid = true; for (const [pattern, schemaUri] of patternProperties) { for (const [propertyNameNode, propertyValue] of Instance.entries(instance)) { - const propertyName = Instance.value(propertyNameNode); - if (pattern.test(propertyName) && !Validation.interpret(schemaUri, propertyValue, ast, dynamicAnchors, quiet)) { - isValid = false; - } - } - } - - return isValid; -}; - -const collectEvaluatedProperties = (patternProperties, instance, ast, dynamicAnchors) => { - if (Instance.typeOf(instance) !== "object") { - return false; - } - - const evaluatedPropertyNames = new Set(); - for (const [pattern, propertySchema] of patternProperties) { - for (const [propertyNameNode, property] of Instance.entries(instance)) { const propertyName = Instance.value(propertyNameNode); if (pattern.test(propertyName)) { - if (!Validation.interpret(propertySchema, property, ast, dynamicAnchors, true)) { - return false; + if (!Validation.interpret(schemaUri, propertyValue, context)) { + isValid = false; } - evaluatedPropertyNames.add(propertyName); + context.evaluatedProperties?.add(propertyName); } } } - return evaluatedPropertyNames; + return isValid; }; -export default { id, compile, interpret, collectEvaluatedProperties }; +const simpleApplicator = true; + +export default { id, compile, interpret, simpleApplicator }; diff --git a/lib/keywords/prefixItems.js b/lib/keywords/prefixItems.js index 4ceda4ce..d1e2a8ac 100644 --- a/lib/keywords/prefixItems.js +++ b/lib/keywords/prefixItems.js @@ -12,7 +12,7 @@ const compile = (schema, ast) => pipe( asyncCollectArray ); -const interpret = (prefixItems, instance, ast, dynamicAnchors, quiet) => { +const interpret = (prefixItems, instance, context) => { if (Instance.typeOf(instance) !== "array") { return true; } @@ -25,18 +25,17 @@ const interpret = (prefixItems, instance, ast, dynamicAnchors, quiet) => { break; } - if (!Validation.interpret(schemaUri, item, ast, dynamicAnchors, quiet)) { + if (!Validation.interpret(schemaUri, item, context)) { isValid = false; } + context.evaluatedItems?.add(index); index++; } return isValid; }; -const collectEvaluatedItems = (items, instance, ast, dynamicAnchors) => { - return interpret(items, instance, ast, dynamicAnchors, true) && new Set(items.map((_item, ndx) => ndx)); -}; +const simpleApplicator = true; -export default { id, compile, interpret, collectEvaluatedItems }; +export default { id, compile, interpret, simpleApplicator }; diff --git a/lib/keywords/properties.js b/lib/keywords/properties.js index 5060e16e..3f510b39 100644 --- a/lib/keywords/properties.js +++ b/lib/keywords/properties.js @@ -12,40 +12,26 @@ const compile = (schema, ast) => pipe( asyncCollectObject ); -const interpret = (properties, instance, ast, dynamicAnchors, quiet) => { +const interpret = (properties, instance, context) => { if (Instance.typeOf(instance) !== "object") { return true; } let isValid = true; - for (const [propertyNameNode, property] of Instance.entries(instance)) { - const propertyName = Instance.value(propertyNameNode); - if (propertyName in properties && !Validation.interpret(properties[propertyName], property, ast, dynamicAnchors, quiet)) { - isValid = false; - } - } - - return isValid; -}; - -const collectEvaluatedProperties = (properties, instance, ast, dynamicAnchors) => { - if (Instance.typeOf(instance) !== "object") { - return false; - } - - const evaluatedPropertyNames = new Set(); for (const [propertyNameNode, property] of Instance.entries(instance)) { const propertyName = Instance.value(propertyNameNode); if (propertyName in properties) { - if (!Validation.interpret(properties[propertyName], property, ast, dynamicAnchors, true)) { - return false; + if (!Validation.interpret(properties[propertyName], property, context)) { + isValid = false; } - evaluatedPropertyNames.add(propertyName); + context.evaluatedProperties?.add(propertyName); } } - return evaluatedPropertyNames; + return isValid; }; -export default { id, compile, interpret, collectEvaluatedProperties }; +const simpleApplicator = true; + +export default { id, compile, interpret, simpleApplicator }; diff --git a/lib/keywords/propertyDependencies.js b/lib/keywords/propertyDependencies.js index b26575fc..33fa71c6 100644 --- a/lib/keywords/propertyDependencies.js +++ b/lib/keywords/propertyDependencies.js @@ -20,7 +20,7 @@ const compile = (schema, ast) => { ); }; -const interpret = (propertyDependencies, instance, ast, dynamicAnchors, quiet) => { +const interpret = (propertyDependencies, instance, context) => { if (Instance.typeOf(instance) !== "object") { return true; } @@ -32,7 +32,7 @@ const interpret = (propertyDependencies, instance, ast, dynamicAnchors, quiet) = if ( Instance.has(propertyName, instance) && propertyValue in valueMappings - && !Validation.interpret(valueMappings[propertyValue], instance, ast, dynamicAnchors, quiet) + && !Validation.interpret(valueMappings[propertyValue], instance, context) ) { isValid = false; } @@ -41,23 +41,6 @@ const interpret = (propertyDependencies, instance, ast, dynamicAnchors, quiet) = return isValid; }; -const collectEvaluatedProperties = (propertyDependencies, instance, ast, dynamicAnchors) => { - const evaluatedPropertyNames = new Set(); - for (const propertyName in propertyDependencies) { - const propertyValue = Instance.value(instance)[propertyName]; +const simpleApplicator = true; - const valueMappings = propertyDependencies[propertyName]; - if (Instance.has(propertyName, instance) && propertyValue in valueMappings) { - const propertyNames = Validation.collectEvaluatedProperties(valueMappings[propertyValue], instance, ast, dynamicAnchors); - if (!propertyNames) { - return false; - } - - propertyNames.forEach(evaluatedPropertyNames.add, evaluatedPropertyNames); - } - } - - return evaluatedPropertyNames; -}; - -export default { id, compile, interpret, collectEvaluatedProperties }; +export default { id, compile, interpret, simpleApplicator }; diff --git a/lib/keywords/propertyNames.js b/lib/keywords/propertyNames.js index 24ff71b0..38c5fff8 100644 --- a/lib/keywords/propertyNames.js +++ b/lib/keywords/propertyNames.js @@ -6,14 +6,14 @@ const id = "https://json-schema.org/keyword/propertyNames"; const compile = (schema, ast) => Validation.compile(schema, ast); -const interpret = (propertyNames, instance, ast, dynamicAnchors) => { +const interpret = (propertyNames, instance, context) => { if (Instance.typeOf(instance) !== "object") { return true; } let isValid = true; for (const key of Instance.keys(instance)) { - if (!Validation.interpret(propertyNames, key, ast, dynamicAnchors, true)) { + if (!Validation.interpret(propertyNames, key, context)) { isValid = false; } } @@ -21,4 +21,6 @@ const interpret = (propertyNames, instance, ast, dynamicAnchors) => { return isValid; }; -export default { id, compile, interpret }; +const simpleApplicator = true; + +export default { id, compile, interpret, simpleApplicator }; diff --git a/lib/keywords/readOnly.js b/lib/keywords/readOnly.js index 27c897b6..b2d19e7d 100644 --- a/lib/keywords/readOnly.js +++ b/lib/keywords/readOnly.js @@ -1,14 +1,10 @@ import * as Browser from "@hyperjump/browser"; -import * as Instance from "../../annotations/annotated-instance.js"; const id = "https://json-schema.org/keyword/readOnly"; const compile = (schema) => Browser.value(schema); +const interpret = () => true; +const annotation = (readOnly) => readOnly; -const interpret = (readOnly, instance, _ast, _dynamicAnchors, _quiet, schemaLocation) => { - Instance.setAnnotation(instance, id, schemaLocation, readOnly); - return true; -}; - -export default { id, compile, interpret }; +export default { id, compile, interpret, annotation }; diff --git a/lib/keywords/ref.js b/lib/keywords/ref.js index 0b93c982..48fa0dd9 100644 --- a/lib/keywords/ref.js +++ b/lib/keywords/ref.js @@ -5,7 +5,7 @@ const id = "https://json-schema.org/keyword/ref"; const compile = (...args) => Validation.compile(...args); const interpret = (...args) => Validation.interpret(...args); -const collectEvaluatedProperties = (...args) => Validation.collectEvaluatedProperties(...args); -const collectEvaluatedItems = (...args) => Validation.collectEvaluatedItems(...args); -export default { id, compile, interpret, collectEvaluatedProperties, collectEvaluatedItems }; +const simpleApplicator = true; + +export default { id, compile, interpret, simpleApplicator }; diff --git a/lib/keywords/then.js b/lib/keywords/then.js index 88e80537..5c071382 100644 --- a/lib/keywords/then.js +++ b/lib/keywords/then.js @@ -1,6 +1,5 @@ import * as Browser from "@hyperjump/browser"; -import { getKeywordName } from "../keywords.js"; -import { Validation } from "../experimental.js"; +import { getKeywordName, Validation } from "../experimental.js"; const id = "https://json-schema.org/keyword/then"; @@ -15,26 +14,12 @@ const compile = async (schema, ast, parentSchema) => { } }; -const interpret = ([ifSchema, thenSchema], instance, ast, dynamicAnchors, quiet) => { +const interpret = ([ifSchema, thenSchema], instance, context) => { return ifSchema === undefined - || !Validation.interpret(ifSchema, instance, ast, dynamicAnchors, true) - || Validation.interpret(thenSchema, instance, ast, dynamicAnchors, quiet); + || !Validation.interpret(ifSchema, instance, { ...context, plugins: context.ast.plugins }) + || Validation.interpret(thenSchema, instance, context); }; -const collectEvaluatedProperties = ([ifSchema, thenSchema], instance, ast, dynamicAnchors) => { - if (ifSchema === undefined || !Validation.interpret(ifSchema, instance, ast, dynamicAnchors, true)) { - return new Set(); - } - - return Validation.collectEvaluatedProperties(thenSchema, instance, ast, dynamicAnchors); -}; - -const collectEvaluatedItems = ([ifSchema, thenSchema], instance, ast, dynamicAnchors) => { - if (ifSchema === undefined || !Validation.interpret(ifSchema, instance, ast, dynamicAnchors, true)) { - return new Set(); - } - - return Validation.collectEvaluatedItems(thenSchema, instance, ast, dynamicAnchors); -}; +const simpleApplicator = true; -export default { id, compile, interpret, collectEvaluatedProperties, collectEvaluatedItems }; +export default { id, compile, interpret, simpleApplicator }; diff --git a/lib/keywords/title.js b/lib/keywords/title.js index 7f3faef0..7ea1c461 100644 --- a/lib/keywords/title.js +++ b/lib/keywords/title.js @@ -1,14 +1,10 @@ import * as Browser from "@hyperjump/browser"; -import * as Instance from "../../annotations/annotated-instance.js"; const id = "https://json-schema.org/keyword/title"; const compile = (schema) => Browser.value(schema); +const interpret = () => true; +const annotation = (title) => title; -const interpret = (title, instance, _ast, _dynamicAnchors, _quiet, schemaLocation) => { - Instance.setAnnotation(instance, id, schemaLocation, title); - return true; -}; - -export default { id, compile, interpret }; +export default { id, compile, interpret, annotation }; diff --git a/lib/keywords/unevaluatedItems.js b/lib/keywords/unevaluatedItems.js index 8f9c28b1..067cab38 100644 --- a/lib/keywords/unevaluatedItems.js +++ b/lib/keywords/unevaluatedItems.js @@ -1,7 +1,5 @@ -import { zip, range } from "@hyperjump/pact"; +import { canonicalUri, Validation } from "../experimental.js"; import * as Instance from "../instance.js"; -import { canonicalUri } from "../schema.js"; -import { Validation } from "../experimental.js"; const id = "https://json-schema.org/keyword/unevaluatedItems"; @@ -10,39 +8,76 @@ const compile = async (schema, ast, parentSchema) => { return [canonicalUri(parentSchema), await Validation.compile(schema, ast)]; }; -const interpret = ([schemaUrl, unevaluatedItems], instance, ast, dynamicAnchors, quiet) => { +const interpret = ([schemaUrl, unevaluatedItems], instance, context) => { if (Instance.typeOf(instance) !== "array") { return true; } - const itemIndexes = Validation.collectEvaluatedItems(schemaUrl, instance, ast, dynamicAnchors, true); - if (itemIndexes === false) { + // Because order matters, we re-evaluate this schema skipping this keyword + // just to collect all the evalauted items. + if (context.rootSchema === schemaUrl) { return true; } + const evaluatedItemsPlugin = new EvaluatedItemsPlugin(schemaUrl); + if (!Validation.interpret(schemaUrl, instance, { + ...context, + plugins: [...context.ast.plugins, evaluatedItemsPlugin] + })) { + return true; + } + const evaluatedItems = evaluatedItemsPlugin.evaluatedItems; let isValid = true; - for (const [item, index] of zip(Instance.iter(instance), range(0))) { - if (!itemIndexes.has(index) && !Validation.interpret(unevaluatedItems, item, ast, dynamicAnchors, quiet)) { - isValid = false; + let index = 0; + for (const item of Instance.iter(instance)) { + if (!evaluatedItems.has(index)) { + if (!Validation.interpret(unevaluatedItems, item, context)) { + isValid = false; + } + + context.evaluatedItems?.add(index); } + + index++; } return isValid; }; -const collectEvaluatedItems = (keywordValue, instance, ast, dynamicAnchors) => { - const itemIndexes = Validation.collectEvaluatedItems(keywordValue[0], instance, ast, dynamicAnchors, true); - if (!itemIndexes) { - return false; +const simpleApplicator = true; + +class EvaluatedItemsPlugin { + constructor(rootSchema) { + this.rootSchema = rootSchema; + } + + beforeSchema(_url, _instance, context) { + context.evaluatedItems ??= new Set(); + context.schemaEvaluatedItems ??= new Set(); } - const evaluatedIndexes = new Set(); - for (let ndx = 0; ndx < Instance.length(instance); ndx++) { - if (!itemIndexes.has(ndx)) { - evaluatedIndexes.add(ndx); + beforeKeyword(_node, _instance, context) { + context.rootSchema = this.rootSchema; + context.evaluatedItems = new Set(); + } + + afterKeyword(_node, _instance, context, valid, schemaContext) { + if (valid) { + for (const index of context.evaluatedItems) { + schemaContext.schemaEvaluatedItems.add(index); + } } } - return evaluatedIndexes; -}; -export default { id, compile, interpret, collectEvaluatedItems }; + afterSchema(_url, _instance, context, valid) { + if (valid) { + for (const index of context.schemaEvaluatedItems) { + context.evaluatedItems.add(index); + } + } + + this.evaluatedItems = context.evaluatedItems; + } +} + +export default { id, compile, interpret, simpleApplicator }; diff --git a/lib/keywords/unevaluatedProperties.js b/lib/keywords/unevaluatedProperties.js index 24749de5..ac1af308 100644 --- a/lib/keywords/unevaluatedProperties.js +++ b/lib/keywords/unevaluatedProperties.js @@ -8,50 +8,76 @@ const compile = async (schema, ast, parentSchema) => { return [canonicalUri(parentSchema), await Validation.compile(schema, ast)]; }; -const interpret = ([schemaUrl, unevaluatedProperties], instance, ast, dynamicAnchors, quiet) => { +const interpret = ([schemaUrl, unevaluatedProperties], instance, context) => { if (Instance.typeOf(instance) !== "object") { return true; } - const evaluatedPropertyNames = Validation.collectEvaluatedProperties(schemaUrl, instance, ast, dynamicAnchors, true); - if (evaluatedPropertyNames === false) { + // Because order matters, we re-evaluate this schema skipping this keyword + // just to collect all the evalauted properties. + if (context.rootSchema === schemaUrl) { return true; } + const evaluatedPropertiesPlugin = new EvaluatedPropertiesPlugin(schemaUrl); + if (!Validation.interpret(schemaUrl, instance, { + ...context, + plugins: [...context.ast.plugins, evaluatedPropertiesPlugin] + })) { + return true; + } + const evaluatedProperties = evaluatedPropertiesPlugin.evaluatedProperties; let isValid = true; for (const [propertyNameNode, property] of Instance.entries(instance)) { const propertyName = Instance.value(propertyNameNode); - if (!evaluatedPropertyNames.has(propertyName) && !Validation.interpret(unevaluatedProperties, property, ast, dynamicAnchors, quiet)) { + if (evaluatedProperties.has(propertyName)) { + continue; + } + + if (!Validation.interpret(unevaluatedProperties, property, context)) { isValid = false; } + + context.evaluatedProperties?.add(propertyName); } return isValid; }; -const collectEvaluatedProperties = ([schemaUrl, unevaluatedProperties], instance, ast, dynamicAnchors) => { - if (Instance.typeOf(instance) !== "object") { - return true; +const simpleApplicator = true; + +class EvaluatedPropertiesPlugin { + constructor(rootSchema) { + this.rootSchema = rootSchema; } - const evaluatedPropertyNames = Validation.collectEvaluatedProperties(schemaUrl, instance, ast, dynamicAnchors, true); + beforeSchema(_url, _instance, context) { + context.evaluatedProperties ??= new Set(); + context.schemaEvaluatedProperties ??= new Set(); + } - if (!evaluatedPropertyNames) { - return false; + beforeKeyword(_node, _instance, context) { + context.rootSchema = this.rootSchema; + context.evaluatedProperties = new Set(); } - for (const [propertyNameNode, property] of Instance.entries(instance)) { - const propertyName = Instance.value(propertyNameNode); - if (!evaluatedPropertyNames.has(propertyName)) { - if (!Validation.interpret(unevaluatedProperties, property, ast, dynamicAnchors, true)) { - return false; + afterKeyword(_node, _instance, context, valid, schemaContext) { + if (valid) { + for (const property of context.evaluatedProperties) { + schemaContext.schemaEvaluatedProperties.add(property); } - - evaluatedPropertyNames.add(propertyName); } } - return evaluatedPropertyNames; -}; + afterSchema(_url, _instance, context, valid) { + if (valid) { + for (const property of context.schemaEvaluatedProperties) { + context.evaluatedProperties.add(property); + } + } + + this.evaluatedProperties = context.evaluatedProperties; + } +} -export default { id, compile, interpret, collectEvaluatedProperties }; +export default { id, compile, interpret, simpleApplicator }; diff --git a/lib/keywords/unknown.js b/lib/keywords/unknown.js index 9bc6ec88..8ab7034d 100644 --- a/lib/keywords/unknown.js +++ b/lib/keywords/unknown.js @@ -1,5 +1,4 @@ import * as Browser from "@hyperjump/browser"; -import * as Instance from "../../annotations/annotated-instance.js"; import { pointerSegments } from "@hyperjump/json-pointer"; @@ -10,10 +9,7 @@ const compile = (schema) => { return [keywordName, Browser.value(schema)]; }; -const interpret = ([keywordName, value], instance, _ast, _dynamicAnchors, _quiet, schemaLocation) => { - const keywordId = `${id}#${keywordName}`; - Instance.setAnnotation(instance, keywordId, schemaLocation, value); - return true; -}; +const interpret = () => true; +const annotation = ([, value]) => value; -export default { id, compile, interpret }; +export default { id, compile, interpret, annotation }; diff --git a/lib/keywords/validation.js b/lib/keywords/validation.js index 6ac49510..8a8e182c 100644 --- a/lib/keywords/validation.js +++ b/lib/keywords/validation.js @@ -2,7 +2,6 @@ import { value, entries } from "@hyperjump/browser"; import { pipe, asyncMap, asyncCollectArray } from "@hyperjump/pact"; import { append as pointerAppend } from "@hyperjump/json-pointer"; import { publishAsync } from "../pubsub.js"; -import { toAbsoluteUri } from "../common.js"; import { canonicalUri, getKeyword, getKeywordByName } from "../experimental.js"; @@ -33,6 +32,9 @@ const compile = async (schema, ast) => { entries(schema), asyncMap(async ([keyword, keywordSchema]) => { const keywordHandler = getKeywordByName(keyword, schema.document.dialectId); + if (keywordHandler.plugin) { + ast.plugins.add(keywordHandler.plugin); + } const keywordAst = await keywordHandler.compile(keywordSchema, ast, schema); return [keywordHandler.id, pointerAppend(keyword, canonicalUri(schema)), keywordAst]; }), @@ -43,84 +45,42 @@ const compile = async (schema, ast) => { return url; }; -const interpret = (url, instance, ast, dynamicAnchors, quiet = false) => { - dynamicAnchors = { ...ast.metaData[toAbsoluteUri(url)].dynamicAnchors, ...dynamicAnchors }; - - let isSchemaValid = true; - if (typeof ast[url] === "boolean") { - isSchemaValid = ast[url]; - } else { - for (const [keywordId, schemaUrl, keywordValue] of ast[url]) { - instance.valid = getKeyword(keywordId).interpret(keywordValue, instance, ast, dynamicAnchors, quiet, url); - if (!instance.valid) { - if (!quiet) { - instance.errors[schemaUrl] = keywordId; - } - isSchemaValid = false; - } - } - } - - if (!isSchemaValid) { - instance.errors[url] = id; - } - - instance.valid = isSchemaValid; - return isSchemaValid; -}; +const interpret = (url, instance, context) => { + let valid = true; -const emptyPropertyNames = new Set(); -const collectEvaluatedProperties = (url, instance, ast, dynamicAnchors, isTop = false) => { - if (typeof ast[url] === "boolean") { - return ast[url] ? new Set() : false; + for (const plugin of context.plugins) { + plugin.beforeSchema?.(url, instance, context); } - const accumulatedPropertyNames = new Set(); - for (const [keywordId, , keywordValue] of ast[url]) { - if (isTop && keywordId === "https://json-schema.org/keyword/unevaluatedProperties") { - continue; - } - - const keywordHandler = getKeyword(keywordId); - const propertyNames = "collectEvaluatedProperties" in keywordHandler - ? keywordHandler.collectEvaluatedProperties(keywordValue, instance, ast, dynamicAnchors, isTop) - : keywordHandler.interpret(keywordValue, instance, ast, dynamicAnchors, true) && emptyPropertyNames; + if (typeof context.ast[url] === "boolean") { + valid = context.ast[url]; + } else { + for (const node of context.ast[url]) { + const [keywordId, , keywordValue] = node; + const keyword = getKeyword(keywordId); + + const keywordContext = { + ast: context.ast, + plugins: context.plugins + }; + for (const plugin of context.plugins) { + plugin.beforeKeyword?.(node, instance, keywordContext, context, keyword); + } + const isKeywordValid = keyword.interpret(keywordValue, instance, keywordContext); + if (!isKeywordValid) { + valid = false; + } - if (propertyNames === false) { - return false; + for (const plugin of context.plugins) { + plugin.afterKeyword?.(node, instance, keywordContext, isKeywordValid, context, keyword); + } } - - propertyNames.forEach(accumulatedPropertyNames.add, accumulatedPropertyNames); - } - - return accumulatedPropertyNames; -}; - -const emptyItemIndexes = new Set(); -const collectEvaluatedItems = (url, instance, ast, dynamicAnchors, isTop = false) => { - if (typeof ast[url] === "boolean") { - return ast[url] ? new Set() : false; } - const accumulatedItemIndexes = new Set(); - for (const [keywordId, , keywordValue] of ast[url]) { - if (isTop && keywordId === "https://json-schema.org/keyword/unevaluatedItems") { - continue; - } - - const keywordHandler = getKeyword(keywordId); - const itemIndexes = "collectEvaluatedItems" in keywordHandler - ? keywordHandler.collectEvaluatedItems(keywordValue, instance, ast, dynamicAnchors, isTop) - : keywordHandler.interpret(keywordValue, instance, ast, dynamicAnchors, true) && emptyItemIndexes; - - if (itemIndexes === false) { - return false; - } - - itemIndexes.forEach(accumulatedItemIndexes.add, accumulatedItemIndexes); + for (const plugin of context.plugins) { + plugin.afterSchema?.(url, instance, context, valid); } - - return accumulatedItemIndexes; + return valid; }; -export default { id, compile, interpret, collectEvaluatedProperties, collectEvaluatedItems }; +export default { id, compile, interpret }; diff --git a/lib/keywords/writeOnly.js b/lib/keywords/writeOnly.js index e63203e4..ec8b116a 100644 --- a/lib/keywords/writeOnly.js +++ b/lib/keywords/writeOnly.js @@ -1,14 +1,10 @@ import * as Browser from "@hyperjump/browser"; -import * as Instance from "../../annotations/annotated-instance.js"; const id = "https://json-schema.org/keyword/writeOnly"; const compile = (schema) => Browser.value(schema); +const interpret = () => true; +const annotation = (writeOnly) => writeOnly; -const interpret = (writeOnly, instance, _ast, _dynamicAnchors, _quiet, schemaLocation) => { - Instance.setAnnotation(instance, id, schemaLocation, writeOnly); - return true; -}; - -export default { id, compile, interpret }; +export default { id, compile, interpret, annotation }; diff --git a/lib/openapi.js b/lib/openapi.js index f300336b..c486d6d2 100644 --- a/lib/openapi.js +++ b/lib/openapi.js @@ -3,6 +3,7 @@ import { addMediaTypePlugin } from "@hyperjump/browser"; import { buildSchemaDocument } from "./schema.js"; +const is32 = RegExp.prototype.test.bind(/^3\.2\.\d+(-.+)?$/); const is31 = RegExp.prototype.test.bind(/^3\.1\.\d+(-.+)?$/); const is30 = RegExp.prototype.test.bind(/^3\.0\.\d+(-.+)?$/); @@ -34,6 +35,22 @@ addMediaTypePlugin("application/openapi+json", { } else { defaultDialect = `https://spec.openapis.org/oas/3.1/schema?${encodeURIComponent(doc.jsonSchemaDialect)}`; } + } else if (is32(version)) { + if (!("jsonSchemaDialect" in doc) || doc.jsonSchemaDialect === "https://spec.openapis.org/oas/3.2/dialect/base") { + defaultDialect = "https://spec.openapis.org/oas/3.2/schema-base"; + } else if (doc.jsonSchemaDialect === "https://json-schema.org/draft/2020-12/schema") { + defaultDialect = `https://spec.openapis.org/oas/3.2/schema-draft-2020-12`; + } else if (doc.jsonSchemaDialect === "https://json-schema.org/draft/2019-09/schema") { + defaultDialect = `https://spec.openapis.org/oas/3.2/schema-draft-2019-09`; + } else if (doc.jsonSchemaDialect === "http://json-schema.org/draft-07/schema#") { + defaultDialect = `https://spec.openapis.org/oas/3.2/schema-draft-07`; + } else if (doc.jsonSchemaDialect === "http://json-schema.org/draft-06/schema#") { + defaultDialect = `https://spec.openapis.org/oas/3.2/schema-draft-06`; + } else if (doc.jsonSchemaDialect === "http://json-schema.org/draft-04/schema#") { + defaultDialect = `https://spec.openapis.org/oas/3.2/schema-draft-04`; + } else { + defaultDialect = `https://spec.openapis.org/oas/3.2/schema?${encodeURIComponent(doc.jsonSchemaDialect)}`; + } } else { throw Error(`Encountered unsupported OpenAPI version '${version}' in ${response.url}`); } diff --git a/lib/output-basic.spec.ts b/lib/output-basic.spec.ts new file mode 100644 index 00000000..8811b86d --- /dev/null +++ b/lib/output-basic.spec.ts @@ -0,0 +1,1302 @@ +import { afterEach, describe, expect, test } from "vitest"; +import { validate, registerSchema, unregisterSchema } from "../stable/index.js"; +import { BASIC } from "./experimental.js"; + + +describe("Basic Output Format", () => { + const schemaUri = "schema:main"; + const dialectUri = "https://json-schema.org/validation"; + + afterEach(() => { + unregisterSchema(schemaUri); + }); + + describe("$ref", () => { + test("invalid", async () => { + registerSchema({ + $ref: "#/$defs/string", + $defs: { + string: { type: "string" } + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/$defs/string/type`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + $ref: "#/$defs/string", + $defs: { + string: { type: "string" } + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, "foo", BASIC); + + expect(output).to.eql({ valid: true }); + }); + }); + + describe("additionalProperties", () => { + test("invalid", async () => { + registerSchema({ additionalProperties: false }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42 }, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/evaluation/validate", + absoluteKeywordLocation: `${schemaUri}#/additionalProperties`, + instanceLocation: "#/foo" + } + ] + }); + }); + + test("invalid - multiple errors", async () => { + registerSchema({ additionalProperties: false }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42, bar: 24 }, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/evaluation/validate", + absoluteKeywordLocation: `${schemaUri}#/additionalProperties`, + instanceLocation: "#/foo" + }, + { + keyword: "https://json-schema.org/evaluation/validate", + absoluteKeywordLocation: `${schemaUri}#/additionalProperties`, + instanceLocation: "#/bar" + } + ] + }); + }); + + test("invalid - schema", async () => { + registerSchema({ + additionalProperties: { type: "string" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42 }, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/additionalProperties/type`, + instanceLocation: "#/foo" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ additionalProperties: true }, schemaUri, dialectUri); + const output = await validate(schemaUri, {}, BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("allOf", () => { + test("invalid", async () => { + registerSchema({ + allOf: [ + { type: "number" }, + { maximum: 5 } + ] + }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/maximum", + absoluteKeywordLocation: `${schemaUri}#/allOf/1/maximum`, + instanceLocation: "#" + } + ] + }); + }); + + test("invalid - multiple errors", async () => { + registerSchema({ + type: "number", + allOf: [ + { maximum: 2 }, + { maximum: 5 } + ] + }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/maximum", + absoluteKeywordLocation: `${schemaUri}#/allOf/0/maximum`, + instanceLocation: "#" + }, + { + keyword: "https://json-schema.org/keyword/maximum", + absoluteKeywordLocation: `${schemaUri}#/allOf/1/maximum`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + allOf: [ + { type: "number" }, + { maximum: 5 } + ] + }, schemaUri, dialectUri); + const output = await validate(schemaUri, 3, BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("anyOf", () => { + test("invalid", async () => { + registerSchema({ + anyOf: [ + { type: "string" }, + { type: "number" } + ] + }, schemaUri, dialectUri); + const output = await validate(schemaUri, true, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/anyOf", + absoluteKeywordLocation: `${schemaUri}#/anyOf`, + instanceLocation: "#" + }, + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/anyOf/0/type`, + instanceLocation: "#" + }, + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/anyOf/1/type`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + anyOf: [ + { type: "string" }, + { type: "number" } + ] + }, schemaUri, dialectUri); + const output = await validate(schemaUri, "foo", BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("oneOf", () => { + test("invalid", async () => { + registerSchema({ + oneOf: [ + { type: "string" }, + { type: "number" } + ] + }, schemaUri, dialectUri); + const output = await validate(schemaUri, true, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/oneOf", + absoluteKeywordLocation: `${schemaUri}#/oneOf`, + instanceLocation: "#" + }, + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/oneOf/0/type`, + instanceLocation: "#" + }, + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/oneOf/1/type`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + oneOf: [ + { type: "string" }, + { type: "number" } + ] + }, schemaUri, dialectUri); + const output = await validate(schemaUri, "foo", BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("not", () => { + test("invalid", async () => { + registerSchema({ + not: { type: "number" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/not", + absoluteKeywordLocation: `${schemaUri}#/not`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + not: { type: "number" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, "foo", BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("contains", () => { + test("invalid", async () => { + registerSchema({ + contains: { type: "string" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, [1, 2], BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/contains", + absoluteKeywordLocation: `${schemaUri}#/contains`, + instanceLocation: "#" + }, + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/contains/type`, + instanceLocation: "#/0" + }, + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/contains/type`, + instanceLocation: "#/1" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + contains: { type: "string" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, [1, "foo"], BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("dependentSchemas", () => { + test("invalid", async () => { + registerSchema({ + dependentSchemas: { + foo: { required: ["a"] } + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42 }, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/required", + absoluteKeywordLocation: `${schemaUri}#/dependentSchemas/foo/required`, + instanceLocation: "#" + } + ] + }); + }); + + test("invalid - multiple conditions fail", async () => { + registerSchema({ + dependentSchemas: { + foo: { required: ["a"] }, + bar: { required: ["b"] } + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42, bar: 24 }, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/required", + absoluteKeywordLocation: `${schemaUri}#/dependentSchemas/foo/required`, + instanceLocation: "#" + }, + { + keyword: "https://json-schema.org/keyword/required", + absoluteKeywordLocation: `${schemaUri}#/dependentSchemas/bar/required`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + dependentSchemas: { + foo: { required: ["a"] } + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42, a: true }, BASIC); + + expect(output).to.eql({ valid: true }); + }); + }); + + describe("then", () => { + test("invalid", async () => { + registerSchema({ + if: { type: "string" }, + then: { minLength: 1 } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, "", BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/minLength", + absoluteKeywordLocation: `${schemaUri}#/then/minLength`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + if: { type: "string" }, + then: { minLength: 1 } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, "foo", BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("else", () => { + test("invalid", async () => { + registerSchema({ + type: ["string", "number"], + if: { type: "string" }, + else: { minimum: 42 } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, 5, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/minimum", + absoluteKeywordLocation: `${schemaUri}#/else/minimum`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + type: ["string", "number"], + if: { type: "string" }, + else: { minimum: 5 } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("items", () => { + test("invalid", async () => { + registerSchema({ + items: { type: "string" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, [42, 24], BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/items/type`, + instanceLocation: "#/0" + }, + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/items/type`, + instanceLocation: "#/1" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + items: { type: "string" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, ["foo"], BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("patternProperties", () => { + test("invalid", async () => { + registerSchema({ + patternProperties: { + "^f": { type: "string" }, + "^b": { type: "number" } + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42, bar: true }, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/patternProperties/%5Ef/type`, + instanceLocation: "#/foo" + }, + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/patternProperties/%5Eb/type`, + instanceLocation: "#/bar" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + patternProperties: { + "^f": { type: "string" }, + "^b": { type: "number" } + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: "a", bar: 42 }, BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("prefixItems", () => { + test("invalid", async () => { + registerSchema({ + prefixItems: [ + { type: "string" }, + { type: "number" } + ] + }, schemaUri, dialectUri); + const output = await validate(schemaUri, [42, "foo"], BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/prefixItems/0/type`, + instanceLocation: "#/0" + }, + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/prefixItems/1/type`, + instanceLocation: "#/1" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + prefixItems: [ + { type: "string" }, + { type: "number" } + ] + }, schemaUri, dialectUri); + const output = await validate(schemaUri, ["foo", 42], BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("properties", () => { + test("invalid", async () => { + registerSchema({ + properties: { + foo: { type: "string" }, + bar: { type: "number" } + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42, bar: true }, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/properties/foo/type`, + instanceLocation: "#/foo" + }, + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/properties/bar/type`, + instanceLocation: "#/bar" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + properties: { + foo: { type: "string" }, + bar: { type: "number" } + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: "a", bar: 42 }, BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("propertyNames", () => { + test("invalid", async () => { + registerSchema({ + propertyNames: { pattern: "^a" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { banana: true, pear: false }, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/pattern", + absoluteKeywordLocation: `${schemaUri}#/propertyNames/pattern`, + instanceLocation: "#*/banana" + }, + { + keyword: "https://json-schema.org/keyword/pattern", + absoluteKeywordLocation: `${schemaUri}#/propertyNames/pattern`, + instanceLocation: "#*/pear" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + propertyNames: { pattern: "^a" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { apple: true }, BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("unevaluatedProperties", () => { + test("invalid - boolean", async () => { + registerSchema({ unevaluatedProperties: false }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42 }, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/evaluation/validate", + absoluteKeywordLocation: `${schemaUri}#/unevaluatedProperties`, + instanceLocation: "#/foo" + } + ] + }); + }); + + test("invalid - doesn't apply if the schema fails", async () => { + registerSchema({ + properties: { + foo: true, + bar: false + }, + unevaluatedProperties: false + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42, bar: true, baz: null }, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/evaluation/validate", + absoluteKeywordLocation: `${schemaUri}#/properties/bar`, + instanceLocation: "#/bar" + } + ] + }); + }); + + test("invalid - schema", async () => { + registerSchema({ + unevaluatedProperties: { type: "string" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42 }, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/unevaluatedProperties/type`, + instanceLocation: "#/foo" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ unevaluatedProperties: false }, schemaUri, dialectUri); + const output = await validate(schemaUri, {}, BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("unevaluatedItems", () => { + test("invalid - boolean", async () => { + registerSchema({ unevaluatedItems: false }, schemaUri, dialectUri); + const output = await validate(schemaUri, [42], BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/evaluation/validate", + absoluteKeywordLocation: `${schemaUri}#/unevaluatedItems`, + instanceLocation: "#/0" + } + ] + }); + }); + + test("invalid - schema", async () => { + registerSchema({ + unevaluatedItems: { type: "string" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, [42], BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/unevaluatedItems/type`, + instanceLocation: "#/0" + } + ] + }); + }); + + test("invalid - doesn't apply if the schema fails", async () => { + registerSchema({ + prefixItems: [true, false], + unevaluatedItems: false + }, schemaUri, dialectUri); + const output = await validate(schemaUri, [42, true, null], BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/evaluation/validate", + absoluteKeywordLocation: `${schemaUri}#/prefixItems/1`, + instanceLocation: "#/1" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ unevaluatedItems: false }, schemaUri, dialectUri); + const output = await validate(schemaUri, [], BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("const", () => { + test("invalid", async () => { + registerSchema({ const: "foo" }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/const", + absoluteKeywordLocation: `${schemaUri}#/const`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ const: "foo" }, schemaUri, dialectUri); + const output = await validate(schemaUri, "foo", BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("dependentRequired", () => { + test("invalid", async () => { + registerSchema({ + dependentRequired: { + foo: ["a"] + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42 }, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/dependentRequired", + absoluteKeywordLocation: `${schemaUri}#/dependentRequired`, + instanceLocation: "#" + } + ] + }); + }); + + test("invalid - multiple conditions fail", async () => { + registerSchema({ + dependentRequired: { + foo: ["a"], + bar: ["b"] + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42, bar: 24 }, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/dependentRequired", + absoluteKeywordLocation: `${schemaUri}#/dependentRequired`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + dependentRequired: { + foo: ["a"] + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42, a: true }, BASIC); + + expect(output).to.eql({ valid: true }); + }); + }); + + describe("enum", () => { + test("invalid", async () => { + registerSchema({ enum: ["foo"] }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/enum", + absoluteKeywordLocation: `${schemaUri}#/enum`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ enum: ["foo"] }, schemaUri, dialectUri); + const output = await validate(schemaUri, "foo", BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("exclusiveMaximum", () => { + test("invalid", async () => { + registerSchema({ exclusiveMaximum: 5 }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/exclusiveMaximum", + absoluteKeywordLocation: `${schemaUri}#/exclusiveMaximum`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ exclusiveMaximum: 42 }, schemaUri, dialectUri); + const output = await validate(schemaUri, 5, BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("exclusiveMinimum", () => { + test("invalid", async () => { + registerSchema({ exclusiveMinimum: 42 }, schemaUri, dialectUri); + const output = await validate(schemaUri, 5, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/exclusiveMinimum", + absoluteKeywordLocation: `${schemaUri}#/exclusiveMinimum`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ exclusiveMinimum: 5 }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("maxItems", () => { + test("invalid", async () => { + registerSchema({ maxItems: 1 }, schemaUri, dialectUri); + const output = await validate(schemaUri, [1, 2], BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/maxItems", + absoluteKeywordLocation: `${schemaUri}#/maxItems`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ maxItems: 1 }, schemaUri, dialectUri); + const output = await validate(schemaUri, [], BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("minItems", () => { + test("invalid", async () => { + registerSchema({ minItems: 1 }, schemaUri, dialectUri); + const output = await validate(schemaUri, [], BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/minItems", + absoluteKeywordLocation: `${schemaUri}#/minItems`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ minItems: 1 }, schemaUri, dialectUri); + const output = await validate(schemaUri, [1, 2], BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("maxLength", () => { + test("invalid", async () => { + registerSchema({ maxLength: 2 }, schemaUri, dialectUri); + const output = await validate(schemaUri, "foo", BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/maxLength", + absoluteKeywordLocation: `${schemaUri}#/maxLength`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ maxLength: 2 }, schemaUri, dialectUri); + const output = await validate(schemaUri, "a", BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("minLength", () => { + test("invalid", async () => { + registerSchema({ minLength: 2 }, schemaUri, dialectUri); + const output = await validate(schemaUri, "a", BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/minLength", + absoluteKeywordLocation: `${schemaUri}#/minLength`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ minLength: 1 }, schemaUri, dialectUri); + const output = await validate(schemaUri, "foo", BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("maxProperties", () => { + test("invalid", async () => { + registerSchema({ maxProperties: 1 }, schemaUri, dialectUri); + const output = await validate(schemaUri, { a: 1, b: 2 }, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/maxProperties", + absoluteKeywordLocation: `${schemaUri}#/maxProperties`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ maxProperties: 1 }, schemaUri, dialectUri); + const output = await validate(schemaUri, {}, BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("minProperties", () => { + test("invalid", async () => { + registerSchema({ minProperties: 1 }, schemaUri, dialectUri); + const output = await validate(schemaUri, {}, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/minProperties", + absoluteKeywordLocation: `${schemaUri}#/minProperties`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ minProperties: 1 }, schemaUri, dialectUri); + const output = await validate(schemaUri, { a: 1, b: 2 }, BASIC); + + expect(output).to.eql({ valid: true }); + }); + }); + + describe("maximum", () => { + test("invalid", async () => { + registerSchema({ maximum: 5 }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/maximum", + absoluteKeywordLocation: `${schemaUri}#/maximum`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ maximum: 42 }, schemaUri, dialectUri); + const output = await validate(schemaUri, 5, BASIC); + + expect(output).to.eql({ valid: true }); + }); + }); + + describe("minimum", () => { + test("invalid", async () => { + registerSchema({ minimum: 42 }, schemaUri, dialectUri); + const output = await validate(schemaUri, 5, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/minimum", + absoluteKeywordLocation: `${schemaUri}#/minimum`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ minimum: 5 }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("multipleOf", () => { + test("invalid", async () => { + registerSchema({ multipleOf: 2 }, schemaUri, dialectUri); + const output = await validate(schemaUri, 3, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/multipleOf", + absoluteKeywordLocation: `${schemaUri}#/multipleOf`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ multipleOf: 2 }, schemaUri, dialectUri); + const output = await validate(schemaUri, 4, BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("pattern", () => { + test("invalid", async () => { + registerSchema({ pattern: "^a" }, schemaUri, dialectUri); + const output = await validate(schemaUri, "banana", BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/pattern", + absoluteKeywordLocation: `${schemaUri}#/pattern`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ pattern: "^a" }, schemaUri, dialectUri); + const output = await validate(schemaUri, "apple", BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("required", () => { + test("invalid", async () => { + registerSchema({ required: ["a"] }, schemaUri, dialectUri); + const output = await validate(schemaUri, {}, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/required", + absoluteKeywordLocation: `${schemaUri}#/required`, + instanceLocation: "#" + } + ] + }); + }); + + test("invalid - multiple missing", async () => { + registerSchema({ required: ["a", "b"] }, schemaUri, dialectUri); + const output = await validate(schemaUri, {}, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/required", + absoluteKeywordLocation: `${schemaUri}#/required`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ required: ["a"] }, schemaUri, dialectUri); + const output = await validate(schemaUri, { a: 1 }, BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("type", () => { + test("invalid", async () => { + registerSchema({ type: "string" }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/type`, + instanceLocation: "#" + } + ] + }); + }); + + test("invalid - multiple types", async () => { + registerSchema({ type: ["string", "null"] }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/type`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ type: "string" }, schemaUri, dialectUri); + const output = await validate(schemaUri, "foo", BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("uniqueItems", () => { + test("invalid", async () => { + registerSchema({ uniqueItems: true }, schemaUri, dialectUri); + const output = await validate(schemaUri, [1, 1], BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/uniqueItems", + absoluteKeywordLocation: `${schemaUri}#/uniqueItems`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ uniqueItems: true }, schemaUri, dialectUri); + const output = await validate(schemaUri, [1, 2], BASIC); + expect(output).to.eql({ valid: true }); + }); + }); + + test("Multiple errors in schema", async () => { + registerSchema({ + properties: { + foo: { type: "string" }, + bar: { type: "boolean" } + }, + required: ["foo", "bar"] + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42 }, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/properties/foo/type`, + instanceLocation: "#/foo" + }, + { + keyword: "https://json-schema.org/keyword/required", + absoluteKeywordLocation: `${schemaUri}#/required`, + instanceLocation: "#" + } + ] + }); + }); + + test("Deeply nested", async () => { + registerSchema({ + properties: { + foo: { + properties: { + bar: { type: "boolean" } + } + } + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: { bar: 42 } }, BASIC); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/properties/foo/properties/bar/type`, + instanceLocation: "#/foo/bar" + } + ] + }); + }); +}); diff --git a/lib/output-detailed.spec.ts b/lib/output-detailed.spec.ts new file mode 100644 index 00000000..ac913ace --- /dev/null +++ b/lib/output-detailed.spec.ts @@ -0,0 +1,1476 @@ +import { afterEach, describe, expect, test } from "vitest"; +import { validate, registerSchema, unregisterSchema } from "../stable/index.js"; +import { DETAILED } from "./experimental.js"; + + +describe("Detailed Output Format", () => { + const schemaUri = "schema:main"; + const dialectUri = "https://json-schema.org/validation"; + + afterEach(() => { + unregisterSchema(schemaUri); + }); + + describe("$ref", () => { + test("invalid", async () => { + registerSchema({ + $ref: "#/$defs/string", + $defs: { + string: { type: "string" } + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/ref", + absoluteKeywordLocation: `${schemaUri}#/$ref`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/$defs/string/type`, + instanceLocation: "#" + } + ] + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + $ref: "#/$defs/string", + $defs: { + string: { type: "string" } + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, "foo", DETAILED); + + expect(output).to.eql({ valid: true }); + }); + }); + + describe("additionalProperties", () => { + test("invalid", async () => { + registerSchema({ additionalProperties: false }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42 }, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/additionalProperties", + absoluteKeywordLocation: `${schemaUri}#/additionalProperties`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/evaluation/validate", + absoluteKeywordLocation: `${schemaUri}#/additionalProperties`, + instanceLocation: "#/foo" + } + ] + } + ] + }); + }); + + test("invalid - multiple errors", async () => { + registerSchema({ additionalProperties: false }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42, bar: 24 }, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/additionalProperties", + absoluteKeywordLocation: `${schemaUri}#/additionalProperties`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/evaluation/validate", + absoluteKeywordLocation: `${schemaUri}#/additionalProperties`, + instanceLocation: "#/foo" + }, + { + keyword: "https://json-schema.org/evaluation/validate", + absoluteKeywordLocation: `${schemaUri}#/additionalProperties`, + instanceLocation: "#/bar" + } + ] + } + ] + }); + }); + + test("invalid - schema", async () => { + registerSchema({ + additionalProperties: { type: "string" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42 }, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/additionalProperties", + absoluteKeywordLocation: `${schemaUri}#/additionalProperties`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/additionalProperties/type`, + instanceLocation: "#/foo" + } + ] + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ additionalProperties: true }, schemaUri, dialectUri); + const output = await validate(schemaUri, {}, DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("allOf", () => { + test("invalid", async () => { + registerSchema({ + allOf: [ + { type: "number" }, + { maximum: 5 } + ] + }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/allOf", + absoluteKeywordLocation: `${schemaUri}#/allOf`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/keyword/maximum", + absoluteKeywordLocation: `${schemaUri}#/allOf/1/maximum`, + instanceLocation: "#" + } + ] + } + ] + }); + }); + + test("invalid - multiple errors", async () => { + registerSchema({ + type: "number", + allOf: [ + { maximum: 2 }, + { maximum: 5 } + ] + }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/allOf", + absoluteKeywordLocation: `${schemaUri}#/allOf`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/keyword/maximum", + absoluteKeywordLocation: `${schemaUri}#/allOf/0/maximum`, + instanceLocation: "#" + }, + { + keyword: "https://json-schema.org/keyword/maximum", + absoluteKeywordLocation: `${schemaUri}#/allOf/1/maximum`, + instanceLocation: "#" + } + ] + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + allOf: [ + { type: "number" }, + { maximum: 5 } + ] + }, schemaUri, dialectUri); + const output = await validate(schemaUri, 3, DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("anyOf", () => { + test("invalid", async () => { + registerSchema({ + anyOf: [ + { type: "string" }, + { type: "number" } + ] + }, schemaUri, dialectUri); + const output = await validate(schemaUri, true, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/anyOf", + absoluteKeywordLocation: `${schemaUri}#/anyOf`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/anyOf/0/type`, + instanceLocation: "#" + }, + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/anyOf/1/type`, + instanceLocation: "#" + } + ] + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + anyOf: [ + { type: "string" }, + { type: "number" } + ] + }, schemaUri, dialectUri); + const output = await validate(schemaUri, "foo", DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("oneOf", () => { + test("invalid", async () => { + registerSchema({ + oneOf: [ + { type: "string" }, + { type: "number" } + ] + }, schemaUri, dialectUri); + const output = await validate(schemaUri, true, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/oneOf", + absoluteKeywordLocation: `${schemaUri}#/oneOf`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/oneOf/0/type`, + instanceLocation: "#" + }, + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/oneOf/1/type`, + instanceLocation: "#" + } + ] + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + oneOf: [ + { type: "string" }, + { type: "number" } + ] + }, schemaUri, dialectUri); + const output = await validate(schemaUri, "foo", DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("not", () => { + test("invalid", async () => { + registerSchema({ + not: { type: "number" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/not", + absoluteKeywordLocation: `${schemaUri}#/not`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + not: { type: "number" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, "foo", DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("contains", () => { + test("invalid", async () => { + registerSchema({ + contains: { type: "string" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, [1, 2], DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/contains", + absoluteKeywordLocation: `${schemaUri}#/contains`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/contains/type`, + instanceLocation: "#/0" + }, + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/contains/type`, + instanceLocation: "#/1" + } + ] + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + contains: { type: "string" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, [1, "foo"], DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("dependentSchemas", () => { + test("invalid", async () => { + registerSchema({ + dependentSchemas: { + foo: { required: ["a"] } + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42 }, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/dependentSchemas", + absoluteKeywordLocation: `${schemaUri}#/dependentSchemas`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/keyword/required", + absoluteKeywordLocation: `${schemaUri}#/dependentSchemas/foo/required`, + instanceLocation: "#" + } + ] + } + ] + }); + }); + + test("invalid - multiple conditions fail", async () => { + registerSchema({ + dependentSchemas: { + foo: { required: ["a"] }, + bar: { required: ["b"] } + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42, bar: 24 }, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/dependentSchemas", + absoluteKeywordLocation: `${schemaUri}#/dependentSchemas`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/keyword/required", + absoluteKeywordLocation: `${schemaUri}#/dependentSchemas/foo/required`, + instanceLocation: "#" + }, + { + keyword: "https://json-schema.org/keyword/required", + absoluteKeywordLocation: `${schemaUri}#/dependentSchemas/bar/required`, + instanceLocation: "#" + } + ] + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + dependentSchemas: { + foo: { required: ["a"] } + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42, a: true }, DETAILED); + + expect(output).to.eql({ valid: true }); + }); + }); + + describe("then", () => { + test("invalid", async () => { + registerSchema({ + if: { type: "string" }, + then: { minLength: 1 } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, "", DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/then", + absoluteKeywordLocation: `${schemaUri}#/then`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/keyword/minLength", + absoluteKeywordLocation: `${schemaUri}#/then/minLength`, + instanceLocation: "#" + } + ] + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + if: { type: "string" }, + then: { minLength: 1 } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, "foo", DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("else", () => { + test("invalid", async () => { + registerSchema({ + type: ["string", "number"], + if: { type: "string" }, + else: { minimum: 42 } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, 5, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/else", + absoluteKeywordLocation: `${schemaUri}#/else`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/keyword/minimum", + absoluteKeywordLocation: `${schemaUri}#/else/minimum`, + instanceLocation: "#" + } + ] + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + type: ["string", "number"], + if: { type: "string" }, + else: { minimum: 5 } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("items", () => { + test("invalid", async () => { + registerSchema({ + items: { type: "string" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, [42, 24], DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/items", + absoluteKeywordLocation: `${schemaUri}#/items`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/items/type`, + instanceLocation: "#/0" + }, + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/items/type`, + instanceLocation: "#/1" + } + ] + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + items: { type: "string" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, ["foo"], DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("patternProperties", () => { + test("invalid", async () => { + registerSchema({ + patternProperties: { + "^f": { type: "string" }, + "^b": { type: "number" } + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42, bar: true }, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/patternProperties", + absoluteKeywordLocation: `${schemaUri}#/patternProperties`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/patternProperties/%5Ef/type`, + instanceLocation: "#/foo" + }, + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/patternProperties/%5Eb/type`, + instanceLocation: "#/bar" + } + ] + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + patternProperties: { + "^f": { type: "string" }, + "^b": { type: "number" } + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: "a", bar: 42 }, DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("prefixItems", () => { + test("invalid", async () => { + registerSchema({ + prefixItems: [ + { type: "string" }, + { type: "number" } + ] + }, schemaUri, dialectUri); + const output = await validate(schemaUri, [42, "foo"], DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/prefixItems", + absoluteKeywordLocation: `${schemaUri}#/prefixItems`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/prefixItems/0/type`, + instanceLocation: "#/0" + }, + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/prefixItems/1/type`, + instanceLocation: "#/1" + } + ] + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + prefixItems: [ + { type: "string" }, + { type: "number" } + ] + }, schemaUri, dialectUri); + const output = await validate(schemaUri, ["foo", 42], DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("properties", () => { + test("invalid", async () => { + registerSchema({ + properties: { + foo: { type: "string" }, + bar: { type: "number" } + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42, bar: true }, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/properties", + absoluteKeywordLocation: `${schemaUri}#/properties`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/properties/foo/type`, + instanceLocation: "#/foo" + }, + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/properties/bar/type`, + instanceLocation: "#/bar" + } + ] + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + properties: { + foo: { type: "string" }, + bar: { type: "number" } + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: "a", bar: 42 }, DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("propertyNames", () => { + test("invalid", async () => { + registerSchema({ + propertyNames: { pattern: "^a" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { banana: true, pear: false }, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/propertyNames", + absoluteKeywordLocation: `${schemaUri}#/propertyNames`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/keyword/pattern", + absoluteKeywordLocation: `${schemaUri}#/propertyNames/pattern`, + instanceLocation: "#*/banana" + }, + { + keyword: "https://json-schema.org/keyword/pattern", + absoluteKeywordLocation: `${schemaUri}#/propertyNames/pattern`, + instanceLocation: "#*/pear" + } + ] + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + propertyNames: { pattern: "^a" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { apple: true }, DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("unevaluatedProperties", () => { + test("invalid - boolean", async () => { + registerSchema({ unevaluatedProperties: false }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42 }, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/unevaluatedProperties", + absoluteKeywordLocation: `${schemaUri}#/unevaluatedProperties`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/evaluation/validate", + absoluteKeywordLocation: `${schemaUri}#/unevaluatedProperties`, + instanceLocation: "#/foo" + } + ] + } + ] + }); + }); + + test("invalid - schema", async () => { + registerSchema({ + unevaluatedProperties: { type: "string" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42 }, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/unevaluatedProperties", + absoluteKeywordLocation: `${schemaUri}#/unevaluatedProperties`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/unevaluatedProperties/type`, + instanceLocation: "#/foo" + } + ] + } + ] + }); + }); + + test("invalid - doesn't apply if the schema fails", async () => { + registerSchema({ + properties: { + foo: true, + bar: false + }, + unevaluatedProperties: false + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42, bar: true, baz: null }, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/properties", + absoluteKeywordLocation: `${schemaUri}#/properties`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/evaluation/validate", + absoluteKeywordLocation: `${schemaUri}#/properties/bar`, + instanceLocation: "#/bar" + } + ] + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ unevaluatedProperties: false }, schemaUri, dialectUri); + const output = await validate(schemaUri, {}, DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("unevaluatedItems", () => { + test("invalid - boolean", async () => { + registerSchema({ unevaluatedItems: false }, schemaUri, dialectUri); + const output = await validate(schemaUri, [42], DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/unevaluatedItems", + absoluteKeywordLocation: `${schemaUri}#/unevaluatedItems`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/evaluation/validate", + absoluteKeywordLocation: `${schemaUri}#/unevaluatedItems`, + instanceLocation: "#/0" + } + ] + } + ] + }); + }); + + test("invalid - schema", async () => { + registerSchema({ + unevaluatedItems: { type: "string" } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, [42], DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/unevaluatedItems", + absoluteKeywordLocation: `${schemaUri}#/unevaluatedItems`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/unevaluatedItems/type`, + instanceLocation: "#/0" + } + ] + } + ] + }); + }); + + test("invalid - doesn't apply if the schema fails", async () => { + registerSchema({ + prefixItems: [true, false], + unevaluatedItems: false + }, schemaUri, dialectUri); + const output = await validate(schemaUri, [42, true, null], DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/prefixItems", + absoluteKeywordLocation: `${schemaUri}#/prefixItems`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/evaluation/validate", + absoluteKeywordLocation: `${schemaUri}#/prefixItems/1`, + instanceLocation: "#/1" + } + ] + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ unevaluatedItems: false }, schemaUri, dialectUri); + const output = await validate(schemaUri, [], DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("const", () => { + test("invalid", async () => { + registerSchema({ const: "foo" }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/const", + absoluteKeywordLocation: `${schemaUri}#/const`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ const: "foo" }, schemaUri, dialectUri); + const output = await validate(schemaUri, "foo", DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("dependentRequired", () => { + test("invalid", async () => { + registerSchema({ + dependentRequired: { + foo: ["a"] + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42 }, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/dependentRequired", + absoluteKeywordLocation: `${schemaUri}#/dependentRequired`, + instanceLocation: "#" + } + ] + }); + }); + + test("invalid - multiple conditions fail", async () => { + registerSchema({ + dependentRequired: { + foo: ["a"], + bar: ["b"] + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42, bar: 24 }, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/dependentRequired", + absoluteKeywordLocation: `${schemaUri}#/dependentRequired`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ + dependentRequired: { + foo: ["a"] + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42, a: true }, DETAILED); + + expect(output).to.eql({ valid: true }); + }); + }); + + describe("enum", () => { + test("invalid", async () => { + registerSchema({ enum: ["foo"] }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/enum", + absoluteKeywordLocation: `${schemaUri}#/enum`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ enum: ["foo"] }, schemaUri, dialectUri); + const output = await validate(schemaUri, "foo", DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("exclusiveMaximum", () => { + test("invalid", async () => { + registerSchema({ exclusiveMaximum: 5 }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/exclusiveMaximum", + absoluteKeywordLocation: `${schemaUri}#/exclusiveMaximum`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ exclusiveMaximum: 42 }, schemaUri, dialectUri); + const output = await validate(schemaUri, 5, DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("exclusiveMinimum", () => { + test("invalid", async () => { + registerSchema({ exclusiveMinimum: 42 }, schemaUri, dialectUri); + const output = await validate(schemaUri, 5, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/exclusiveMinimum", + absoluteKeywordLocation: `${schemaUri}#/exclusiveMinimum`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ exclusiveMinimum: 5 }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("maxItems", () => { + test("invalid", async () => { + registerSchema({ maxItems: 1 }, schemaUri, dialectUri); + const output = await validate(schemaUri, [1, 2], DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/maxItems", + absoluteKeywordLocation: `${schemaUri}#/maxItems`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ maxItems: 1 }, schemaUri, dialectUri); + const output = await validate(schemaUri, [], DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("minItems", () => { + test("invalid", async () => { + registerSchema({ minItems: 1 }, schemaUri, dialectUri); + const output = await validate(schemaUri, [], DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/minItems", + absoluteKeywordLocation: `${schemaUri}#/minItems`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ minItems: 1 }, schemaUri, dialectUri); + const output = await validate(schemaUri, [1, 2], DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("maxLength", () => { + test("invalid", async () => { + registerSchema({ maxLength: 2 }, schemaUri, dialectUri); + const output = await validate(schemaUri, "foo", DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/maxLength", + absoluteKeywordLocation: `${schemaUri}#/maxLength`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ maxLength: 2 }, schemaUri, dialectUri); + const output = await validate(schemaUri, "a", DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("minLength", () => { + test("invalid", async () => { + registerSchema({ minLength: 2 }, schemaUri, dialectUri); + const output = await validate(schemaUri, "a", DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/minLength", + absoluteKeywordLocation: `${schemaUri}#/minLength`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ minLength: 1 }, schemaUri, dialectUri); + const output = await validate(schemaUri, "foo", DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("maxProperties", () => { + test("invalid", async () => { + registerSchema({ maxProperties: 1 }, schemaUri, dialectUri); + const output = await validate(schemaUri, { a: 1, b: 2 }, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/maxProperties", + absoluteKeywordLocation: `${schemaUri}#/maxProperties`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ maxProperties: 1 }, schemaUri, dialectUri); + const output = await validate(schemaUri, {}, DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("minProperties", () => { + test("invalid", async () => { + registerSchema({ minProperties: 1 }, schemaUri, dialectUri); + const output = await validate(schemaUri, {}, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/minProperties", + absoluteKeywordLocation: `${schemaUri}#/minProperties`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ minProperties: 1 }, schemaUri, dialectUri); + const output = await validate(schemaUri, { a: 1, b: 2 }, DETAILED); + + expect(output).to.eql({ valid: true }); + }); + }); + + describe("maximum", () => { + test("invalid", async () => { + registerSchema({ maximum: 5 }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/maximum", + absoluteKeywordLocation: `${schemaUri}#/maximum`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ maximum: 42 }, schemaUri, dialectUri); + const output = await validate(schemaUri, 5, DETAILED); + + expect(output).to.eql({ valid: true }); + }); + }); + + describe("minimum", () => { + test("invalid", async () => { + registerSchema({ minimum: 42 }, schemaUri, dialectUri); + const output = await validate(schemaUri, 5, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/minimum", + absoluteKeywordLocation: `${schemaUri}#/minimum`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ minimum: 5 }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("multipleOf", () => { + test("invalid", async () => { + registerSchema({ multipleOf: 2 }, schemaUri, dialectUri); + const output = await validate(schemaUri, 3, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/multipleOf", + absoluteKeywordLocation: `${schemaUri}#/multipleOf`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ multipleOf: 2 }, schemaUri, dialectUri); + const output = await validate(schemaUri, 4, DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("pattern", () => { + test("invalid", async () => { + registerSchema({ pattern: "^a" }, schemaUri, dialectUri); + const output = await validate(schemaUri, "banana", DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/pattern", + absoluteKeywordLocation: `${schemaUri}#/pattern`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ pattern: "^a" }, schemaUri, dialectUri); + const output = await validate(schemaUri, "apple", DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("required", () => { + test("invalid", async () => { + registerSchema({ required: ["a"] }, schemaUri, dialectUri); + const output = await validate(schemaUri, {}, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/required", + absoluteKeywordLocation: `${schemaUri}#/required`, + instanceLocation: "#" + } + ] + }); + }); + + test("invalid - multiple missing", async () => { + registerSchema({ required: ["a", "b"] }, schemaUri, dialectUri); + const output = await validate(schemaUri, {}, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/required", + absoluteKeywordLocation: `${schemaUri}#/required`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ required: ["a"] }, schemaUri, dialectUri); + const output = await validate(schemaUri, { a: 1 }, DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("type", () => { + test("invalid", async () => { + registerSchema({ type: "string" }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/type`, + instanceLocation: "#" + } + ] + }); + }); + + test("invalid - multiple types", async () => { + registerSchema({ type: ["string", "null"] }, schemaUri, dialectUri); + const output = await validate(schemaUri, 42, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/type`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ type: "string" }, schemaUri, dialectUri); + const output = await validate(schemaUri, "foo", DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + describe("uniqueItems", () => { + test("invalid", async () => { + registerSchema({ uniqueItems: true }, schemaUri, dialectUri); + const output = await validate(schemaUri, [1, 1], DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/uniqueItems", + absoluteKeywordLocation: `${schemaUri}#/uniqueItems`, + instanceLocation: "#" + } + ] + }); + }); + + test("valid", async () => { + registerSchema({ uniqueItems: true }, schemaUri, dialectUri); + const output = await validate(schemaUri, [1, 2], DETAILED); + expect(output).to.eql({ valid: true }); + }); + }); + + test("Multiple errors in schema", async () => { + registerSchema({ + properties: { + foo: { type: "string" }, + bar: { type: "boolean" } + }, + required: ["foo", "bar"] + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: 42 }, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/properties", + absoluteKeywordLocation: `${schemaUri}#/properties`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/properties/foo/type`, + instanceLocation: "#/foo" + } + ] + }, + { + keyword: "https://json-schema.org/keyword/required", + absoluteKeywordLocation: `${schemaUri}#/required`, + instanceLocation: "#" + } + ] + }); + }); + + test("Deeply nested", async () => { + registerSchema({ + properties: { + foo: { + properties: { + bar: { type: "boolean" } + } + } + } + }, schemaUri, dialectUri); + const output = await validate(schemaUri, { foo: { bar: 42 } }, DETAILED); + + expect(output).to.eql({ + valid: false, + errors: [ + { + keyword: "https://json-schema.org/keyword/properties", + absoluteKeywordLocation: `${schemaUri}#/properties`, + instanceLocation: "#", + errors: [ + { + keyword: "https://json-schema.org/keyword/properties", + absoluteKeywordLocation: `${schemaUri}#/properties/foo/properties`, + instanceLocation: "#/foo", + errors: [ + { + keyword: "https://json-schema.org/keyword/type", + absoluteKeywordLocation: `${schemaUri}#/properties/foo/properties/bar/type`, + instanceLocation: "#/foo/bar" + } + ] + } + ] + } + ] + }); + }); +}); diff --git a/lib/output.js b/lib/output.js deleted file mode 100644 index ea1b5b06..00000000 --- a/lib/output.js +++ /dev/null @@ -1,41 +0,0 @@ -import * as Instance from "./instance.js"; - - -const outputFormats = {}; - -export const toOutputFormat = (node, outputFormat) => { - if (outputFormat in outputFormats) { - return outputFormats[outputFormat](node); - } else { - throw Error(`The '${outputFormat}' error format is not supported`); - } -}; - -outputFormats.FLAG = (instance) => { - return { valid: instance.valid }; -}; - -outputFormats.BASIC = (instance) => { - const output = { - valid: instance.valid - }; - - if (!instance.valid) { - output.errors = []; - - for (const child of Instance.allNodes(instance)) { - for (const [absoluteKeywordLocation, keyword] of Object.entries(child.errors).reverse()) { - if (keyword !== "https://json-schema.org/evaluation/validate" && !child.valid) { - output.errors.unshift({ - keyword, - absoluteKeywordLocation, - instanceLocation: Instance.uri(child), - valid: child.valid - }); - } - } - } - } - - return output; -}; diff --git a/lib/schema.js b/lib/schema.js index 5e736220..b701a0fd 100644 --- a/lib/schema.js +++ b/lib/schema.js @@ -59,6 +59,8 @@ export const unregisterSchema = (uri) => { delete schemaRegistry[normalizedUri]; }; +export const getAllRegisteredSchemaUris = () => Object.keys(schemaRegistry); + export const hasSchema = (uri) => uri in schemaRegistry; export const buildSchemaDocument = (schema, id, dialectId, embedded = {}) => { diff --git a/openapi-3-0/discriminator.js b/openapi-3-0/discriminator.js index 2a435d30..f45aa21d 100644 --- a/openapi-3-0/discriminator.js +++ b/openapi-3-0/discriminator.js @@ -1,14 +1,10 @@ import * as Browser from "@hyperjump/browser"; -import * as Instance from "../annotations/annotated-instance.js"; const id = "https://spec.openapis.org/oas/3.0/keyword/discriminator"; const compile = (schema) => Browser.value(schema); +const interpret = () => true; +const annotation = (discriminator) => discriminator; -const interpret = (discriminator, instance, _ast, _dynamicAnchors, _quiet, schemaLocation) => { - Instance.setAnnotation(instance, id, schemaLocation, discriminator); - return true; -}; - -export default { id, compile, interpret }; +export default { id, compile, interpret, annotation }; diff --git a/openapi-3-0/example.js b/openapi-3-0/example.js index e835032b..98bc5869 100644 --- a/openapi-3-0/example.js +++ b/openapi-3-0/example.js @@ -1,14 +1,10 @@ import * as Browser from "@hyperjump/browser"; -import * as Instance from "../annotations/annotated-instance.js"; const id = "https://spec.openapis.org/oas/3.0/keyword/example"; const compile = (schema) => Browser.value(schema); +const interpret = () => true; +const annotation = (example) => example; -const interpret = (example, instance, _ast, _dynamicAnchors, _quiet, schemaLocation) => { - Instance.setAnnotation(instance, id, schemaLocation, example); - return true; -}; - -export default { id, compile, interpret }; +export default { id, compile, interpret, annotation }; diff --git a/openapi-3-0/externalDocs.js b/openapi-3-0/externalDocs.js index 29aac98c..bfee8163 100644 --- a/openapi-3-0/externalDocs.js +++ b/openapi-3-0/externalDocs.js @@ -1,14 +1,10 @@ import * as Browser from "@hyperjump/browser"; -import * as Instance from "../annotations/annotated-instance.js"; const id = "https://spec.openapis.org/oas/3.0/keyword/externalDocs"; const compile = (schema) => Browser.value(schema); +const interpret = () => true; +const annotation = (externalDocs) => externalDocs; -const interpret = (externalDocs, instance, _ast, _dynamicAnchors, _quiet, schemaLocation) => { - Instance.setAnnotation(instance, id, schemaLocation, externalDocs); - return true; -}; - -export default { id, compile, interpret }; +export default { id, compile, interpret, annotation }; diff --git a/openapi-3-0/index.d.ts b/openapi-3-0/index.d.ts index 8aca1866..825de2a2 100644 --- a/openapi-3-0/index.d.ts +++ b/openapi-3-0/index.d.ts @@ -57,7 +57,7 @@ type Xml = { wrapped?: boolean; }; -type OpenApi = { +export type OpenApi30 = { openapi: string; info: Info; externalDocs?: ExternalDocs; diff --git a/openapi-3-0/xml.js b/openapi-3-0/xml.js index 7bedc5f0..e6476570 100644 --- a/openapi-3-0/xml.js +++ b/openapi-3-0/xml.js @@ -1,14 +1,10 @@ import * as Browser from "@hyperjump/browser"; -import * as Instance from "../annotations/annotated-instance.js"; const id = "https://spec.openapis.org/oas/3.0/keyword/xml"; const compile = (schema) => Browser.value(schema); +const interpret = () => true; +const annotation = (xml) => xml; -const interpret = (xml, instance, _ast, _dynamicAnchors, _quiet, schemaLocation) => { - Instance.setAnnotation(instance, id, schemaLocation, xml); - return true; -}; - -export default { id, compile, interpret }; +export default { id, compile, interpret, annotation }; diff --git a/openapi-3-1/dialect/base.js b/openapi-3-1/dialect/base.js index ccc646bc..6a2f4b5b 100644 --- a/openapi-3-1/dialect/base.js +++ b/openapi-3-1/dialect/base.js @@ -1,5 +1,4 @@ export default { - "$id": "https://spec.openapis.org/oas/3.1/dialect/base", "$schema": "https://json-schema.org/draft/2020-12/schema", "$vocabulary": { "https://json-schema.org/draft/2020-12/vocab/core": true, @@ -14,6 +13,8 @@ export default { "$dynamicAnchor": "meta", "title": "OpenAPI 3.1 Schema Object Dialect", + "description": "A JSON Schema dialect describing schemas found in OpenAPI v3.1 Descriptions", + "allOf": [ { "$ref": "https://json-schema.org/draft/2020-12/schema" }, { "$ref": "https://spec.openapis.org/oas/3.1/meta/base" } diff --git a/openapi-3-1/index.d.ts b/openapi-3-1/index.d.ts index 1566196a..67651180 100644 --- a/openapi-3-1/index.d.ts +++ b/openapi-3-1/index.d.ts @@ -3,7 +3,7 @@ import type { JsonSchemaType } from "../lib/common.js"; export type OasSchema31 = boolean | { - $schema?: "https://json-schema.org/draft/2020-12/schema"; + $schema?: "https://spec.openapis.org/oas/3.1/dialect/base"; $id?: string; $anchor?: string; $ref?: string; diff --git a/openapi-3-1/index.js b/openapi-3-1/index.js index a6004097..a2840f53 100644 --- a/openapi-3-1/index.js +++ b/openapi-3-1/index.js @@ -32,8 +32,8 @@ defineVocabulary("https://spec.openapis.org/oas/3.1/vocab/base", { "xml": "https://spec.openapis.org/oas/3.0/keyword/xml" }); -registerSchema(vocabularySchema); -registerSchema(dialectSchema); +registerSchema(vocabularySchema, "https://spec.openapis.org/oas/3.1/meta/base"); +registerSchema(dialectSchema, "https://spec.openapis.org/oas/3.1/dialect/base"); // Current Schemas registerSchema(schema, "https://spec.openapis.org/oas/3.1/schema"); diff --git a/openapi-3-1/json-schema-test-suite.spec.ts b/openapi-3-1/json-schema-test-suite.spec.ts index 97400111..cf449fef 100644 --- a/openapi-3-1/json-schema-test-suite.spec.ts +++ b/openapi-3-1/json-schema-test-suite.spec.ts @@ -81,6 +81,7 @@ const runTestSuite = (draft: string, dialectId: string) => { return; } url = `http://${draft}-test-suite.json-schema.org/${entry.name}/${encodeURIComponent(suite.description)}`; + // @ts-expect-error Covert from 2020-12 if (typeof suite.schema === "object" && suite.schema.$schema === "https://json-schema.org/draft/2020-12/schema") { delete suite.schema.$schema; } diff --git a/openapi-3-1/meta/base.js b/openapi-3-1/meta/base.js index fdaba27e..303423f1 100644 --- a/openapi-3-1/meta/base.js +++ b/openapi-3-1/meta/base.js @@ -1,8 +1,9 @@ export default { - "$id": "https://spec.openapis.org/oas/3.1/meta/base", "$schema": "https://json-schema.org/draft/2020-12/schema", "$dynamicAnchor": "meta", - "title": "OAS Base vocabulary", + + "title": "OAS Base Vocabulary", + "description": "A JSON Schema Vocabulary used in the OpenAPI Schema Dialect", "type": ["object", "boolean"], "properties": { diff --git a/openapi-3-1/schema-base.js b/openapi-3-1/schema-base.js index f05e7fdb..a84f8ab7 100644 --- a/openapi-3-1/schema-base.js +++ b/openapi-3-1/schema-base.js @@ -12,7 +12,7 @@ export default { "https://spec.openapis.org/oas/3.1/vocab/base": false }, - "description": "The description of OpenAPI v3.1.x documents using the OpenAPI JSON Schema dialect, as defined by https://spec.openapis.org/oas/v3.1.0", + "description": "The description of OpenAPI v3.1.x Documents using the OpenAPI JSON Schema dialect", "$ref": "https://spec.openapis.org/oas/3.1/schema", "properties": { diff --git a/openapi-3-1/schema.js b/openapi-3-1/schema.js index ac5d5504..6aed8baa 100644 --- a/openapi-3-1/schema.js +++ b/openapi-3-1/schema.js @@ -1,7 +1,6 @@ export default { - "$id": "https://spec.openapis.org/oas/3.1/schema/2022-10-07", "$schema": "https://json-schema.org/draft/2020-12/schema", - "description": "The description of OpenAPI v3.1.x documents without schema validation, as defined by https://spec.openapis.org/oas/v3.1.0", + "description": "The description of OpenAPI v3.1.x Documents without Schema Object validation", "type": "object", "properties": { "openapi": { @@ -13,7 +12,7 @@ export default { }, "jsonSchemaDialect": { "type": "string", - "format": "uri", + "format": "uri-reference", "default": "https://spec.openapis.org/oas/3.1/dialect/base" }, "servers": { @@ -33,7 +32,7 @@ export default { "webhooks": { "type": "object", "additionalProperties": { - "$ref": "#/$defs/path-item-or-reference" + "$ref": "#/$defs/path-item" } }, "components": { @@ -80,7 +79,7 @@ export default { "unevaluatedProperties": false, "$defs": { "info": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#info-object", + "$comment": "https://spec.openapis.org/oas/v3.1#info-object", "type": "object", "properties": { "title": { @@ -94,7 +93,7 @@ export default { }, "termsOfService": { "type": "string", - "format": "uri" + "format": "uri-reference" }, "contact": { "$ref": "#/$defs/contact" @@ -114,7 +113,7 @@ export default { "unevaluatedProperties": false }, "contact": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#contact-object", + "$comment": "https://spec.openapis.org/oas/v3.1#contact-object", "type": "object", "properties": { "name": { @@ -122,7 +121,7 @@ export default { }, "url": { "type": "string", - "format": "uri" + "format": "uri-reference" }, "email": { "type": "string", @@ -133,7 +132,7 @@ export default { "unevaluatedProperties": false }, "license": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#license-object", + "$comment": "https://spec.openapis.org/oas/v3.1#license-object", "type": "object", "properties": { "name": { @@ -144,7 +143,7 @@ export default { }, "url": { "type": "string", - "format": "uri" + "format": "uri-reference" } }, "required": [ @@ -163,12 +162,11 @@ export default { "unevaluatedProperties": false }, "server": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#server-object", + "$comment": "https://spec.openapis.org/oas/v3.1#server-object", "type": "object", "properties": { "url": { - "type": "string", - "format": "uri-reference" + "type": "string" }, "description": { "type": "string" @@ -187,7 +185,7 @@ export default { "unevaluatedProperties": false }, "server-variable": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#server-variable-object", + "$comment": "https://spec.openapis.org/oas/v3.1#server-variable-object", "type": "object", "properties": { "enum": { @@ -211,7 +209,7 @@ export default { "unevaluatedProperties": false }, "components": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#components-object", + "$comment": "https://spec.openapis.org/oas/v3.1#components-object", "type": "object", "properties": { "schemas": { @@ -271,7 +269,7 @@ export default { "pathItems": { "type": "object", "additionalProperties": { - "$ref": "#/$defs/path-item-or-reference" + "$ref": "#/$defs/path-item" } } }, @@ -287,7 +285,7 @@ export default { "unevaluatedProperties": false }, "paths": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#paths-object", + "$comment": "https://spec.openapis.org/oas/v3.1#paths-object", "type": "object", "patternProperties": { "^/": { @@ -298,9 +296,13 @@ export default { "unevaluatedProperties": false }, "path-item": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#path-item-object", + "$comment": "https://spec.openapis.org/oas/v3.1#path-item-object", "type": "object", "properties": { + "$ref": { + "type": "string", + "format": "uri-reference" + }, "summary": { "type": "string" }, @@ -347,22 +349,8 @@ export default { "$ref": "#/$defs/specification-extensions", "unevaluatedProperties": false }, - "path-item-or-reference": { - "if": { - "type": "object", - "required": [ - "$ref" - ] - }, - "then": { - "$ref": "#/$defs/reference" - }, - "else": { - "$ref": "#/$defs/path-item" - } - }, "operation": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#operation-object", + "$comment": "https://spec.openapis.org/oas/v3.1#operation-object", "type": "object", "properties": { "tags": { @@ -422,7 +410,7 @@ export default { "unevaluatedProperties": false }, "external-documentation": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#external-documentation-object", + "$comment": "https://spec.openapis.org/oas/v3.1#external-documentation-object", "type": "object", "properties": { "description": { @@ -430,7 +418,7 @@ export default { }, "url": { "type": "string", - "format": "uri" + "format": "uri-reference" } }, "required": [ @@ -440,7 +428,7 @@ export default { "unevaluatedProperties": false }, "parameter": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#parameter-object", + "$comment": "https://spec.openapis.org/oas/v3.1#parameter-object", "type": "object", "properties": { "name": { @@ -535,7 +523,7 @@ export default { "$ref": "#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-cookie" }, { - "$ref": "#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-form" + "$ref": "#/$defs/styles-for-form" } ], "$defs": { @@ -552,9 +540,6 @@ export default { }, "then": { "properties": { - "name": { - "pattern": "[^/#?]+$" - }, "style": { "default": "simple", "enum": [ @@ -640,32 +625,6 @@ export default { } } } - }, - "styles-for-form": { - "if": { - "properties": { - "style": { - "const": "form" - } - }, - "required": [ - "style" - ] - }, - "then": { - "properties": { - "explode": { - "default": true - } - } - }, - "else": { - "properties": { - "explode": { - "default": false - } - } - } } } } @@ -688,7 +647,7 @@ export default { } }, "request-body": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#request-body-object", + "$comment": "https://spec.openapis.org/oas/v3.1#request-body-object", "type": "object", "properties": { "description": { @@ -723,7 +682,7 @@ export default { } }, "content": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#fixed-fields-10", + "$comment": "https://spec.openapis.org/oas/v3.1#fixed-fields-10", "type": "object", "additionalProperties": { "$ref": "#/$defs/media-type" @@ -733,7 +692,7 @@ export default { } }, "media-type": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#media-type-object", + "$comment": "https://spec.openapis.org/oas/v3.1#media-type-object", "type": "object", "properties": { "schema": { @@ -757,7 +716,7 @@ export default { "unevaluatedProperties": false }, "encoding": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#encoding-object", + "$comment": "https://spec.openapis.org/oas/v3.1#encoding-object", "type": "object", "properties": { "contentType": { @@ -792,41 +751,13 @@ export default { "$ref": "#/$defs/specification-extensions" }, { - "$ref": "#/$defs/encoding/$defs/explode-default" + "$ref": "#/$defs/styles-for-form" } ], - "unevaluatedProperties": false, - "$defs": { - "explode-default": { - "if": { - "properties": { - "style": { - "const": "form" - } - }, - "required": [ - "style" - ] - }, - "then": { - "properties": { - "explode": { - "default": true - } - } - }, - "else": { - "properties": { - "explode": { - "default": false - } - } - } - } - } + "unevaluatedProperties": false }, "responses": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#responses-object", + "$comment": "https://spec.openapis.org/oas/v3.1#responses-object", "type": "object", "properties": { "default": { @@ -840,10 +771,21 @@ export default { }, "minProperties": 1, "$ref": "#/$defs/specification-extensions", - "unevaluatedProperties": false + "unevaluatedProperties": false, + "if": { + "$comment": "either default, or at least one response code property must exist", + "patternProperties": { + "^[1-5](?:[0-9]{2}|XX)$": false + } + }, + "then": { + "required": [ + "default" + ] + } }, "response": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#response-object", + "$comment": "https://spec.openapis.org/oas/v3.1#response-object", "type": "object", "properties": { "description": { @@ -886,11 +828,11 @@ export default { } }, "callbacks": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#callback-object", + "$comment": "https://spec.openapis.org/oas/v3.1#callback-object", "type": "object", "$ref": "#/$defs/specification-extensions", "additionalProperties": { - "$ref": "#/$defs/path-item-or-reference" + "$ref": "#/$defs/path-item" } }, "callbacks-or-reference": { @@ -908,7 +850,7 @@ export default { } }, "example": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#example-object", + "$comment": "https://spec.openapis.org/oas/v3.1#example-object", "type": "object", "properties": { "summary": { @@ -920,7 +862,7 @@ export default { "value": true, "externalValue": { "type": "string", - "format": "uri" + "format": "uri-reference" } }, "not": { @@ -947,7 +889,7 @@ export default { } }, "link": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#link-object", + "$comment": "https://spec.openapis.org/oas/v3.1#link-object", "type": "object", "properties": { "operationRef": { @@ -998,7 +940,7 @@ export default { } }, "header": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#header-object", + "$comment": "https://spec.openapis.org/oas/v3.1#header-object", "type": "object", "properties": { "description": { @@ -1066,7 +1008,7 @@ export default { } }, "tag": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#tag-object", + "$comment": "https://spec.openapis.org/oas/v3.1#tag-object", "type": "object", "properties": { "name": { @@ -1086,7 +1028,7 @@ export default { "unevaluatedProperties": false }, "reference": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#reference-object", + "$comment": "https://spec.openapis.org/oas/v3.1#reference-object", "type": "object", "properties": { "$ref": { @@ -1099,11 +1041,10 @@ export default { "description": { "type": "string" } - }, - "unevaluatedProperties": false + } }, "schema": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#schema-object", + "$comment": "https://spec.openapis.org/oas/v3.1#schema-object", "$dynamicAnchor": "meta", "type": [ "object", @@ -1111,7 +1052,7 @@ export default { ] }, "security-scheme": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#security-scheme-object", + "$comment": "https://spec.openapis.org/oas/v3.1#security-scheme-object", "type": "object", "properties": { "type": { @@ -1265,7 +1206,7 @@ export default { "properties": { "openIdConnectUrl": { "type": "string", - "format": "uri" + "format": "uri-reference" } }, "required": [ @@ -1313,11 +1254,11 @@ export default { "properties": { "authorizationUrl": { "type": "string", - "format": "uri" + "format": "uri-reference" }, "refreshUrl": { "type": "string", - "format": "uri" + "format": "uri-reference" }, "scopes": { "$ref": "#/$defs/map-of-strings" @@ -1335,11 +1276,11 @@ export default { "properties": { "tokenUrl": { "type": "string", - "format": "uri" + "format": "uri-reference" }, "refreshUrl": { "type": "string", - "format": "uri" + "format": "uri-reference" }, "scopes": { "$ref": "#/$defs/map-of-strings" @@ -1357,11 +1298,11 @@ export default { "properties": { "tokenUrl": { "type": "string", - "format": "uri" + "format": "uri-reference" }, "refreshUrl": { "type": "string", - "format": "uri" + "format": "uri-reference" }, "scopes": { "$ref": "#/$defs/map-of-strings" @@ -1379,15 +1320,15 @@ export default { "properties": { "authorizationUrl": { "type": "string", - "format": "uri" + "format": "uri-reference" }, "tokenUrl": { "type": "string", - "format": "uri" + "format": "uri-reference" }, "refreshUrl": { "type": "string", - "format": "uri" + "format": "uri-reference" }, "scopes": { "$ref": "#/$defs/map-of-strings" @@ -1404,7 +1345,7 @@ export default { } }, "security-requirement": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#security-requirement-object", + "$comment": "https://spec.openapis.org/oas/v3.1#security-requirement-object", "type": "object", "additionalProperties": { "type": "array", @@ -1414,7 +1355,7 @@ export default { } }, "specification-extensions": { - "$comment": "https://spec.openapis.org/oas/v3.1.0#specification-extensions", + "$comment": "https://spec.openapis.org/oas/v3.1#specification-extensions", "patternProperties": { "^x-": true } @@ -1435,6 +1376,32 @@ export default { "additionalProperties": { "type": "string" } + }, + "styles-for-form": { + "if": { + "properties": { + "style": { + "const": "form" + } + }, + "required": [ + "style" + ] + }, + "then": { + "properties": { + "explode": { + "default": true + } + } + }, + "else": { + "properties": { + "explode": { + "default": false + } + } + } } } }; diff --git a/openapi-3-2/dialect/base.js b/openapi-3-2/dialect/base.js new file mode 100644 index 00000000..e024c788 --- /dev/null +++ b/openapi-3-2/dialect/base.js @@ -0,0 +1,22 @@ +export default { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$vocabulary": { + "https://json-schema.org/draft/2020-12/vocab/core": true, + "https://json-schema.org/draft/2020-12/vocab/applicator": true, + "https://json-schema.org/draft/2020-12/vocab/unevaluated": true, + "https://json-schema.org/draft/2020-12/vocab/validation": true, + "https://json-schema.org/draft/2020-12/vocab/meta-data": true, + "https://json-schema.org/draft/2020-12/vocab/format-annotation": true, + "https://json-schema.org/draft/2020-12/vocab/content": true, + "https://spec.openapis.org/oas/3.2/vocab/base": false + }, + "$dynamicAnchor": "meta", + + "title": "OpenAPI 3.2 Schema Object Dialect", + "description": "A JSON Schema dialect describing schemas found in OpenAPI v3.2 Descriptions", + + "allOf": [ + { "$ref": "https://json-schema.org/draft/2020-12/schema" }, + { "$ref": "https://spec.openapis.org/oas/3.2/meta/base" } + ] +}; diff --git a/openapi-3-2/index.d.ts b/openapi-3-2/index.d.ts new file mode 100644 index 00000000..cde98c0d --- /dev/null +++ b/openapi-3-2/index.d.ts @@ -0,0 +1,91 @@ +import type { Json } from "@hyperjump/json-pointer"; +import type { JsonSchemaType } from "../lib/common.js"; + + +export type OasSchema32 = boolean | { + $schema?: "https://spec.openapis.org/oas/3.2/dialect/base"; + $id?: string; + $anchor?: string; + $ref?: string; + $dynamicRef?: string; + $dynamicAnchor?: string; + $vocabulary?: Record; + $comment?: string; + $defs?: Record; + additionalItems?: OasSchema32; + unevaluatedItems?: OasSchema32; + prefixItems?: OasSchema32[]; + items?: OasSchema32; + contains?: OasSchema32; + additionalProperties?: OasSchema32; + unevaluatedProperties?: OasSchema32; + properties?: Record; + patternProperties?: Record; + dependentSchemas?: Record; + propertyNames?: OasSchema32; + if?: OasSchema32; + then?: OasSchema32; + else?: OasSchema32; + allOf?: OasSchema32[]; + anyOf?: OasSchema32[]; + oneOf?: OasSchema32[]; + not?: OasSchema32; + multipleOf?: number; + maximum?: number; + exclusiveMaximum?: number; + minimum?: number; + exclusiveMinimum?: number; + maxLength?: number; + minLength?: number; + pattern?: string; + maxItems?: number; + minItems?: number; + uniqueItems?: boolean; + maxContains?: number; + minContains?: number; + maxProperties?: number; + minProperties?: number; + required?: string[]; + dependentRequired?: Record; + const?: Json; + enum?: Json[]; + type?: JsonSchemaType | JsonSchemaType[]; + title?: string; + description?: string; + default?: Json; + deprecated?: boolean; + readOnly?: boolean; + writeOnly?: boolean; + examples?: Json[]; + format?: "date-time" | "date" | "time" | "duration" | "email" | "idn-email" | "hostname" | "idn-hostname" | "ipv4" | "ipv6" | "uri" | "uri-reference" | "iri" | "iri-reference" | "uuid" | "uri-template" | "json-pointer" | "relative-json-pointer" | "regex"; + contentMediaType?: string; + contentEncoding?: string; + contentSchema?: OasSchema32; + example?: Json; + discriminator?: Discriminator; + externalDocs?: ExternalDocs; + xml?: Xml; +}; + +type Discriminator = { + propertyName: string; + mappings?: Record; +}; + +type ExternalDocs = { + url: string; + description?: string; +}; + +type Xml = { + name?: string; + namespace?: string; + prefix?: string; + attribute?: boolean; + wrapped?: boolean; +}; + +// TODO: Fill in this type when 3.2 is published +export type OpenApi32 = unknown; + +export * from "../lib/index.js"; diff --git a/openapi-3-2/index.js b/openapi-3-2/index.js new file mode 100644 index 00000000..b0e940a5 --- /dev/null +++ b/openapi-3-2/index.js @@ -0,0 +1,49 @@ +import { addKeyword, defineVocabulary } from "../lib/keywords.js"; +import { registerSchema } from "../lib/index.js"; +import "../lib/openapi.js"; + +import dialectSchema from "./dialect/base.js"; +import vocabularySchema from "./meta/base.js"; +import schema from "./schema.js"; +import schemaBase from "./schema-base.js"; +import schemaDraft2020 from "./schema-draft-2020-12.js"; +import schemaDraft2019 from "./schema-draft-2019-09.js"; +import schemaDraft07 from "./schema-draft-07.js"; +import schemaDraft06 from "./schema-draft-06.js"; +import schemaDraft04 from "./schema-draft-04.js"; + +import discriminator from "../openapi-3-0/discriminator.js"; +import example from "../openapi-3-0/example.js"; +import externalDocs from "../openapi-3-0/externalDocs.js"; +import xml from "../openapi-3-0/xml.js"; + + +export * from "../draft-2020-12/index.js"; + +addKeyword(discriminator); +addKeyword(example); +addKeyword(externalDocs); +addKeyword(xml); + +defineVocabulary("https://spec.openapis.org/oas/3.2/vocab/base", { + "discriminator": "https://spec.openapis.org/oas/3.0/keyword/discriminator", + "example": "https://spec.openapis.org/oas/3.0/keyword/example", + "externalDocs": "https://spec.openapis.org/oas/3.0/keyword/externalDocs", + "xml": "https://spec.openapis.org/oas/3.0/keyword/xml" +}); + +registerSchema(vocabularySchema, "https://spec.openapis.org/oas/3.2/meta/base"); +registerSchema(dialectSchema, "https://spec.openapis.org/oas/3.2/dialect/base"); + +// Current Schemas +registerSchema(schema, "https://spec.openapis.org/oas/3.2/schema"); +registerSchema(schema, "https://spec.openapis.org/oas/3.2/schema/latest"); +registerSchema(schemaBase, "https://spec.openapis.org/oas/3.2/schema-base"); +registerSchema(schemaBase, "https://spec.openapis.org/oas/3.2/schema-base/latest"); + +// Alternative dialect schemas +registerSchema(schemaDraft2020, "https://spec.openapis.org/oas/3.2/schema-draft-2020-12"); +registerSchema(schemaDraft2019, "https://spec.openapis.org/oas/3.2/schema-draft-2019-09"); +registerSchema(schemaDraft07, "https://spec.openapis.org/oas/3.2/schema-draft-07"); +registerSchema(schemaDraft06, "https://spec.openapis.org/oas/3.2/schema-draft-06"); +registerSchema(schemaDraft04, "https://spec.openapis.org/oas/3.2/schema-draft-04"); diff --git a/openapi-3-2/json-schema-test-suite.spec.ts b/openapi-3-2/json-schema-test-suite.spec.ts new file mode 100644 index 00000000..fa0c27b8 --- /dev/null +++ b/openapi-3-2/json-schema-test-suite.spec.ts @@ -0,0 +1,114 @@ +import fs from "node:fs"; +import { describe, it, expect, beforeAll, afterAll } from "vitest"; +import { toAbsoluteIri } from "@hyperjump/uri"; +import { registerSchema, unregisterSchema, validate } from "./index.js"; + +import type { Json } from "@hyperjump/json-pointer"; +import type { OasSchema32, Validator } from "./index.js"; + + +type Suite = { + description: string; + schema: OasSchema32; + tests: Test[]; +}; + +type Test = { + description: string; + data: Json; + valid: boolean; +}; + +// This package is indended to be a compatibility mode from stable JSON Schema. +// Some edge cases might not work exactly as specified, but it should work for +// any real-life schema. +const skip = new Set([ + // Self-identifying with a `file:` URI is not allowed for security reasons. + "|draft2020-12|ref.json|$id with file URI still resolves pointers - *nix", + "|draft2020-12|ref.json|$id with file URI still resolves pointers - windows" +]); + +const shouldSkip = (path: string[]): boolean => { + let key = ""; + for (const segment of path) { + key = `${key}|${segment}`; + if (skip.has(key)) { + return true; + } + } + return false; +}; + +const testSuitePath = "./node_modules/json-schema-test-suite"; + +const addRemotes = (dialectId: string, filePath = `${testSuitePath}/remotes`, url = "") => { + fs.readdirSync(filePath, { withFileTypes: true }) + .forEach((entry) => { + if (entry.isFile() && entry.name.endsWith(".json")) { + const remote = JSON.parse(fs.readFileSync(`${filePath}/${entry.name}`, "utf8")) as Exclude; + if (!remote.$schema || toAbsoluteIri(remote.$schema as string) === "https://json-schema.org/draft/2020-12/schema") { + registerSchema(remote, `http://localhost:1234${url}/${entry.name}`, dialectId); + } + } else if (entry.isDirectory()) { + addRemotes(dialectId, `${filePath}/${entry.name}`, `${url}/${entry.name}`); + } + }); +}; + +const runTestSuite = (draft: string, dialectId: string) => { + const testSuiteFilePath = `${testSuitePath}/tests/${draft}`; + + describe(`${draft} ${dialectId}`, () => { + beforeAll(() => { + addRemotes(dialectId); + }); + + fs.readdirSync(testSuiteFilePath, { withFileTypes: true }) + .filter((entry) => entry.isFile() && entry.name.endsWith(".json")) + .forEach((entry) => { + const file = `${testSuiteFilePath}/${entry.name}`; + + describe(entry.name, () => { + const suites = JSON.parse(fs.readFileSync(file, "utf8")) as Suite[]; + + suites.forEach((suite) => { + describe(suite.description, () => { + let _validate: Validator; + let url: string; + + beforeAll(async () => { + if (shouldSkip([draft, entry.name, suite.description])) { + return; + } + url = `http://${draft}-test-suite.json-schema.org/${entry.name}/${encodeURIComponent(suite.description)}`; + // @ts-expect-error Covert from 2020-12 + if (typeof suite.schema === "object" && suite.schema.$schema === "https://json-schema.org/draft/2020-12/schema") { + delete suite.schema.$schema; + } + registerSchema(suite.schema, url, dialectId); + + _validate = await validate(url); + }); + + afterAll(() => { + unregisterSchema(url); + }); + + suite.tests.forEach((test) => { + if (shouldSkip([draft, entry.name, suite.description, test.description])) { + it.skip(test.description, () => { /* empty */ }); + } else { + it(test.description, () => { + const output = _validate(test.data); + expect(output.valid).to.equal(test.valid); + }); + } + }); + }); + }); + }); + }); + }); +}; + +runTestSuite("draft2020-12", "https://spec.openapis.org/oas/3.2/dialect/base"); diff --git a/openapi-3-2/meta/base.js b/openapi-3-2/meta/base.js new file mode 100644 index 00000000..303423f1 --- /dev/null +++ b/openapi-3-2/meta/base.js @@ -0,0 +1,77 @@ +export default { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$dynamicAnchor": "meta", + + "title": "OAS Base Vocabulary", + "description": "A JSON Schema Vocabulary used in the OpenAPI Schema Dialect", + + "type": ["object", "boolean"], + "properties": { + "example": true, + "discriminator": { "$ref": "#/$defs/discriminator" }, + "externalDocs": { "$ref": "#/$defs/external-docs" }, + "xml": { "$ref": "#/$defs/xml" } + }, + "$defs": { + "extensible": { + "patternProperties": { + "^x-": true + } + }, + "discriminator": { + "$ref": "#/$defs/extensible", + "type": "object", + "properties": { + "propertyName": { + "type": "string" + }, + "mapping": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "required": ["propertyName"], + "unevaluatedProperties": false + }, + "external-docs": { + "$ref": "#/$defs/extensible", + "type": "object", + "properties": { + "url": { + "type": "string", + "format": "uri-reference" + }, + "description": { + "type": "string" + } + }, + "required": ["url"], + "unevaluatedProperties": false + }, + "xml": { + "$ref": "#/$defs/extensible", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string", + "format": "uri" + }, + "prefix": { + "type": "string" + }, + "attribute": { + "type": "boolean" + }, + "wrapped": { + "type": "boolean" + } + }, + "unevaluatedProperties": false + } + } +}; diff --git a/openapi-3-2/schema-base.js b/openapi-3-2/schema-base.js new file mode 100644 index 00000000..279c7cb0 --- /dev/null +++ b/openapi-3-2/schema-base.js @@ -0,0 +1,33 @@ +export default { + "$schema": "https://json-schema.org/draft/2020-12/schema", + + "$vocabulary": { + "https://json-schema.org/draft/2020-12/vocab/core": true, + "https://json-schema.org/draft/2020-12/vocab/applicator": true, + "https://json-schema.org/draft/2020-12/vocab/unevaluated": true, + "https://json-schema.org/draft/2020-12/vocab/validation": true, + "https://json-schema.org/draft/2020-12/vocab/meta-data": true, + "https://json-schema.org/draft/2020-12/vocab/format-annotation": true, + "https://json-schema.org/draft/2020-12/vocab/content": true, + "https://spec.openapis.org/oas/3.2/vocab/base": false + }, + + "description": "The description of OpenAPI v3.2.x Documents using the OpenAPI JSON Schema dialect", + + "$ref": "https://spec.openapis.org/oas/3.2/schema", + "properties": { + "jsonSchemaDialect": { "$ref": "#/$defs/dialect" } + }, + + "$defs": { + "dialect": { "const": "https://spec.openapis.org/oas/3.2/dialect/base" }, + + "schema": { + "$dynamicAnchor": "meta", + "$ref": "https://spec.openapis.org/oas/3.2/dialect/base", + "properties": { + "$schema": { "$ref": "#/$defs/dialect" } + } + } + } +}; diff --git a/openapi-3-2/schema-draft-04.js b/openapi-3-2/schema-draft-04.js new file mode 100644 index 00000000..8a8581df --- /dev/null +++ b/openapi-3-2/schema-draft-04.js @@ -0,0 +1,33 @@ +export default { + "$schema": "https://json-schema.org/draft/2020-12/schema", + + "$vocabulary": { + "https://json-schema.org/draft/2020-12/vocab/core": true, + "https://json-schema.org/draft/2020-12/vocab/applicator": true, + "https://json-schema.org/draft/2020-12/vocab/unevaluated": true, + "https://json-schema.org/draft/2020-12/vocab/validation": true, + "https://json-schema.org/draft/2020-12/vocab/meta-data": true, + "https://json-schema.org/draft/2020-12/vocab/format-annotation": true, + "https://json-schema.org/draft/2020-12/vocab/content": true, + "https://spec.openapis.org/oas/3.2/vocab/base": false + }, + + "description": "OpenAPI v3.2.x documents using draft-04 JSON Schemas", + + "$ref": "https://spec.openapis.org/oas/3.2/schema", + "properties": { + "jsonSchemaDialect": { "$ref": "#/$defs/dialect" } + }, + + "$defs": { + "dialect": { "const": "http://json-schema.org/draft-04/schema#" }, + + "schema": { + "$dynamicAnchor": "meta", + "$ref": "https://spec.openapis.org/oas/3.2/dialect/base", + "properties": { + "$schema": { "$ref": "#/$defs/dialect" } + } + } + } +}; diff --git a/openapi-3-2/schema-draft-06.js b/openapi-3-2/schema-draft-06.js new file mode 100644 index 00000000..7d520056 --- /dev/null +++ b/openapi-3-2/schema-draft-06.js @@ -0,0 +1,33 @@ +export default { + "$schema": "https://json-schema.org/draft/2020-12/schema", + + "$vocabulary": { + "https://json-schema.org/draft/2020-12/vocab/core": true, + "https://json-schema.org/draft/2020-12/vocab/applicator": true, + "https://json-schema.org/draft/2020-12/vocab/unevaluated": true, + "https://json-schema.org/draft/2020-12/vocab/validation": true, + "https://json-schema.org/draft/2020-12/vocab/meta-data": true, + "https://json-schema.org/draft/2020-12/vocab/format-annotation": true, + "https://json-schema.org/draft/2020-12/vocab/content": true, + "https://spec.openapis.org/oas/3.2/vocab/base": false + }, + + "description": "OpenAPI v3.2.x documents using draft-06 JSON Schemas", + + "$ref": "https://spec.openapis.org/oas/3.2/schema", + "properties": { + "jsonSchemaDialect": { "$ref": "#/$defs/dialect" } + }, + + "$defs": { + "dialect": { "const": "http://json-schema.org/draft-06/schema#" }, + + "schema": { + "$dynamicAnchor": "meta", + "$ref": "https://spec.openapis.org/oas/3.2/dialect/base", + "properties": { + "$schema": { "$ref": "#/$defs/dialect" } + } + } + } +}; diff --git a/openapi-3-2/schema-draft-07.js b/openapi-3-2/schema-draft-07.js new file mode 100644 index 00000000..d4ebe2d7 --- /dev/null +++ b/openapi-3-2/schema-draft-07.js @@ -0,0 +1,33 @@ +export default { + "$schema": "https://json-schema.org/draft/2020-12/schema", + + "$vocabulary": { + "https://json-schema.org/draft/2020-12/vocab/core": true, + "https://json-schema.org/draft/2020-12/vocab/applicator": true, + "https://json-schema.org/draft/2020-12/vocab/unevaluated": true, + "https://json-schema.org/draft/2020-12/vocab/validation": true, + "https://json-schema.org/draft/2020-12/vocab/meta-data": true, + "https://json-schema.org/draft/2020-12/vocab/format-annotation": true, + "https://json-schema.org/draft/2020-12/vocab/content": true, + "https://spec.openapis.org/oas/3.2/vocab/base": false + }, + + "description": "OpenAPI v3.2.x documents using draft-07 JSON Schemas", + + "$ref": "https://spec.openapis.org/oas/3.2/schema", + "properties": { + "jsonSchemaDialect": { "$ref": "#/$defs/dialect" } + }, + + "$defs": { + "dialect": { "const": "http://json-schema.org/draft-07/schema#" }, + + "schema": { + "$dynamicAnchor": "meta", + "$ref": "https://spec.openapis.org/oas/3.2/dialect/base", + "properties": { + "$schema": { "$ref": "#/$defs/dialect" } + } + } + } +}; diff --git a/openapi-3-2/schema-draft-2019-09.js b/openapi-3-2/schema-draft-2019-09.js new file mode 100644 index 00000000..779adeb6 --- /dev/null +++ b/openapi-3-2/schema-draft-2019-09.js @@ -0,0 +1,33 @@ +export default { + "$schema": "https://json-schema.org/draft/2020-12/schema", + + "$vocabulary": { + "https://json-schema.org/draft/2020-12/vocab/core": true, + "https://json-schema.org/draft/2020-12/vocab/applicator": true, + "https://json-schema.org/draft/2020-12/vocab/unevaluated": true, + "https://json-schema.org/draft/2020-12/vocab/validation": true, + "https://json-schema.org/draft/2020-12/vocab/meta-data": true, + "https://json-schema.org/draft/2020-12/vocab/format-annotation": true, + "https://json-schema.org/draft/2020-12/vocab/content": true, + "https://spec.openapis.org/oas/3.2/vocab/base": false + }, + + "description": "openapi v3.2.x documents using 2019-09 json schemas", + + "$ref": "https://spec.openapis.org/oas/3.2/schema", + "properties": { + "jsonschemadialect": { "$ref": "#/$defs/dialect" } + }, + + "$defs": { + "dialect": { "const": "https://json-schema.org/draft/2019-09/schema" }, + + "schema": { + "$dynamicanchor": "meta", + "$ref": "https://spec.openapis.org/oas/3.2/dialect/base", + "properties": { + "$schema": { "$ref": "#/$defs/dialect" } + } + } + } +}; diff --git a/openapi-3-2/schema-draft-2020-12.js b/openapi-3-2/schema-draft-2020-12.js new file mode 100644 index 00000000..39c39a85 --- /dev/null +++ b/openapi-3-2/schema-draft-2020-12.js @@ -0,0 +1,33 @@ +export default { + "$schema": "https://json-schema.org/draft/2020-12/schema", + + "$vocabulary": { + "https://json-schema.org/draft/2020-12/vocab/core": true, + "https://json-schema.org/draft/2020-12/vocab/applicator": true, + "https://json-schema.org/draft/2020-12/vocab/unevaluated": true, + "https://json-schema.org/draft/2020-12/vocab/validation": true, + "https://json-schema.org/draft/2020-12/vocab/meta-data": true, + "https://json-schema.org/draft/2020-12/vocab/format-annotation": true, + "https://json-schema.org/draft/2020-12/vocab/content": true, + "https://spec.openapis.org/oas/3.2/vocab/base": false + }, + + "description": "openapi v3.2.x documents using 2020-12 json schemas", + + "$ref": "https://spec.openapis.org/oas/3.2/schema", + "properties": { + "jsonschemadialect": { "$ref": "#/$defs/dialect" } + }, + + "$defs": { + "dialect": { "const": "https://json-schema.org/draft/2020-12/schema" }, + + "schema": { + "$dynamicanchor": "meta", + "$ref": "https://spec.openapis.org/oas/3.2/dialect/base", + "properties": { + "$schema": { "$ref": "#/$defs/dialect" } + } + } + } +}; diff --git a/openapi-3-2/schema.js b/openapi-3-2/schema.js new file mode 100644 index 00000000..4165001b --- /dev/null +++ b/openapi-3-2/schema.js @@ -0,0 +1,5 @@ +export default { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "The description of OpenAPI v3.2.x Documents without Schema Object validation", + "$comment": "The schema is not published yet" +}; diff --git a/package.json b/package.json index 0ca46ac0..d1a4ea55 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@hyperjump/json-schema", - "version": "1.10.1", + "version": "1.16.2", "description": "A JSON Schema validator with support for custom keywords, vocabularies, and dialects", "type": "module", "main": "./stable/index.js", diff --git a/stable/index.d.ts b/stable/index.d.ts index 5ebfd28d..a43091e3 100644 --- a/stable/index.d.ts +++ b/stable/index.d.ts @@ -2,6 +2,8 @@ import type { Json } from "@hyperjump/json-pointer"; import type { JsonSchemaType } from "../lib/common.js"; +export type JsonSchemaType = JsonSchemaType; + export type JsonSchema = boolean | { $schema?: "https://json-schema.org/validation"; $id?: string;