@quasar/app-vite
Version:
Quasar Framework App CLI with Vite
52 lines (42 loc) • 1.32 kB
JavaScript
import { static as serveStatic } from 'express'
import { createHeadTags } from './utils.js'
export function quasarVitePluginPwaResources (quasarConf) {
let pwaManifest = null
let headTags
let manifestContent
const serviceWorkerDir = quasarConf.ctx.appPaths.resolve.entry('service-worker')
function updateCache () {
if (quasarConf.htmlVariables.pwaManifest === pwaManifest) return
pwaManifest = quasarConf.htmlVariables.pwaManifest
headTags = createHeadTags(quasarConf)
manifestContent = JSON.stringify(pwaManifest)
}
return {
name: 'quasar:pwa-resources',
enforce: 'pre',
transformIndexHtml: {
handler: html => {
updateCache()
return html.replace(
/(<\/head>)/i,
(_, tag) => `${ headTags }${ tag }`
)
}
},
// runs for dev only to serve manifest and service-worker
configureServer (server) {
server.middlewares.use(
`${ quasarConf.build.publicPath }${ quasarConf.pwa.manifestFilename }`,
(_, res) => {
updateCache()
res.setHeader('Content-Type', 'application/json')
res.end(manifestContent)
}
)
server.middlewares.use(
quasarConf.build.publicPath,
serveStatic(serviceWorkerDir, { maxAge: 0 })
)
}
}
}