import {getType} from '../util/get_type'; import {ValidationError} from '../error/validation_error'; export function validateArray(options) { const array = options.value; const arraySpec = options.valueSpec; const validateSpec = options.validateSpec; const style = options.style; const styleSpec = options.styleSpec; const key = options.key; const validateArrayElement = options.arrayElementValidator || validateSpec; if (getType(array) !== 'array') { return [new ValidationError(key, array, `array expected, ${getType(array)} found`)]; } if (arraySpec.length && array.length !== arraySpec.length) { return [ new ValidationError( key, array, `array length ${arraySpec.length} expected, length ${array.length} found` ) ]; } let arrayElementSpec = { type: arraySpec.value, values: arraySpec.values }; if (styleSpec.$version < 7) { arrayElementSpec['function'] = arraySpec.function; } if (getType(arraySpec.value) === 'object') { arrayElementSpec = arraySpec.value; } let errors = []; for (let i = 0; i < array.length; i++) { errors = errors.concat( validateArrayElement({ array, arrayIndex: i, value: array[i], valueSpec: arrayElementSpec, validateSpec: options.validateSpec, style, styleSpec, key: `${key}[${i}]` }) ); } return errors; }