csonschema
Write jsonschema with cson
Features
Only support Jsonchema draft 4.
Simple csonschema
username: 'string'age: 'integer'verified: 'boolean'gender: 'F''M'created_at: 'date'
Advanced csonschema
$defs: $_: 'geo-point': 'number' photo: w: 'integer' h: 'integer' url: 'string' user: $include: "user.schema" tag: $raw: type: 'string' pattern: '^(\\([0-9]{3}\\))?[0-9]{3}-[0-9]{4}$' count: $raw: type: 'integer' minimum: 1 maximum: 100 # Define a media object owner: 'user'avatar_url: 'user.avatar_url'tags: 'tag'tag_count: 'count'desc: 'string'photo: 'photo'location: 'geo-point'created_at: 'date' $required: '-location -tags'
Installation
$ npm install csonschema
Usage
CLI
See csonschema-cli
Javascript
// Include csonschemacsonschema = ; schema = id: 'integer' username: 'string' // Parse syncjsonschema = csonschema; // Parse asynccsonschema;
Coffeescript
csonschema = require 'csonschema' schema = id: 'integer' username: 'string' // Parse syncjsonschema = csonschemaparse schema // Parse asynccsonschemaparse schema jsonschema = obj
Raw Field
Raw Field will be translated to json format directly without any modification, it is represented with $raw
keyword.
username: $raw: type: 'string' pattern: '[1-9a-zA-Z]' date: $raw: type: 'string' format: 'date-time'
Object
additionalProperties is false by default
$defs: username: 'string' user: username: 'username' created_at: 'date' updated_at: 'date' $required: '-username -created_at'
Array Field
Array as root object
user: 'user'
Array in field
username: 'string'photos: url: 'string'
Customized types
Customized types are defined under $defs
.
- Support reference with cascading format like
foo.bar
- Global types without typing prefix
$_
. e.g.$_.foo
is equal tofoo
$defs: $_: location: desc: 'string' coordinates: 'number' username: 'string'
Contribution
Run Tests
$ npm test
Any contribution is more then welcome!