@duydang2311/attempt
Version:
Go-like error handling for JavaScript and TypeScript
53 lines (52 loc) • 992 B
JavaScript
// 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
};