UNPKG

@s8/static-tm

Version:

Static module for Trinity Mirror partner.

62 lines (55 loc) 1.46 kB
const staticAssets = [ './shopping', './shopping/placeholder.png' ] self.addEventListener('install', async event => { const cache = await caches.open('static') cache.addAll(staticAssets) }) self.addEventListener('fetch', async event => { const req = event.request const url = new URL(req.url) if ( (url.host === 'www.google-analytics.com') || (url.pathname === '/r/collect') || (url.pathname === '/shopping/graphql') ) { event.respondWith(networkOnly(req)) } else { if (url.origin === location.origin) { event.respondWith(cacheFirst(req)) } else { event.respondWith(networkFirst(req)) } } }) async function networkOnly (req) { try { const res = await fetch(req) return res } catch (error) { return new Response('Offline', {'status': 200}) } } async function networkFirst (req) { const cache = await caches.open('dynamic') try { const res = await fetch(req) cache.put(req, res.clone()) return res } catch (error) { const cachedResponse = await cache.match(req) return cachedResponse || caches.match('./shopping/placeholder.png') } } async function cacheFirst (req) { const cachedResponse = await caches.match(req) let networkResponse try { networkResponse = await fetch(req) } catch (error) { networkResponse = caches.match('./shopping/placeholder.png') return networkResponse } return cachedResponse || networkResponse }