"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"); module.exports = function (rules) { let validator = combinator((value, applyValidators) => { let allErrors = []; function validateArray(array, path = []) { let newArray = []; array.forEach((item, i) => { let itemPath = path.concat([ i ]); if (Array.isArray(item)) { newArray.push(validateArray(item, itemPath)); } else { let { errors, newValue } = applyValidators(item, rules); let annotatedErrors = annotateErrors({ pathSegments: itemPath, errors: errors }); newArray.push(newValue); allErrors.push(...annotatedErrors); } }); return newArray; } return validationResult({ errors: allErrors, newValue: validateArray(value) }); }); validator.callIfNull = false; return [ isArray, validator ]; };