redprint

A tool for sharing validations


Keywords
validation, validator, validate
License
Artistic-2.0
Install
npm install redprint@0.1.1

Documentation

Redprint

A tool for sharing validations

Goal

When developing a web application, there were 2 options for validating user input between API suppliers and consumers. A consumer can have validations on its own by refering API documents, or wait the result of validations from a API supplier. On the former, it cannot be ensured that consumer's validations works same with API supplier's. On the latter, there are limits to validate in real-time because of network latency.

Redprint makes it possible to validate in real-time and manage validations at one place.

Schema

For using Redprint, API validation must fit in Redprint schema.

It shapes

{
  <modelName>: {
    <attributeName>: {
      <validationName>: <validation>
    }
  }
}

validation is a function. It must receive 1 argument, and return boolean.

For example, It can be like

{
  User: {
    username: {
      notEmpty: (input) => (input.length !== 0),
      isAlpha: (input) => (/^[a-z0-9]+$/.test(input)),
    },
    password: {
      notEmpty: (input) => (input.length !== 0),
    },
  }
}

Install

npm install redprint

Usage

Supplier-side

If your validation code is

const validation = {
  User: {
    username: {
      notEmpty: (input) => (input.length !== 0)
    }
  }
};

Just do like

import { red } from 'redprint';
const validation = red({
  User: {
    username: {
      notEmpty: (input) => (input.length !== 0)
    }
  }
});

Then run server. 'redprint.json' is generated in your project root. Provide this file for your API comsumers.

Comsumer-side

At first, locate 'redprint.json' provided from API supplier in your project root.

import { validate } from 'redprint';

const username = getUsernameFromForm();
try {
  validate('User.username', username);
} catch (err) {
  handleError(err);
  console.log(err.message);
  // RedprintError: '' is invalid User.username for 'notEmpty' validation
}

API

red(redprint: Redprint)

Append redprint to 'redprint.json'.

validate(key: string, input: any)

Validate input as the key, on the basis of 'redprint.json'.

RedprintError

It is thrown if validate() failed.

Property Description
input User input
key What the input is for
validationName Which validation failed