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// }// ]// }