Awesome
typhen-json-schema
![npm version](https://badge.fury.io/js/typhen-json-schema.svg)
Converts TypeScript Interfaces to JSON Schema
Getting Started
If you haven't used typhen before, be sure to check out the README.
$ npm install --save-dev typhen-json-schema
$ vi tsconfig.json # Add settings.
$ typhen
$ npm install -g typhen-json-schema
$ typhen --plugin typhen-json-schema --dest generated definitions.d.ts
The "typhen-json-schema" plugin
Overview
In your project's tsconfig.json, add settings for using the plugin.
{
"files": [
"src/index.ts"
],
"compilerOptions": {
"module": "commonjs",
"target": "ES5"
},
"typhen": [
{
"plugin": "typhen-json-schema",
"pluginOptions": {
"baseUri": "http://example.com/my-schema",
"enumType": "string"
},
"outDir": "output-directory",
"files": [ "typings/json.d.ts" ]
}
]
}
If you want to use an integer
type of JSON Schema, you will add the interface declaration to the beginning of a file, or add @integer
tag to number's documentation comments.
interface integer {}
/**
@integer
*/
age: number;
Options
baseUri
Type: String
Default value: ''
The base uri that is used to define a reference to another JSON Schema.
enumType
Type: String
Default value: 'integer'
A value that specifies enum value. It is either string
or integer
.
Validations
You can define validation rules by adding tags in documentation comments like the below.
/**
@minimum 0
@exclusiveMinimum
*/
price: number;
string validations
- @minLength {number}
- @maxLength {number}
- @pattern {string}
- @format {string}
- @default {string}
number or integer validations
- @multipleOf {number}
- @minimum {number}
- @maximum {number}
- @exclusiveMinimum
- @exclusiveMaximum
- @default {number}
object validations
- @minProperties {number}
- @maxProperties {number}
array validations
- @minItems {number}
- @maxItems {number}
- @uniqueItems
Contributing
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using gulp.js.
Contributors
- Shogo Iwano (@shiwano)
- Horiuchi_H (@horiuchi)
- @nabilnaffar
License
Copyright (c) 2015 Shogo Iwano Licensed under the MIT license.