forked from MapComplete/MapComplete
Fix: fix 'non-loading' due to incorrect caching in service worker
This commit is contained in:
parent
94da36d9d1
commit
f6d6ec9885
3 changed files with 30 additions and 6 deletions
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
|
@ -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())
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue