Skip to content

Commit 355f6ca

Browse files
authored
Merge pull request nullstack#358 from nullstack/next
Next
2 parents d4cf443 + 1f3ecca commit 355f6ca

File tree

8 files changed

+41
-24
lines changed

8 files changed

+41
-24
lines changed

client/worker.js

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,25 +34,34 @@ const workerProxyHandler = {
3434
const proxy = new Proxy(worker, workerProxyHandler)
3535

3636
async function register() {
37-
if ('serviceWorker' in navigator) {
38-
const request = `/service-worker.js`
39-
try {
40-
proxy.registration = await navigator.serviceWorker.register(request, { scope: '/' })
41-
if (environment.development) {
42-
proxy.registration.unregister()
43-
}
44-
} catch (error) {
45-
console.error(error)
46-
}
37+
if (!environment.production) return
38+
const request = `/service-worker.js`
39+
try {
40+
proxy.registration = await navigator.serviceWorker.register(request, { scope: '/' })
41+
} catch (error) {
42+
console.error(error)
43+
}
44+
}
45+
46+
async function unregister() {
47+
if (!environment.development) return
48+
const registrations = await navigator.serviceWorker.getRegistrations()
49+
for (let registration of registrations) {
50+
window.location.reload()
51+
console.log("SW FOUND", { registration })
52+
registration.unregister();
4753
}
4854
}
4955

5056
if (worker.enabled) {
51-
window.addEventListener('beforeinstallprompt', function (event) {
52-
event.preventDefault()
53-
proxy.installation = event
54-
})
55-
register()
57+
if ('serviceWorker' in navigator) {
58+
window.addEventListener('beforeinstallprompt', async function (event) {
59+
event.preventDefault()
60+
proxy.installation = event
61+
unregister()
62+
})
63+
register()
64+
}
5665
}
5766

5867
window.addEventListener('online', () => {

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "nullstack",
3-
"version": "0.19.1",
3+
"version": "0.19.2",
44
"description": "Feature-Driven Full Stack JavaScript Components",
55
"main": "./types/index.d.ts",
66
"author": "Mortaro",

server/hmr.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* eslint-disable nullstack/no-undef */
2-
import { existsSync, open } from 'fs'
2+
import { existsSync, open, writeFileSync } from 'fs'
33
import path from 'path'
44
import logger from '../builders/logger'
55

@@ -54,12 +54,17 @@ export default function hmr(server) {
5454

5555
const instance = webpackDevMiddleware(compiler, webpackDevMiddlewareOptions)
5656

57-
instance.waitUntilValid(() => {
57+
instance.waitUntilValid(async () => {
5858
progress.stop()
5959
console.info(
6060
'\x1b[36m%s\x1b[0m',
6161
`\n 🚀 Your application is ready at http://${process.env.NULLSTACK_PROJECT_DOMAIN}:${process.env.NULLSTACK_SERVER_PORT || process.env.PORT || 3000}\n`,
6262
)
63+
if (disk) {
64+
const content = await server.prerender('/')
65+
const target = `${process.cwd()}/.development/index.html`
66+
writeFileSync(target, content)
67+
}
6368
})
6469

6570
server.use(instance)

server/template.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,15 @@ export default function ({ head, body, nextMeta, context, instances }) {
6565
${project.viewport ? `<meta name="viewport" content="${project.viewport}">` : ''}
6666
<link rel="stylesheet" href="${cdn(`/client.css?fingerprint=${environment.key}`)}" integrity="${
6767
integrities['client.css'] || ''
68-
}" crossorigin="anonymous">
68+
}">
6969
${page.schema ? `<script type="application/ld+json">${JSON.stringify(page.schema)}</script>` : ''}
7070
${project.icons['180'] ? `<link rel="apple-touch-icon" sizes="180x180" href="${cdn(project.icons['180'])}">` : ''}
7171
<meta name="msapplication-TileColor" content="${project.backgroundColor || project.color}">
7272
<meta name="nullstack" content="${encodeURIComponent(sanitizeString(JSON.stringify(state)))}">
7373
${head.split('<!--#-->').join('')}
7474
<script src="${cdn(`/client.js?fingerprint=${environment.key}`)}" integrity="${
7575
integrities['client.js'] || ''
76-
}" defer crossorigin="anonymous"></script>
76+
}" defer></script>
7777
</head>
7878
<body ${renderAttributes(nextMeta.body)}>
7979
${environment.mode === 'spa' ? '<div id="application"></div>' : body}

server/worker.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import settings from './settings'
2121

2222
const worker = {}
2323

24-
worker.enabled = environment.production
24+
worker.enabled = true
2525
worker.fetching = false
2626
worker.preload = []
2727
worker.staleWhileRevalidate = []

webpack/devtool.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
function devtool(options) {
22
if (options.environment === 'development') {
3+
if (options.disk) {
4+
return 'inline-cheap-module-source-map'
5+
}
36
return 'eval-cheap-module-source-map'
47
} else {
58
return 'hidden-source-map'

webpack/entry.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ function client(options) {
55
return options.entry
66
}
77
return [
8-
'webpack-hot-middleware/client?log=false&path=/nullstack/hmr&noInfo=true&quiet=true&timeout=1000&reload=true',
8+
`${require.resolve('webpack-hot-middleware/client')}?log=false&path=/nullstack/hmr&noInfo=true&quiet=true&timeout=1000&reload=true`,
99
path.posix.join(options.configFolder, 'shared', 'accept.js'),
1010
options.entry
1111
]
@@ -30,4 +30,4 @@ function entry(options) {
3030
}
3131
}
3232

33-
module.exports = entry
33+
module.exports = entry

workers/activate.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ function activate(event) {
44
const cacheNames = await caches.keys()
55
const cachesToDelete = cacheNames.filter((cacheName) => cacheName !== self.context.environment.key)
66
await Promise.all(cachesToDelete.map((cacheName) => caches.delete(cacheName)))
7-
if (self.registration.navigationPreload) {
7+
if ('navigationPreload' in self.registration) {
88
await self.registration.navigationPreload.enable()
99
}
1010
self.clients.claim()

0 commit comments

Comments
 (0)