Schema(JSON)js

NPM Version License Code Coverage JavaScript Style Guide

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({}) // 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.

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!

Changelog