/validate

Data validation for Node.js

Primary LanguageJavaScriptOtherNOASSERTION

Build Status Coverage Status

Data validation for Node.js

Oh no, yet another validation library, there are thousands…

Well, I was unable to find the perfect validation library. I like these ones:

  • prop-types. This one is truly great. It’s not the most customizable, not the most chainable and it’s not really suitable outside React, but it perfectly does its job.

  • Joi. Chainable but a bit bloated. You can do a lot with Joi, but it’s not so simple, you can’t always guess what it does without reading the documentation.

This library is an attempt to write a cleaner and simplified Joi, using modern JS features.

Drawbacks

Since it uses Reflect, it is hard to use it in old environments.

How-to

First of all:

const V = require('@motet-a/validate')

V is a validation function which returns its argument, requires a value and throws on error:

V(123) // → 123
V(0) // → 0
V(null) // → throws V.ValidationError
V(undefined) // → throws V.ValidationError

Of course, you can allow null and undefined:

V.optional(null) // → null
V.optional(undefined) // → undefined

You can restrict the type:

V.string('valid') // → 'valid'
V.string(123) // → throws
V.number(NaN) // → throws
V.number(123) // → 123
V.number.integer(123) // → 123
V.object({}) // → {}
V.bool(false) // → false

V.integer is a shortcut for V.number.integer.

V is a validator, V.string is a new validator. Every validator is immutable.

You can mix up everything:

V.optional.string(null) // → null
V.string.optional(null) // → null

You can restrict types of objects and arrays:

V.array.of(V.number.positive)([-1]) // throws (number not positive)
V.object.of(V.string.lower)

You can also shape objects, use rexgexp, extract and reuse field validators and much more. See the examples/ directory.

Inspirations

Joi and prop-types.