tcomb-json-schema
Version:
Transforms a JSON Schema to a tcomb type
122 lines (82 loc) • 2.5 kB
Markdown
Transforms a JSON Schema to a type [tcomb](https://github.com/gcanti/tcomb) type.
# Compatibility
- tcomb ^2.0.0 -> tcomb-json-schema ^0.2.5
- tcomb ^3.0.0 -> tcomb-json-schema ^0.3.0
# Playground
If you want to get a general feel for how this works please head over to https://gcanti.github.io/resources/json-schema-to-tcomb/playground/playground.html
# API
## transform(schema: JSONSchema): Type
**Example**
```js
var transform = require('tcomb-json-schema');
var TcombType = transform({
"type": "string",
"enum": ["Street", "Avenue", "Boulevard"]
});
```
## registerFormat(format: string, predicateOrType: (x: any) => boolean | Type): void
Registers a new format.
**Example**
```js
function isEmail(x) {
return /(.)+@(.)+/.test(x);
}
transform.registerFormat('email', isEmail);
var TcombType = transform({
"type": "string",
"format": 'email'
});
```
## resetFormats(): void
Removes all registered formats.
```js
transform.resetFormats();
```
## registerType(typeName: string, type: tComb Supported types): void
Registers a new type.
**Example**
```js
var Str10 = t.subtype(t.Str, function (s) {
return s.length <= 10;
}, 'Str10');
transform.registerType('string10', Str10);
var TcombType = transform({
type: "string10"
});
```
## resetTypes(): void
Removes all registered types.
```js
transform.resetTypes();
```
# JSON Schema
## strings
type `string` accepts the property `pattern` which will be used as a predicate (the value of the string must match the [regular expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) defined in `pattern`). Example:
```
{
"type": "string",
"pattern": "^abc$"
}
```
The pattern may be either
* a simple string with a regex pattern, e.g. `^abc$` (example matching the exact word `abc`), or
* a string version of a regex literal with a leading and trailing slash and optional [regex flags](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Advanced_searching_with_flags) after the last slash, e.g. `/^abc$/i` (example matching `abc` case insensetive)
## enums
If you don't care of values you can describe enums as an array:
```js
"street_type": {
"type": "string",
"enum": ["Street", "Avenue", "Boulevard"]
}
```
or if you want to specify values, describe it as an object where the keys are the values:
```js
"street_type": {
"type": "string",
"enum": {
st: "Street",
ave: "Avenue",
blvd: "Boulevard"
}
}
```