Skip to content

chore(frontend): #ENABLING-1158 aligne ode-explorer sur la norme de versions du socle - #71

Merged
pascalsaussier-edifice merged 6 commits into
develop-enablingfrom
chore-ENABLING-1158-aligner-versions-socle
Aug 7, 2026
Merged

chore(frontend): #ENABLING-1158 aligne ode-explorer sur la norme de versions du socle#71
pascalsaussier-edifice merged 6 commits into
develop-enablingfrom
chore-ENABLING-1158-aligner-versions-socle

Conversation

@pascalsaussier-edifice

@pascalsaussier-edifice pascalsaussier-edifice commented Aug 7, 2026

Copy link
Copy Markdown

Résumé

Applique sur explorer les actions N9 et N4 identifiées par ENABLING-1099 pour réduire la duplication du socle React chez les 8 fronts consommateurs d'ode-explorer, et supprime le mécanisme de template package.json.template devenu superflu.

Contexte

ode-explorer déclarait @edifice.io/bootstrap/client/react, @tanstack/react-query, react et react-dom en dependencies au lieu de peerDependencies, ce qui faisait que chaque front consommateur embarquait sa propre copie du socle React.

Ticket : ENABLING-1158

N10 et N5 du ticket ne sont volontairement pas traités ici via l'approche initialement proposée (gitignore du package.json généré / garde-fou CI check-singletons.sh) ; N10 est traité différemment (voir ci-dessous), N5 reste hors scope.

