Skip to main content

VADE

(Validate Decorator)

Simple class validator for Deno using TypeScript Decorators with built-in class transformer.

Made for Deno Licence MIT Latest version Latest commit Status WIP

Key Features

  • Made for Deno
  • Type-safe
  • Lightweight
  • Extendable
  • Zero dependencies

How To Use

Simply create a Class (or Model) using TypeScript Decorators and run validate. If you need more validator types: write issue, create merge request or implement it yourself and only use it locally.

import {
    validate,
    createValidator,
    IsNumber,
    IsString,
    SetDefault,
} from 'https://deno.land/x/vade/mod.ts';

// Custom validator
const IsHigherThen = createValidator((value: number) => {
    return (prop) => {
        return prop > value;
    };
});

// Our example model/class
class ExampleClass {
    @IsNumber()
    @IsHigherThen(10)
    specialNumber!: number;

    @SetDefault('default value')
    @IsString()
    randomValue!: string;
}

// ---------- //

// Valid
const obj1 = new ExampleClass();
obj1.specialNumber = 13;
obj1.randomValue = 'asd';
console.log(validate(obj1, ExampleClass));
// ExampleClass { specialNumber: 13, randomValue: "asd" }

// ---------- //

// Invalid
const obj2 = new ExampleClass();
obj2.specialNumber = 9; // Failed
obj2.randomValue = 'asd';
console.log(validate(obj2, ExampleClass));
// null

// ---------- //

// Invalid
const obj3 = new ExampleClass();
// Failed -> no specialNumber
obj3.randomValue = 'asd';
console.log(validate(obj3, ExampleClass));
// null

// ---------- //

// Valid
const obj4 = { specialNumber: 14, randomValue: 'cool' };
console.log(validate(obj4, ExampleClass));
// ExampleClass { specialNumber: 14, randomValue: "cool" }

// ---------- //

// Valid -> randomValue has a default value
const obj5 = { specialNumber: 14 };
console.log(validate(obj5 as any, ExampleClass));
// ExampleClass { specialNumber: 14, randomValue: "default value" }

// ---------- //

// Invalid -> unknown nice property
const obj6 = { specialNumber: 14, randomValue: 'cool', nice: true };
console.log(validate(obj6, ExampleClass));
// null

TODO

  • add more built-in types (feel free to contribute)

Known issues

Contributing

Feel free to open merge requests!

License

MIT


Homepage luke.id  ·  GitHub @lkwr  ·  Twitter @wlkrlk