@praha/byethrow
v0.10.0
Published
A lightweight, tree-shakable Result type package with a simple, consistent API designed
Downloads
16,953
Readme
@praha/byethrow 👋
A lightweight, tree-shakable Result type package with a simple, consistent API designed.
✨ Features
- 🌲 Tree-shakable: Only include what you use.
- 🧱 Lightweight & object-based: No classes, no magic—just plain objects.
- 🔄 Consistent API: Designed for readability and predictability.
- 🔀 Unified sync/async handling: Works seamlessly with both Result<T, E> and Promise<Result<T, E>>.
- 🎯 Focused functionality: Result-centric utilities without unnecessary aliases or confusing variants.
🧠 Motivation
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.
📦 Installation
npm install @praha/byethrow📚 Documentation
- Website: For detailed information and usage examples, visit the byethrow website.
- API Reference: For a complete API reference of the core package effect, see the byethrow API Reference.
🚀 Quick Example
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.fn({
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
}🤝 Contributing
Contributions, issues and feature requests are welcome.
Feel free to check issues page if you want to contribute.
📝 License
Copyright © PrAha, Inc.
This project is MIT licensed.
