schemat
TypeScript icon, indicating that this package has built-in type declarations

2.0.1 • Public • Published

schemat - simple runtime schema validator

npm Build Status

How to install:

npm i schemat

How to use

Validate objects with simple functions and receive error messages if any:

import { createValidator } from 'schemat';

const validator = createValidator({
  a: (data: any) => (data === 'A' ? undefined : '"a" should be "A"'),
  likeA: (data: any, siblingsData: any) => siblingsData && siblingsData.a === data ? undefined : '"likeA" should be equal to param "a"',
  nested: createValidator({
    c: (data: any) => (data === 'C' ? undefined : '"nested.c" should be "C"'),
  }),
});


// No errror messages here:
// errorMessages => undefined
const errorMessages = validator({
  a: 'A',
  likeA: 'A',
  nested: {
    c: 'C',
  },
});


// wrong b and nested.c params:
// errorMessages => {
//   b: '"likeA" should be equal to param "a"',
//   nested: {
//     c: '"nested.c" should be "C"',
//   },
// };
const errorMessages = validator({
  a: 'A',
  likeA: 'wrong!!!',
  nested: {
    c: 'wrong!!!',
  },
});

You can also pass an array of validators in your schema. Validator will run validators one by one and will stop and return first error, if any:

import { createValidator, ValidatorType } from 'schemat';

enum ERRORS {
  VALIDATION_ERROR_REQUIRED_FIELD = 'VALIDATION_ERROR_REQUIRED_FIELD',
  VALIDATION_ERROR_NOT_A_STRING = 'VALIDATION_ERROR_NOT_A_STRING',
  VALIDATION_ERROR_INVALID_EMAIL = 'VALIDATION_ERROR_INVALID_EMAIL',
}

const isRequiredValidator: ValidatorType = (data: any) =>
  typeof data === 'undefined' ? ERRORS.VALIDATION_ERROR_REQUIRED_FIELD : undefined;
const stringValidator: ValidatorType = (data: any) =>
  typeof data === 'undefined'
    ? undefined
    : typeof data !== 'string'
    ? ERRORS.VALIDATION_ERROR_NOT_A_STRING
    : undefined;
const emailValidator: ValidatorType = (data: any) =>
  typeof data === 'undefined'
    ? undefined
    : typeof data === 'string' && /^\S+@\S+$/.test(data)
    ? undefined
    : ERRORS.VALIDATION_ERROR_INVALID_EMAIL;

const validator = createValidator({
  optionalEmail: emailValidator,
  requiredEmail: [isRequiredValidator, emailValidator],
  optionalString: stringValidator,
  requiredString: [isRequiredValidator, stringValidator],
});

This package was bootstrapped with typescript-lib-boilerplate

Readme

Keywords

none

Package Sidebar

Install

npm i schemat

Weekly Downloads

2

Version

2.0.1

License

MIT

Unpacked Size

8.13 kB

Total Files

8

Last publish

Collaborators

  • michal.wrzosek