valideno
Validate your values and schemas with valideno. Convert values to your desired type if needed. All you need is a single function.
validate(data, validators, options = {})
;
Examples
import {
ValidationError, validate, ArraySymbol,
isString, isEmail, fulfillsRegex,
isNumber, isInRange,
} from "./mod.ts";
const errorsA: ValidationError[] = await validate(3.14, isNumber());
console.log(errorsA);
// []
const errorsB: ValidationError[] = await validate(3.14, isString());
console.log(errorsB);
// [ { type: "isString", args: {}, message: "This value has to be a string." } ]
const errorsC: ValidationError[] = await validate(
"john.doe@example.com",
[isString(), isEmail()],
);
console.log(errorsC);
// []
const entity = {
name: "John Doe",
age: 25,
emails: [
{ type: "work", address: "john.doe@example.com" },
{ type: "home", address: "fancy_joe69@rainbow.com" },
],
};
const scheme = {
name: isString(),
age: isInRange({ greaterThanOrEqualTo: 18 }),
emails: {
[ArraySymbol]: {
type: fulfillsRegex({ regex: /^[a-z]+$/ }),
address: isEmail(),
},
},
};
const errorsD: ValidationError[] = await validate(entity, scheme);
console.log(errorsD);
// []
Conversion
To allow automatic conversion to the desired data type add the doConversion: true
option. To retreive the converted values, you need to pass a reference to an object to converted
. If the conversion is not possible (e.g. when passing a string
to isBoolean()
) no conversion will take place and the value stays the same. In this case errors are thrown, because the non-converted string
is not a Boolean.
The converted data is not in the reference passed to converted
in the property output
. This also works for schemes.
import {
ValidationError, validate,
isNumber
} from "./mod.ts";
const converted: any = {};
const errors: ValidationError[] = await validate("420", isNumber(), { doConversion: true, converted });
console.log(errors);
// []
console.log(converted);
// { output: 420 }
To disable validation and do "best effort" conversion only, disable validation with doValidation: false
.
import {
ValidationError, validate,
isBoolean
} from "./mod.ts";
const converted: any = {};
const errors: ValidationError[] = await validate("foobar", isBoolean(), { doConversion: true, converted });
console.log(errors);
// [ { type: "isBoolean", args: {}, message: "This value has to be a boolean." } ]
console.log(converted);
// { output: "foobar" }