mobitel-json-schema-template

NodeJs module for helping creation JSON schemas

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
mobitel-json-schema-template
301.0.35 years ago5 years agoMinified + gzip package size for mobitel-json-schema-template in KB

Readme

Mobitel Ltd. JSON-Schema template
A small helper for generating a JSON schema elements.
What is JSON schema? Look here and here

Attention

This module writing and testing on NodeJs v.8+ and NPM v.5+. Using the module in previous versions of NodeJs does not guarantee its correct operation.

Navigation

* [Initializing](#initializing)
* [.allOf()](#jst-allof)
* [.anyOf()](#jst-anyof)
* [.boolean()](#jst-boolean)
* [.enum()](#jst-enum)
* [.not()](#jst-not)
* [.null()](#jst-null)
* [.oneOf()](#jst-oneof)
* [.ref()](#jst-ref)
* [.stringFormat()](#jst-string-format)
* [.array()](#jst-array)
    * [.array().additional()](#jst-array-additional)
    * [.array().items()](#jst-array-items)
    * [.array().max()](#jst-array-max)
    * [.array().min()](#jst-array-min)
    * [.array().unique()](#jst-array-unique)
* [.integer()](#jst-integer)
    * [.integer().allOf()](#jst-integer-allof)
    * [.integer().anyOf()](#jst-integer-anyof)
    * [.integer().eMax()](#jst-integer-emax)
    * [.integer().eMin()](#jst-integer-emin)
    * [.integer().enum()](#jst-integer-enum)
    * [.integer().max()](#jst-integer-max)
    * [.integer().min()](#jst-integer-min)
    * [.integer().multipleOf()](#jst-integer-multipleof)
    * [.integer().not()](#jst-integer-not)
    * [.integer().oneOf()](#jst-integer-oneof)
    * [.integer().done()](#jst-integer-done)
* [.number()](#jst-number)
    * [.number().allOf()](#jst-number-allof)
    * [.number().anyOf()](#jst-number-anyof)
    * [.number().eMax()](#jst-number-emax)
    * [.number().eMin()](#jst-number-emin)
    * [.number().enum()](#jst-number-enum)
    * [.number().max()](#jst-number-max)
    * [.number().min()](#jst-number-min)
    * [.number().multipleOf()](#jst-number-multipleof)
    * [.number().not()](#jst-number-not)
    * [.number().oneOf()](#jst-number-oneof)
    * [.number().done()](#jst-number-done)
* [.string()](#jst-string)
    * [.string().allOf()](#jst-string-allof)
    * [.string().anyOf()](#jst-string-anyof)
    * [.string().enum()](#jst-string-enum)
    * [.string().max()](#jst-string-max)
    * [.string().min()](#jst-string-min)
    * [.string().not()](#jst-string-not)
    * [.string().oneOf()](#jst-string-oneof)
    * [.string().pattern()](#jst-string-pattern)
    * [.string().done()](#jst-string-done)

Installation

npm i --save mobitel-json-schema-template

Example

Writing JSON-schema
const jst = require('mobitel-json-schema-template');

module.exports = {
    id: 'exampleSchema',
    type: 'object',
    additionalProperties: false,
    required: [
        'propArray',
        'propInteger',
        'propNumber',
        'propString',
        'propEnum',
        'propNull',
        'propBoolean',
        'propStringFormat',
        'propAnyOf',
        'propAllOf',
        'propOneOf',
        'propNot',
        'propRef',
    ],
    properties: {
        propArray: jst.array()
            .additional(false)
            .items(
                [
                    {type: 'object'},
                    jst.boolean(),
                ]
            ).done(),
        propInteger: jst.integer().min(10).max(100).eMax().done(),
        propNumber: jst.number().enum([1, 3, 5, 7, 9]).done(),
        propString: jst.string().pattern(/^\w+$/).done(),
        propEnum: jst.enum('viva', 'vita'),
        propNull: jst.null(),
        propBoolean: jst.boolean(false),
        propStringFormat: jst.stringFormat('hostname'),
        propAnyOf: jst.anyOf([
            jst.string().done(),
            jst.integer().done(),
        ]),
        propAllOf: jst.allOf([
            jst.string().done(),
            jst.string().max(10).done(),
        ]),
        propOneOf: jst.oneOf([
            jst.string().done(),
            jst.integer().done(),
        ]),
        propNot: jst.not(jst.null()),
        propRef: jst.ref('#/definitions/refExample'),
    },
    definitions: {
        refExample: {
            type: 'object',
            required: [
                'asString',
                'asNumber',
                'asNull',
            ],
            properties: {
                asString: jst.string().min(1).done(),
                asNumber: jst.number().min(1).done(),
                asNull: jst.null(),
            },
        },
    },
};

Result
{
  "id": "exampleSchema",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "propArray",
    "propInteger",
    "propNumber",
    "propString",
    "propEnum",
    "propNull",
    "propBoolean",
    "propStringFormat",
    "propAnyOf",
    "propAllOf",
    "propOneOf",
    "propNot",
    "propRef"
  ],
  "properties": {
    "propArray": {
      "type": "array",
      "additionalItems": false,
      "items": [
        {"type": "object"},
        {"type": "boolean"}
      ]
    },
    "propInteger": {
      "type":"integer",
      "minimum": 10,
      "maximum": 100,
      "exclusiveMaximum": true
    },
    "propNumber": {
      "type": "number",
      "enum": [1, 3, 5, 7, 9]
    },
    "propString": {
      "type": "string",
      "pattern": "/^\\w+$/"
    },
    "propEnum": {
      "enum": ["viva", "vita"]
    },
    "propNull": {
      "type": "null"
    },
    "propBoolean": {
      "type": "boolean",
      "enum": [false]
    },
    "propStringFormat": {
      "type": "string",
      "format": "hostname"
    },
    "propAnyOf": {
      "anyOf": [
        {"type": "string"},
        {"type": "integer"}
      ]
    },
    "propAllOf": {
      "allOf": [
        {"type": "string"},
        {
          "type": "string",
          "maxLength": 10
        }
      ]
    },
    "propOneOf": {
      "oneOf": [
        {"type": "string"},
        {"type": "integer"}
      ]
    },
    "propNot": {
      "not": {"type": "null"}
    },
    "propRef": {
    "$ref": "#/definitions/refExample"
    }
  },
  "definitions":{
    "refExample": {
      "type": "object",
      "required": [
        "asString",
        "asNumber",
        "asNull"
      ],
      "properties": {
        "asString": {
          "type": "string",
          "minLength": 1
        },
        "asNumber": {
          "type": "number",
          "minimum": 1
        },
        "asNull": {"type": "null"}
      }
    }
  }
}

up to navigation

API

Initializing

const jst = require('mobitel-json-schema-template');
Returns object for generating a JSON schema elements.

up to navigation

.allOf(arg, arg2, arg3...)

Arguments - Object[]|Object Can accept mix of Object[] and Object
Example
jst.allOf(
    [
        { type: 'string' },
        { maxLength: 5 }
    ]
);

Result
{
  "allOf": [
    { "type": "string" },
    { "maxLength": 5 }
  ]
}

up to navigation

.anyOf(arg, arg2, arg3...)

Arguments - Object[]|Object Can accept mix of Object[] and Object
Example
jst.anyOf(
    [
        {type: 'string'},
        jst.number().done()
    ]
);

Result
{
  "anyOf": [
    { "type": "string" },
    { "type": "number" }
  ]
}

up to navigation

.boolean(arg)

Arguments - Boolean or 'all' (default)
Example Boolean
jst.boolean(true);

Result Boolean
{
  "type": "boolean",
  "enum": [true]
}

Example 'all'
jst.boolean();

Result 'all'
{
  "type": "boolean"
}

up to navigation

.enum(arg, arg2, arg3...)

Arguments - Array|* Can accept mix of Array and *
Example
jst.enum(['one', 'two', 'three']);

Result
{
  "enum": [
    "one",
    "two",
    "three"
  ]
}

up to navigation

.not(arg)

Arguments - Object
Example
jst.not({type: 'string'});

Result
{
  "not": {"type": "string"}
}

up to navigation

.null()

Arguments - no
Example
jst.null();

Result
{
  "type": "null"
}

up to navigation

.oneOf(arg, arg2, arg3...)

Arguments - Object[]|Object Can accept mix of Object[] and Object
Example
jst.oneOf(
    [
        { type: 'number', multipleOf: 5 },
        jst.number().multipleOf(3).done()
    ]
);

Result
{
  "oneOf": [
    { "type": "number", "multipleOf": 5 },
    { "type": "number", "multipleOf": 3 }
  ]
}

up to navigation

.ref(arg)

Arguments - String
Example
jst.ref('#/definitions/subschema');

Result
{
  "$ref": "#/definitions/address"
}

up to navigation

.stringFormat(arg)

Arguments - String Argument must be values like:
  • date-time
  • email
  • hostname
  • ipv4
  • ipv6
  • uri

Example
jst.stringFormat('hostname');

Result
{
  "type": "string",
  "format": "hostname"
}

up to navigation

.array()

Arguments - no
Example
jst.array().done();

Result
{
  "type": "array"
}

up to navigation

.array().additional(arg)

Arguments - Boolean
Example
jst.array().additional(true).done();

Result
{
  "type": "array",
  "additionalItems": true
}

up to navigation

.array().items(arg, arg2, arg3...)

Arguments - Object[]|Object Can accept mix of Object[] and Object
Example
jst.array().items(
    [
        {type: 'string'},
        jst.number().done()
    ]
).done();

Result
{
  "type": "array",
  "items": [
    {"type": "string"},
    {"type": "number"}
  ]
}

up to navigation

.array().max(arg)

Arguments - positive Number
Example
jst.array().max(10).done();

Result
{
  "type": "array",
  "maxItems": 10
}

up to navigation

.array().min(arg)

Arguments - positive Number
Example
jst.array().min(1).done();

Result
{
  "type": "array",
  "minItems": 1
}

up to navigation

.array().unique()

Arguments - no
Example
jst.array().unique().done();

Result
{
  "type": "array",
  "uniqueItems": true
}

up to navigation

.array().done()

Arguments - no Finalize creation JSON schema template by type and return complete object.
Example
jst.array().max(10).done();

Result
{
  "type": "array",
  "maxItems": 10
}

up to navigation

.integer()

Arguments - no
Example
jst.integer().done();

Result
{
  "type": "integer"
}

up to navigation

.integer().allOf(arg, arg2, arg3...)

Arguments - Object[]|Object Can accept mix of Object[] and Object
Example
jst.integer().allOf(
 [
     { type: 'integer' },
     { maximum: 5 }
 ]
).done();

Result
{
  "type": "integer",
  "allOf": [
    { "type": "integer" },
    { "maximum": 5 }
  ]
}

up to navigation

.integer().anyOf(arg, arg2, arg3...)

Arguments - Object[]|Object Can accept mix of Object[] and Object
Example
jst.integer().anyOf(
    [
        {type: 'integer', enum: [1, 5, 10]},
        jst.integer().min(10).done()
    ]
).done();

Result
{
  "anyOf": [
    {
      "type": "integer",
      "enum": [1, 5, 10]
    },
    {
      "type": "integer",
      "minimum": 10
    }
  ]
}

up to navigation

.integer().eMax()

Arguments - no
Example
jst.integer().eMax().done();

Result
{
  "type": "integer",
  "exclusiveMaximum": true
}

up to navigation

.integer().eMin()

Arguments - no
Example
jst.integer().eMin().done();

Result
{
  "type": "integer",
  "exclusiveMinimum": true
}

up to navigation

.integer().enum(arg, arg2, arg3...)

Arguments - Array|* Can accept mix of Array and *
Example
jst.integer().enum([1, 2, 3]).done();

Result
{
  "type": "integer",
  "enum": [1, 2, 3]
}

up to navigation

.integer().max(arg)

Arguments - Number as integer
Example
jst.integer().max(10).done();

Result
{
  "type": "integer",
  "maximum": 10
}

up to navigation

.integer().min(arg)

Arguments - Number as integer
Example
jst.integer().min(1).done();

Result
{
  "type": "integer",
  "minimum": 1
}

up to navigation

.integer().multipleOf(arg)

Arguments - positive Number as integer
Example
jst.integer().multipleOf(10).done();

Result
{
  "type": "integer",
  "multipleOf": 10
}

up to navigation

.integer().not(arg)

Arguments - Object
Example
jst.integer().not({enum: [1, 2, 3]}).done();

Result
{
  "type": "integer",
  "not": {
    "enum": [1, 2, 3]
  }
}

up to navigation

.integer().oneOf(arg, arg2, arg3...)

Arguments - Object[]|Object Can accept mix of Object[] and Object
Example
jst.integer().oneOf(
    [
        { type: 'integer', maximum: 5 },
        jst.integer().max(3).done()
    ]
).done();

Result
{
  "oneOf": [
    { "type": "integer", "maximum": 5 },
    { "type": "integer", "maximum": 3 }
  ]
}

up to navigation

.integer().done()

Arguments - no Finalize creation JSON schema template by type and return complete object.
Example
jst.integer().max(10).done();

Result
{
  "type": "integer",
  "maximum": 10
}

up to navigation

.number()

Arguments - no
Example
jst.number().done();

Result
{
  "type": "number"
}

up to navigation

.number().allOf(arg, arg2, arg3...)

Arguments - Object[]|Object Can accept mix of Object[] and Object
Example
jst.number().allOf(
 [
     { type: 'number' },
     { maximum: 5 }
 ]
).done();

Result
{
  "type": "number",
  "allOf": [
    { "type": "number" },
    { "maximum": 5 }
  ]
}

up to navigation

.number().anyOf(arg, arg2, arg3...)

Arguments - Object[]|Object Can accept mix of Object[] and Object
Example
jst.number().anyOf(
    [
        {type: 'number', enum: [1, 5, 10]},
        jst.number().min(10).done()
    ]
).done();

Result
{
  "anyOf": [
    {
      "type": "number",
      "enum": [1, 5, 10]
    },
    {
      "type": "number",
      "minimum": 10
    }
  ]
}

up to navigation

.number().eMax()

Arguments - no
Example
jst.number().eMax().done();

Result
{
  "type": "number",
  "exclusiveMaximum": true
}

up to navigation

.number().eMin()

Arguments - no
Example
jst.number().eMin().done();

Result
{
  "type": "number",
  "exclusiveMinimum": true
}

up to navigation

.number().enum(arg, arg2, arg3...)

Arguments - Array|* Can accept mix of Array and *
Example
jst.number().enum([1.5, 2.5, 3.5]).done();

Result
{
  "type": "number",
  "enum": [1.5, 2.5, 3.5]
}

up to navigation

.number().max(arg)

Arguments - Number
Example
jst.number().max(10.5).done();

Result
{
  "type": "number",
  "maximum": 10.5
}

up to navigation

.number().min(arg)

Arguments - Number
Example
jst.number().min(1.5).done();

Result
{
  "type": "number",
  "minimum": 1.5
}

up to navigation

.number().multipleOf(arg)

Arguments - positive Number as integer
Example
jst.number().multipleOf(10).done();

Result
{
  "type": "number",
  "multipleOf": 10
}

up to navigation

.number().not(arg)

Arguments - Object
Example
jst.number().not({enum: [1.5, 2.5, 3.5]}).done();

Result
{
  "type": "number",
  "not": {
    "enum": [
      1.5,
      2.5,
      3.5
    ]
  }
}

up to navigation

.number().oneOf(arg, arg2, arg3...)

Arguments - Object[]|Object Can accept mix of Object[] and Object
Example
jst.number().oneOf(
    [
        { type: 'number', maximum: 5 },
        jst.number().max(3).done()
    ]
).done();

Result
{
  "oneOf": [
    { "type": "number", "maximum": 5 },
    { "type": "number", "maximum": 3 }
  ]
}

up to navigation

.number().done()

Arguments - no Finalize creation JSON schema template by type and return complete object.
Example
jst.number().max(10).done();

Result
{
  "type": "number",
  "maximum": 10
}

up to navigation

.string()

Arguments - no
Example
jst.string().done();

Result
{
  "type": "string"
}

up to navigation

.string().allOf(arg, arg2, arg3...)

Arguments - Object[]|Object Can accept mix of Object[] and Object
Example
jst.string().allOf(
 [
     { type: 'string' },
     { maxLength: 5 }
 ]
).done();

Result
{
  "type": "string",
  "allOf": [
    { "type": "string" },
    { "maxLength": 5 }
  ]
}

up to navigation

.string().anyOf(arg, arg2, arg3...)

Arguments - Object[]|Object Can accept mix of Object[] and Object
Example
jst.string().anyOf(
    [
        {type: 'string', pattern: "^\\d+$"},
        jst.string().min(10).done()
    ]
).done();

Result
{
  "anyOf": [
    {
      "type": "string",
      "pattern": "^\\d+$"
    },
    {
      "type": "string",
      "minLength": 10
    }
  ]
}

up to navigation

.string().enum(arg, arg2, arg3...)

Arguments - Array|* Can accept mix of Array and *
Example
jst.string().enum(['one', 'two', 'three']).done();

Result
{
  "type": "string",
  "enum": [
    "one",
    "two",
    "three"
  ]
}

up to navigation

.string().max(arg)

Arguments - positive Number as integer
Example
jst.string().max(10).done();

Result
{
  "type": "string",
  "maxLength": 10
}

up to navigation

.string().min(arg)

Arguments - positive Number as integer
Example
jst.string().min(1).done();

Result
{
  "type": "string",
  "minLength": 1
}

up to navigation

.string().not(arg)

Arguments - Object
Example
jst.string().not({enum: ['one', 'two', 'three']}).done();

Result
{
  "type": "string",
  "not": {
    "enum": [
      "one",
      "two",
      "three"
    ]
  }
}

up to navigation

.string().oneOf(arg, arg2, arg3...)

Arguments - Object[]|Object Can accept mix of Object[] and Object
Example
jst.string().oneOf(
    [
        { type: 'string', maxLength: 5 },
        jst.string().max(3).done()
    ]
).done();

Result
{
  "oneOf": [
    { "type": "string", "maxLength": 5 },
    { "type": "string", "maxLength": 3 }
  ]
}

up to navigation

.string().pattern(arg)

Arguments - RegExp|String
Example
jst.string().pattern("^\\d+$").done();

Result
{
  "type": "string",
  "pattern": "^\\d+$"
}

up to navigation

.string().done()

Arguments - no Finalize creation JSON schema template by type and return complete object.
Example
jst.string().max(10).done();

Result
{
  "type": "string",
  "maxLength": 10
}

up to navigation

Testing

npm run test

up to navigation

License

MIT License. Copyright (c) 2017 Mobitel Ltd

up to navigation