Skip to content

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 functions
const predicate1 = () => true;
const predicate2 = () => false;
const predicate3 = () => true;
const predicate4 = () => false;
// validatable objects
const obj1 = { value: 'obj1' };
const obj2 = { value: 'obj2' };
const validation1 = Validation(obj1);
const validation2 = Validation(obj2); // two validations bound to the same object
const validation3 = Validation(obj2); // two validations bound to the same object
const 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 callback
const logValidator = ([[obj, { [Symbol.toStringTag]: name, msg, isValid }]]) =>
console.log(obj, { name, msg, isValid });
// predicate functions
const predicate1 = () => true;
const predicate2 = () => false;
const predicate3 = () => true;
const predicate4 = () => false;
// validatable objects
const obj1 = { value: 'obj1' };
const obj2 = { value: 'obj2' };
const validation1 = Validation(obj1);
const validation2 = Validation(obj2); // two validations bound to the same object
const validation3 = Validation(obj2); // two validations bound to the same object
const 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 functions
const predicate1 = () => true;
const predicate2 = () => false;
const predicate3 = () => true;
const predicate4 = () => false;
// validatable objects
const 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 object
const validation3 = Validation(obj2); // two validations bound to the same object
const 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
// }
// ]
// }