livr
Version:
Lightweight validator supporting Language Independent Validation Rules Specification
54 lines (45 loc) • 1.55 kB
JavaScript
const AsyncValidator = require('../../AsyncValidator');
const util = require('../../util');
function list_of_different_objects(selectorField, livrs, ruleBuilders) {
const validators = {};
for (const selectorValue in livrs) {
const validator = new AsyncValidator(livrs[selectorValue])
.registerRules(ruleBuilders)
.prepare();
validators[selectorValue] = validator;
}
return async (objects, params, outputArr) => {
if (util.isNoValue(objects)) return;
if (!Array.isArray(objects)) return 'FORMAT_ERROR';
const results = [];
const errors = [];
let hasErrors = false;
for (const object of objects) {
if (
typeof object != 'object' ||
!object[selectorField] ||
!validators[object[selectorField]]
) {
errors.push('FORMAT_ERROR');
continue;
}
const validator = validators[object[selectorField]];
try {
const result = await validator.validate(object);
results.push(result);
errors.push(null);
} catch (caughtErrors) {
hasErrors = true;
errors.push(caughtErrors);
results.push(null);
}
}
if (hasErrors) {
return errors;
} else {
outputArr.push(results);
return;
}
};
}
module.exports = list_of_different_objects;