Fix: fix 'non-loading' due to incorrect caching in service worker

This commit is contained in:
Pieter Vander Vennet 2025-08-25 12:57:48 +02:00
parent 94da36d9d1
commit f6d6ec9885
3 changed files with 30 additions and 6 deletions

View file

@ -9,12 +9,14 @@ class PrepareServiceWorker extends Script {
public async main() { public async main() {
const v = Constants.vNumber const v = Constants.vNumber
const date = new Date().getTime()
writeFileSync( writeFileSync(
"./src/service-worker/SWGenerated.ts", "./src/service-worker/SWGenerated.ts",
[ [
"export class SWGenerated {", "export class SWGenerated {",
"// generated by scripts/prepareServiceWorker.ts", "// generated by scripts/prepareServiceWorker.ts",
"static vNumber = " + JSON.stringify(v), "static vNumber = " + JSON.stringify(v),
"static buildTime = " + date,
"}", "}",
].join("\n"), ].join("\n"),
"utf8" "utf8"

View file

@ -1,4 +1,5 @@
export class SWGenerated { export class SWGenerated {
// generated by scripts/prepareServiceWorker.ts // generated by scripts/prepareServiceWorker.ts
static vNumber = "0.55.4" static vNumber = "0.55.5"
} static buildTime = 1756119249268
}

View file

@ -17,9 +17,27 @@ function jsonResponse(object: object | []): Response {
}) })
} }
const cacheKey = SWGenerated.vNumber + "-" + SWGenerated.vNumber
function cleanOldCaches() {
caches.keys().then(keys => {
return Promise.all(
keys.map(k => {
if (k !== cacheKey) {
return caches.delete(k)
}
})
)
})
}
function getCache() {
return caches.open(cacheKey)
}
function respondFromCache(event: FetchEvent) { function respondFromCache(event: FetchEvent) {
event.respondWith( event.respondWith(
caches.open(SWGenerated.vNumber).then(async (cache) => { getCache().then(async (cache) => {
const cached = await cache.match(event.request) const cached = await cache.match(event.request)
if (!cached) { if (!cached) {
const response = await fetch(event.request) const response = await fetch(event.request)
@ -32,7 +50,7 @@ function respondFromCache(event: FetchEvent) {
} }
async function listCachedRequests(): Promise<string[]> { async function listCachedRequests(): Promise<string[]> {
const cache = await caches.open(SWGenerated.vNumber) const cache = await getCache()
const requests = await cache.keys() const requests = await cache.keys()
return requests.map((req) => req.url) return requests.map((req) => req.url)
} }
@ -107,7 +125,10 @@ self.addEventListener("fetch", (event) => {
} }
}) })
self.addEventListener("install", () => self.skipWaiting()) self.addEventListener("install", async () => {
await self.skipWaiting()
cleanOldCaches()
})
self.addEventListener("activate", (event) => { self.addEventListener("activate", (event) => {
event.waitUntil(self.clients.claim()) event.waitUntil(self.clients.claim())