diff --git a/client/worker.js b/client/worker.js index c96008f6..a0521b71 100644 --- a/client/worker.js +++ b/client/worker.js @@ -34,25 +34,34 @@ const workerProxyHandler = { const proxy = new Proxy(worker, workerProxyHandler) async function register() { - if ('serviceWorker' in navigator) { - const request = `/service-worker.js` - try { - proxy.registration = await navigator.serviceWorker.register(request, { scope: '/' }) - if (environment.development) { - proxy.registration.unregister() - } - } catch (error) { - console.error(error) - } + if (!environment.production) return + const request = `/service-worker.js` + try { + proxy.registration = await navigator.serviceWorker.register(request, { scope: '/' }) + } catch (error) { + console.error(error) + } +} + +async function unregister() { + if (!environment.development) return + const registrations = await navigator.serviceWorker.getRegistrations() + for (let registration of registrations) { + window.location.reload() + console.log("SW FOUND", { registration }) + registration.unregister(); } } if (worker.enabled) { - window.addEventListener('beforeinstallprompt', function (event) { - event.preventDefault() - proxy.installation = event - }) - register() + if ('serviceWorker' in navigator) { + window.addEventListener('beforeinstallprompt', async function (event) { + event.preventDefault() + proxy.installation = event + unregister() + }) + register() + } } window.addEventListener('online', () => { diff --git a/package.json b/package.json index 0dd21508..bf3c77ed 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nullstack", - "version": "0.19.1", + "version": "0.19.2", "description": "Feature-Driven Full Stack JavaScript Components", "main": "./types/index.d.ts", "author": "Mortaro", diff --git a/server/hmr.js b/server/hmr.js index 7cdf6213..35369eb8 100644 --- a/server/hmr.js +++ b/server/hmr.js @@ -1,5 +1,5 @@ /* eslint-disable nullstack/no-undef */ -import { existsSync, open } from 'fs' +import { existsSync, open, writeFileSync } from 'fs' import path from 'path' import logger from '../builders/logger' @@ -54,12 +54,17 @@ export default function hmr(server) { const instance = webpackDevMiddleware(compiler, webpackDevMiddlewareOptions) - instance.waitUntilValid(() => { + instance.waitUntilValid(async () => { progress.stop() console.info( '\x1b[36m%s\x1b[0m', `\n 🚀 Your application is ready at http://${process.env.NULLSTACK_PROJECT_DOMAIN}:${process.env.NULLSTACK_SERVER_PORT || process.env.PORT || 3000}\n`, ) + if (disk) { + const content = await server.prerender('/') + const target = `${process.cwd()}/.development/index.html` + writeFileSync(target, content) + } }) server.use(instance) diff --git a/server/template.js b/server/template.js index 88a954b4..f81b8f32 100644 --- a/server/template.js +++ b/server/template.js @@ -65,7 +65,7 @@ export default function ({ head, body, nextMeta, context, instances }) { ${project.viewport ? `` : ''} + }"> ${page.schema ? `` : ''} ${project.icons['180'] ? `` : ''} @@ -73,7 +73,7 @@ export default function ({ head, body, nextMeta, context, instances }) { ${head.split('').join('')} + }" defer>
${environment.mode === 'spa' ? '' : body} diff --git a/server/worker.js b/server/worker.js index 662122ba..9426a352 100644 --- a/server/worker.js +++ b/server/worker.js @@ -21,7 +21,7 @@ import settings from './settings' const worker = {} -worker.enabled = environment.production +worker.enabled = true worker.fetching = false worker.preload = [] worker.staleWhileRevalidate = [] diff --git a/webpack/devtool.js b/webpack/devtool.js index 234071ce..761d5104 100644 --- a/webpack/devtool.js +++ b/webpack/devtool.js @@ -1,5 +1,8 @@ function devtool(options) { if (options.environment === 'development') { + if (options.disk) { + return 'inline-cheap-module-source-map' + } return 'eval-cheap-module-source-map' } else { return 'hidden-source-map' diff --git a/webpack/entry.js b/webpack/entry.js index afca360d..a1ebaefe 100644 --- a/webpack/entry.js +++ b/webpack/entry.js @@ -5,7 +5,7 @@ function client(options) { return options.entry } return [ - 'webpack-hot-middleware/client?log=false&path=/nullstack/hmr&noInfo=true&quiet=true&timeout=1000&reload=true', + `${require.resolve('webpack-hot-middleware/client')}?log=false&path=/nullstack/hmr&noInfo=true&quiet=true&timeout=1000&reload=true`, path.posix.join(options.configFolder, 'shared', 'accept.js'), options.entry ] @@ -30,4 +30,4 @@ function entry(options) { } } -module.exports = entry \ No newline at end of file +module.exports = entry diff --git a/workers/activate.js b/workers/activate.js index 870ed44b..6dbea9bd 100644 --- a/workers/activate.js +++ b/workers/activate.js @@ -4,7 +4,7 @@ function activate(event) { const cacheNames = await caches.keys() const cachesToDelete = cacheNames.filter((cacheName) => cacheName !== self.context.environment.key) await Promise.all(cachesToDelete.map((cacheName) => caches.delete(cacheName))) - if (self.registration.navigationPreload) { + if ('navigationPreload' in self.registration) { await self.registration.navigationPreload.enable() } self.clients.claim()