UNPKG

@duydang2311/attempt

Version:

Go-like error handling for JavaScript and TypeScript

53 lines (52 loc) 992 B
// lib/attempt.ts var symbol = Symbol("attempt"); var attemptSync = (fn) => { return (mapException) => { try { return attempt.ok(fn()); } catch (e) { return attempt.fail(mapException ? mapException(e) : e); } }; }; var attemptAsync = (fn) => { return async (mapException) => { try { const ret = await fn(); if (isAttempt(ret)) { return ret; } return attempt.ok(ret); } catch (e) { return attempt.fail(mapException ? mapException(e) : e); } }; }; var attemptOk = (data) => ({ [symbol]: true, ok: true, failed: false, data }); var attemptFail = (error) => ({ [symbol]: true, ok: false, failed: true, error }); var attempt = { sync: attemptSync, async: attemptAsync, ok: attemptOk, fail: attemptFail }; var isAttempt = (value) => { return typeof value === "object" && value !== null && symbol in value; }; export { attemptSync, attemptOk, attemptFail, attemptAsync, attempt };