Skip to content
This repository has been archived by the owner on Feb 16, 2021. It is now read-only.

gcanti/tcomb-json-schema

Repository files navigation

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 word abc), 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 matching abc 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"
  }
}