mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender-pwa.git
synced 2025-07-16 09:38:51 +02:00
64 lines
1.9 KiB
JavaScript
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;
|
|
});
|
|
}),
|
|
);
|
|
}
|
|
});
|