@magic/core
Version:
@magic core. generate static pages and serverless lambdas. ~5kb client boilerplate.
33 lines (24 loc) • 976 B
JavaScript
import { createHash, replaceSlashSlash } from '../../lib/index.mjs'
export const prepareServiceWorker = async (app, { CLIENT_LIB_NAME, WEB_ROOT }) => {
const staticFiles = Object.keys(app.static)
.filter(f => !f.endsWith('sitemap.xml') || !f.endsWith('robots.txt'))
.map(file => replaceSlashSlash(`'${WEB_ROOT}${file}',`))
const cacheFileString = `[
'${WEB_ROOT}',
'${WEB_ROOT}${CLIENT_LIB_NAME}.css',
'${WEB_ROOT}${CLIENT_LIB_NAME}.js',
${staticFiles.join('')}
]`
const fileHash = await createHash(cacheFileString)
const serviceWorkerString = `
const cacheFiles = ${cacheFileString}
const handleCache = c => c.addAll(cacheFiles)
self.addEventListener('install', e => {
e.waitUntil(caches.open('simple-sw-v${fileHash.split('-')[1].substr(0, 11)}').then(handleCache))
})
self.addEventListener('fetch', e => {
e.respondWith(caches.match(e.request).then(response => response || fetch(e.request)))
})
`
return serviceWorkerString
}