@@ -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+
4247self.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
5863function 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);
0 commit comments