diff --git a/src/serviceworker/mod.ts b/src/serviceworker/mod.ts index a9a0649..81c7652 100644 --- a/src/serviceworker/mod.ts +++ b/src/serviceworker/mod.ts @@ -86,6 +86,8 @@ async function fetchHandler(event: FetchEvent) { const method = event.request.method const preCachedUrls = await getPreCachedUrls() const cache = await getCache() + // Cache will be updated on each request if version change + updateCache() // Cache first for "pre-cached-urls" if (preCachedUrls.includes(url.pathname) && method === 'GET') { @@ -135,6 +137,24 @@ async function fetchHandler(event: FetchEvent) { return fetch(event.request) } +async function updateCache() { + const serverVersion = await getServerCacheVersion() + const clientVersion = await swStorage.getItem('$sw.cache.version') + if (serverVersion === undefined) return + if (clientVersion === serverVersion) return + openCache() +} + +async function getServerCacheVersion() { + const response = await fetch('/api/serviceworker/precache').then( + (response) => response.json() as Promise>, + ) + + if (response.kind === 'success') { + return response.data.version + } +} + async function openCache() { const response = await fetch('/api/serviceworker/precache').then( (response) => response.json() as Promise>,