Try catch wrapper
npm install a8-trycatchUtility helper that wraps a promise and returns a tuple with an error and the result, keeping your async/await flows concise and predictable.
``bash`
pnpm add a8-trycatch
`ts
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;
}
`
`ts`
function tryCatch
callback: (...args: Args) => Promise
...args: Args
): Promise<[E | null, Return | null]>;
- callback: Async function returning a promise....args
- : Arguments forwarded to the callback.null
- Returns a tuple where the first entry is the error (or ) and the second entry is the resolved value (or null).E
- The generic lets you narrow the error type when you expect something more specific than Error.
`ts
class ValidationError extends Error {}
async function mightThrow(): Promise
// ...
}
const [error, data] = await tryCatch
`
`ts`
function tryCatchSync
callback: (...args: Args) => Return,
...args: Args
): [E | null, Return | null];
- callback: Synchronous function to execute....args
- : Arguments forwarded to the callback.[error, data]
- Returns the same tuple shape as the async version.E
- Narrow the error type with the optional generic parameter.
`ts
function parseUser(json: string) {
const [error, user] = tryCatchSync(JSON.parse, json);
if (error) {
console.error("Invalid payload");
return null;
}
return user;
}
`
This project uses Vitest for unit testing.
`bash`
pnpm install
pnpm test
Use pnpm test:watch during development to re-run tests on file changes.
`bash``
pnpm build
MIT © alejandrodotor8