# 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 '''', ''