# Debug et Logs
SmartCommon fournit un système de logs colorés pour faciliter le debug de votre application.
## Activer le mode debug
Dans la configuration du Provider :
```
const config = {
debug: true, // Active les logs globalement
api: {
debug: true // Active les logs API spécifiquement
}
};
```
En développement, utilisez la variable d'environnement :
```
const config = {
debug: import.meta.env.DEV // true en dev, false en prod
};
```
## Utilitaire log
SmartCommon exporte un utilitaire ''log'' avec des méthodes colorées :
```
import { log } from '@cap-rel/smartcommon';
// Logs d'état
log.state('Changement d\'état:', newState);
log.globalState('État global mis à jour:', globalState);
// Logs de cycle de vie
log.effect('useEffect déclenché');
log.page('Page chargée: /dashboard');
// Logs de statut
log.success('Opération réussie');
log.error('Une erreur est survenue:', error);
log.warning('Attention:', message);
log.info('Information:', data);
// Logs API
log.apiLoading('GET', '/api/items');
log.apiSuccess('GET - 200', '/api/items');
log.apiError('GET - 404', '/api/items');
// Logs base de données
log.db('INSERT:', item);
// Logs de localisation
log.location('Navigation vers:', path);
// Log personnalisé
log.custom('MON_TAG', 'purple', 'Mon message', data);
```
## Couleurs des logs
Chaque type de log a une couleur distincte dans la console :
^ Méthode ^ Couleur ^ Usage ^
| ''log.state'' | Bleu | Changements d'état local |
| ''log.globalState'' | Cyan foncé | Changements d'état global |
| ''log.effect'' | Violet | Effets React (useEffect) |
| ''log.page'' | Orange | Chargement de pages |
| ''log.success'' | Vert | Opérations réussies |
| ''log.error'' | Rouge | Erreurs |
| ''log.warning'' | Doré | Avertissements |
| ''log.info'' | Gris | Informations |
| ''log.apiLoading'' | Gris | Requête API en cours |
| ''log.apiSuccess'' | Vert | Requête API réussie |
| ''log.apiError'' | Rouge | Requête API échouée |
| ''log.db'' | Bleu nuit | Opérations IndexedDB |
| ''log.location'' | Rose | Navigation |
## createLogger - Logger avec namespace
Pour les projets plus complexes, ''createLogger'' permet de créer un logger avec un namespace dédié. Les logs peuvent être filtrés par namespace via ''localStorage.LOG_FILTER''.
```
import { createLogger } from '@cap-rel/smartcommon';
const logger = createLogger('MyModule');
logger.info('Module initialisé');
logger.success('Données chargées');
logger.error('Échec du chargement');
logger.warning('Données périmées');
logger.state('Changement local:', newState);
logger.globalState('Changement global:', data);
logger.effect('useEffect déclenché');
logger.page('/dashboard');
logger.db('INSERT', item);
// API (premier paramètre = label dynamique)
logger.apiLoading('GET /items');
logger.apiSuccess('GET /items', data);
logger.apiError('GET /items', error);
// Personnalisé
logger.custom('PERF', 'orange', 'Rendu en 12ms');
// Groupes
logger.group('Initialisation');
logger.info('Étape 1');
logger.info('Étape 2');
logger.groupEnd();
```
### Filtrer par namespace
Dans la console du navigateur :
```
localStorage.LOG_FILTER = 'MyModule,Auth'; // Affiche uniquement ces namespaces
localStorage.LOG_LEVEL = 'warn'; // debug | info | warn | error
```
## DebugConsole - Console intégrée
Le composant ''DebugConsole'' affiche les logs SmartCommon directement dans l'application (FAB flottant ''>_'' en bas à gauche, panneau avec toolbar de recherche/filtres, logs colorés auto-scrollés).
### Activation
La ''DebugConsole'' est montée par le ''Provider'' **uniquement si la prop ''debug'' est passée explicitement** (ce n'est PAS ''config.debug'' qui la déclenche, mais la prop du Provider lui-même) :
```
import { Provider } from '@cap-rel/smartcommon';
// Active uniquement en mode développement
// Toujours active
```
La prop ''config.debug'' reste indépendante : elle contrôle la verbosité des logs produits par les hooks SmartCommon (useStates, useGlobalStates, useApi, etc.), indépendamment de l'affichage de la ''DebugConsole''.
### Props
^ Prop ^ Type ^ Défaut ^ Description ^
| ''defaultOpen'' | boolean | false | Console ouverte au démarrage |
| ''position'' | string | "bottom" | Position : "bottom", "top", "left", "right" |
| ''height'' | string/number | "40vh" | Hauteur de la console |
| ''maxLogs'' | number | 500 | Nombre maximum de logs conservés |
| ''showFab'' | boolean | true | Afficher le bouton flottant ">_" |
### Utilisation manuelle (sans Provider)
```
import { DebugConsole } from '@cap-rel/smartcommon';
```
La console peut être détachée dans une fenêtre séparée via le bouton de détachement. Les logs sont partagés entre les fenêtres via ''BroadcastChannel''.
## DebugWarnings - Breakpoints automatiques sur warnings React
Le composant ''DebugWarnings'' intercepte ''console.error'' pendant qu'il est monté et déclenche ''debugger'' dès qu'un warning React connu est émis. Les DevTools (Firefox ou Chrome) mettent alors l'exécution en pause pile au moment du warning, avec la pile React complète accessible pour identifier le composant fautif.
Quand les DevTools sont fermées, ''debugger'' est un ''no-op'' : aucun impact sur l'exécution normale.
### Activation
Comme la ''DebugConsole'', ''DebugWarnings'' est automatiquement monté par le ''Provider'' **quand la prop ''debug'' est passée** :
```
```
Inactif en production (quand ''debug'' est ''false'' / absent). Aucune configuration supplémentaire nécessaire dans les projets SmartMaker.
### Warnings interceptés
Les motifs suivants déclenchent un breakpoint automatique :
* ''Received NaN for the value attribute'' - NaN passé à un ''''
* ''value prop on input should not be null'' - ''value={null}'' sur un input
* ''changing a controlled input to be uncontrolled'' - ''value'' passe de défini à ''undefined''
* ''changing an uncontrolled input to be controlled'' - inverse
* ''Each child in a list should have a unique "key"'' - ''key'' manquante dans un ''.map()''
* ''Maximum update depth exceeded'' - boucle infinie de re-renders
* ''Cannot update a component'' - setState pendant le render d'un autre composant
* ''Warning: Failed prop type'' - prop-types violé
* ''Warning: React does not recognize'' - prop non standard passée au DOM
### Diagnostic automatique avant le breakpoint
Avant de déclencher ''debugger'', ''DebugWarnings'' affiche un ''console.group'' orange contenant :
- **Raw console.error args** : tableau brut des arguments de React (utile si React inclut un ''componentStack'')
- **React hint** : extraction du "Check the render method of ''XXX''" quand React le mentionne
- **Suspects ciblés** : pour les warnings ''value'' et ''NaN'', la liste des fibers dont ''memoizedProps.value'' correspond au problème, avec l'owner React et la source ''.jsx''
- **Dump complet des fibers de formulaire** (''console.table'') : tous les '''', ''