Skip to content

Latest commit

 

History

History
95 lines (75 loc) · 2.98 KB

README.md

File metadata and controls

95 lines (75 loc) · 2.98 KB

JSON Schema Dereferencer

CircleCI branch npm GitHub release GitHub commits since latest release

Otherwise known as a ref parser, this tool will replace json schema using $ref with the underlying reference, returning relevant errors otherwise.

Built using @json-schema-tools/traverse

features

  • minimal dependencies
  • simple & fast
  • cycle detection/handling
  • switchable recusive dereferencing
  • works in node & in browser (isomorphic)
  • handles:
    • relative pointer refs
    • http/https uris
    • local filesystem references
  • configurable
  • optionally de-reference internal references only, keeping it synchronous
  • ignore refs that match a set of patterns
  • extensible
    • dependency injectable fetch and filesystem
    • middleware allows you to easily implement new $ref values.
    • easily add behaviors for custom reference locations
  • option for mutating in place or returning a copy

Getting Started

npm install @json-schema-tools/dereferencer

const JsonSchemaDereferencer = require("@json-schema-tools/dereferencer").default;

const mySchema = {
    type: "object",
    properties: {
      foo: { anyOf: [
        { $ref: "#/properties/bar" },
        { type: "string" }
      ]},
      bar: { $ref: "#/properties/foo" },
      baz: { $ref: "../myschemas/baz.json" },
      jsonSchemaMetaSchema: { $ref: "https://meta.json-schema.tools" }
    },
    additionalProperties: {
        type: "array",
        items: [
            { type: "array", items: { $ref: "#" } },
            { type: "boolean" }
        ]
    }
};

const dereferencer = new JsonSchemaDereferencer(mySchema);

console.log(dereferencer.resolveSync());
console.log(await dereferencer.resolve());

Add custom protocol handling

import JsonSchemaDereferencer from "@json-schema-tools/dereferencer";

const mySchema = {
    type: "object",
    properties: {
      foo: { $ref: "ipfs://39420398420384" }
    }
};

const dereferencer = new JsonSchemaDereferencer(mySchema, {
  protocolHandlerMap: {
    "ipfs": (ref) => Promise.resolve({ type: "string", title: "pretend we got this from ipfs" })
});

console.log(dereferencer.resolveSync());
console.log(await dereferencer.resolve());

Contributing

How to contribute, build and release are outlined in CONTRIBUTING.md, BUILDING.md and RELEASING.md respectively. Commits in this repository follow the CONVENTIONAL_COMMITS.md specification.