- Ajout de 14 DataModels (10 Items + 3 Acteurs) * Items: equipment, weapon, trait, specialization, maneuver, scar, annency, boheme, contact, confrontation * Acteurs: pc, npc, annency - Corrections d'initialisation * Ordre d'initialisation corrigé (CONFIG.dataModels avant game.system) * Import dynamique des DataModels pour éviter timing issues * Helper functions pour éviter réutilisation de champs - Documentation complète * AUDIT_DATAMODELS.md: Rapport d'audit complet (85+ champs vérifiés) * MIGRATION_DATAMODELS.md: Guide de migration * FIX_INIT_ERROR.md: Résolution des erreurs * BABELE_ERROR_ANALYSIS.md: Analyse erreur Babele * RESUME_MIGRATION.md: Résumé complet * modules/models/README.md: Documentation des DataModels - template.json marqué comme DEPRECATED - changelog.md mis à jour Note: Erreur Babele/LibWrapper non résolue (problème de module externe) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
3.8 KiB
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 :
- Hook 'init' - Configuration du système
- Hook 'setup' - Préparation des données
- Hook 'ready' - C'est ici que
game.userest 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) :
// Import DataModels
import * as models from "./models/_module.js";
Hooks.once("init", async function () {
// ... utilise models
});
APRÈS (import dynamique) :
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
- ✅ Retarde le chargement des DataModels jusqu'à l'exécution du hook 'init'
- ✅ Évite les problèmes de timing avec d'autres modules
- ✅ Permet au hook 'init' d'être async (c'est déjà le cas)
- ✅ 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.
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 :
- Aller dans Configuration > Gestion des Modules
- Désactiver Babele
- Relancer le monde
- 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 :
// 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
- Tester avec l'import dynamique (déjà appliqué)
- Vérifier sur master si l'erreur existe déjà
- Mettre à jour Babele à la dernière version compatible v13
- 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.