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

0.0.11 • Public • Published

Build Status

NPM

NPM

NPM version

tsvalidate

Allows validating properties of objects and (multi-)nested objects via predefined decorators.

Installation

npm install tsvalidate

Usage

Import either the validator and specific decorators,

import {Validator, AlphaNumeric, MaxLen, IsInt, IsNotEmpty, InArray, IsDecimal, HexColor, IValidatorError}
  from "tsvalidate";

or use an alias for all exports.

import * as V from "tsvalidate";

Upon defining classes add any of the predefined decorators to their properties, then call the validate method passing the object:

import * as V from "tsvalidate";

export class Engine {

  @V.IsInt()
  horsepower: number;
}

export class Car {
    constructor() {
      this.engine = new Engine();      
    }

    @V.IsNotEmpty()
    model: string;

    @V.InArray(['Tesla', 'BMW', 'Mercedes', 'Volkswagen', 'Audi', 'Ford', 'Toyota'])
    make: string;

    @V.IsNotEmpty()
    @V.MinLen(17)
    @V.MaxLen(17)
    @V.AlphaNumeric()
    vehicleIdentificationNumber: string;

    @V.IsDecimal()
    fuelCapacity: number;

    @V.AlphaNumeric()
    @V.HexColor()
    color: string;

    @V.ValidateNested()
    engine: Engine;
}

let car = new Car();
car.model = 'Gallardo';         // Should succeed.
car.make =  'Lamborghini';       // Should fail.
car.vin = 'VWV1234XX99......';  // AlphaNumeric should fail.
car.fuelCapacity = 35;          // Should ?.
car.color = 'red';              // Should fail.
car.engine.horsepower = 513.5;  // Should fail.

let validator = new V.Validator();
let errors: V.IValidatorError = validator.validate(car);
if (errors.length > 0) {
  for (let i in errors)
    console.log(errors[i].message);
}

Errors

Returned errors use the supplied IValidatorError interface:

export interface IValidatorError {
  /**
   * Name of the target class that was validated.
   */
  target: string;
  /**
   * Target's property on which validation is applied.
   */
  property: string;
  /**
   * Error's type.
   */
  type: string;
  /**
   * Error's message.
   */
  message: string;
  /**
   * Value of that target's property, that didn't pass a validation.
   */
  value?: any;
  /**
   * That which the target's property was validated against.
   */
  comparison?: any;
}

Decorators

Currently, the following decorators are supported:

Validation decorators

Decorator Description
Common validation decorators
@IsDefined() Checks if value is defined (!== undefined).
@Equals(comparison: any) Checks if value equals ("===") comparison.
@IsEmpty() Checks if given value is empty (=== '', === null, === undefined).
@IsNotEmpty() Checks if given value is not empty (!== '', !== null, !== undefined).
@IsIn(values: any[]) Checks if value is in a array of allowed values.
@NotInArray(values: any[]) Checks if value is not in a array of disallowed values.
Type validation decorators
@ValidateType(type?: Object) Checks if a value is of the declared type. Any as parameter passed type has precedence over the declarated type. To check array items, pass an array of objects (e.g. number[][]: pass [[Number]]).
@IsInt() Checks if the value is an integer number.
@IsFloat() Checks if the value is a float number.
@IsDecimal() Checks if the value is a decimal number.
String and number validation decorators
@MaxLen(value: number) Checks if the string or the number is no longer than the defined character length.
@MinLen(value: number) Checks if the string or the number is not shorter than the defined character length.
@Contains(value: string | number) Checks if the string or the number contains the defined value.
String validation decorators
@IsDate() Checks if the string is a date. [mm-dd-(yy)yy] or [mm.dd.(yy)yy]
@ISO8601Date() Checks if the string is a date abiding ISO8601.
@IsEmail() Checks if the string is an email address.
@IsIP([4, 6]?: number) Checks if the string is an IP address. Optional check of specific protocol version.
@IsMAC() Checks if the string is a MAC address. [ff:ff:ff:ff:ff:ff]
@Alpha() Checks if the string consists entirely of letters (ignoring whitespace).
@AlphaNumeric() Checks if the string is alphanumeric (ignoring whitespace).
@Hexadecimal() Checks if the string is a hexadecimal number.
@HexColor() Checks if the string is a hex color. [#FF#FF#FF] or [FFFFFF]
@MaxByteLen(value: number) Checks if the string is no longer than the defined byte length.
@MinByteLen(value: number) Checks if the string is not shorter than the defined byte length.
@DateBefore(value: string) Checks if the string is a date prior to the defined date.
@DateAfter(value: string) Checks if the string is a date past the defined date.
@Uppercase() Checks if the string's letters are all uppercase.
@Lowercase() Checks if the string's letters are all lowercase.
Number validation decorators
@MaxValue(value: number) Checks if the number is no bigger than the defined cardinality.
@MinValue(value: number) Checks if the number is not smaller than the defined cardinality.
@MultipleOf(value: number) Checks if the number is a multiple of the defined integer.
Object validation decorators
@ValidateNested() Checks all properties of the given object for decorators and handles all applicable.

Readme

Keywords

none

Package Sidebar

Install

npm i tsvalidate

Weekly Downloads

0

Version

0.0.11

License

MIT

Last publish

Collaborators

  • danieltwalther