UNPKG

pragmatic-fp-ts

Version:

Opinionated functional programming library with easy use in mind

59 lines (58 loc) 2.62 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.errorLoggedFuture = exports.errorLogged = void 0; function ErrorLog(expr, errors = []) { return { _: (f) => ErrorLog(f(expr), errors), try: (f, alt) => { try { return ErrorLog(f(expr), errors); } catch (err) { return ErrorLog(alt, [...errors, err]); } }, effect: (f) => { try { f(expr); return ErrorLog(expr, errors); } catch (err) { return ErrorLog(expr, [...errors, err]); } }, getErrors: () => errors, getValue: () => expr, getValueOr: (alt) => (expr || alt), hasErrors: () => errors.length > 0, }; } const FutureErrorLog = (expr, errors = Promise.resolve([])) => { const exprP = expr instanceof Promise ? expr : Promise.resolve(expr); const tryOrAppendError = (p, es) => p.then(() => es).catch((err) => __awaiter(void 0, void 0, void 0, function* () { return [...(yield errors), err]; })); return { _: (f) => FutureErrorLog(exprP.then(f), errors), effect: (fx) => FutureErrorLog(exprP, tryOrAppendError(exprP.then(fx), errors)), try: (f, alt) => { const p = exprP.then(f); return FutureErrorLog(p.catch(() => alt), tryOrAppendError(p, errors)); }, getErrors: () => errors, getValue: () => exprP, getValueOr: (alt) => __awaiter(void 0, void 0, void 0, function* () { return (yield exprP) || (alt instanceof Promise ? yield alt : alt); }), hasErrors: () => errors.then((e) => e.length > 0), }; }; const errorLogged = (value) => ErrorLog(value); exports.errorLogged = errorLogged; const errorLoggedFuture = (value) => FutureErrorLog(value); exports.errorLoggedFuture = errorLoggedFuture;