0.5.3 • Published 8 years ago
csonschema v0.5.3
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 csonschema
csonschema = require('csonschema');
schema = [{
id: 'integer',
username: 'string'
}]
// Parse sync
jsonschema = csonschema.parse(schema);
// Parse async
csonschema.parse(schema, function(err, obj) {
jsonschema = obj
});
Coffeescript
csonschema = require 'csonschema'
schema = [
id: 'integer'
username: 'string'
]
// Parse sync
jsonschema = csonschema.parse schema
// Parse async
csonschema.parse schema, (err, obj) ->
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!