@motet-a/validate v0.1.1
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.ValidationErrorOf course, you can allow null and undefined:
V.optional(null) // → null
V.optional(undefined) // → undefinedYou 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) // → falseV.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) // → nullYou 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.