85 lines
2.8 KiB
JavaScript
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
|