Spaces:
Sleeping
Sleeping
| // Nom du cache | |
| const CACHE_NAME = 'mariam-ai-cache-v1'; | |
| // Ressources à mettre en cache | |
| const CACHE_ASSETS = [ | |
| '/', | |
| '/static/css/style.css', | |
| '/static/js/chat.js', | |
| '/static/icons/icon-192x192.png', | |
| '/static/icons/icon-512x512.png', | |
| '/static/manifest.json' | |
| ]; | |
| // Installation du Service Worker | |
| self.addEventListener('install', (event) => { | |
| event.waitUntil( | |
| caches.open(CACHE_NAME) | |
| .then((cache) => { | |
| return cache.addAll(CACHE_ASSETS); | |
| }) | |
| .then(() => self.skipWaiting()) | |
| ); | |
| }); | |
| // Activation du Service Worker | |
| self.addEventListener('activate', (event) => { | |
| const currentCaches = [CACHE_NAME]; | |
| event.waitUntil( | |
| caches.keys().then((cacheNames) => { | |
| return cacheNames.filter((cacheName) => !currentCaches.includes(cacheName)); | |
| }).then((cachesToDelete) => { | |
| return Promise.all(cachesToDelete.map((cacheToDelete) => { | |
| return caches.delete(cacheToDelete); | |
| })); | |
| }).then(() => self.clients.claim()) | |
| ); | |
| }); | |
| // Stratégie de cache : "Cache, falling back to network" | |
| self.addEventListener('fetch', (event) => { | |
| // Ne pas mettre en cache les requêtes API | |
| if (event.request.url.includes('/api/')) { | |
| return; | |
| } | |
| event.respondWith( | |
| caches.match(event.request) | |
| .then((response) => { | |
| // Cache hit - return response | |
| if (response) { | |
| return response; | |
| } | |
| // Si pas dans le cache, on fait la requête au réseau | |
| return fetch(event.request).then( | |
| (response) => { | |
| // Return the network response | |
| if(!response || response.status !== 200 || response.type !== 'basic') { | |
| return response; | |
| } | |
| // On clone la réponse pour l'utiliser deux fois | |
| const responseToCache = response.clone(); | |
| caches.open(CACHE_NAME) | |
| .then((cache) => { | |
| cache.put(event.request, responseToCache); | |
| }); | |
| return response; | |
| } | |
| ); | |
| }) | |
| ); | |
| }); |