Schema(JSON)js
A JavaScript Schema class that implements the JSON Schema specification as immutable objects with lazy, async initialization. The class creates optimized validations using closures and thunks. It currently supports the draft-04
and draft-06
versions of the JSON Schema specification.
Motivations behind the project:
- implement a JSON Schema validator leveraging modern JS features
- implement as instances of a
class
so the schema can be referenced in code - include support for
synchronous
or asynchronous
validations - allow for partial validations for complex object properties
- small and lightweight with no dependencies
- universal support for the latest browsers and Node.js
- fastest JSON Schema validator without code generation
Contents
Installing
Install using npm
:
npm install --save schema-json-js
Examples
Below are numerous examples on how to use the Schema class.
Initialized immediately
-
An example Schema initialized immediately.
const schema = await new Schema({})
schema.validate('something')
-
An example Schema initialized immediately with cached JSON Schema references defined.
const REFS = {
'https://localhost/schema': {}
}
const schema = await new Schema({ $ref: 'https://localhost/schema' }, REFS)
schema.validate('something')
-
An example Schema initialized immediately with async
validation.
const schema = await new Schema({}, true)
await schema.validate('something')
-
An example Schema initialized immediately with cached JSON Schema references defined and async
validation.
const REFS = {
'https://localhost/schema': {}
}
const schema = await new Schema({ $ref: 'https://localhost/schema' }, REFS, true)
await schema.validate('something')
Initialized lazily
-
An example Schema initialized lazily.
const schema = await new Schema()
await schema.assign({})
schema.validate('something')
-
An example Schema initialized lazily with cached JSON Schema references defined.
const schema = await new Schema()
const REFS = {
'https://localhost/schema': {}
}
await schema.assign({ $ref: 'https://localhost/schema' }, REFS)
schema.validate('something')
-
An example Schema initialized lazily with async
validation.
const schema = await new Schema(true)
await schema.assign({})
await schema.validate('something')
Environments
- All modern browsers and Node 10+ without polyfills.
- The build script is currently set to ECMA 9.
Benchmarks
There is a small benchmark to showcase our performance against some similar solutions. One of the many ways schema-json-js
stands apart from many other validators is its ability to perform partial schema validation.
Future
- create contributing guide
- implement support for the
draft-07
and 2019-09
JSON Schema specification - feature requests via issues
Contributing
We are currently drafting our contributing guide in the new monorepo!