Skip to content

alejandrodotor8/trycatch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 (or null).
  • The generic E lets you narrow the error type when you expect something more specific than Error.
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 E generic 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