structured-elements
Version:
A TypeScript package for modelling and validating data
86 lines • 3.05 kB
JavaScript
;
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