about summary refs log tree commit diff
path: root/MatrixUtils.Web/wwwroot/service-worker.published.js
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2025-12-09 23:42:07 +0100
committerRory& <root@rory.gay>2025-12-09 23:42:07 +0100
commit6769b0fd6f37cbc27646fa0ca8e458489c935039 (patch)
tree3acc618064bda1ada456eb1b98a90dba0abdffbd /MatrixUtils.Web/wwwroot/service-worker.published.js
parentdotnet 10, synapse admin room list improvements (diff)
downloadMatrixUtils-6769b0fd6f37cbc27646fa0ca8e458489c935039.tar.xz
Commit various changes that never made it into git
Diffstat (limited to 'MatrixUtils.Web/wwwroot/service-worker.published.js')
-rw-r--r--MatrixUtils.Web/wwwroot/service-worker.published.js22
1 files changed, 18 insertions, 4 deletions
diff --git a/MatrixUtils.Web/wwwroot/service-worker.published.js b/MatrixUtils.Web/wwwroot/service-worker.published.js

index 9219755..aafb48c 100644 --- a/MatrixUtils.Web/wwwroot/service-worker.published.js +++ b/MatrixUtils.Web/wwwroot/service-worker.published.js
@@ -9,7 +9,7 @@ self.addEventListener('fetch', event => event.respondWith(onFetch(event))); const cacheNamePrefix = 'offline-cache-'; const cacheName = `${cacheNamePrefix}${self.assetsManifest.version}`; const offlineAssetsInclude = [// Standard resources - /\.dll$/, /\.pdb$/, /\.wasm/, /\.html/, /\.js$/, /\.json$/, /\.css$/, /\.woff$/, /\.png$/, /\.jpe?g$/, /\.gif$/, /\.ico$/, /\.blat$/, /\.dat$/, /* Extra known-static paths */ + /\.dll$/, /\.pdb$/, /\.wasm/, /\.html/, /\.js$/, /\.json$/, /\.css$/, /\.woff$/, /\.png$/, /\.jpe?g$/, /\.gif$/, /\.ico$/, /\.blat$/, /\.dat$/, /\.webmanifest$/, /* Extra known-static paths */ /\/_matrix\/media\/.{2}\/download\//, /api\.dicebear\.com\/6\.x\/identicon\/svg/]; const offlineAssetsExclude = [/^service-worker\.js$/]; @@ -28,7 +28,7 @@ async function onInstall(event) { const assetsRequests = self.assetsManifest.assets .filter(asset => offlineAssetsInclude.some(pattern => pattern.test(asset.url))) .filter(asset => !offlineAssetsExclude.some(pattern => pattern.test(asset.url))) - .map(asset => new Request(asset.url, {integrity: asset.hash, cache: 'no-cache'})); + .map(asset => new Request(asset.url, {cache: 'no-cache'})); /* integrity: asset.hash */ await caches.open(cacheName).then(cache => cache.addAll(assetsRequests)); } @@ -48,12 +48,26 @@ async function onFetch(event) { // For all navigation requests, try to serve index.html from cache, // unless that request is for an offline resource. // If you need some URLs to be server-rendered, edit the following check to exclude those URLs - const shouldServeIndexHtml = event.request.mode === 'navigate' && !manifestUrlList.some(url => url === event.request.url); + const shouldServeIndexHtml = event.request.mode === 'navigate' + && !manifestUrlList.some(url => url === event.request.url); const request = shouldServeIndexHtml ? 'index.html' : event.request; const shouldCache = offlineAssetsInclude.some(pattern => pattern.test(request.url)); const cache = await caches.open(cacheName); + + if (request !== 'index.html' && request.url.endsWith("_framework/dotnet.js")) { + // return `_framework/dotnet.<hash>.js` from cache to avoid integrity errors + const dotnetJsUrl = manifestUrlList.find(url => /_framework\/dotnet\.[a-z0-9]+\.js$/.test(url)); + if (dotnetJsUrl) { + cachedResponse = await cache.match(dotnetJsUrl); + if (cachedResponse) { + console.log("Service worker caching: serving dotnet.js from cache: ", dotnetJsUrl); + return cachedResponse; + } + } else console.warn("Service worker caching: could not find dotnet.hash.js in manifest", {request, manifestUrlList}); + } + cachedResponse = await cache.match(request); let exception; let fetched; @@ -72,7 +86,7 @@ async function onFetch(event) { fetched, shouldCache, request, exception, cachedResponse, url: request.url, } Object.keys(consoleLog).forEach(key => consoleLog[key] == null && delete consoleLog[key]) - if(consoleLog.exception) + if (consoleLog.exception) console.log("Service worker caching: ", consoleLog) }