universal-error-mapper
v1.0.0
Published
Universal error mapper with multilingual support for React, Express, Next.js and other frameworks
Downloads
94
Maintainers
Readme
Universal Error Mapper 🌍
Une librairie TypeScript universelle pour la gestion d'erreurs multilingue dans les applications web et API.
🚀 Fonctionnalités
- Multilingue : Support français et anglais avec fallback automatique
- Composants UI : Composants React prêts à l'emploi (ErrorDisplay, ErrorBoundary, ErrorToast, ErrorModal)
- Intégrations : Support Express, Next.js et autres frameworks
- Codes d'erreur complets : Tous les codes HTTP 4xx et 5xx standards
- Double vision : Messages utilisateur clairs + logs développeur détaillés
- TypeScript : Support complet avec types définis
- Extensible : Facilement personnalisable et extensible
📦 Installation
npm install universal-error-mapper🎯 Problème résolu
Côté utilisateur final
- ❌ Messages d'erreur cryptiques : "500 Internal Server Error"
- ❌ Pas de solution actionnable
- ❌ Frustration et perte de confiance
Côté développeur
- ❌ Gestion d'erreurs dupliquée dans chaque projet
- ❌ Pas de cohérence entre les équipes
- ❌ Support client surchargé
Notre solution
- ✅ Messages clairs et contextualisés
- ✅ Conseils pratiques pour l'utilisateur
- ✅ Logs détaillés pour les développeurs
- ✅ Système unifié et réutilisable
🚀 Utilisation rapide
Core API
import { getErrorMessage, getFormattedMessage } from 'universal-error-mapper';
// Obtenir les détails d'une erreur
const errorInfo = await getErrorMessage('404', { lang: 'fr' });
console.log(errorInfo);
// {
// severity: 'warning',
// title: 'Page introuvable',
// description: 'La ressource que vous cherchez n\'existe pas...',
// actionUser: 'Vérifiez l\'adresse ou retournez à l\'accueil',
// actionDev: 'Vérifiez vos routes front/back et les redirections'
// }
// Message formaté pour l'utilisateur
const userMessage = await getFormattedMessage('401', {
lang: 'en',
env: 'user'
});
console.log(userMessage);
// "Unauthorized
// You need to log in to access this resource.
// Log in and try again."
// Message formaté pour le développeur
const devMessage = await getFormattedMessage('401', {
lang: 'en',
env: 'dev'
});
console.log(devMessage);
// "Unauthorized (401)
// You need to log in to access this resource.
// Action: Check authentication system and tokens."Composants React
import React from 'react';
import { ErrorDisplay, ErrorBoundary, useErrorMapper } from 'universal-error-mapper';
function MyComponent() {
const { getError, errorInfo, isLoading } = useErrorMapper();
const handleError = async () => {
await getError('404', { lang: 'fr' });
};
return (
<ErrorBoundary language="fr">
<div>
<button onClick={handleError}>Tester l'erreur 404</button>
{errorInfo && (
<ErrorDisplay
errorInfo={errorInfo}
code="404"
variant="detailed"
onRetry={() => console.log('Retry')}
/>
)}
</div>
</ErrorBoundary>
);
}Composants React
import React from 'react';
import { ErrorDisplay, ErrorBoundary, useErrorMapper } from 'universal-error-mapper';
function MyComponent() {
const { getError, errorInfo, isLoading } = useErrorMapper();
const handleError = async () => {
await getError('404', { lang: 'fr' });
};
return (
<ErrorBoundary language="fr">
<div>
<button onClick={handleError}>Tester l'erreur 404</button>
{errorInfo && (
<ErrorDisplay
errorInfo={errorInfo}
code="404"
variant="detailed"
onRetry={() => console.log('Retry')}
/>
)}
</div>
</ErrorBoundary>
);
}🔌 Framework Integrations
Express Integration
import express from 'express';
import { createErrorMiddleware } from 'universal-error-mapper';
const app = express();
// Middleware to handle errors with automatic mapping
app.use(createErrorMiddleware({
language: 'en',
environment: 'user', // or 'dev' for detailed developer messages
logErrors: true
}));
// Example route that throws an error
app.get('/test-error', (req, res) => {
const error = new Error('Resource not found');
(error as any).status = 404;
throw error; // Will be automatically mapped to user-friendly message
});
app.listen(3000);Next.js Integration
// pages/api/test.ts
import { createErrorResponse } from 'universal-error-mapper';
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
try {
// Your API logic here...
throw new Error('Something went wrong');
} catch (error) {
return createErrorResponse('500', req, res, {
language: 'en',
environment: 'user'
});
}
}Intégration Express
import express from 'express';
import { createErrorMiddleware } from 'universal-error-mapper';
const app = express();
// Middleware de gestion d'erreurs
app.use(createErrorMiddleware({
language: 'fr',
environment: 'user',
logErrors: true
}));
// Vos routes...
app.get('/test', (req, res) => {
const error = new Error('Resource not found');
(error as any).status = 404;
throw error; // Sera automatiquement mappé et formaté
});Intégration Next.js
// pages/api/test.ts
import { createErrorResponse } from 'universal-error-mapper';
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
try {
// Votre logique...
throw new Error('Something went wrong');
} catch (error) {
return createErrorResponse('500', req, res, {
language: 'fr',
environment: 'user'
});
}
}📚 API Reference
Core Functions
getErrorMessage(code, options?)
Retourne les détails complets d'une erreur.
const errorInfo = await getErrorMessage('404', {
lang: 'fr' // 'en' | 'fr'
});getFormattedMessage(code, options?)
Retourne un message formaté selon l'environnement.
const message = await getFormattedMessage('401', {
lang: 'en',
env: 'user' // 'user' | 'dev'
});getAvailableCodes(lang?)
Retourne tous les codes d'erreur disponibles.
const codes = await getAvailableCodes('fr');
// ['400', '401', '403', '404', ...]isCodeValid(code, lang?)
Vérifie si un code d'erreur est valide.
const isValid = await isCodeValid('404', 'en');
// trueComposants React
ErrorDisplay
Affiche une erreur avec différents variants.
<ErrorDisplay
errorInfo={errorInfo}
code="404"
variant="detailed" // 'default' | 'compact' | 'detailed'
showCode={true}
onRetry={() => {}}
onDismiss={() => {}}
/>ErrorBoundary
Boundary React pour capturer les erreurs.
<ErrorBoundary language="fr">
<YourApp />
</ErrorBoundary>ErrorToast
Notification toast pour les erreurs.
<ErrorToast
errorInfo={errorInfo}
code="404"
duration={5000}
position="top-right"
onRetry={() => {}}
/>ErrorModal
Modal pour afficher les erreurs importantes.
<ErrorModal
errorInfo={errorInfo}
code="404"
isOpen={true}
onClose={() => {}}
onRetry={() => {}}
/>useErrorMapper
Hook React pour utiliser la librairie.
const { getError, errorInfo, isLoading, clearError } = useErrorMapper();🌍 Codes d'erreur supportés
4xx - Erreurs client
400- Bad Request401- Unauthorized402- Payment Required403- Forbidden404- Not Found405- Method Not Allowed406- Not Acceptable407- Proxy Authentication Required408- Request Timeout409- Conflict410- Gone411- Length Required412- Precondition Failed413- Payload Too Large414- URI Too Long415- Unsupported Media Type416- Range Not Satisfiable417- Expectation Failed418- I'm a teapot421- Misdirected Request422- Unprocessable Entity423- Locked424- Failed Dependency425- Too Early426- Upgrade Required428- Precondition Required429- Too Many Requests431- Request Header Fields Too Large451- Unavailable For Legal Reasons
5xx - Erreurs serveur
500- Internal Server Error501- Not Implemented502- Bad Gateway503- Service Unavailable504- Gateway Timeout505- HTTP Version Not Supported506- Variant Also Negotiates507- Insufficient Storage508- Loop Detected510- Not Extended511- Network Authentication Required
🎨 Personnalisation
Ajouter de nouveaux codes d'erreur
// src/errors/errors.en.json
{
"600": {
"severity": "warning",
"title": "Custom Error",
"description": "This is a custom error for your application.",
"actionUser": "Please contact support for assistance.",
"actionDev": "Check custom error handling logic."
}
}Personnaliser les composants
<ErrorDisplay
errorInfo={errorInfo}
code="404"
className="my-custom-class"
variant="detailed"
/>🧪 Tests
npm test📈 Roadmap
- [ ] Support Vue.js
- [ ] Intégration Sentry/Datadog
- [ ] Métriques et analytics
- [ ] Support de plus de langues
- [ ] CLI pour générer les traductions
- [ ] Plugin VSCode
🤝 Contribution
Les contributions sont les bienvenues ! N'hésitez pas à :
- Fork le projet
- Créer une branche feature
- Commiter vos changements
- Pousser vers la branche
- Ouvrir une Pull Request
📄 Licence
ISC
🙏 Remerciements
Merci à tous les contributeurs qui rendent ce projet possible !
Universal Error Mapper - Transformez les erreurs en moments de clarté et de confiance ✨
