# Erreur Babele/LibWrapper - Analyse et Solution ## Contexte de l'Erreur ``` Error: Cannot read properties of null (reading 'isGM') at initWrapper (wrapper.js:8:62) at Object.fn (babele.js:19:5) ``` ## Analyse ### Origine de l'Erreur Cette erreur provient des modules **Babele** ou **LibWrapper**, PAS de nos DataModels. Elle se produit lorsque ces modules tentent d'accéder à `game.user.isGM` pendant le hook 'init', mais `game.user` est encore `null` à ce moment-là. ### Pourquoi `game.user` est null ? Dans Foundry VTT, l'ordre d'initialisation est : 1. Hook 'init' - Configuration du système 2. Hook 'setup' - Préparation des données 3. Hook 'ready' - **C'est ici que `game.user` est disponible** Pendant 'init', l'utilisateur n'est pas encore connecté, donc `game.user` est null. ### Lien avec les DataModels ? Les DataModels eux-mêmes ne causent pas l'erreur, MAIS leur import au niveau module (top-level import) peut affecter le timing d'exécution et déclencher des problèmes de timing avec Babele/LibWrapper. ## Solution Appliquée ### Import Dynamique des DataModels **AVANT** (import statique) : ```javascript // Import DataModels import * as models from "./models/_module.js"; Hooks.once("init", async function () { // ... utilise models }); ``` **APRÈS** (import dynamique) : ```javascript Hooks.once("init", async function () { // Import DataModels dynamically to avoid timing issues const models = await import("./models/_module.js"); // ... utilise models }); ``` ### Avantages de l'Import Dynamique 1. ✅ **Retarde le chargement** des DataModels jusqu'à l'exécution du hook 'init' 2. ✅ **Évite les problèmes de timing** avec d'autres modules 3. ✅ **Permet au hook 'init' d'être async** (c'est déjà le cas) 4. ✅ **Compatible avec tous les navigateurs modernes** ## Vérifications Complémentaires ### Test 1: Vérifier sur Master **À FAIRE**: Basculer sur la branche `master` et tester si l'erreur existe. ```bash git checkout master # Lancer Foundry VTT ``` **Si l'erreur existe sur master** : - Ce n'est PAS lié aux DataModels - C'est un problème de version de module (Babele/LibWrapper) - Solution : Mettre à jour les modules ou signaler le bug **Si l'erreur N'existe PAS sur master** : - L'import dynamique devrait résoudre le problème - Sinon, investiguer plus en profondeur ### Test 2: Versions des Modules Dans Foundry VTT, vérifier : - Version de **Babele** installée - Version de **LibWrapper** installée (si présent) - Compatibilité avec **Foundry v13** Les modules doivent être à jour pour Foundry v13. ### Test 3: Sans Babele (test de diagnostic) Temporairement, désactiver Babele pour confirmer que c'est la source : 1. Aller dans Configuration > Gestion des Modules 2. Désactiver Babele 3. Relancer le monde 4. Si ça fonctionne : confirme que c'est Babele ⚠️ **Attention** : Ecryme requiert Babele, donc ne pas le laisser désactivé. ## Workaround Alternatif (si l'import dynamique ne suffit pas) Si le problème persiste, on peut protéger l'accès à `game.user` dans le code : ```javascript // Dans ecryme-utility.js ligne 84-86 Handlebars.registerHelper('isGM', function () { return game.user?.isGM ?? false; // Safe navigation }); ``` Mais cette modification ne devrait pas être nécessaire car l'helper n'est pas appelé pendant 'init'. ## Recommandations 1. **Tester avec l'import dynamique** (déjà appliqué) 2. **Vérifier sur master** si l'erreur existe déjà 3. **Mettre à jour Babele** à la dernière version compatible v13 4. **Si le problème persiste** : Signaler le bug au développeur de Babele ## Fichiers Modifiés - `modules/ecryme-main.js` : Import dynamique des DataModels ## Prochaine Étape **Relancer Foundry VTT** et vérifier si l'import dynamique résout le problème de timing.