Trycatch
tryCatch Wrapper
Install / Use
/learn @alejandrodotor8/TrycatchREADME
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-trycatch
Usage
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 test
Use pnpm test:watch during development to re-run tests on file changes.
Build
pnpm build
License
MIT © alejandrodotor8
