0.5.3 • Published 10 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 csonschemaUsage
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 = objRaw 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.$_.foois equal tofoo
$defs:
$_:
location:
desc: 'string'
coordinates: ['number']
username: 'string'Contribution
Run Tests
$ npm testAny contribution is more then welcome!
