validate

validate is a function that returns a validator function. validator function is used to validate data and to provide the correct type of the data.

Parsing behaviour of validate#

@typeofweb/schema comes with a default set of sane coercion rules, meaning some of the most common scenarioes are covered out of the box!

Example#

import Qs from 'qs';
const queryString = `dateFrom=2020-10-15&dateTo=2020-10-15&resultsPerPage=10`;
const parsedQuery = Qs.parse(queryString);
const queryValidator = validate(
object({
dateFrom: date(),
dateTo: date(),
resultsPerPage: number(),
})(),
);
const queryObject = queryValidator(parsedQuery);
// {
// dateFrom: new Date('2020-10-15T00:00:00.000Z'), // date instance
// dateTo: new Date('2020-10-15T00:00:00.000Z'), // date instance
// resultsPerPage: 10 // number
// }

Numeric strings are converted to numbers#

Sometimes, numbers are passed as strings i.e. in query strings. We found out this kind of scenario is very common and thus we automatically convert numeric strings to numbers.

const numberSchema = number();
const numberValidator = validate(numberSchema);
const luckyNumber = '2';
// Returns 2 & type of dayOfTheWeek is `number`
const dayOfTheWeek = numberValidator(luckyNumber);

Dates get stringified#

const stringSchema = string();
const stringValidator = validate(stringSchema);
const aprilFoolsDay = new Date('April 1, 2021 00:00:00');
// Returns "2021-03-31T22:00:00.000Z" & type of ISOString is `string`
const ISOString = stringValidator(aprilFoolsDay);

Date strings are converted to Date instances#

JSON format doesn't support Date instances and usually strings in ISO 8601 format are used instead. We thought it makes sense to automatically convert them to proper Date instances.

const dateSchema = date();
const dateValidator = validate(dateSchema);
const ISOString = '2021-03-31T22:00:00.000Z';
// Returns Date Thu Apr 01 2021 00:00:00 GMT+0200 (Central European Summer Time) & type of aprilFoolsDay is `Date`
const aprilFoolsDay = dateValidator(ISOString);
Last updated on by Michał Miszczyszyn