1.2.2 • Published 2 months ago

chainable-simple-validator v1.2.2

Weekly downloads
-
License
MIT
Repository
github
Last release
2 months ago

chainable-simple-validator

A chain-able validator plugin, ideal for using to validate any field, form-data or body of node based api routes.

Getting Started

Installation

// with npm
$ npm install chainable-simple-validator

// with yarn
$ yarn add chainable-simple-validator

Usage

Import

// CommonJS module
const validator = require("chainable-simple-validator");

// ES module
import validator from "chainable-simple-validator";

Application

// 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");

Full example

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,
      })
  }

Custom Method example

const methods = ['get', 'post', 'put', 'delete']
const customValidator (el) => methods.includes(el.toLowerCase()) // This must return boolean
const { errors } = validator('GET').custom(customValidator)

Methods

MethodsDescription
validatorThe main contructor method which accepts an argument of any valid js data type.
nullableOnly 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.
typeIt can check any valid JS data type including Array & Object.
minChecks if the value has satisfied the minimum length.
maxChecks whether the value has exceeded the maximum length or not.
exactChecks whether the value has matched the exact length or not.
isEmailChecks whether it's a valid email or not.
isAlphaNumericChecks if the value contains only alpha-numeric characters.
isAlphaNumericWithHyphenUnderscoreChecks if the value contains only alpha-numeric characters, hyphen & underscore.
isURLChecks whether it's a valid URL or not.
customIt 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.

Responses

Response is returned as an object which includes the followings:

ResponsesDescription
valueThe value passed to validator method.
errorsErrors are retured as an array. See below example.

Error 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",
];

Contributing

Feel free to submit a pull request.

Authors

License

This project is licensed under the MIT License - see the LICENSE file for details