import { precacheAndRoute, cleanupOutdatedCaches } from "workbox-precaching"; import { clientsClaim } from "workbox-core"; self.skipWaiting(); clientsClaim(); cleanupOutdatedCaches(); // Precache the files from the manifest precacheAndRoute(self.__WB_MANIFEST); // Custom precaching logic for the /api/modules endpoint self.addEventListener("install", (event) => { event.waitUntil( caches.open("api-modules-cache").then((cache) => { return fetch("/api/modules") .then((response) => { if (response.ok) { return cache.put("/api/modules", response); } throw new Error("Failed to fetch /api/modules"); }) .catch((error) => { console.error("Precaching /api/modules failed:", error); }); }), ); }); // Custom precaching logic for the /api/schedule/rooms endpoint self.addEventListener("install", (event) => { event.waitUntil( caches.open("room-schedule-cache").then((cache) => { return fetch("/api/schedule/rooms") .then((response) => { if (response.ok) { return cache.put("/api/schedule/rooms", response); } throw new Error("Failed to fetch /api/schedule/rooms"); }) .catch((error) => { console.error("Precaching /api/schedule/rooms failed:", error); }); }), ); }); // StaleWhileRevalidate strategy for the /api/schedule/rooms endpoint self.addEventListener("fetch", (event) => { if (event.request.url.includes("/api/schedule/rooms")) { event.respondWith( caches.open("room-schedule-cache").then((cache) => { return cache.match(event.request).then((response) => { const fetchPromise = fetch(event.request).then((networkResponse) => { cache.put(event.request, networkResponse.clone()); return networkResponse; }); return response || fetchPromise; }); }), ); } });