UNPKG

ts-cast

Version:
36 lines (35 loc) 1.36 kB
"use strict"; 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;