Transforms a JSON Schema to a type 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
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
function isEmail(x) {
return /(.)+@(.)+/.test(x);
}
transform.registerFormat('email', isEmail);
var TcombType = transform({
"type": "string",
"format": 'email'
});
resetFormats(): void
Removes all registered formats.
transform.resetFormats();
registerType(typeName: string, type: tComb Supported types): void
Registers a new type.
Example
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.
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 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 wordabc
), or - a string version of a regex literal with a leading and trailing slash and optional regex flags after the last slash, e.g.
/^abc$/i
(example matchingabc
case insensetive)
enums
If you don't care of values you can describe enums as an array:
"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:
"street_type": {
"type": "string",
"enum": {
st: "Street",
ave: "Avenue",
blvd: "Boulevard"
}
}