Home

Awesome

Build Status Join the chat at https://gitter.im/korzio/djvi

djvi

Dynamic Json Schema Instance

This package contains json-schema utility for instantiating models based on schema. This is a part of djv packages aimed to work with json-schema. In future (~1 year) all djv packages will be unified into single package with djv scope.

Usage

For node - package is not minimized

npm install djvi

For browser

<script src="djvi/djvi.js"></script>

Use environment

var jsonSchema = {"common":{"properties":{"type":{"enum":["common"]}},"required":["type"]}};

var env = new djvi();
env.addSchema('test', jsonSchema);
env.instance('test#/common');
// => { type: 'common' }

Concepts

JSON Schema instantiator should generate minimal object, valid to a given schema.

null: null
string: ''
boolean: false
number: 0
integer: 0
object: {}
array: []
env.instance('test#/common') !== env.instance('test#/common')

Examples

Primitives types with default values

{"type":"number","default":100}
// => 100

{"type": "null"}
// => null

{"type": ["integer", "string"]}
// => 0

{"type": "array"}
// => []

All of types

{ "allOf":[
        {"type":"object","properties":{"title":{"type":"string"}},"required":["title"]},
        {"type":"object","properties":{"amount":{"type":"number","default":1}},"required":["amount"]}
]}
// => {"title":"","amount":1}

Items keywords should instantiate an array with objects

{"minItems": 1}
// => [{}]

{"items":[{"type":"integer"},{"type":"string"}]}
// => [0, ""]

API

instance(name, unique)

instantiate an object that corresponds to a schema

env.instance('test#/common');
// => { type: 'common' }

addSchema(name, schema)

add a schema to djvi environment

env.addSchema('test', jsonSchema);

removeSchema(name)

removes a schema or the whole structure from djvi environment

env.removeSchema('test');

resolve(name)

resolves name by existing environment

env.resolve('test');
// => { name: 'test', schema: {} }, fn: ... }

export(name)

exports the whole structure object from environment or by resolved name

env.export();
// => { test: { name: 'test', schema: {}, ... } }

import(config)

imports all found structure objects to internal environment structure

env.import(config);

utils()

returns { types, fieldTypes, fieldValidate, fieldFormat } generators that can be overridden for use cases

env.utils();

TODO

Resources