Validation().constraints
The Validation().constraints
property returns a Map
with validatable objects as keys and sets of predicate groups associated with them as values.
Value
A Map
object.
Description
The main purpose of this property is to access constraints added with the Validation().constraint()
method in order to get their current validity state (the property isValid
), address additional data that were supplied with them as anyData
or add state callbacks to them.
For the reason that several validations can be bound to one validatable object and then grouped into one Validation
, this Map
contains sets of arrays of “validators” as values. The standard Map
iterator and the forEach
method are overridden for convinience, so that they iterate over validatable objects as keys and “validators” as values.
These “validator” objects “inherit” all properties and methods of Predicate()
, have the property isValid
representing their current validity state and are populated with the anyData
.
Examples
Iterator, accessing the anyData
and the property isValid
import { Validation } from 'isomorphic-validation';
const logConstraints = (constraints) => console.log('\n'.padStart(70, '-'), [...constraints].map( ([obj, { [Symbol.toStringTag]: name, msg, isValid }]) => [ obj, { name, msg, isValid }, ], ),);
// predicate functionsconst predicate1 = () => true;const predicate2 = () => false;const predicate3 = () => true;const predicate4 = () => false;
// validatable objectsconst obj1 = { value: 'obj1' };const obj2 = { value: 'obj2' };
const validation1 = Validation(obj1);const validation2 = Validation(obj2); // two validations bound to the same objectconst validation3 = Validation(obj2); // two validations bound to the same objectconst validationGr = Validation.group(validation1, validation2, validation3);
validation1.constraint(predicate1, { msg: 'validation1' });validation2.constraint(predicate2, { msg: 'validation2' });validation3.constraint(predicate3, { msg: 'validation3' });validationGr.constraint(predicate4, { msg: 'validationGr' });
await validationGr.validate();
logConstraints(validation1.constraints);logConstraints(validation2.constraints);logConstraints(validation3.constraints);logConstraints(validationGr.constraints);
// Output:// ---------------------------------------------------------------------// [// [// { value: 'obj1' },// { name: 'predicate1', msg: 'validation1', isValid: true }// ],// [// { value: 'obj1' },// { name: 'predicate4', msg: 'validationGr', isValid: false }// ]// ]// ---------------------------------------------------------------------// [// [// { value: 'obj2' },// { name: 'predicate2', msg: 'validation2', isValid: false }// ],// [// { value: 'obj2' },// { name: 'predicate4', msg: 'validationGr', isValid: false }// ]// ]// ---------------------------------------------------------------------// [// [// { value: 'obj2' },// { name: 'predicate3', msg: 'validation3', isValid: true }// ],// [// { value: 'obj2' },// { name: 'predicate4', msg: 'validationGr', isValid: false }// ]// ]// ---------------------------------------------------------------------// [// [// { value: 'obj1' },// { name: 'predicate1', msg: 'validation1', isValid: true }// ],// [// { value: 'obj1' },// { name: 'predicate4', msg: 'validationGr', isValid: false }// ],// [// { value: 'obj2' },// { name: 'predicate2', msg: 'validation2', isValid: false }// ],// [// { value: 'obj2' },// { name: 'predicate4', msg: 'validationGr', isValid: false }// ],// [// { value: 'obj2' },// { name: 'predicate3', msg: 'validation3', isValid: true }// ],// [// { value: 'obj2' },// { name: 'predicate4', msg: 'validationGr', isValid: false }// ]// ]
Method forEach
, adding state callbacks to “validators”
import { Validation } from 'isomorphic-validation';
// state callbackconst logValidator = ([[obj, { [Symbol.toStringTag]: name, msg, isValid }]]) => console.log(obj, { name, msg, isValid });
// predicate functionsconst predicate1 = () => true;const predicate2 = () => false;const predicate3 = () => true;const predicate4 = () => false;
// validatable objectsconst obj1 = { value: 'obj1' };const obj2 = { value: 'obj2' };
const validation1 = Validation(obj1);const validation2 = Validation(obj2); // two validations bound to the same objectconst validation3 = Validation(obj2); // two validations bound to the same objectconst validationGr = Validation.group(validation1, validation2, validation3);
validation1.constraint(predicate1, { msg: 'validation1' });validation2.constraint(predicate2, { msg: 'validation2' });validation3.constraint(predicate3, { msg: 'validation3' });validationGr.constraint(predicate4, { msg: 'validationGr' });
validationGr.constraints.forEach( validator => validator.validated(logValidator));
await validationGr.validate();
// Output://// { value: 'obj1' } { name: 'predicate1', msg: 'validation1', isValid: true }// { value: 'obj1' } { name: 'predicate4', msg: 'validationGr', isValid: false }// { value: 'obj2' } { name: 'predicate2', msg: 'validation2', isValid: false }// { value: 'obj2' } { name: 'predicate4', msg: 'validationGr', isValid: false }// { value: 'obj2' } { name: 'predicate3', msg: 'validation3', isValid: true }// { value: 'obj2' } { name: 'predicate4', msg: 'validationGr', isValid: false }
JSON representation
import { Validation } from 'isomorphic-validation';
// predicate functionsconst predicate1 = () => true;const predicate2 = () => false;const predicate3 = () => true;const predicate4 = () => false;
// validatable objectsconst obj1 = { value: 'obj1', name: 'obj1' };const obj2 = { value: 'obj2', name: 'obj2' };
const validation1 = Validation(obj1);const validation2 = Validation(obj2); // two validations bound to the same objectconst validation3 = Validation(obj2); // two validations bound to the same objectconst validationGr = Validation.group(validation1, validation2, validation3);
validation1.constraint(predicate1, { msg: 'validation1' });validation2.constraint(predicate2, { msg: 'validation2' });validation3.constraint(predicate3, { msg: 'validation3' });validationGr.constraint(predicate4, { msg: 'validationGr' });
await validationGr.validate();
console.log(JSON.stringify(validationGr.constraints, undefined, 3));
// Output://// {// "isValid": false,// "obj1": [// {// "0": {// "name": "predicate1",// "msg": "validation1",// "isValid": true// },// "1": {// "name": "predicate4",// "msg": "validationGr",// "isValid": false// },// "name": "PredicateGroup",// "length": 2,// "isValid": false// }// ],// "obj2": [// {// "0": {// "name": "predicate2",// "msg": "validation2",// "isValid": false// },// "1": {// "name": "predicate4",// "msg": "validationGr",// "isValid": false// },// "name": "PredicateGroup",// "length": 2,// "isValid": false// },// {// "0": {// "name": "predicate3",// "msg": "validation3",// "isValid": true// },// "1": {// "name": "predicate4",// "msg": "validationGr",// "isValid": false// },// "name": "PredicateGroup",// "length": 2,// "isValid": false// }// ]// }