Files

64 lines
1.9 KiB
JavaScript

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;
});
}),
);
}
});