a8-trycatch
v1.1.0
Published
Try catch wrapper
Readme
trycatch
Utility helper that wraps a promise and returns a tuple with an error and the result, keeping your async/await flows concise and predictable.
Installation
pnpm add a8-trycatchUsage
import { tryCatch } from "a8-trycatch";
async function fetchUser(id: string) {
const [error, user] = await tryCatch(getUserFromApi, id);
if (error) {
// Handle error without additional try/catch blocks
console.error(error);
return null;
}
return user;
}API
tryCatch
function tryCatch<Return, Args extends unknown[], E = Error>(
callback: (...args: Args) => Promise<Return>,
...args: Args
): Promise<[E | null, Return | null]>;callback: Async function returning a promise....args: Arguments forwarded to the callback.- Returns a tuple where the first entry is the error (or
null) and the second entry is the resolved value (ornull). - The generic
Elets you narrow the error type when you expect something more specific thanError.
class ValidationError extends Error {}
async function mightThrow(): Promise<string> {
// ...
}
const [error, data] = await tryCatch<string, [], ValidationError>(mightThrow);tryCatchSync
function tryCatchSync<Return, Args extends unknown[], E = Error>(
callback: (...args: Args) => Return,
...args: Args
): [E | null, Return | null];callback: Synchronous function to execute....args: Arguments forwarded to the callback.- Returns the same
[error, data]tuple shape as the async version. - Narrow the error type with the optional
Egeneric parameter.
function parseUser(json: string) {
const [error, user] = tryCatchSync(JSON.parse, json);
if (error) {
console.error("Invalid payload");
return null;
}
return user;
}Testing
This project uses Vitest for unit testing.
pnpm install
pnpm testUse pnpm test:watch during development to re-run tests on file changes.
Build
pnpm buildLicense
MIT © alejandrodotor8
