0.3.2 • Published 8 years ago

tcomb-json-schema v0.3.2

Weekly downloads
975
License
MIT
Repository
github
Last release
8 years ago

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"
  }
}
0.3.2

8 years ago

0.3.1

8 years ago

0.3.0

9 years ago

0.2.5

9 years ago

0.2.4

9 years ago

0.2.3

9 years ago

0.2.2

10 years ago

0.2.1

10 years ago

0.2.0

10 years ago

0.1.4

10 years ago

0.1.3

10 years ago

0.1.2

10 years ago

0.1.1

10 years ago

0.1.0

11 years ago