Skip to content
39 changes: 24 additions & 15 deletions client/worker.js
Original file line number Diff line number Diff line change
Expand Up @@ -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', () => {
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
9 changes: 7 additions & 2 deletions server/hmr.js
Original file line number Diff line number Diff line change
@@ -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'

Expand Down Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions server/template.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,15 @@ export default function ({ head, body, nextMeta, context, instances }) {
${project.viewport ? `<meta name="viewport" content="${project.viewport}">` : ''}
<link rel="stylesheet" href="${cdn(`/client.css?fingerprint=${environment.key}`)}" integrity="${
integrities['client.css'] || ''
}" crossorigin="anonymous">
}">
${page.schema ? `<script type="application/ld+json">${JSON.stringify(page.schema)}</script>` : ''}
${project.icons['180'] ? `<link rel="apple-touch-icon" sizes="180x180" href="${cdn(project.icons['180'])}">` : ''}
<meta name="msapplication-TileColor" content="${project.backgroundColor || project.color}">
<meta name="nullstack" content="${encodeURIComponent(sanitizeString(JSON.stringify(state)))}">
${head.split('<!--#-->').join('')}
<script src="${cdn(`/client.js?fingerprint=${environment.key}`)}" integrity="${
integrities['client.js'] || ''
}" defer crossorigin="anonymous"></script>
}" defer></script>
</head>
<body ${renderAttributes(nextMeta.body)}>
${environment.mode === 'spa' ? '<div id="application"></div>' : body}
Expand Down
2 changes: 1 addition & 1 deletion server/worker.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import settings from './settings'

const worker = {}

worker.enabled = environment.production
worker.enabled = true
worker.fetching = false
worker.preload = []
worker.staleWhileRevalidate = []
Expand Down
3 changes: 3 additions & 0 deletions webpack/devtool.js
Original file line number Diff line number Diff line change
@@ -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'
Expand Down
4 changes: 2 additions & 2 deletions webpack/entry.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
]
Expand All @@ -30,4 +30,4 @@ function entry(options) {
}
}

module.exports = entry
module.exports = entry
2 changes: 1 addition & 1 deletion workers/activate.js
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down