Skip to content
Snippets Groups Projects
Commit 8fbcc7e2 authored by David Trattnig's avatar David Trattnig
Browse files

refactor(service-worker): skip https requests and chrome extensions

parent 15d688f3
No related branches found
No related tags found
1 merge request!4Sveltekit mig
Pipeline #8446 passed
let OFFLINE_URL = '/offline.html' // Match your offline page URL
let PRE_CACHE = 'pre-cache-v13' // Manually update version or generate one server-site
let PRE_CACHE_URL = '/pre-cache.json' // Match your pre-cache URL
let RUNTIME_CACHE = 'runtime-cache'
let EXCLUDE_CACHE = ['/admin/', 'https://securestream.o94.at/live.mp3']
let OFFLINE_URL = '/offline.html'; // Match your offline page URL
let PRE_CACHE = 'pre-cache-v15'; // Manually update version or generate one server-site
let PRE_CACHE_URL = '/pre-cache.json'; // Match your pre-cache URL
let RUNTIME_CACHE = 'runtime-cache';
let EXCLUDE_CACHE = ['/admin/', 'https://securestream.o94.at/live.mp3'];
/** Install : Service Worker */
self.addEventListener('install', (event) => {
self.skipWaiting()
console.log(
"[ServiceWorker] Install with pre-cache at '" + PRE_CACHE_URL + "'",
)
console.log("[ServiceWorker] Offline URL set to '" + OFFLINE_URL + "'")
self.skipWaiting();
console.log("[ServiceWorker] Install with pre-cache at '" + PRE_CACHE_URL + "'");
console.log("[ServiceWorker] Offline URL set to '" + OFFLINE_URL + "'");
event.waitUntil(
fetch(PRE_CACHE_URL)
.then((response) => response.json())
.then((precache_files) => {
caches.open(PRE_CACHE).then((cache) => {
if (OFFLINE_URL) {
console.log(
"[ServiceWorker] Using offline URL '" + OFFLINE_URL + "'",
)
precache_files.push(OFFLINE_URL)
} else {
console.log('[ServiceWorker] No offline URL passed.')
}
console.log(
'[ServiceWorker] Pre-caching offline files',
precache_files,
)
return cache.addAll(precache_files)
})
}),
)
event.waitUntil(
fetch(PRE_CACHE_URL)
.then((response) => response.json())
.then((precache_files) => {
caches.open(PRE_CACHE).then((cache) => {
if (OFFLINE_URL) {
console.log("[ServiceWorker] Using offline URL '" + OFFLINE_URL + "'");
precache_files.push(OFFLINE_URL);
} else {
console.log('[ServiceWorker] No offline URL passed.');
}
console.log('[ServiceWorker] Pre-caching offline files', precache_files);
return cache.addAll(precache_files);
});
})
);
// self.skipWaiting();
})
// self.skipWaiting();
});
/** Activate : Service Worker */
self.addEventListener('activate', (event) => {
console.log('[ServiceWorker] Activate')
console.log('[ServiceWorker] Activate');
// Invalidate any existing old caches
event.waitUntil(
caches.keys().then((keyList) => {
return Promise.all(
keyList.map((key) => {
if (key !== PRE_CACHE) {
console.log('[ServiceWorker] Removing stale cache:', key)
return caches.delete(key)
}
}),
)
}),
)
// Invalidate any existing old caches
event.waitUntil(
caches.keys().then((keyList) => {
return Promise.all(
keyList.map((key) => {
if (key !== PRE_CACHE) {
console.log('[ServiceWorker] Removing stale cache:', key);
return caches.delete(key);
}
})
);
})
);
// Become the controller for all the clients
self.clients.claim()
})
// Become the controller for all the clients
self.clients.claim();
});
/** Fetch : Service Worker */
self.addEventListener('fetch', (event) => {
//console.log("[ServiceWorker] Fetch", event.request.url);
//console.log("[ServiceWorker] Fetch", event.request.url);
for (let i = 0; i < EXCLUDE_CACHE.length; i++) {
if (event.request.url.indexOf(EXCLUDE_CACHE[i]) !== -1) {
// console.log('URL excluded from cache:', event.request.url)
return false
}
}
for (let i = 0; i < EXCLUDE_CACHE.length; i++) {
if (event.request.url.indexOf(EXCLUDE_CACHE[i]) !== -1) {
// console.log('URL excluded from cache:', event.request.url)
return false;
}
}
// URLs requested by the user.
// Cache Strategy: Network-first, auto-add to runtime cache, fallback to pre-cache, fallback to offline page
// URLs requested by the user.
// Cache Strategy: Network-first, auto-add to runtime cache, fallback to pre-cache, fallback to offline page
// Skip HTTP requests and chrome extensions
if (event.request.mode === 'navigate') {
event.respondWith(
fetch(event.request)
.then((response) => {
return caches.open(RUNTIME_CACHE).then((cache) => {
if (
event.request.method == 'GET' &&
!event.request.url.startsWith('http') &&
!event.request.url.startsWith('chrome-extension')
)
cache.put(event.request, response.clone());
return response;
});
})
.catch((error) => {
return caches.match(event.request, { ignoreSearch: true }).then((response) => {
if (response) {
console.log('[ServiceWorker] Found navigate request in cache', event.request.url);
return response;
} else {
if (!OFFLINE_URL)
return new Response('Network error happened', {
status: 408,
headers: { 'Content-Type': 'text/plain' }
});
return caches.match(OFFLINE_URL).then((response) => {
console.log('[ServiceWorker] Found offline URL in cache', event.request.url);
return response;
});
}
});
})
);
}
if (event.request.mode === 'navigate') {
event.respondWith(
fetch(event.request)
.then((response) => {
return caches.open(RUNTIME_CACHE).then((cache) => {
if (event.request.method == 'GET')
cache.put(event.request, response.clone())
return response
})
})
.catch((error) => {
return caches
.match(event.request, { ignoreSearch: true })
.then((response) => {
if (response) {
console.log(
'[ServiceWorker] Found navigate request in cache',
event.request.url,
)
return response
} else {
if (!OFFLINE_URL)
return new Response('Network error happened', {
status: 408,
headers: { 'Content-Type': 'text/plain' },
})
return caches.match(OFFLINE_URL).then((response) => {
console.log(
'[ServiceWorker] Found offline URL in cache',
event.request.url,
)
return response
})
}
})
}),
)
}
// URLs requested by page contents or API requests
// Cache Strategy: Network-first, auto-add to runtime cache, fallback to pre-cache
else {
event.respondWith(
fetch(event.request)
.then((response) => {
return caches.open(RUNTIME_CACHE).then((cache) => {
if (event.request.method == 'GET')
cache.put(event.request, response.clone())
return response
})
})
.catch((error) => {
console.log(
'[ServiceWorker] Found request in cache',
event.request.url,
)
return caches.match(event.request)
}),
)
}
})
// URLs requested by page contents or API requests
// Cache Strategy: Network-first, auto-add to runtime cache, fallback to pre-cache
// Skip HTTP requests and chrome extensions
else {
event.respondWith(
fetch(event.request)
.then((response) => {
return caches.open(RUNTIME_CACHE).then((cache) => {
if (
event.request.method == 'GET' &&
!event.request.url.startsWith('http') &&
!event.request.url.startsWith('chrome-extension')
)
cache.put(event.request, response.clone());
return response;
});
})
.catch((error) => {
console.log('[ServiceWorker] Found request in cache', event.request.url);
return caches.match(event.request);
})
);
}
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment