Skip to content

sumeetsarkar/ratifyjs

Repository files navigation

Ratify JS

Ratify JS is a fast & small JSON schema validation library

Installation

npm install ratify-js

Apply Schema on Data

const { ratify } = require('ratify-js');

// Usage 1 - direct approach
ratify(schema, data);

// Usage 2 - curried approach
const schemaValidator = ratify(schema);
schemaValidator(data);

Define schema

const { Types, } = require('ratify-js');

module.exports = {
  type: Types.Object, /* Main Parent type: Object or Array */
  fields: { /* fields of Object */
    id: {
      type: Types.Number, /* type: Number */
      required: true, /* Required: true, or else considered false */
    },
    firstName: {
      type: Types.String, /* type: String */
      required: true,
      test: /^[a-zA-Z]{2,12}/,  /* test: assign regex */
    },
    lastName: {
      type: Types.String,
      default: '',  /* default assignment, only if Required: false */
    },
    age: {
      type: Types.Number,
      required: true,
      range: {  /* Assign range -> min, max (for type: Number) */
        min: 18,
      },
    },
    hobbies: {
      type: Types.Array,  /* Type: Array */
      length: { /* Assign length -> min, max (for type: Array) */
        min: 1,
        max: 5,
      },
      children: { /* chilren of array */
        type: Types.String,
      },
    },
    sports: {
      type: Types.Array,
      default: [],  /* default assignment for array */
      children: {
        type: Types.String,
      },
    },
    address: {
      type: Types.Object, /* type: Object */
      fields: {
        street: {
          type: Types.String,
          required: true,
        },
        city: {
          type: Types.String,
          required: true,
        },
        state: {
          type: Types.String,
          required: true,
        },
        pin: {
          type: Types.String,
        },
      },
    },
  },
};

A sample JSON conforming to the above schema

module.exports = {
  id: 123456,
  firstName: 'John',
  lastName: 'Doe',
  age: 25,
  hobbies: ['reading', 'cinema'],
  sports: ['volley-ball', 'badminton'],
  address: {
    street: '890 Fifth Avenue, Manhattan',
    city: 'New York City',
    state: 'New York',
    pin: '',
  },
};