UNPKG

structured-elements

Version:

A TypeScript package for modelling and validating data

86 lines 3.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildArrayValidator = void 0; const array_1 = require("../../attemptSalvage/array"); const validationResult_1 = require("../validationResult"); const array_2 = require("../../is/array"); const element_1 = require("../../validate/element"); const structure = `array`; const buildArrayValidator = ({ api, expectation, }) => { const validator = { getFailures: (subject, name) => { return validator.validate(subject, name).failures; }, getSalvage: (subject, name, attemptSalvage) => { return validator.validate(subject, name, attemptSalvage).salvage; }, isValid: (subject, name) => { return validator.validate(subject, name).valid; }, validate: (subject, name, attemptSalvage = array_1.attemptSalvageArray) => { expectation; if (!(0, array_2.isArray)(subject)) { return (0, validationResult_1.buildValidationResult)({ failures: [ { element: subject, expectation, key: `(subject)`, name, reason: `${name} expected to be an array, but isn't. It has typeof ${typeof subject}`, subject, }, ], subject, }); } const cached = api.privateFunctions.getCachedResult({ expectation, structure, subject, }); if (cached) { return cached; } const failures = []; const validElements = []; subject.forEach((element, index) => { const elementFailures = (0, element_1.validateElement)({ api, element, expectation, key: index.toString(), subject, subjectName: name, }); if (elementFailures.length > 0) { failures.push(...elementFailures); } else { validElements.push(element); } }); const salvage = attemptSalvage({ api, failures, name, subject, validElements, }); const result = (0, validationResult_1.buildValidationResult)({ failures, salvage, subject, }); api.privateFunctions.cacheResult({ expectation, result, structure, }); return result; }, }; return validator; }; exports.buildArrayValidator = buildArrayValidator; //# sourceMappingURL=array.js.map