PWA installable
La PWA est une brique optionnelle du design system. Ce n’est pas un composant : on la copie depuis ce dépôt.
Manifeste et icônes
Le manifeste est servi sur /manifest.webmanifest en standalone. Ses couleurs lisent themeColor.light dans les jetons. Son nom vient deSITE_NAME.
Trois icônes PNG viennent de public/image/logo.svg, lu sans être modifié : 192 et 512 px en any, 512 px en maskable.
Service worker
scripts/sw.mjs écrit dist/sw.js après le build, sans précache. Sa version est un SHA-256 de la liste des fichiers de dist/.
| Requête | Stratégie |
|---|---|
| Navigation, même origine | Réseau d’abord, cache en repli |
| /_astro/* et /pwa/* | Cache d’abord |
| /pagefind/* | Réseau seul, jamais en cache |
| Autre origine, méthode autre que GET | Réseau, non interceptée |
| Autre ressource, même origine | Réseau, non interceptée |
Le cache s’appelle pp-docs- suivi de la version. L’activation supprime les autres pp-docs-*. Seules les réponses réussies de même origine sont copiées.
Mise à jour
Le worker n’appelle pas skipWaiting() seul. Un bouton « Mettre à jour » apparaît quand une version attend. Le clic envoie SKIP_WAITING.
Données et en-têtes
Aucune collecte. Le seul stockage est le cache du worker, dans l’origine du site.
La CSP autorise worker-src 'self' et manifest-src 'self'./sw.js reçoit Cache-Control: no-cache.
Activer dans un autre site
- Copier
src/lib/pwa.tset fournirSITE_NAME,SITE_LANG. - Ajouter l’endpoint
src/pages/manifest.webmanifest.ts. - Copier
src/lib/sw-core.jsetscripts/sw.mjs. - Lancer
node scripts/sw.mjsen dernier, après le build. - Copier
public/pwa/register.js, le charger avecdefer. - Déclarer
<link rel="manifest">, lancerpwa-icons.mjs. - Ajouter les en-têtes CSP et
no-cachesur/sw.js.
Limites
- Seules les pages déjà visitées sont lisibles hors ligne. Pas de précache.
- Images,
/favicon.icoet/r/registry.jsonne sont pas en cache. - La recherche est indisponible hors ligne (
/pagefind/*, réseau seul). - La version ne dépend que des noms : un contenu modifié sans nouveau nom ne purge rien.
- Les icônes ne sont pas régénérées par le build :
pwa-icons.mjsest manuel. - Le bouton
pp-pwa-updaten’a aucun style défini dans le dépôt. - Le test e2e est prévu dans
apps/docs/e2e/pwa.spec.ts, il n’est pas encore là.
Aucune note Lighthouse n’est revendiquée pour cette PWA.