Skip to content

A modern asynchronous nestable functional validator for JavaScript objects.

License

Notifications You must be signed in to change notification settings

tomaspinho/modern-validator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

modern-validator Build Status Coverage Status

modern-validator is a modern (node.js > 8.0) asynchronous nestable functional validator for JavaScript objects. Intended for use with objects representing HTTP request bodies in node.js web frameworks.

Installation

npm i modern-validator

Model

A schema is an object that maps values (property names) to predicates (or arrays of predicates).

A predicate is a function that receives a value and returns a Promise which resolves to a falsy value if the validation passes or fails with an error string if the validation fails. Examples:

function isEqualToOne(value) {
  if (value === 1) return Promise.resolve();
  else return Promise.reject('Value is not equal to one.');
}

const isEqualToNumberInDatabase = value => asyncGetNumberInDatabase()
  .then(number => {
    if (value === number) return;
    else throw "Value is not equal to number in database.";
  });

async function isEqualToTwo(value) {
  if (value === 2) return;
  else throw "Value is not equal to two";
}

const isEqualToStoredNumber = async value => {
  if (value === await asyncGetStoredNumber()) return;
  else throw "Value is not equal to two";
}

A validator is a function returned by modern-validator when called with a schema object. It throws a ValidationError when any of the values fail validation and returns undefined otherwise. Example:

const mv = require('modern-validator');

const higherThanZero = async val => { if (val >= 0) return; else throw "Number not higher than zero."; }

const schema = {
  price: higherThanZero
};

const validator = mv(schema);

A validation is an object that maps the properties in the schema, to the error strings produced by the predicates (array of strings if an array of predicates was specified), if any. It's thrown (inside a ValidationError) if an object does not pass validation. Example:

// From code above...

try {
  await validator({
    price: -1
  });
  // any subsequent code
} catch (v) {
 /*
 *  v = ValidationError {
 *    message: "Modern Validator encountered validation error(s).",
 *    validation: {
 *      price: "Number not higher than zero."
 *    }
 *  }
 */
}

modern-validator is nestable in itself, which means the following is a perfectly valid construct:

const validator = ModernValidator({
  key1: ModernValidator({
    key1: somePredicate
  })
});

TODO

  • Implement utils bag with:
    • sync/true/false predicate to async/return/throw predicate wrapper;

About

A modern asynchronous nestable functional validator for JavaScript objects.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published