diff --git a/scripts/prepareServiceWorker.ts b/scripts/prepareServiceWorker.ts index ba4734364..3ed631b79 100644 --- a/scripts/prepareServiceWorker.ts +++ b/scripts/prepareServiceWorker.ts @@ -9,12 +9,14 @@ class PrepareServiceWorker extends Script { public async main() { const v = Constants.vNumber + const date = new Date().getTime() writeFileSync( "./src/service-worker/SWGenerated.ts", [ "export class SWGenerated {", "// generated by scripts/prepareServiceWorker.ts", "static vNumber = " + JSON.stringify(v), + "static buildTime = " + date, "}", ].join("\n"), "utf8" diff --git a/src/service-worker/SWGenerated.ts b/src/service-worker/SWGenerated.ts index 954950bb6..d930b5f8c 100644 --- a/src/service-worker/SWGenerated.ts +++ b/src/service-worker/SWGenerated.ts @@ -1,4 +1,5 @@ export class SWGenerated { - // generated by scripts/prepareServiceWorker.ts - static vNumber = "0.55.4" -} +// generated by scripts/prepareServiceWorker.ts +static vNumber = "0.55.5" +static buildTime = 1756119249268 +} \ No newline at end of file diff --git a/src/service-worker/index.ts b/src/service-worker/index.ts index c85e8ad0c..038f25d27 100644 --- a/src/service-worker/index.ts +++ b/src/service-worker/index.ts @@ -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) { event.respondWith( - caches.open(SWGenerated.vNumber).then(async (cache) => { + getCache().then(async (cache) => { const cached = await cache.match(event.request) if (!cached) { const response = await fetch(event.request) @@ -32,7 +50,7 @@ function respondFromCache(event: FetchEvent) { } async function listCachedRequests(): Promise { - const cache = await caches.open(SWGenerated.vNumber) + const cache = await getCache() const requests = await cache.keys() 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) => { event.waitUntil(self.clients.claim())