Skip to content

Commit dc7ddb6

Browse files
committed
fix: service worker auto install
1 parent 6df58c5 commit dc7ddb6

File tree

2 files changed

+16
-9
lines changed

2 files changed

+16
-9
lines changed

src/app/src/service-worker.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,14 @@ const IMAGE_EXTENSIONS = [
1919
'gif',
2020
]
2121
22-
function extractImagePath(pathname) {
22+
function extractImagePath(url) {
23+
const pathname = url.pathname;
2324
if (pathname.startsWith('/_ipx/_/')) {
2425
return pathname.replace('/_ipx/_', '')
2526
}
2627
2728
if (pathname.startsWith('/_vercel/image')) {
28-
try {
29-
return new URL(pathname, 'http://localhost').searchParams.get('url') || null
30-
} catch (error) {
31-
return null
32-
}
29+
return url.searchParams.get('url') || null
3330
}
3431
3532
if (IMAGE_EXTENSIONS.includes(pathname.split('.').pop())) {
@@ -39,6 +36,14 @@ function extractImagePath(pathname) {
3936
return null
4037
}
4138
39+
self.addEventListener('install', event => {
40+
self.skipWaiting()
41+
})
42+
43+
self.addEventListener('activate', event => {
44+
event.waitUntil(self.clients.claim())
45+
})
46+
4247
self.addEventListener('fetch', event => {
4348
const url = new URL(event.request.url);
4449
const isSameDomain = url.origin === self.location.origin;
@@ -47,7 +52,7 @@ self.addEventListener('fetch', event => {
4752
return event.respondWith(fetch(event.request));
4853
}
4954
50-
const imageUrl = extractImagePath(url.pathname);
55+
const imageUrl = extractImagePath(url);
5156
if (imageUrl) {
5257
return event.respondWith(fetchFromIndexedDB(event, imageUrl));
5358
}
@@ -56,7 +61,7 @@ self.addEventListener('fetch', event => {
5661
})
5762
5863
function fetchFromIndexedDB(event, url) {
59-
const dbKey = ['public-assets:', url.replace(/^\\//g, ':')].join('')
64+
const dbKey = ['public-assets:', url.replace(/^\\//g, '').replace(/\\//g, ':')].join('')
6065
return getData(dbKey).then(data => {
6166
if (!data) {
6267
return fetch(event.request);

src/module/src/runtime/host.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import { collections } from '#content/preview'
1313
import { publicAssetsStorage } from '#build/studio-public-assets'
1414
import { useHostMeta } from './composables/useMeta'
1515

16+
const serviceWorkerVersion = 'v0.0.1'
17+
1618
function getSidebarWidth(): number {
1719
let sidebarWidth = 440
1820
// Try to get width from localStorage if available
@@ -291,7 +293,7 @@ export function useStudioHost(user: StudioUser, repository: Repository): StudioH
291293
isMounted.value = true
292294
}).then(() => {
293295
if ('serviceWorker' in navigator) {
294-
navigator.serviceWorker.register('/sw.js')
296+
navigator.serviceWorker.register(`/sw.js?${serviceWorkerVersion}`)
295297
}
296298
return meta.fetch()
297299
})

0 commit comments

Comments
 (0)