csonschema

0.5.3 • Public • Published

csonschema

Write jsonschema with cson

NPM Build Status Dependency Status Coverage Status

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

Node.js and NPM is required.

$ 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 to foo
$defs:
  $_:
    location:
      desc: 'string'
      coordinates: ['number']
 
  username: 'string'

Contribution

Run Tests

$ npm test

Any contribution is more then welcome!

Bitdeli Badge

Readme

Keywords

Package Sidebar

Install

npm i csonschema

Weekly Downloads

92

Version

0.5.3

License

MIT

Last publish

Collaborators

  • quanlong