62 lines
1.9 KiB
JavaScript
62 lines
1.9 KiB
JavaScript
"use strict";
|
|
// Establish a cache name
|
|
const cacheName = "dandelion_cache_v1";
|
|
const contentToCache = [
|
|
'/index.html',
|
|
'/main.css',
|
|
'/main.js',
|
|
'lib//marked.min.js',
|
|
'lib/qrcode.min.js',
|
|
'/db.js',
|
|
'/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);
|
|
await cache.addAll(contentToCache);
|
|
})());
|
|
});
|
|
async function responder(event) {
|
|
console.log('Fetching', event.request.url);
|
|
let response = await fetch(event.request);
|
|
if (!response) {
|
|
console.log('Fetch failed, falling back to cache', event.request.url);
|
|
let cacheMatch = await caches.match(event.request);
|
|
if (!cacheMatch) {
|
|
// DUnno what to return here!
|
|
}
|
|
return cacheMatch;
|
|
}
|
|
if (response.status === 206) {
|
|
console.log('Not caching partial content');
|
|
return response;
|
|
}
|
|
console.log('Fetch successful, updating cache');
|
|
const cache = await caches.open(cacheName);
|
|
try {
|
|
cache.put(event.request, response.clone()).catch((error) => console.log('failed to cache', event.request, error));
|
|
}
|
|
catch (e) {
|
|
console.log('failed to cache', event.request);
|
|
}
|
|
return response;
|
|
}
|
|
self.addEventListener('fetch', function (event) {
|
|
event.respondWith(responder(event));
|
|
});
|
|
addEventListener("message", async (e) => {
|
|
console.log(`Message received:`, e.data);
|
|
switch (e.data.type) {
|
|
case "update_app":
|
|
const cache = await caches.open(cacheName);
|
|
console.log(`[Service Worker] Caching resources`);
|
|
// cache.put("/main.js", new Response());
|
|
for (let item of contentToCache) {
|
|
cache.delete(item);
|
|
}
|
|
await cache.addAll(contentToCache);
|
|
break;
|
|
}
|
|
});
|
|
//# sourceMappingURL=sw.js.map
|