Réutilise l'API Releases de Forgejo (publique, sans authentification) comme source de vérité pour "quelle est la dernière version" — zéro nouvel endpoint backend : useAppUpdateCheck compare App.getInfo().version (@capacitor/app, nouvelle dépendance) au tag_name de GET .../releases/latest, et pointe "Mettre à jour" vers l'URL stable de téléchargement (issue #65). Comparaison de version en logique pure (version-compare.ts), séparée du hook effectful — testée isolément via un test de composant Cypress (version-compare.cy.tsx, même patron que highlight-tech-steps.cy.tsx : aucun montage, juste describe/it/expect sur des fonctions pures). Natif uniquement (Capacitor.isNativePlatform()) : @capacitor/app et @capacitor/preferences restent en import dynamique dans le hook, jamais dans le bundle web (même patron que capacitor-token-store.ts) — vérifié dans le build (deux petits chunks séparés, pas dans le bundle principal). Vérification au démarrage à froid + à la reprise depuis l'arrière-plan (appStateChange), avec un throttle de 6h et une mémorisation de la version déjà rejetée dans @capacitor/preferences pour ne jamais re-harceler sur la même version. Bannière discrète (pas une Dialog modale), bouton "Mettre à jour" ouvrant le lien de téléchargement dans le navigateur système plutôt qu'un flux PackageInstaller in-app. Vérifié : pnpm lint, pnpm --filter web build, le test de composant (9/9), et layout/smoke/planning-page e2e (18/18, la bannière étant un no-op sur le web ne devait rien casser — confirmé). Closes #66 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
53 lines
1.6 KiB
JSON
53 lines
1.6 KiB
JSON
{
|
|
"name": "web",
|
|
"version": "0.2.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite --host 0.0.0.0",
|
|
"build": "tsc -b && vite build",
|
|
"build:capacitor": "tsc -b && vite build --mode capacitor",
|
|
"preview": "vite preview",
|
|
"test": "echo \"no unit tests yet\" && exit 0",
|
|
"cy:open": "cypress open",
|
|
"cy:run": "cypress run",
|
|
"e2e": "start-server-and-test dev http://localhost:5173 cy:run",
|
|
"cy:run:component": "cypress run --component"
|
|
},
|
|
"dependencies": {
|
|
"@batch-cooking/date-tools": "workspace:*",
|
|
"@batch-cooking/shared": "workspace:*",
|
|
"@capacitor/android": "^8.5.1",
|
|
"@capacitor/app": "^8.1.1",
|
|
"@capacitor/core": "^8.5.1",
|
|
"@capacitor/preferences": "^8.0.1",
|
|
"@dnd-kit/core": "^6.3.1",
|
|
"@dnd-kit/utilities": "^3.2.2",
|
|
"driver.js": "^1.8.0",
|
|
"i18next": "^26.3.6",
|
|
"lucide-react": "^1.32.0",
|
|
"react": "^18.3.1",
|
|
"react-dom": "^18.3.1",
|
|
"react-i18next": "^17.0.11",
|
|
"react-router-dom": "^7.18.2",
|
|
"recharts": "^2.15.0",
|
|
"socket.io-client": "^4.8.3",
|
|
"zod": "^3.25.76"
|
|
},
|
|
"devDependencies": {
|
|
"@badeball/cypress-cucumber-preprocessor": "22.2.0",
|
|
"@bahmutov/cypress-esbuild-preprocessor": "2.2.8",
|
|
"@capacitor/cli": "^8.5.1",
|
|
"@cypress/vite-dev-server": "5.2.1",
|
|
"@types/node": "^22.9.0",
|
|
"@types/react": "^18.3.12",
|
|
"@types/react-dom": "^18.3.1",
|
|
"@vitejs/plugin-react": "^4.3.3",
|
|
"cypress": "13.17.0",
|
|
"esbuild": "0.21.5",
|
|
"sass": "^1.102.0",
|
|
"start-server-and-test": "^2.0.8",
|
|
"typescript": "^5.7.2",
|
|
"vite": "^5.4.11"
|
|
}
|
|
}
|