From d699ca610183861ca06266413875101ab3e5c889 Mon Sep 17 00:00:00 2001 From: Christian Mortaro Date: Sat, 10 Jun 2023 07:41:38 -0300 Subject: [PATCH 1/7] :wrench: force unregister of service worker on dev --- client/worker.js | 39 ++++++++++++++++++++++++--------------- server/worker.js | 2 +- workers/activate.js | 2 +- 3 files changed, 26 insertions(+), 17 deletions(-) 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/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/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() From 4b469077ed6a1bec928990ea1a0506a51f3f041a Mon Sep 17 00:00:00 2001 From: Luiz Felipe Moureau Date: Mon, 12 Jun 2023 19:44:17 -0300 Subject: [PATCH 2/7] :bug: fix: removed crossorigin attribute from client.js script tag and client.css to fix issues on serverless --- server/template.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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} From e36811a3e64b8c7686363157f5a427787aebd66b Mon Sep 17 00:00:00 2001 From: HallexCosta Date: Tue, 13 Jun 2023 10:41:33 -0300 Subject: [PATCH 3/7] =?UTF-8?q?=F0=9F=90=9B=20fix=20hot=20reload=20when=20?= =?UTF-8?q?install=20deps=20with=20pnpm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webpack/entry.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 From 6e7207a0e34794ce31d39d0f12e554ee18ca1cc2 Mon Sep 17 00:00:00 2001 From: Christian Mortaro Date: Tue, 13 Jun 2023 11:13:22 -0300 Subject: [PATCH 4/7] :bug: copy index to disk --- server/hmr.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) 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) From 0e23e59fe10776a61cc803075b1cad4f0d1bdbe1 Mon Sep 17 00:00:00 2001 From: Christian Mortaro Date: Tue, 13 Jun 2023 11:42:41 -0300 Subject: [PATCH 5/7] :wrench: skip eval devtool for disk --- webpack/devtool.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/webpack/devtool.js b/webpack/devtool.js index 234071ce..8f9f148f 100644 --- a/webpack/devtool.js +++ b/webpack/devtool.js @@ -1,5 +1,8 @@ function devtool(options) { if (options.environment === 'development') { + if (disk) { + return 'inline-cheap-module-source-map' + } return 'eval-cheap-module-source-map' } else { return 'hidden-source-map' From c4f242a87e29976ad297ebdd9c13dce3e881c8d3 Mon Sep 17 00:00:00 2001 From: Christian Mortaro Date: Tue, 13 Jun 2023 11:52:46 -0300 Subject: [PATCH 6/7] :wrench: skip eval devtool for disk --- webpack/devtool.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webpack/devtool.js b/webpack/devtool.js index 8f9f148f..761d5104 100644 --- a/webpack/devtool.js +++ b/webpack/devtool.js @@ -1,6 +1,6 @@ function devtool(options) { if (options.environment === 'development') { - if (disk) { + if (options.disk) { return 'inline-cheap-module-source-map' } return 'eval-cheap-module-source-map' From 1f3ecca3a906ea4385ccf3e132737925fa6cda27 Mon Sep 17 00:00:00 2001 From: Christian Mortaro Date: Tue, 13 Jun 2023 11:53:13 -0300 Subject: [PATCH 7/7] :bookmark: version 0.19.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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",