ts-cast
Version:
Runtime typechecking
36 lines (35 loc) • 1.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.validation = exports.validate = void 0;
var names_1 = require("../helpers/names");
var isNonEmpty = function (value) { return value.length > 0; };
var success = function (result) {
return ({ ok: true, result: result, errors: [] });
};
var failure = function (errors) {
return ({ ok: false, result: undefined, errors: errors });
};
var validate = function (casterFn) {
return function (value, context) {
var errors = [];
var reportError = function (message, ctx) {
errors.push({ message: message, context: ctx });
};
try {
var result = casterFn(value, context, reportError);
return isNonEmpty(errors) ? failure(errors) : success(result);
}
catch (err) {
return failure([{ message: err.message, context: context }]);
}
};
};
exports.validate = validate;
var validation = function (casterFn, invalidFactory, validFactory) {
var validator = (0, exports.validate)(casterFn);
return (0, names_1.withName)(function (value, context) {
var vResult = validator(value, context);
return vResult.ok ? validFactory(vResult.result) : invalidFactory(vResult.errors);
}, "validation<*, ".concat(casterFn, ">"));
};
exports.validation = validation;