0.1.1 • Published 7 years ago

redprint v0.1.1

Weekly downloads
5
License
Artistic-2.0
Repository
github
Last release
7 years ago

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.

PropertyDescription
inputUser input
keyWhat the input is for
validationNameWhich validation failed