A chain-able validator plugin, ideal for using to validate any field, form-data or body of node based api routes.
// with npm
$ npm install chainable-simple-validator
// with yarn
$ yarn add chainable-simple-validator
// CommonJS module
const validator = require("chainable-simple-validator");
// ES module
import validator from "chainable-simple-validator";
// Basic type checking
const { value, errors } = validator("First Name").type("string");
// Type checking & when we need exact length
const { value, errors } = validator(01234567890).type("number").exact(11);
// With minimum & maximum boundary
const { value, errors } = validator([1, 2, 3]).type("array").min(3).max(6);
// If it's optional
const { value, errors } = validator(true).nullable().type("boolean");
// If it's an email
const { value, errors } = validator(true).type("string").isEmail();
// Or, pass a custom validator
const { value, errors } = validator(2)
.type("number")
.custom((el) => el % 1 === 0, "Must be a whole number");
const body = {
name: 'Jhon Smith',
email: 'john@smith.com',
password: 'j123456s',
termsConditions: true,
profile: 'www.john-smith.com',
method: 'get'
}
const { value: name, errors: nErrors } = validator(body.name).type('string')
const { value: email, errors: mailErrors } = validator(body.email).isEmail()
const { value: password, errors: passErrors } = validator(body.password).type('string').min(6).max(10).isAlphaNumeric()
const { value: tc, errors: tcErrors } = validator(body.termsConditions).nullable().type('boolean')
const { value: profile, errors: proErrors } = validator(body.profile).nullable().isURL()
const { value: method, errors: mErrors } = validator(body.method).custom(customValidator) // See below example
if ([nErrors, mailErrors, pErrors, passErrors, tcErrors, proErrors].some((err) => err.length)) {
console.log(error: {
firstName: fErrors,
email: mailErrors,
password: passErrors,
termsConditions: tcErrors,
profile: proErrors,
method: mErrors,
})
}
const methods = ['get', 'post', 'put', 'delete']
const customValidator (el) => methods.includes(el.toLowerCase()) // This must return boolean
const { errors } = validator('GET').custom(customValidator)
Methods | Description |
---|---|
validator | The main contructor method which accepts an argument of any valid js data type. |
nullable | Only if the value is NOT null or undefind , validators will be applicable. Apply it if the value is optional. Notice the position above, it's important. Always apply it as second method if needed. |
type | It can check any valid JS data type including Array & Object . |
min | Checks if the value has satisfied the minimum length. |
max | Checks whether the value has exceeded the maximum length or not. |
exact | Checks whether the value has matched the exact length or not. |
isEmail | Checks whether it's a valid email or not. |
isAlphaNumeric | Checks if the value contains only alpha-numeric characters. |
isAlphaNumericWithHyphenUnderscore | Checks if the value contains only alpha-numeric characters, hyphen & underscore. |
isURL | Checks whether it's a valid URL or not. |
custom | It is also possible to pass your own validator if needed. This method accepts a handler as first argument & a string (optional) as second argument which will be returned in errors array if the logic not meet. The handler must return a boolean. It is also possbile to chain multiple custom methods. |
Response is returned as an object which includes the followings:
Responses | Description |
---|---|
value | The value passed to validator method. |
errors | Errors are retured as an array. See below example. |
[
"Type not matched. Expected string, got number",
"Max length must not exceed 10",
"Min length must be 6",
"Length must be 11",
"This only accepts alpha-numeric value with hyphen & underscore",
"This is not valid URL",
];
Feel free to submit a pull request.
- S.M. Shakil - Initial work - S.M.Shakil
This project is licensed under the MIT License - see the LICENSE file for details