1.1.0 • Published 2 months ago

@lenra/json-schema-unifier v1.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
2 months ago

Contributors Forks Stargazers Issues MIT License

Usage

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"]
    }
  }
}

as a CLI

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.

as a Library

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');

Contributing

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!

License

Distributed under the MIT License. See LICENSE for more information.

Contact

Lenra - @lenra_dev - contact@lenra.io

Project Link: https://github.com/lenra-io/json-schema-unifier

1.1.0

2 months ago

1.0.0

7 months ago

1.0.0-beta.5

8 months ago

1.0.0-beta.4

8 months ago

1.0.0-beta.3

8 months ago

1.0.0-beta.2

8 months ago

1.0.0-beta.1

8 months ago