Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

tcomb-json-schema

gcanti3.3kMIT0.3.2

Transforms a JSON Schema to a tcomb type

tcomb, JSON Schema

readme

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

changelog

Changelog

Tags:

  • [New Feature]
  • [Bug Fix]
  • [Spec Compliancy]
  • [Breaking Change]
  • [Documentation]
  • [Internal]
  • [Polish]

Note: Gaps between patch versions are faulty/broken releases.

v0.3.2

  • New Feature
    • registerFormat can now accept a tcomb type other than a predicate, closes #29 (@alvaromb)

v0.3.1

v0.3.0

Warning. If you don't rely in your codebase on the property maybe(MyType)(undefined) === null this is not a breaking change for you.

  • Breaking Change
    • upgrade to tcomb v3.0.0

v0.2.5

  • New Feature
    • Added possibility to define patterns with regex flags (thanks @emiloberg)

v0.2.4

  • New Feature
    • Added possibility to define enums as objects to carry a value/label pair (thanks @emiloberg)

v0.2.3

  • Bug Fix
    • minItems and maxItems have no effect for arrays of objects, fix #18 (thanks @WeweTom)

v0.2.2

  • Bug Fix
    • IE8 error with 'null' type, fix #17

v0.2.1

  • New Feature
    • Registering a type or structure instead of just a format, fix #13 (thanks @damienleroux)

v0.2.0

  • Breaking Change
    • upgrade to tcomb v2.2

v0.1.4

  • Internal
    • Optimized integer type (@chriskjaer idea)

v0.1.3

  • New Feature
    • Support format property for string types #6 (@oliger idea)
    • Support integer type #5 (@chriskjaer idea)
  • Bug Fix
    • Removed t.util.format
  • Internal
    • Optimized Null type
  • Polish
    • Formatted CHANGELOG

v0.1.2

  • Internal
    • Upgrade to latest tcomb
    • Move tcomb to peerDependencies

v0.1.1

  • Internal
    • Upgrade to latest tcomb