Unifies many JSON Schema files into a single file.
Report Bug
·
Request Feature
To unify many JSON Schema files into a single file, create a main JSON Schema file that correspond to the main element to check and has $ref
to the other ones.
// person.schema.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://example.com/person.schema.json",
"title": "Person",
"type": "object",
"properties": {
"firstName": {
"type": "string",
"description": "The person's first name."
},
"lastName": {
"type": "string",
"description": "The person's last name."
},
"age": {
"description": "Age in years which must be equal to or greater than zero.",
"type": "integer",
"minimum": 0
},
"address": {
"$ref": "address.schema.json"
}
}
}
Create the referenced files:
// address.schema.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://example.com/address.schema.json",
"title": "Address",
"type": "object",
"properties": {
"streetAddress": {
"type": "string"
},
"city": {
"type": "string"
},
"state": {
"type": "string"
},
"country": {
"type": "string"
}
},
"required": ["streetAddress", "city", "state", "country"]
}
The references are resolved recursively and the result is a single file with all the definitions.
// unified.schema.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://example.com/person.schema.json",
"title": "Person",
"type": "object",
"properties": {
"firstName": {
"type": "string",
"description": "The person's first name."
},
"lastName": {
"type": "string",
"description": "The person's last name."
},
"age": {
"description": "Age in years which must be equal to or greater than zero.",
"type": "integer",
"minimum": 0
},
"address": {
"$ref": "#/definitions/address"
}
},
"definitions": {
"address": {
"title": "Address",
"type": "object",
"properties": {
"streetAddress": {
"type": "string"
},
"city": {
"type": "string"
},
"state": {
"type": "string"
},
"country": {
"type": "string"
}
},
"required": ["streetAddress", "city", "state", "country"]
}
}
}
To use the CLI, install the package globally:
npm install -g @lenra/json-schema-unifier
Then run the command:
json-schema-unifier person.schema.json
By default, the output is printed to the console. To save it to a file, use the --output
option:
json-schema-unifier person.schema.json --output unified.schema.json
You also can specify the output format with the --format
option. The available formats are json
and yaml
:
json-schema-unifier person.schema.json --format yaml
A --verbose
option is also available to print the logs to the console.
To use the library, install it as a dependency:
npm install @lenra/json-schema-unifier
Then import it in your code:
import { JsonSchemaUnifier } from '@lenra/json-schema-unifier';
const result = JsonSchemaUnifier.unify('person.schema.json');
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please open an issue with the tag "enhancement". Don't forget to give the project a star if you liked it! Thanks again!
Distributed under the MIT License. See LICENSE for more information.
Lenra - @lenra_dev - contact@lenra.io
Project Link: https://github.com/lenra-io/json-schema-unifier