You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

40 lines
944 B
JavaScript

"use strict";
const combinator = require("@validatem/combinator");
const validationResult = require("@validatem/validation-result");
const annotateErrors = require("@validatem/annotate-errors");
const isArray = require("@validatem/is-array");
const withContext = require("@validatem/with-context");
module.exports = function (rules) {
let validator = combinator((value, applyValidators) => {
let newArray = [];
let allErrors = [];
value.forEach((item, i) => {
let itemRules = withContext(rules, { arrayIndex: i, arrayLength: value.length });
let { errors, newValue } = applyValidators(item, itemRules);
let annotatedErrors = annotateErrors({
pathSegments: [ i ],
errors: errors
});
newArray.push(newValue);
allErrors.push(...annotatedErrors);
});
return validationResult({
errors: allErrors,
newValue: newArray
});
});
validator.callIfNull = false;
return [
isArray,
validator
];
};