Skip to content

bendytree/node-itsa

Repository files navigation

itsa - v2

Pronounced "it's a". As in... it's a number.

itsa is a JavaScript data validation library. This is version 2 which has been completely re-written and is basically an all new library.

Features
  • Client side & server side
  • JavaScript or TypeScript
  • 100% Test Coverage (Mocha)
  • Composable
  • Extensible
  • No dependencies
  • 6.7 KB Minified & Gzipped
  • Convert/default data in-place
  • Bail on first error or get all errors
  • Get paths & messages for each error
  • Serialize/deserialize to/from json
  • Partial verification (for updates)
  • Touch support (for Vue.js)
Simple Example
const { itsa } = require("itsa");

itsa.number().validate('foo').ok === false;
Complex Example
const { itsa } = require("itsa");

const schema = itsa.object({
  name: itsa.string(),
  email: itsa.email(),
  age: itsa.any(
    itsa.number().between(18, 200),
    null,
    undefined,
  ),
  colors: itsa.array(
    itsa.any("red", "green", "blue"),
  ).notEmpty(),
});

const result = schema.validate({ name: "Bob", email: "bob@example.com" });
result.ok === false;
result.message === "colors: must be an array";

Installation

With NPM

> npm install itsa
const { itsa } = require('itsa');

Without NPM

If you don't use NPM, then use dist/itsa.js for development (it has source maps) and use dist/itsa.min.js for production. There are no dependencies.

> itsa.min.js - 14K minified, 4K gzipped

Required vs Optional

If you want to make a property optional, then you should use the itsa.any to list all of the values that are valid. Here's a simple example that shows the difference:

itsa.string().validate(null).ok === false;
itsa.any(itsa.string(), null).validate(null).ok === true;

Validating

validate(value) -> result

Once you've built up your fancy validator, just call validate with your value.

It will return a result object that has ok set to true or false. message gives a description of the error. errors gives a full list of error objects. value gives the updated value (only different if you use a converter on the root object).

 const validator = itsa.string().maxLength(5);
 const result = validator.validate("Bob was here");
 result.ok === false;
 result.message ~== "Length is 12, max is 5";

validOrThrow(value)

As a shorthand, you can choose to automatically throw if the data is invalid:

var doThing = function (criteria, callback) {
  //validate
  itsa.object({
    criteria: itsa.object(),
    callback: itsa.function()
  }).validOrThrow({
    criteria: criteria,
    callback: callback
  });

  //all good
};

Available Methods

Todo: for now, check out files and tests in /src for a full listing.

Alternative Libraries

JavaScript Data Validators:

HTML Form Validators

License

MIT

About

Expressive validation for JavaScript data

Resources

License

Stars

Watchers

Forks

Packages

No packages published