- 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>
127 lines
3.8 KiB
Markdown
127 lines
3.8 KiB
Markdown
# 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.
|