A lightweight, tree-shakable Result type package with a simple, consistent API designed.
Handling errors in JavaScript and TypeScript often leads to unstructured code. The typical try/catch approach doesnβt scale well and mixes error handling with business logic. @praha/byethrow
addresses this by introducing a simple Result type, empowering you to model computation outcomes clearlyβwhile keeping control flow explicit and maintainable.
If you're a fan of libraries like neverthrow
or effect-ts, this tool will feel familiar. While neverthrow
may occasionally lack certain features, and effect-ts
or fp-ts
can introduce unnecessary complexity or overhead for many use cases, @praha/byethrow
strikes a thoughtful balanceβremaining lightweight and focused, while still offering everything you need to handle both synchronous and asynchronous fallible operations.
npm install @praha/byethrow
Detailed API docs are available at: π https://praha-inc.github.io/byethrow
Here's a simple example showing how it is used:
import { Result } from '@praha/byethrow';
const validateId = (id: string) => {
if (!id.startsWith('u')) {
return Result.fail(new Error('Invalid ID format'));
}
return Result.succeed();
};
const findUser = Result.try({
try: (id: string) => {
return { id, name: 'John Doe' };
},
catch: (error) => new Error('Failed to find user', { cause: error }),
});
const result = Result.pipe(
Result.succeed('u123'),
Result.andThrough(validateId),
Result.andThen(findUser),
);
if (Result.isSuccess(result)) {
console.log(result.value); // User found: John Doe
}
Contributions, issues and feature requests are welcome.
Feel free to check issues page if you want to contribute.
Copyright Β© PrAha, Inc.
This project is MIT
licensed.