handcuffs

Async validation library for node and browser

Usage no npm install needed!

<script type="module">
  import handcuffs from 'https://cdn.skypack.dev/handcuffs';
</script>

README

Handcuffs

Build Status Coverage

Async validation library for node and browser.

Installation

Install using npm or yarn:

npm install handcuffs
# or
yarn add handcuffs

Usage

Basic usage example:

import { rules, validate } from 'handcuffs'

const data = {
  name: 'Jack',
  wife: {
    name: 'Susan'
  }
}

const dataRules = {
  name: [rules.required(), rules.string()],
  'wife.age': [rules.required(), rules.numeric()],
  pets: [rules.required(), rules.array()],
  'pets.*.type': [rules.required(), rules.string()]
}


async function start() {
  try {
    const validationResult = await validate(data, dataRules)

    if (!validationResult.valid) {
      console.log(validationResult.errors)
    }
  } catch (e) {
    console.log('Unable to validate', e)
  }
}

start()

Note: This library is written using ES6, in order to use it in your project it is advised to transpile it to your environment. The easiest way to do this is by using Babel with @babel/preset-env.

Rules

accepted

{ rules: [rules.accepted()] }

The field under validation must be 'yes', 'on', 1, or true.

alpha

{ name: [rules.alpha()] }

The field under validation must be entirely alphabetic characters.

alphaNum

{ password: [rules.alphaNum()] }

The field under validation must be entirely alpha-numeric characters.

alphaNumDash

{ url: [rules.alphaNumDash()] }

The field under validation may have alpha-numeric characters, as well as dashes and underscores.

array

{ permissions: [rules.array()] }

The field under validation must be an array.

between

{ guests: [rules.between(1, 3)] }

The field under validation must have a size between the given min and max values.

boolean

{ isVisible: [rules.boolean()] }

The field under validation must be a boolean. Accepted input values are true and false.

email

{ email: [rules.email()] }

The field under validation must be formatted as an e-mail address.

max

{ password: [rules.max(10)] }

The field under validation must be less than or equal to the given max value.

min

{ password: [rules.min(6)] }

The field under validation must be greater than or equal to the given min value.

numeric

{ age: [rules.numeric()] }

The field under validation must be numeric.

required

{ name: [rules.required()] }

The field under validation must be present in the input data and not empty.

slug

{ slug: [rules.slug()] }

The field under validation may have lowercase alpha-numeric characters and dashes.

string

{ name: [rules.string()] }

The field under validation must be a string.

License

MIT