8000 GitHub - cybertk/csonschema: CSON Schema is a little language that compiles into JSON Schema
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

cybertk/csonschema

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

69 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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:
  $_:
    
7995
location:
      desc: 'string'
      coordinates: ['number']

  username: 'string'

Required fields

By default all fields are required. However, using $required it is possible to define which ones are required:

firstname: 'string'
lastname: 'string'

$required: 'firstname'

This example will set firstname as a required field. Also, you can define which fields are not required by prefixing with a dash (-):

firstname: 'string'
lastname: 'string'

$required: '-lastname'

Both examples will lead to the same result, having firstname as required and lastname as optional.

Contribution

Run Tests

$ npm test

Any contribution is more then welcome!

Bitdeli Badge

About

CSON Schema is a little language that compiles into JSON Schema

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  
0