v0.5
TL;DR: Schemafy is a library for creating schemas, creating POJOs (Plain Old JavaScript Objects) from schemas, and validating POJOs against schemas.
Why Schemafy?
Schemafy was built to solve a problem: we wanted to be able to save document data, but not worry about trying to keep the structure up-to-date. Normally, schemas are used to enforced structure in a database. When a schema is changed, the database restructures everything, which takes time and risks data corruption. We figured: If we never read the data again, why bother updating it? Schemafy let us load data and on-the-fly have it conform to a schema.
What can you do?
- Define schemas with the JSON Schema standard with syntatic constraints, like type, range, and default value.
- Create blank POJOs from a schema, where required properties are created automatically with default values.
- Create POJOs from JSON data, where undefined properties are dropped and non-conforming data is coerced.
Installation
Include Schemafy in your project:
$ npm install schemafy --save
NodeJs and in the browser with browserify
Use require("schemafy")
.
In the browser with AMD
Schemafy defines "schemafy," and dependencies "lodash" and "jsonschema" must be defined.
Usage
Full documentation is available at chaddm.github.io/schemafy.
Create a Person schema:
var Schemafy = require('schemafy')
var Person = Schemafy("Person", {
type: "object",
additionalProperties: false,
properties: {
id: {
type: "number",
required: true,
min: 0
},
username: {
type: "string",
required: true,
minLength: 1
}
}
});
Create a blank POJO of Person:
var person = new Person();
// => { id: 0, username: "" }
var isPerson = person instanceof Person
// => true
Create a POJO from a source, with coercion:
var person = new Person({
id: "123",
username: "woot"
});
// => { id: 123, username: "woot" }
Create a POJO from a source, without coercion, and validate:
var person = new Person({
id: "123",
username: "woot"
}, {
coerce: false
});
// => { id: "123", username: "woot" }
person.__validate()
// => [ "instance.id is not of type(s) number" ]
Contribution, Issues
Please join us on GitHub at chaddm/schemafy.
License
MIT - Join the abode, share some code.