54 lines
1.7 KiB
JavaScript
54 lines
1.7 KiB
JavaScript
"use strict";
|
|
// Establish a cache name
|
|
const cacheName = "dandelion_cache_v1";
|
|
const contentToCache = [
|
|
"/index.html",
|
|
"/main.js",
|
|
"/marked.min.js",
|
|
"/db.js",
|
|
"/bookerly.woff2",
|
|
"/virgil.woff2",
|
|
"/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);
|
|
})());
|
|
});
|
|
self.addEventListener("fetch", (e) => {
|
|
e.respondWith((async () => {
|
|
const r = await caches.match(e.request);
|
|
if (r) {
|
|
console.log(`[Service Worker] Cache hit for resource: ${e.request.url}`);
|
|
return r;
|
|
}
|
|
let response;
|
|
try {
|
|
console.log(`[Service Worker] Cache miss, attempting to fetch resource: ${e.request.url}`);
|
|
response = await fetch(e.request);
|
|
}
|
|
catch (e) {
|
|
console.warn(e);
|
|
}
|
|
const cache = await caches.open(cacheName);
|
|
console.log(`[Service Worker] Adding resource to cache: ${e.request.url}`);
|
|
if (!response) {
|
|
throw new Error(`Failed to fetch resource: ${e.request.url}`);
|
|
}
|
|
cache.put(e.request, response.clone());
|
|
return response;
|
|
})());
|
|
});
|
|
addEventListener("message", async (e) => {
|
|
console.log(`Message received: ${e.data}`);
|
|
switch (e.data.type) {
|
|
case "updateMain":
|
|
const cache = await caches.open(cacheName);
|
|
console.log(`[Service Worker] Caching new resource: main.js`);
|
|
cache.put("/main.js", new Response());
|
|
break;
|
|
}
|
|
});
|
|
//# sourceMappingURL=sw.js.map
|