Skip to content

Getting started

Installation

The library can be installed into an existing project:

bash
$ npm install --save robust-validator

Usage

Using robust-validator is very simple.

You should just call the validate() function with data and the definition.

js
import { validate, setLocales, en } from "robust-validator";

setLocales(en);

const data = {
  email: "not-a-valid-email",
  name: "John",
  surname: "Doe",
};

const definition = {
  email: "required|email",
  name: "required|min:1|max:50",
  surname: "required|min:1|max:50",
};

const result = await validate(data, definition);
console.log(result);
js
import {
  validate,
  setLocales,
  required,
  email,
  min,
  max,
  en,
} from "robust-validator";

setLocales(en);

const data = {
  email: "not-a-valid-email",
  name: "John",
  surname: "Doe",
};

const definition = {
  email: [required(), email()],
  name: [required(), min(1), max(50)],
  surname: [required(), min(1), max(50)],
};

const result = await validate(data, definition);
console.log(result);

By the example, you would get the following response:

json
{
  "isValid": false,
  "isInvalid": true,
  "fields": {
    "email": false,
    "name": true,
    "surname": true
  },
  "errors": {
    "email": [
      {
        "rule": "required",
        "message": "The field is required."
      }
    ]
  }
}

Nested data validation

This feature allows dynamic traversal of nested data structures, supporting complex validation rules for paths like users.*.addresses.*.city.

It is inspired by Laravel's validation system and works seamlessly with arrays and objects, including deeply nested data.

ts
import { validate, setLocales, en } from "robust-validator";

setLocales(en);

const data = {
  secret: "some secret",
  users: [
    {
      addresses: [
        {
          city: "New York",
        },
        {
          city: "Istanbul",
        },
      ],
    },
    {
      addresses: [
        {
          city: "New York",
        },
        {
          street: "Wall Street",
        },
      ],
    },
  ],
  permissons: {
    read: true,
    write: true,
  },
};

const definition = {
  secret: "required|min:100",
  "users.*.addresses.*.city": "required",
  "permissons.read": "required|boolean",
  "permissons.delete": "required|boolean",
};

const result = await validate(data, definition);
console.log(result);

And this is the content of the result variable:

json
{
  "isValid": false,
  "isInvalid": true,
  "fields": {
    "secret": false,
    "users.*.addresses.*.city": false,
    "permissons.read": true,
    "permissons.delete": false
  },
  "errors": {
    "secret": [
      {
        "rule": "min",
        "message": "The field must be at least 100."
      }
    ],
    "users.1.addresses.1.city": [
      {
        "rule": "required",
        "message": "The field is required."
      }
    ],
    "permissons.delete": [
      {
        "rule": "required",
        "message": "The field is required."
      }
    ]
  }
}

Released under the MIT License.