@@ -162,36 +162,45 @@ self.addEventListener('activate', event => {
162
162
// console.log('sw activate');
163
163
self . clients . claim ( ) ;
164
164
} ) ;
165
- self . addEventListener ( 'fetch' , event => {
165
+
166
+ self . addEventListener ( 'fetch' , event => event . respondWith (
167
+
168
+ ( async ( ) => {
166
169
// console.log('got request', event.request.url);
167
170
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 ) ;
175
175
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 ( '' , {
178
184
headers : {
179
185
'Content-Type' : 'text/html' ,
180
186
'Date' : new Date ( ) . toUTCString ( ) ,
181
187
} ,
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 ) ;
195
204
} else {
196
205
let match = u . match ( / ^ [ a - z ] + : \/ \/ [ a - z A - Z 0 - 9 \- \. : ] + ( .+ ) $ / ) ;
197
206
if ( match ) {
@@ -200,51 +209,49 @@ self.addEventListener('fetch', event => {
200
209
const originalUrl = match2 [ 1 ] ;
201
210
const permanentRedirect = permanentRedirects [ originalUrl ] ;
202
211
if ( permanentRedirect ) {
203
- event . respondWith (
204
- fetch ( permanentRedirect )
205
- ) ;
212
+ return fetch ( permanentRedirect ) ;
206
213
} else {
207
214
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
+ } ) ;
214
219
}
215
220
} else if ( match2 = match [ 1 ] . match ( / ^ \/ .d \/ ( .+ ) $ / ) ) {
216
- event . respondWith ( fetch ( match2 [ 1 ] ) ) ;
221
+ return fetch ( match2 [ 1 ] ) ;
217
222
} 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
+ } ) ) ;
226
229
} 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 => {
237
235
res . originalUrl = u ;
238
236
return _rewriteRes ( res ) ;
239
- }
240
- } )
241
- ) ;
237
+ } )
238
+ } else {
239
+ res . originalUrl = u ;
240
+ return _rewriteRes ( res ) ;
241
+ }
242
+ } ) ;
242
243
}
243
244
} else {
244
- event . respondWith ( new Response ( 'invalid url' , {
245
+ return Promise . resolve ( new Response ( 'invalid url' , {
245
246
status : 500 ,
246
247
} ) ) ;
247
248
}
248
249
}
250
+ } ) ( ) ;
251
+ if ( event . request . method !== 'HEAD' ) {
252
+ cache . put ( event . request , res . clone ( ) ) ;
249
253
}
250
- } ) ;
254
+ return res ;
255
+ } ) ( )
256
+
257
+ ) ) ;
0 commit comments