Composition Conventions
We defined early on that all validators must be functions in Strickland. This is technically true, but because
every
and objectProps
are used so frequently to validate arrays of validators and object properties, composition conventions are built into Strickland's validate
function to automatically use every
and objectProps
.If a validator is not a function, but it is instead an array, it is assumed to be an array of validator functions. This array will be wrapped with
every
.If a validator is an object, it is assumed to be an object defining validators for object props. This object will be wrapped with
objectProps
.We can rewrite the example for validating a person's name and address more naturally.
import validate, {arrayElements, required, length, range} from 'strickland';
const personValidator = [
required(),
{
name: [required(), length(5, 40)],
addresses: [required(), arrayElements([
required(),
{
street: [
required(),
{
number: [required(), range(1, 99999)],
name: [required(), length(2, 40)]
}
],
city: required(),
state: [required(), length(2, 2)]
}
])]
}
];
const person = {
name: 'Stanford Strickland',
address: {
city: 'Hill Valley',
state: 'CA'
}
};
const result = validate(personValidator, person);
// Result would be invalid because
// address does not have a street
There may be times when you do need to explicitly use
every
and objectProps
though. With the object and array conventions, there is no way to pass validator props in that would apply at the object-level or to all validators within the array. But it is quite easy to reintroduce the objectProps
or every
wrapper and pass props in after the object or array as seen previously.Last modified 2yr ago