checkmate
Version:
lightweight data validation helper
34 lines (26 loc) • 1.26 kB
JavaScript
;
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
module.exports = function (validations) {
var checkers = Object.keys(validations).map(function (valueKey) {
return { valueKey: valueKey, valueChecks: validations[valueKey] };
}).reduce(function (validators, _ref) {
var valueKey = _ref.valueKey,
valueChecks = _ref.valueChecks;
return validators.concat(Object.keys(valueChecks).map(function (checkKey) {
return { checkKey: checkKey, checkFunction: valueChecks[checkKey] };
}).reduce(function (validators, _ref2) {
var checkKey = _ref2.checkKey,
checkFunction = _ref2.checkFunction;
return validators.concat(function (errors, values) {
var result = checkFunction(values[valueKey]);
if (result) return errors;
return Object.assign({}, errors, _defineProperty({}, valueKey, [].concat((errors || {})[valueKey] || [], checkKey)));
});
}, []));
}, []);
return function (values) {
return checkers.reduce(function (errors, checker) {
return checker(errors, values);
}, null);
};
};