From f4c012c0b29c7ca2889ce24139a977a238834521 Mon Sep 17 00:00:00 2001 From: "Pascal S." Date: Fri, 7 Aug 2026 15:25:13 +0200 Subject: [PATCH 1/6] chore(frontend): #ENABLING-1158 passe le socle react en peerDependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @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 --- frontend/README.md | 6 -- frontend/build.sh | 58 +++++----------- frontend/package.json | 86 +++++++++++++----------- frontend/package.json.template | 107 ------------------------------ frontend/scripts/package.cjs | 117 --------------------------------- frontend/vite.config.ts | 17 ++++- 6 files changed, 79 insertions(+), 312 deletions(-) delete mode 100644 frontend/package.json.template delete mode 100644 frontend/scripts/package.cjs diff --git a/frontend/README.md b/frontend/README.md index 0060a5c0..9eb47b45 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -6,12 +6,6 @@ Explorer App ### Install -Without Docker, you need to generate a `package.json` - -```bash -node scripts/package.cjs -``` - Install all dependencies. ```bash diff --git a/frontend/build.sh b/frontend/build.sh index 3158615c..8c29cc79 100755 --- a/frontend/build.sh +++ b/frontend/build.sh @@ -52,35 +52,10 @@ done clean () { rm -rf node_modules dist build .gradle .pnpm-store - rm -f package.json pnpm-lock.yaml + rm -f pnpm-lock.yaml } -doInit () { - echo "[init] Get branch name from jenkins env..." - if [ ! -z "$FRONT_TAG" ]; then - echo "[init] Get tag name from jenkins param... $FRONT_TAG" - BRANCH_NAME="$FRONT_TAG" - else - BRANCH_NAME=`echo $GIT_BRANCH | sed -e "s|origin/||g"` - if [ "$BRANCH_NAME" = "" ]; then - echo "[init] Get branch name from git..." - BRANCH_NAME=`git branch | sed -n -e "s/^\* \(.*\)/\1/p"` - fi - fi - - echo "[init] Generate package.json from package.json.template..." - NPM_VERSION_SUFFIX=`date +"%Y%m%d%H%M"` - cp package.json.template package.json - sed -i "s/%branch%/${BRANCH_NAME}/" package.json - sed -i "s/%generateVersion%/${NPM_VERSION_SUFFIX}/" package.json - - if [ "$1" == "Dev" ] - then - sed -i "s/%packageVersion%/link:..\/edifice-ts-client\//" package.json - else - sed -i "s/%packageVersion%/${BRANCH_NAME}/" package.json - fi - +init() { if [ "$NO_DOCKER" = "true" ] ; then pnpm install else @@ -88,14 +63,6 @@ doInit () { fi } -init() { - doInit -} - -initDev() { - doInit "Dev" -} - # Install local dependencies as tarball (installing as folder creates symlinks which won't resolve in the docker container) localDep () { if [ -e $PWD/../edifice-ts-client ]; then @@ -133,6 +100,7 @@ linkDependencies () { # # Extract dependencies from package.json using sed DEPENDENCIES=$(sed -n '/"dependencies": {/,/}/p' package.json | sed -n 's/ *"@edifice\.io\/\([^"]*\)":.*/\1/p') + DEPENDENCIES="$DEPENDENCIES $(sed -n '/"peerDependencies": {/,/}/p' package.json | sed -n 's/ *"@edifice\.io\/\([^"]*\)":.*/\1/p')" # # Link each dependency if it exists in the edifice-frontend-framework for dep in $DEPENDENCIES; do @@ -164,9 +132,20 @@ cleanDependencies() { publishNPM () { echo "[publish] Publish package..." LOCAL_BRANCH=$(echo $GIT_BRANCH | sed -e "s|origin/||g") - TAG_BRANCH=$([ "$LOCAL_BRANCH" = "main" ] && echo "latest" || echo "$LOCAL_BRANCH") - - #docker compose run -e NPM_TOKEN=$NPM_TOKEN -e GIT_BRANCH=$GIT_BRANCH --rm -u "$USER_UID:$GROUP_GID" node sh -c "pnpm version:update" + TIMESTAMP=$(date +%Y%m%d%H%M%S) + LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "1.0.0") + LATEST_TAG=${LATEST_TAG#v} + + if [ "$LOCAL_BRANCH" = "main" ]; then + TAG_BRANCH="latest" + NEW_VERSION="$LATEST_TAG" + else + TAG_BRANCH="$LOCAL_BRANCH" + NEW_VERSION="$LATEST_TAG-$LOCAL_BRANCH.$TIMESTAMP" + echo "[publish] Update version with the exact version" + docker compose run -e NPM_TOKEN=$NPM_PUBLIC_TOKEN --rm -u "$USER_UID:$GROUP_GID" node sh -c "pnpm exec npm version $NEW_VERSION --no-git-tag-version" + fi + docker compose run -e NPM_TOKEN=$NPM_PUBLIC_TOKEN --rm -u "$USER_UID:$GROUP_GID" node sh -c "pnpm publish --no-git-checks --access public --tag $TAG_BRANCH" } @@ -189,9 +168,6 @@ do init) init ;; - initDev) - initDev - ;; localDep) localDep ;; diff --git a/frontend/package.json b/frontend/package.json index 2705b733..da1ffd28 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "ode-explorer", - "version": "2.2.12-develop.202510091718", + "version": "2.6.6-develop.0", "description": "Edifice Explorer", "homepage": "https://github.com/edificeio/explorer#readme", "bugs": { @@ -50,58 +50,66 @@ }, "dependencies": { "@dnd-kit/core": "^6.1.0", - "@dnd-kit/modifiers": "7.0.0", - "@edifice.io/react": "develop-pedago", - "@edifice.io/bootstrap": "develop-pedago", - "@edifice.io/client": "develop-pedago", - "@react-spring/web": "9.7.3", - "@tanstack/react-query": "5.62.7", - "clsx": "2.1.1", + "@dnd-kit/modifiers": "^7.0.0", + "@react-spring/web": "^9.7.3", + "clsx": "^2.1.1", "dayjs": "1.11.10", "i18next": "23.8.1", "i18next-http-backend": "2.4.2", - "react": "18.3.1", - "react-dom": "18.3.1", "react-error-boundary": "4.0.13", - "react-hook-form": "7.53.0", + "react-hook-form": "^7.53.0", "react-i18next": "14.1.0", - "react-router-dom": "6.23.1", - "zustand": "4.5.0" + "react-router-dom": "^6.23.1", + "zustand": "^4.5.0" + }, + "peerDependencies": { + "@edifice.io/bootstrap": "develop", + "@edifice.io/client": "develop", + "@edifice.io/react": "develop", + "@tanstack/react-query": "5.62.7", + "react": "^18.3.1", + "react-dom": "^18.3.1" }, "devDependencies": { - "@axe-core/react": "4.10.0", + "@axe-core/react": "^4.10.0", "@babel/plugin-transform-react-pure-annotations": "7.23.3", - "@eslint/js": "9.11.1", - "@tanstack/react-query-devtools": "5.59.13", - "@testing-library/jest-dom": "6.5.0", - "@testing-library/react": "16.0.1", - "@testing-library/user-event": "14.5.2", - "@types/node": "18.16.9", - "@types/react": "18.3.10", - "@types/react-dom": "18.3.0", - "@vitejs/plugin-react": "4.3.2", - "@vitest/coverage-v8": "2.1.2", - "@vitest/ui": "2.1.2", - "eslint": "9.11.1", - "eslint-plugin-react-hooks": "5.1.0-rc.0", - "eslint-plugin-react-refresh": "0.4.12", - "globals": "15.9.0", - "husky": "9.1.6", - "jsdom": "25.0.1", + "@edifice.io/bootstrap": "develop", + "@edifice.io/client": "develop", + "@edifice.io/react": "develop", + "@eslint/js": "^9.11.1", + "@tanstack/react-query": "5.62.7", + "@tanstack/react-query-devtools": "^5.59.13", + "@testing-library/jest-dom": "^6.5.0", + "@testing-library/react": "^16.0.1", + "@testing-library/user-event": "^14.5.2", + "@types/node": "^18.16.9", + "@types/react": "^18.3.10", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react": "^4.3.2", + "@vitest/coverage-v8": "^2.1.2", + "@vitest/ui": "^2.1.2", + "eslint": "^9.11.1", + "eslint-plugin-react-hooks": "^5.1.0-rc.0", + "eslint-plugin-react-refresh": "^0.4.12", + "globals": "^15.9.0", + "husky": "^9.1.6", + "jsdom": "^25.0.1", "lint-staged": "15.2.9", - "msw": "2.4.10", + "msw": "^2.4.10", "nx": "19.6.0", - "prettier": "3.3.3", - "typescript": "5.4.5", - "typescript-eslint": "8.7.0", + "prettier": "^3.3.3", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "typescript": "^5.4.5", + "typescript-eslint": "^8.7.0", "vite": "5.4.1", - "vite-plugin-dts": "4.2.4", - "vite-tsconfig-paths": "5.0.1", - "vitest": "2.1.2" + "vite-plugin-dts": "^4.2.4", + "vite-tsconfig-paths": "^5.0.1", + "vitest": "^2.1.2" }, "packageManager": "pnpm@9.12.2", "engines": { "node": "18 || 20" }, "nx": {} -} \ No newline at end of file +} diff --git a/frontend/package.json.template b/frontend/package.json.template deleted file mode 100644 index 0c75867a..00000000 --- a/frontend/package.json.template +++ /dev/null @@ -1,107 +0,0 @@ -{ - "name": "ode-explorer", - "version": "2.6.6-%branch%.%generateVersion%", - "description": "Edifice Explorer", - "homepage": "https://github.com/edificeio/explorer#readme", - "bugs": { - "url": "https://github.com/edificeio/explorer/issues" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/edificeio/explorer.git" - }, - "license": "AGPL-3.0", - "author": "Edifice", - "type": "module", - "exports": { - "./lib": { - "import": "./lib/index.js", - "types": "./lib/index.d.ts" - } - }, - "files": [ - "dist/!(assets)", - "lib", - "*.d.ts" - ], - "scripts": { - "build": "vite build && vite build --mode lib", - "dev": "vite", - "format": "prettier --write .", - "lint": "eslint .", - "pre-commit": "lint-staged", - "prepare": "cd .. && husky frontend/.husky || true", - "preview": "vite preview", - "test": "vitest", - "test:coverage": "vitest run --coverage", - "test:ui": "vitest --ui", - "test:watch": "vitest --watch" - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "lint-staged": { - "**/*.{ts,tsx}": [ - "pnpm run format", - "pnpm run lint" - ] - }, - "dependencies": { - "@dnd-kit/core": "^6.1.0", - "@dnd-kit/modifiers": "^7.0.0", - "@edifice.io/react": "%packageVersion%", - "@edifice.io/bootstrap": "%packageVersion%", - "@edifice.io/client": "%packageVersion%", - "@react-spring/web": "^9.7.3", - "@tanstack/react-query": "5.62.7", - "clsx": "^2.1.1", - "dayjs": "1.11.10", - "i18next": "23.8.1", - "i18next-http-backend": "2.4.2", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-error-boundary": "4.0.13", - "react-hook-form": "^7.53.0", - "react-i18next": "14.1.0", - "react-router-dom": "^6.23.1", - "zustand": "^4.5.0" - }, - "devDependencies": { - "@axe-core/react": "^4.10.0", - "@babel/plugin-transform-react-pure-annotations": "7.23.3", - "@eslint/js": "^9.11.1", - "@tanstack/react-query-devtools": "^5.59.13", - "@testing-library/jest-dom": "^6.5.0", - "@testing-library/react": "^16.0.1", - "@testing-library/user-event": "^14.5.2", - "@types/node": "^18.16.9", - "@types/react": "^18.3.10", - "@types/react-dom": "^18.3.0", - "@vitejs/plugin-react": "^4.3.2", - "@vitest/coverage-v8": "^2.1.2", - "@vitest/ui": "^2.1.2", - "eslint": "^9.11.1", - "eslint-plugin-react-hooks": "^5.1.0-rc.0", - "eslint-plugin-react-refresh": "^0.4.12", - "globals": "^15.9.0", - "husky": "^9.1.6", - "jsdom": "^25.0.1", - "lint-staged": "15.2.9", - "msw": "^2.4.10", - "nx": "19.6.0", - "prettier": "^3.3.3", - "typescript": "^5.4.5", - "typescript-eslint": "^8.7.0", - "vite": "5.4.1", - "vite-plugin-dts": "^4.2.4", - "vite-tsconfig-paths": "^5.0.1", - "vitest": "^2.1.2" - }, - "packageManager": "pnpm@9.12.2", - "engines": { - "node": "18 || 20" - }, - "nx": {} -} diff --git a/frontend/scripts/package.cjs b/frontend/scripts/package.cjs deleted file mode 100644 index cb12b23a..00000000 --- a/frontend/scripts/package.cjs +++ /dev/null @@ -1,117 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const { execSync } = require('child_process'); -const now = new Date(); - -const BRANCH = executeGitCommand('git rev-parse --abbrev-ref HEAD'); - -function getCorrectVersion(lib) { - let branch; - switch (BRANCH) { - case 'main': { - branch = executeGitCommand(`npm view ${lib} version`); - break; - } - - case 'develop': { - branch = 'develop'; - break; - } - - case 'develop-pedago': { - branch = 'develop-pedago'; - break; - } - - case 'develop-b2school': { - branch = 'develop-b2school'; - break; - } - - case 'develop-enabling': { - branch = 'develop-enabling'; - break; - } - - default: { - branch = 'develop'; - break; - } - } - - return branch; -} - -function executeGitCommand(command) { - return execSync(command) - .toString('utf8') - .replace(/[\n\r\s]+$/, ''); -} - -function generateVersion() { - let year = now.getFullYear(); - let month = now.getMonth(); - let days = now.getDate(); - let hours = now.getHours(); - let minutes = now.getMinutes(); - let format = ''; - - month = month + 1; - if (month < 10) month = `0${month}`; - if (minutes < 10) minutes = `0${minutes}`; - - format = `${year}${month}${days}${hours}${minutes}`; - - return format; -} - -function generatePackage(content) { - fs.writeFile( - path.resolve(__dirname, '../package.json'), - JSON.stringify(content, null, 2), - (err) => { - if (err) { - console.error(err); - } - console.log(`version generated: ${content.version}`); - }, - ); -} - -function generateDeps(content) { - const deps = { ...content.dependencies }; - - // Find all @edifice.io dependencies and update their versions - Object.keys(deps).forEach((dep) => { - if (dep.startsWith('@edifice.io/')) { - deps[dep] = getCorrectVersion(dep); - } - }); - - return deps; -} - -function createPackage() { - fs.readFile( - path.resolve(__dirname, '../package.json.template'), - (err, data) => { - if (err) { - console.error(err); - return; - } - - let content = JSON.parse(data); - let version = content.version; - - version = version.replace('%branch%', BRANCH); - version = version.replace('%generateVersion%', generateVersion()); - - content.version = version; - content.dependencies = generateDeps(content); - - generatePackage(content); - }, - ); -} - -createPackage(); diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 99d2858c..67873b82 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -4,7 +4,7 @@ import { BuildOptions, defineConfig, loadEnv } from 'vite'; import dts from 'vite-plugin-dts'; import tsconfigPaths from 'vite-tsconfig-paths'; -import { dependencies } from './package.json'; +import { dependencies, peerDependencies } from './package.json'; import { hashEdificeBootstrap, queryHashVersion, @@ -95,7 +95,11 @@ export default ({ mode }: { mode: string }) => { }, rollupOptions: { treeshake: true, - external: [...Object.keys(dependencies || {}), 'react/jsx-runtime'], + external: [ + ...Object.keys(dependencies || {}), + ...Object.keys(peerDependencies || {}), + 'react/jsx-runtime', + ], output: { entryFileNames: `[name].js`, chunkFileNames: `[name].js`, @@ -150,6 +154,15 @@ export default ({ mode }: { mode: string }) => { 'node_modules/@edifice.io/bootstrap/dist/images', ), }, + dedupe: [ + 'react', + 'react-dom', + '@edifice.io/react', + '@edifice.io/client', + '@tanstack/react-query', + 'react-hook-form', + 'react-i18next', + ], }, }); }; From 9e0dc117bdc169122bd74588d75faf523a31693c Mon Sep 17 00:00:00 2001 From: "Pascal S." Date: Fri, 7 Aug 2026 15:28:12 +0200 Subject: [PATCH 2/6] chore(frontend): #ENABLING-1158 pin le socle sur develop-enabling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- frontend/package.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index da1ffd28..e99ea525 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "ode-explorer", - "version": "2.6.6-develop.0", + "version": "2.6.6-develop-enabling.0", "description": "Edifice Explorer", "homepage": "https://github.com/edificeio/explorer#readme", "bugs": { @@ -63,9 +63,9 @@ "zustand": "^4.5.0" }, "peerDependencies": { - "@edifice.io/bootstrap": "develop", - "@edifice.io/client": "develop", - "@edifice.io/react": "develop", + "@edifice.io/bootstrap": "develop-enabling", + "@edifice.io/client": "develop-enabling", + "@edifice.io/react": "develop-enabling", "@tanstack/react-query": "5.62.7", "react": "^18.3.1", "react-dom": "^18.3.1" @@ -73,9 +73,9 @@ "devDependencies": { "@axe-core/react": "^4.10.0", "@babel/plugin-transform-react-pure-annotations": "7.23.3", - "@edifice.io/bootstrap": "develop", - "@edifice.io/client": "develop", - "@edifice.io/react": "develop", + "@edifice.io/bootstrap": "develop-enabling", + "@edifice.io/client": "develop-enabling", + "@edifice.io/react": "develop-enabling", "@eslint/js": "^9.11.1", "@tanstack/react-query": "5.62.7", "@tanstack/react-query-devtools": "^5.59.13", From 5150fe0c2c3ffb72ea85fcf513196dd500c63550 Mon Sep 17 00:00:00 2001 From: "Pascal S." Date: Fri, 7 Aug 2026 15:37:02 +0200 Subject: [PATCH 3/6] fix(frontend): #ENABLING-1158 aligne les peer deps de @edifice.io/react MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @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. --- frontend/package.json | 74 +++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index e99ea525..06a6a9d0 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -49,63 +49,63 @@ ] }, "dependencies": { - "@dnd-kit/core": "^6.1.0", - "@dnd-kit/modifiers": "^7.0.0", - "@react-spring/web": "^9.7.3", - "clsx": "^2.1.1", + "@dnd-kit/core": "6.1.0", + "@dnd-kit/modifiers": "7.0.0", + "@react-spring/web": "9.7.5", + "clsx": "2.1.1", "dayjs": "1.11.10", "i18next": "23.8.1", "i18next-http-backend": "2.4.2", "react-error-boundary": "4.0.13", - "react-hook-form": "^7.53.0", - "react-i18next": "14.1.0", - "react-router-dom": "^6.23.1", - "zustand": "^4.5.0" + "react-hook-form": "7.71.1", + "react-i18next": "14.1.3", + "react-router-dom": "6.23.1", + "zustand": "4.5.0" }, "peerDependencies": { "@edifice.io/bootstrap": "develop-enabling", "@edifice.io/client": "develop-enabling", "@edifice.io/react": "develop-enabling", "@tanstack/react-query": "5.62.7", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "react": "18.3.1", + "react-dom": "18.3.1" }, "devDependencies": { - "@axe-core/react": "^4.10.0", + "@axe-core/react": "4.10.0", "@babel/plugin-transform-react-pure-annotations": "7.23.3", "@edifice.io/bootstrap": "develop-enabling", "@edifice.io/client": "develop-enabling", "@edifice.io/react": "develop-enabling", - "@eslint/js": "^9.11.1", + "@eslint/js": "9.11.1", "@tanstack/react-query": "5.62.7", - "@tanstack/react-query-devtools": "^5.59.13", - "@testing-library/jest-dom": "^6.5.0", - "@testing-library/react": "^16.0.1", - "@testing-library/user-event": "^14.5.2", - "@types/node": "^18.16.9", - "@types/react": "^18.3.10", - "@types/react-dom": "^18.3.0", - "@vitejs/plugin-react": "^4.3.2", - "@vitest/coverage-v8": "^2.1.2", - "@vitest/ui": "^2.1.2", - "eslint": "^9.11.1", - "eslint-plugin-react-hooks": "^5.1.0-rc.0", - "eslint-plugin-react-refresh": "^0.4.12", - "globals": "^15.9.0", - "husky": "^9.1.6", - "jsdom": "^25.0.1", + "@tanstack/react-query-devtools": "5.62.7", + "@testing-library/jest-dom": "6.5.0", + "@testing-library/react": "16.0.1", + "@testing-library/user-event": "14.5.2", + "@types/node": "18.16.9", + "@types/react": "18.3.10", + "@types/react-dom": "18.3.0", + "@vitejs/plugin-react": "4.3.2", + "@vitest/coverage-v8": "2.1.2", + "@vitest/ui": "2.1.2", + "eslint": "9.11.1", + "eslint-plugin-react-hooks": "5.1.0-rc.0", + "eslint-plugin-react-refresh": "0.4.12", + "globals": "15.9.0", + "husky": "9.1.6", + "jsdom": "25.0.1", "lint-staged": "15.2.9", - "msw": "^2.4.10", + "msw": "2.4.10", "nx": "19.6.0", - "prettier": "^3.3.3", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "typescript": "^5.4.5", - "typescript-eslint": "^8.7.0", + "prettier": "3.3.3", + "react": "18.3.1", + "react-dom": "18.3.1", + "typescript": "5.4.5", + "typescript-eslint": "8.7.0", "vite": "5.4.1", - "vite-plugin-dts": "^4.2.4", - "vite-tsconfig-paths": "^5.0.1", - "vitest": "^2.1.2" + "vite-plugin-dts": "4.2.4", + "vite-tsconfig-paths": "5.0.1", + "vitest": "2.1.2" }, "packageManager": "pnpm@9.12.2", "engines": { From b26aa602b433537d340dd790dde5e52856167a5e Mon Sep 17 00:00:00 2001 From: "Pascal S." Date: Fri, 7 Aug 2026 15:40:59 +0200 Subject: [PATCH 4/6] fix(frontend): #ENABLING-1158 rend l'event de handleSearchSubmit optionnel 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