@@ -162,36 +162,45 @@ self.addEventListener('activate', event => {
162162 // console.log('sw activate');
163163 self . clients . claim ( ) ;
164164} ) ;
165- self . addEventListener ( 'fetch' , event => {
165+
166+ self . addEventListener ( 'fetch' , event => event . respondWith (
167+
168+ ( async ( ) => {
166169 // console.log('got request', event.request.url);
167170
168- const permanentRedirect = permanentRedirects [ event . request . url ] ;
169- if ( permanentRedirect ) {
170- event . respondWith (
171- fetch ( permanentRedirect )
172- ) ;
173- return ;
174- }
171+ let u = event . request . url ;
172+ const dst = redirects . get ( u ) ;
173+ if ( dst ) {
174+ redirects . delete ( event . request . url ) ;
175175
176- if ( event . request . method === 'HEAD' && event . request . url === event . request . referrer ) {
177- event . respondWith ( new Response ( '' , {
176+ const res = new Response ( dst , {
177+ headers : {
178+ 'Content-Type' : 'text/html' ,
179+ } ,
180+ } ) ;
181+ return _rewriteResExt ( u , u , res . headers , res ) ;
182+ } else if ( event . request . method === 'HEAD' && event . request . url === event . request . referrer ) {
183+ return new Response ( '' , {
178184 headers : {
179185 'Content-Type' : 'text/html' ,
180186 'Date' : new Date ( ) . toUTCString ( ) ,
181187 } ,
182- } ) ) ;
183- } else {
184- let u = event . request . url ;
185- const dst = redirects . get ( u ) ;
186- if ( dst ) {
187- redirects . delete ( event . request . url ) ;
188-
189- const res = new Response ( dst , {
190- headers : {
191- 'Content-Type' : 'text/html' ,
192- } ,
193- } ) ;
194- event . respondWith ( _rewriteResExt ( u , u , res . headers , res ) ) ;
188+ } ) ;
189+ }
190+
191+ if ( ! cache ) {
192+ cache = await caches . open ( cacheName ) ;
193+ }
194+
195+ const cachedRes = await cache . match ( event . request ) ;
196+ if ( cachedRes ) {
197+ return cachedRes ;
198+ }
199+
200+ const res = await ( ( ) => {
201+ const permanentRedirect = permanentRedirects [ event . request . url ] ;
202+ if ( permanentRedirect ) {
203+ return fetch ( permanentRedirect ) ;
195204 } else {
196205 let match = u . match ( / ^ [ a - z ] + : \/ \/ [ a - z A - Z 0 - 9 \- \. : ] + ( .+ ) $ / ) ;
197206 if ( match ) {
@@ -200,51 +209,49 @@ self.addEventListener('fetch', event => {
200209 const originalUrl = match2 [ 1 ] ;
201210 const permanentRedirect = permanentRedirects [ originalUrl ] ;
202211 if ( permanentRedirect ) {
203- event . respondWith (
204- fetch ( permanentRedirect )
205- ) ;
212+ return fetch ( permanentRedirect ) ;
206213 } else {
207214 const proxyUrl = _rewriteUrlToProxy ( originalUrl ) ;
208- event . respondWith (
209- fetch ( proxyUrl ) . then ( res => {
210- res . originalUrl = originalUrl ;
211- return _rewriteRes ( res ) ;
212- } )
213- ) ;
215+ return fetch ( proxyUrl ) . then ( res => {
216+ res . originalUrl = originalUrl ;
217+ return _rewriteRes ( res ) ;
218+ } ) ;
214219 }
215220 } else if ( match2 = match [ 1 ] . match ( / ^ \/ .d \/ ( .+ ) $ / ) ) {
216- event . respondWith ( fetch ( match2 [ 1 ] ) ) ;
221+ return fetch ( match2 [ 1 ] ) ;
217222 } else if ( match2 = match [ 1 ] . match ( / ^ \/ .f \/ ( .+ ) $ / ) ) {
218- event . respondWith (
219- _resolveFollowUrl ( match2 [ 1 ] )
220- . then ( u => new Response ( u , {
221- headers : {
222- 'Content-Type' : 'text/plain' ,
223- } ,
224- } ) )
225- ) ;
223+ return _resolveFollowUrl ( match2 [ 1 ] )
224+ . then ( u => new Response ( u , {
225+ headers : {
226+ 'Content-Type' : 'text/plain' ,
227+ } ,
228+ } ) ) ;
226229 } else {
227- event . respondWith (
228- fetch ( event . request )
229- . then ( res => {
230- if ( res . type === 'opaque' ) {
231- const proxyUrl = _rewriteUrlToProxy ( u ) ;
232- return fetch ( proxyUrl ) . then ( res => {
233- res . originalUrl = u ;
234- return _rewriteRes ( res ) ;
235- } )
236- } else {
230+ return fetch ( event . request )
231+ . then ( res => {
232+ if ( res . type === 'opaque' ) {
233+ const proxyUrl = _rewriteUrlToProxy ( u ) ;
234+ return fetch ( proxyUrl ) . then ( res => {
237235 res . originalUrl = u ;
238236 return _rewriteRes ( res ) ;
239- }
240- } )
241- ) ;
237+ } )
238+ } else {
239+ res . originalUrl = u ;
240+ return _rewriteRes ( res ) ;
241+ }
242+ } ) ;
242243 }
243244 } else {
244- event . respondWith ( new Response ( 'invalid url' , {
245+ return Promise . resolve ( new Response ( 'invalid url' , {
245246 status : 500 ,
246247 } ) ) ;
247248 }
248249 }
250+ } ) ( ) ;
251+ if ( event . request . method !== 'HEAD' ) {
252+ cache . put ( event . request , res . clone ( ) ) ;
249253 }
250- } ) ;
254+ return res ;
255+ } ) ( )
256+
257+ ) ) ;
0 commit comments