@egen-civitas/esm-app-shell 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +48 -0
  2. package/dist/{35000e3020f91f54.js → 09a305e14c26aa4c.js} +1 -1
  3. package/dist/{35000e3020f91f54.js.map → 09a305e14c26aa4c.js.map} +1 -1
  4. package/dist/1a3a2203030dffe6.js +1 -1
  5. package/dist/1fca772e19e3c1b6.js +1 -0
  6. package/dist/{cfcffab5131ca6fe.js.map → 1fca772e19e3c1b6.js.map} +1 -1
  7. package/dist/27bce5d96d2f77ca.js +1 -0
  8. package/dist/27bce5d96d2f77ca.js.map +1 -0
  9. package/dist/3226b9dce374cfd8.js +1 -1
  10. package/dist/3226b9dce374cfd8.js.map +1 -1
  11. package/dist/{a4194a868fe7dab1.js → 502a9fc73519b790.js} +1 -1
  12. package/dist/{a4194a868fe7dab1.js.map → 502a9fc73519b790.js.map} +1 -1
  13. package/dist/{db79de974b1f9d2a.js → 57b9ecf632f0e340.js} +1 -1
  14. package/dist/{db79de974b1f9d2a.js.map → 57b9ecf632f0e340.js.map} +1 -1
  15. package/dist/{1c23ca786a6e4ebd.js → 6aadb9a4eef827fb.js} +1 -1
  16. package/dist/{1c23ca786a6e4ebd.js.map → 6aadb9a4eef827fb.js.map} +1 -1
  17. package/dist/83dac8ce5a42f6f7.js +1 -1
  18. package/dist/8fec4ca250238f97.js +1 -0
  19. package/dist/8fec4ca250238f97.js.map +1 -0
  20. package/dist/99e304b895626c07.js +1 -0
  21. package/dist/99e304b895626c07.js.map +1 -0
  22. package/dist/a3487e3a30f88260.js +1 -0
  23. package/dist/a3487e3a30f88260.js.map +1 -0
  24. package/dist/{b09cf978bcb092af.js → e30dd69f1360bbc1.js} +1 -1
  25. package/dist/{b09cf978bcb092af.js.map → e30dd69f1360bbc1.js.map} +1 -1
  26. package/dist/{egen.0d895e3349f973d3.js → egen.d17915ddd051e2ef.js} +2 -2
  27. package/dist/{egen.0d895e3349f973d3.js.map → egen.d17915ddd051e2ef.js.map} +1 -1
  28. package/dist/index.html +1 -1
  29. package/package.json +2 -2
  30. package/dist/194ffd94e3874968.js +0 -1
  31. package/dist/194ffd94e3874968.js.map +0 -1
  32. package/dist/4bbcdc5943a035be.js +0 -1
  33. package/dist/4bbcdc5943a035be.js.map +0 -1
  34. package/dist/654f4db62745a0eb.js +0 -1
  35. package/dist/654f4db62745a0eb.js.map +0 -1
  36. package/dist/cfcffab5131ca6fe.js +0 -1
