@simjrlouz/catchless
v1.0.0
Published
Stop try/catch hell. Handle errors as data.
Downloads
49
Readme
🎣 Catchless
Stop the
try/catchhell. Handle async errors like a pro. En finissez avec l’enfer destry/catch. Gérez vos erreurs asynchrones comme un pro.
💡 Why Catchless? / Pourquoi Catchless ?
EN:
In JavaScript/TypeScript, handling async errors often leads to deeply nested code and unreadable try/catch blocks.
Catchless brings the “Error as Data” pattern (inspired by Go and Rust) to your codebase, making your code linear, clean, and type-safe.
FR :
En JavaScript/TypeScript, la gestion des erreurs asynchrones mène souvent à un code imbriqué et des blocs try/catch illisibles.
Catchless introduit le pattern « l’erreur comme donnée » (inspiré de Go et Rust) pour un code plus lisible, linéaire et sécurisé (type-safe).
🔍 Comparison / Comparaison
❌ Before / Avant
async function getUser() {
try {
const res = await fetch('/api/user');
const user = await res.json();
return user;
} catch (error) {
console.error(error);
return null;
}
}✅ With Catchless / Avec Catchless
import { safe } from 'catchless';
async function getUser() {
const [user, err] = await safe(api.getUser());
if (err) {
console.error(err);
return null;
}
return user;
}📦 Installation
npm install catchless
# or / ou
yarn add catchless
# or / ou
pnpm add catchless🛠 Features / Fonctionnalités
1️⃣ Simple Safe Call
EN: Wraps any promise into a simple [data, error] tuple.
FR : Enveloppe n’importe quelle promesse dans un tuple [data, error].
const [data, err] = await safe(myPromise);2️⃣ With Timeout
EN: Prevents your application from hanging forever if an API is too slow. FR : Empêche votre application de rester bloquée si une API est trop lente.
// Fails if not resolved after 2000ms
const [data, err] = await safeWithTimeout(api.getData(), 2000);3️⃣ Fully Type-Safe
EN: Automatically infers data types. No more any.
FR : Inférence automatique des types. Fini le any.
const [user, err] = await safe<User>(fetchUser());
// user: User | null
// err: Error | null🧩 Advanced Usage / Usage Avancé
EN: Specify a custom error type for domain-specific error handling. FR : Spécifiez un type d’erreur personnalisé pour une meilleure gestion métier.
type MyApiError = {
code: number;
message: string;
};
const [data, err] = await safe<User, MyApiError>(fetchUser());
if (err) {
console.log(err.code);
}📊 Benefits / Avantages
- Zero Dependencies — Built with pure TypeScript
- Ultra-lightweight — Less than 500 bytes (minified + gzipped)
- Linear Flow — Reduces cognitive load by removing deep nesting
- Zéro dépendance — Construit en pur TypeScript
- Ultra-léger — Moins de 500 octets (minifié + gzippé)
- Flux linéaire — Réduit la charge cognitive en supprimant l’imbrication
🤝 Contributing
EN: Contributions are welcome! Feel free to open an issue or a pull request. FR : Les contributions sont les bienvenues ! Ouvrez une issue ou une pull request.
📄 License
MIT © LOUZOLO Sim-Jr Steeven / sim-jr
