A Javascript library implementing the JSON Schema draft 7.
The library can optionally decorate parsed objects in order to have them return default values defined in the schema, for undefined properties.
$ npm install jsonpolice
Create a new instance of schema validator.
dataOrUri
, the schema to parse or a fully qualified URI to pass toretriever
to download the schemaoptions
, parsing options, the following optional properties are supported:scope
(required), the current resolution scope (absolute URL) of URLs and paths.registry
, an object to use to cache resolvedid
and$ref
values. If no registry is passed, one is automatically created. Pass aregistry
if you are going to parse several schemas or URIs referencing the sameid
and$ref
values.retriever
, a function accepting a URL in input and returning a promise resolved to an object representing the data downloaded for the URI. Whenever a$ref
to a new URI is found, if the URI is not already cached in the store in use, it'll be fetched using thisretriever
. If notretriever
is passed and a URI needs to be downloaded, ano_retriever
exception is thrown. Refer to the documentation of jsonref for sample retriever functions to use in the browser or with Node.js.
The function returns a Promise resolving to a new instance of Schema. Once created, a schema instance can be used
repeatedly to validate data, calling the method Schema.validate
.
import * as jp from 'jsonpolice';
(async () => {
const schema = jp.create({
type: 'object',
properties: {
d: {
type: 'string',
format: 'date-time'
},
i: {
type: 'integer'
},
b: {
type: [ 'boolean', 'number' ]
},
c: {
default: 5
}
}
});
try {
const result = await schema.validate({
d: (new Date()).toISOString(),
i: 6,
b: true
});
} catch(err) {
// validation failed
}
})();
Validates the input data
data
, the data to parseoptions
, validation options, the following optional properties are supported:setDefault
, iftrue
returns the default value specified in the schema (if any) for undefined propertiesremoveAdditional
, iftrue
deletes properties not validating against additionalProperties, without failingcontext
, if set toread
deletes writeOnly properties, if set towrite
delete readOnly properties
Returns a decorated version of data, according to the specified options.
Using the following schema:
{
type: 'object',
properties: {
d: {
type: 'string',
},
i: {
type: 'integer'
},
b: {
type: [ 'boolean', 'number' ]
},
c: {
default: 5
}
}
}
And parsing the following data:
var output = schema.validate({
d: 'test',
i: 10,
b: true
});
Produces the following output:
{
"d": "test",
"i": 10,
"b": true,
"c": 5
}