Files
fvtt-ecryme/BABELE_ERROR_ANALYSIS.md
LeRatierBretonnier f130f24a23 Migration complète vers DataModels Foundry VTT
- 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>
2026-02-18 11:32:29 +01:00

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 :

  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) :

// 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

  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.

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 :

// 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.