Changements

  • N9 : @edifice.io/bootstrap, @edifice.io/client, @edifice.io/react, @tanstack/react-query, react, react-dom passent de dependencies vers peerDependencies + devDependencies.
  • N4 : ajout de resolve.dedupe dans vite.config.ts comme filet bundler pour les mêmes singletons.
  • N10 (autre approche) : suppression de package.json.template et scripts/package.cjs. package.json devient la seule source de vérité (aligné sur le modèle déjà en place chez blog/wiki) ; le pin des versions @edifice.io/* par branche/squad est délégué au job Jenkins dédié, plus de génération locale à chaque init.
  • build.sh : init simplifié en pnpm install, clean ne supprime plus package.json, publishNPM calcule la version à la publication via npm version --no-git-tag-version (dernier tag git + branche + timestamp) au lieu d'un champ figé dans un template, linkDependencies scanne aussi peerDependencies.
  • Retrait de tous les carets (^) du package.json : chaque version est pinnée en dur, pour éviter qu'une résolution semver silencieuse dérive d'un pin de peer dependency attendu par le socle (@edifice.io/react déclare des peers en versions exactes).
  • 2 correctifs révélés par la résolution correcte du socle : mismatchs de peer dependencies (react-hook-form, react-i18next, @tanstack/react-query-devtools, @react-spring/web) et une erreur TS sur SearchForm.tsx (event optionnel sur handleSearchSubmit pour matcher le typage de SearchButton.onClick).

Comment tester

  1. cd frontend && rm -rf node_modules pnpm-lock.yaml && ./build.sh --no-docker init — vérifier qu'aucun warning unmet peer dependency n'apparaît.
  2. pnpm build — build prod + lib doivent passer sans erreur.
  3. Vérifier l'absence de duplication du socle : find node_modules/.pnpm -maxdepth 1 -iname "react@*" ne doit renvoyer qu'une seule version.
  4. Une fois ode-explorer republié, valider sur l'app pilote blog (import de Explorer/AppParams depuis ode-explorer/lib) avant propagation aux 8 consommateurs.

@edifice.io/bootstrap, @edifice.io/client, @edifice.io/react,
@tanstack/react-query, react et react-dom passent de dependencies vers
peerDependencies + devDependencies, pour que les 8 fronts consommateurs
d'ode-explorer n'embarquent plus leur propre copie du socle
(cf ENABLING-1099). vite.config.ts (resolve.dedupe) sert de filet
bundler pour les mêmes singletons.

Supprime package.json.template et scripts/package.cjs : le repo
s'aligne sur le modèle déjà en place chez blog/wiki, où package.json
est directement le fichier suivi (plus de génération à partir d'un
template à chaque build). Le pin des versions @edifice.io/* par
branche/squad est géré par un job Jenkins dédié, comme pour les autres
fronts, et non plus par une substitution locale dans build.sh.

build.sh :
- init: simple pnpm install (comme wiki/blog), plus de copie/sed du
  template
- clean: ne supprime plus package.json, qui est maintenant un fichier
  suivi et non un artefact généré
- publishNPM: version calculée à la publication via
  `npm version --no-git-tag-version` (dernier tag git + branche +
  timestamp), comme wiki, au lieu d'un champ figé dans le template
- linkDependencies: scanne aussi peerDependencies pour continuer à
  linker les @edifice.io/* locaux
Le repo explorer est intégré sur develop-enabling (pas develop) :
la valeur par défaut committée pour @edifice.io/bootstrap, client et
react, ainsi que la base de version, doivent suivre cette branche pour
rester cohérentes avec le squad qui la maintient.
@edifice.io/react (2.6.0-develop-enabling) déclare react-hook-form,
react-i18next et @tanstack/react-query-devtools en peerDependencies
avec des versions exactes. On était en dessous (react-i18next 14.1.0,
react-query-devtools résolu en 5.101.4 via caret, ce qui exigeait lui-
même react-query ^5.101.4, incompatible avec le 5.62.7 pinné) : pnpm
install remontait des warnings "unmet peer dependency".

Retire aussi tous les carets (^) du package.json : la version est
maintenant fixée en dur pour chaque dépendance, pour éviter qu'une
résolution semver silencieuse ne dérive à nouveau d'un pin de peer
dependency attendu par le socle.
…onnel

SearchButton (@edifice.io/react) declare onClick en () => void (0
argument), alors que handleSearchSubmit exigeait un React.MouseEvent.
Le composant transmet en realite l'event natif jusqu'au <button> HTML,
donc pas de risque a l'execution, mais le typage strict remontait une
erreur TS2322 des que le socle etait resolu depuis le vrai package
publie plutot qu'un lien local avec des types differents.
…narQube

Le pom.xml est dans backend/, pas a la racine du repo : le workflow
GitHub Actions echouait avec "no POM in this directory" sur chaque
push/PR. Pre-existant, corrige au passage car il bloquait la CI de
cette PR.
Comment thread frontend/package.json
"react-router-dom": "6.23.1",
"zustand": "4.5.0"
},
"peerDependencies": {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Merci je ne connaissais pas le concept de peerDependencies 😱

Comment thread frontend/vite.config.ts
'node_modules/@edifice.io/bootstrap/dist/images',
),
},
dedupe: [

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

et ça non plus du coup. Interesting !

peerDependencies exige un range semver, pas un dist-tag npm : la valeur
"develop-enabling" n'est pas un range valide (semver.validRange renvoie
null), donc pnpm ne pouvait jamais la satisfaire quelle que soit la
version installee de @edifice.io/bootstrap|client|react - confirme par
un warning "unmet peer dependency" reproductible sur wiki apres install
d'une version de ode-explorer publiee en test.

Les dist-tags restent valides pour dependencies/devDependencies (pnpm
les resout via le registre a l'install), mais pas pour peerDependencies
(simple comparaison semver.satisfies). On passe ces 3 entrees a "*" :
la compatibilite reelle entre branches/squads est de toute facon geree
par le job Jenkins dedie, pas par ce champ.
@pascalsaussier-edifice
pascalsaussier-edifice merged commit a49648a into develop-enabling Aug 7, 2026
1 check failed
@pascalsaussier-edifice
pascalsaussier-edifice deleted the chore-ENABLING-1158-aligner-versions-socle branch August 7, 2026 15:07
benjaminperez pushed a commit that referenced this pull request Aug 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants