integreat
Version:
Node.js integration layer
33 lines • 1.28 kB
JavaScript
import { isObject } from './is.js';
export default function prepareValidator(conditions, mapTransform, mapOptions, defaultErrorStatus = 'badrequest', breakByDefault = false) {
if (!Array.isArray(conditions) || conditions.length === 0) {
return async () => [[], false];
}
const validators = conditions.map(({ condition, failResponse, break: breakOnFail = breakByDefault }) => ({
validate: mapTransform(condition, mapOptions),
breakOnFail,
failResponse: isObject(failResponse)
? failResponse
: {
status: defaultErrorStatus,
error: typeof failResponse === 'string'
? failResponse
: 'Did not satisfy condition',
},
}));
return async function validate(action) {
const failResponses = [];
let doBreak = false;
for (const { validate, failResponse, breakOnFail } of validators) {
const result = await validate(action);
if (!result) {
failResponses.push(failResponse);
if (breakOnFail) {
doBreak = true;
}
}
}
return [failResponses, doBreak];
};
}
//# sourceMappingURL=validation.js.map