More than just an object validator.
OVP includes smart helpers that makes your write less and do more when running validations.
key | Description |
---|---|
* |
(wildcard) validates all object keys against every validator defined in its value. |
** |
(wildcard for validators) validates all defined keys against every validator defined in its value. |
// assuming we have an object:
wildcardData = {
name: 'wildcard',
address: 'Drive 6, Astro world!',
mobile: '+1336d373'
};
// With rules set:
wildcardTestRules = {
'*': {typeOf: 'string'},
'**': {must: true},
address: {minLength: 10},
};
// the above will be transformed to this using wildcards
wildcardTestRules = {
address: { typeOf: 'string', must: true, minLength: 10 },
name: { typeOf: 'string' },
mobile: { typeOf: 'string' }
};
// name and mobile was automatically added because * wildcard exists.
// If * is removed and ** still exists, it will result to:
wildcardTestRules = {
address: { must: true, minLength: 10 }
}
// {must: true} was automatically added to address.
value of *
is added to all object keys, while value of **
is added to all defined rules.
Notice that wildcardTestRules.address
rules comes first when transformed before the other keys of the object.
This is because defined rules runs before *
wildcard added rules.
Name | Description |
---|---|
:skip |
accepts a boolean or a function(value?) that returns a boolean , if true that particular validation will be skipped! |
skipMobile= true;
rules = {
mobile: {
':skip': skipMobile,
'someMobileValidator': true,
},
username: {minLength: 10},
};
// mobile will not be validated because :skip is true
// :skip can also accept a function that returns a boolean
// The current value its validating will be passed to that function also
skipMobile = (mobile) => {
// skip if mobile is empty else run all the validation listed after me.
return !mobile.length;
};
// mobile will be validated because :skip function returned false
Every validation has 3 events that can possibly occur.
Event | Description |
---|---|
yes |
Occurs once! when all validation is successfully. |
beforeValidation |
Occurs before validation, if false is returned in event handler the validation wont run. |
onEachError |
Occurs on each error. |
The onEachError
event has a default out of the box function that logs the error affected key and a parsed error message to the console. as seen in basic examples.
These events can be handled both globally and on each validate
call.
Lets override the default onEachError
. This can be done using .setEventHandler(name, function)
name
: Name of default function to override.
function
: Function to be replaced with.
ovp.setEventHandler('onEachError', (param, msg) => {
console.log('===> ', '{' + param + '}', msg)
});
let data = {
username: ['NodeJs'],
password: '123456'
};
let rules = {
"*": {
typeOf: 'string',
must: true
},
password: {minLength: 10}
};
let check = ovp.validate(data, rules);
// returns: false
// log: ===> {username} Username is not typeOf string
All validations will use default event handlers unless a custom error handler is not passed to validate
// set custom handler per validation
check = ovp.validate(data, rules, {
onEachError(param, msg) {
console.log('Custom onEach Error ===> ', '{' + param + '}', msg)
}
});
// returns: false
// Custom onEach Error ===> {username} Username is not typeOf string
// Without custom onEachError, it reverts back to default onEachError set above.
// set username to string
data.username = 'NodeJs';
check = ovp.validate(data, rules);
// returns: false
// log: {password} Password is too short. (Min. 10 characters)
validate
3rd parameter can accept an object
of event handlers functions just like this.
let eventHandlers = {
yes() {},
beforeValidation() {
return true;
},
onEachError(param, msg) {}
};
check = ovp.validate(data, rules, eventHandlers);
yes
: will run when all validation is successful. check
will still return boolean
.