Files
dandelion/static/sw.js
2026-04-16 21:29:31 -07:00

85 lines
2.8 KiB
JavaScript

"use strict";
const debugLog = false;
// Establish a cache name
const cacheName = "dandelion_cache_v1";
const contentToCache = [
'/static/index.html',
'/static/main.css',
'/static/main2.js',
'/static/lib/marked.min.js',
'/static/lib/qrcode.min.js',
'/static/db.js',
'/static/PeerManager.js',
'/static/IDUtils.js',
'/static/dataUtils.js',
'/static/App.js',
'/static/Sync.js',
'/static/IDUtils.js',
'/static/log.js',
'/static/favicon.ico'
];
self.addEventListener("install", (e) => {
e.waitUntil((async () => {
const cache = await caches.open(cacheName);
console.log("[Service Worker] Caching all: app shell and content", contentToCache);
try {
await cache.addAll(contentToCache);
}
catch (e) {
debugLog ? console.log(e) : null;
}
})());
});
async function fetchAndUpdateCache(request) {
debugLog && console.log('Service Worker: Fetching', request.url);
let networkResponse;
try {
networkResponse = await fetch(request);
}
catch (e) {
debugLog && console.log('Service Worker: Failed to fetch', e);
return new Response('Network error occurred', {
status: 404,
statusText: 'Cache miss and fetch failed',
headers: { 'Content-Type': 'text/plain' }
});
}
debugLog && console.log('Service Worker: Updating cache', request.url);
const cache = await caches.open(cacheName);
try {
await cache.put(request, networkResponse.clone());
}
catch (e) {
debugLog && console.log('Service Worker: failed to update cache', request.url, e);
}
return networkResponse;
}
self.addEventListener('fetch', function (event) {
const networkFetch = fetchAndUpdateCache(event.request);
event.respondWith(async function () {
const cache = await caches.open(cacheName);
const cached = await cache.match(event.request);
if (cached) {
debugLog && console.log('Service Worker: Cache hit', event.request.url);
return cached;
}
return networkFetch;
}());
// Keep the SW alive until the background cache update finishes
event.waitUntil(networkFetch);
});
addEventListener("message", async (e) => {
debugLog ? console.log(`Message received:`, e.data) : null;
switch (e.data.type) {
case "update_app":
const cache = await caches.open(cacheName);
debugLog ? console.log(`[Service Worker] Caching resources`) : null;
// cache.put("/main.js", new Response());
for (let item of contentToCache) {
cache.delete(item);
}
await cache.addAll(contentToCache);
break;
}
});
//# sourceMappingURL=sw.js.map