package/README.md ADDED
@@ -0,0 +1,48 @@
1
+ # @egen-civitas/esm-app-shell
2
+
3
+ L'application hôte (host) du framework EGEN. C'est un shell **générique** : il ne connaît aucune application frontend à son propre moment de build. Toute la liste des apps à charger — et leurs routes — lui est fournie **au runtime**, sous forme d'un [import map](https://github.com/WICG/import-maps) et d'un registre de routes.
4
+
5
+ Ce découplage est délibéré et est au cœur du modèle : une nouvelle version d'une app ne doit jamais nécessiter de reconstruire ni de redéployer le shell. Le shell se contente de lire, à chaque chargement de page, où trouver chaque app et quelles routes/extensions elle enregistre.
6
+
7
+ ## D'où vient l'import map et le registre de routes
8
+
9
+ Le shell essaie, dans cet ordre, pour chacun des deux documents :
10
+
11
+ 1. **Une valeur en dur, fournie au build** (`EGEN_ESM_IMPORTMAP` / `EGEN_ROUTES`) — bakée directement dans le HTML publié. Réservé aux cas où un consommateur veut un bundle totalement autonome/figé (offline, démo, etc.) : une fois publié, cette liste ne change plus sans reconstruire le shell.
12
+ 2. **Une URL à fetcher au runtime** (`EGEN_ESM_IMPORTMAP_URL` / `EGEN_ROUTES_URL`, par défaut `${spaPath}/importmap.json` et `${spaPath}/routes.registry.json`) — c'est le mode normal. Le HTML publié contient une simple référence (`<script src="...">`), et c'est celui qui sert le shell (`egen develop`/`egen start` en local, ou un vrai backend en production) qui répond à ces deux endpoints avec la liste réelle et à jour des apps.
13
+
14
+ **Une valeur vide (`{}`, ou `{"imports":{}}` pour l'import map) est traitée comme absente**, pas comme "un import map vide fourni explicitement" — elle tombe alors sur le mode (2). C'est le comportement voulu : les scripts `build:production`/`watch` de ce package passent justement `EGEN_ESM_IMPORTMAP='{"imports":{}}'` et `EGEN_ROUTES='{}'` pour dire explicitement "aucune valeur figée, utilise le mode dynamique" — le shell publié sur npm doit systématiquement aller chercher l'import map réelle au runtime, jamais en embarquer une figée par accident.
15
+
16
+ > Historique : avant ce comportement, une simple présence de la variable d'environnement (même valant `"{}"`, une chaîne non vide donc *truthy* en JS) suffisait à activer le mode (1) — ce qui bakait silencieusement un import map et un registre de routes **vides, pour toujours**, dans le shell publié. Le mode (2) n'était alors jamais utilisé, et aucune app ne pouvait jamais être montée, quel que soit ce que le serveur consommateur (`egen develop`/`egen start`) assemblait dynamiquement. C'est ce bug qui a été corrigé.
17
+
18
+ ## Surcharge locale pour le développement du framework lui-même (`egenCoreImportmap`/`egenCoreRoutes`)
19
+
20
+ Il existe une troisième couche, réservée au développement du framework : si un dossier `packages/apps` existe **au même niveau que `esm-app-shell` dans son propre monorepo** (`EGEN_ESM_CORE_APPS_DIR`, uniquement en mode non-production), le shell scanne ce dossier et injecte un import map/registre de routes additionnel qui **prend le pas** sur celui du mode (1)/(2) pour les mêmes noms de package (il apparaît après dans le DOM — les import maps `systemjs-importmap` ultérieurs augmentent/écrasent les entrées précédentes pour une même clé).
21
+
22
+ Dans l'architecture actuelle (`Frontend-esm-framework` / `Frontend-esm-core` séparés), ce dossier n'existe pas et cette couche est donc inerte — elle ne s'active que si quelqu'un place un jour des apps directement dans ce dépôt, à la manière de certains monorepos historiques dont ce framework s'inspire (OpenMRS `openmrs-esm-core`, qui a le même mécanisme pour les mêmes raisons).
23
+
24
+ ## Variables d'environnement
25
+
26
+ | Variable | Rôle | Défaut |
27
+ |---|---|---|
28
+ | `EGEN_ESM_IMPORTMAP` | Import map figé au build (`{"imports": {...}}`). Vide = ignoré. | — |
29
+ | `EGEN_ESM_IMPORTMAP_URL` | URL à fetcher au runtime si pas de valeur figée. | `${spaPath}/importmap.json` |
30
+ | `EGEN_ROUTES` | Registre de routes figé au build. Vide = ignoré. | — |
31
+ | `EGEN_ROUTES_URL` | URL à fetcher au runtime si pas de valeur figée. | `${spaPath}/routes.registry.json` |
32
+ | `EGEN_ESM_CORE_APPS_DIR` | Dossier scanné pour la surcharge locale (dev uniquement). | `../../apps` relatif à ce package |
33
+
34
+ ## Ce que doit exposer un consommateur
35
+
36
+ Un consommateur (comme `Frontend-esm-core` via `egen develop`/`egen start`, ou un vrai backend de production) doit répondre, sur les URLs par défaut ci-dessus, avec :
37
+
38
+ ```json
39
+ // importmap.json
40
+ { "imports": { "@egen/mon-app": "https://cdn.exemple.com/mon-app/mon-app.js" } }
41
+ ```
42
+
43
+ ```json
44
+ // routes.registry.json
45
+ { "@egen/mon-app": { /* contenu de routes.json de l'app */ } }
46
+ ```
47
+
48
+ `egen develop`/`egen start` (package `@egen-civitas/egen`) le fait déjà automatiquement à partir de `--sources` — voir son propre README pour le détail.