https://github.com/geraintluff/json-schema-compatibility
Compatibility layer to use v3 JSON Schemas with more modern tools
https://github.com/geraintluff/json-schema-compatibility
Last synced: 11 months ago
JSON representation
Compatibility layer to use v3 JSON Schemas with more modern tools
- Host: GitHub
- URL: https://github.com/geraintluff/json-schema-compatibility
- Owner: geraintluff
- Created: 2013-12-20T02:17:59.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2021-12-14T00:28:47.000Z (over 4 years ago)
- Last Synced: 2025-04-19T22:16:12.137Z (about 1 year ago)
- Language: JavaScript
- Size: 15.6 KB
- Stars: 17
- Watchers: 3
- Forks: 5
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# JSON Schema compatibility
JSON Schema tools are now being written for v4 of the draft, but v3 schemas still exist out in the wild.
This project intends to be a converter that updates schemas to be compatible with v4 of the spec.
## Behaviour
This tool works "in-place" - so it actually modifies the JavaScript objects representing the schema. This is simply because it's easier than cloning the data or anything like that.
This tool should also not modify schemas that are already compatible, and can even (in some cases) handle horrible merged combinations (e.g. mixed boolean/array use of `required`).
## Usage (Node):
Install using npm:
```shell
npm install json-schema-compatibility
```
Convert a schema:
```
var api = require('json-schema-compatibility');
api.v4(oldSchema);
```
## Usage (browser)
This has not been thoroughly tested, but it should make the API available as a global `JsonSchemaCompatibility` variable.
You might need a shim to get it to work in older browsers (due to use of `Array.isArray()` etc), but I'd imagine any JSON Schema validator would already include/require that.
## Combination with other packages
The idea is that you can take your v3 schemas, and pass them through this tool before handing them to a v4 utility. For instance, using tv4:
```javascript
var oldSchema = {"type": "number", "divisibleBy": 1.5};
var v4Schema = JsonSchemaCompatibility.v4(oldSchema);
tv4.validate(data, v4Schema);
```
## Known issues/bugs
All versions of `json-schema-compatibility` will produce incorrect behaviour in the following situation:
```json
{
"type": "object",
"properties": {
"foo": {"$ref": "#items"}
},
"items": {
"id": "#items",
"required": true
}
}
```
This is because to properly update `/properties/foo`, it needs to resolve `#items`. In the general case, it can't update a schema until it's fetched every schema that's referenced, which is beyond the syntactic-only fixes that we perform right now.
If you encounter this issue, give me a shout.
## License
The code is available as "public domain", meaning that it is completely free to use, without any restrictions at all. Read the full license [here](http://geraintluff.github.com/tv4/LICENSE.txt).
It's also available under an [MIT license](http://jsonary.com/LICENSE.txt).