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
orasynchronous
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({}) // immediately immutable // ... 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) // immediately immutable // ... schema.validate('something') // ...
-
An example Schema initialized immediately with
async
validation.// ... const schema = await new Schema({}, true) // immediately immutable // ... 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) // immediately immutable // ... await schema.validate('something') // ...
Initialized lazily
-
An example Schema initialized lazily.
// ... const schema = await new Schema() // not immutable yet... // ... await schema.assign({}) // now it's immutable // ... schema.validate('something') // ...
-
An example Schema initialized lazily with cached JSON Schema references defined.
// ... const schema = await new Schema() // not immutable yet... // ... const REFS = { 'https://localhost/schema': {} } await schema.assign({ $ref: 'https://localhost/schema' }, REFS) // now it's immutable // ... schema.validate('something') // ...
-
An example Schema initialized lazily with
async
validation.// ... const schema = await new Schema(true) // not immutable yet... // ... await schema.assign({}) // now it's immutable // ... await schema.validate('something') // ...
API
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.
- Node.js
- Browsers
Future
- create contributing guide
- implement support for the
draft-07
and2019-09
JSON Schema specification - feature requests via issues
Contributing
We are currently drafting our contributing guide in the new monorepo!