@s8/static-tm
Version:
Static module for Trinity Mirror partner.
62 lines (55 loc) • 1.46 kB
JavaScript
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
}