Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/json-schema-tools/dereferencer
JSON Schema Dereferencer (aka refParser) written in typescript
https://github.com/json-schema-tools/dereferencer
Last synced: 2 months ago
JSON representation
JSON Schema Dereferencer (aka refParser) written in typescript
- Host: GitHub
- URL: https://github.com/json-schema-tools/dereferencer
- Owner: json-schema-tools
- License: apache-2.0
- Created: 2020-06-23T21:09:21.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-10-23T21:51:22.000Z (3 months ago)
- Last Synced: 2024-10-25T08:39:00.072Z (3 months ago)
- Language: TypeScript
- Homepage: https://json-schema-tools.github.io/dereferencer/
- Size: 1.62 MB
- Stars: 9
- Watchers: 3
- Forks: 3
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE.md
Awesome Lists containing this project
README
# JSON Schema Dereferencer
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`
```typescript
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
```typescript
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](CONTRIBUTING.md), [BUILDING.md](BUILDING.md) and [RELEASING.md](RELEASING.md) respectively. Commits in this repository follow the [CONVENTIONAL_COMMITS.md](CONVENTIONAL_COMMITS.md) specification.