@@ -66,17 +66,43 @@ export const mockCaches = () => {
66
66
url : key . url ,
67
67
headers : { }
68
68
}
69
+ let response
69
70
if ( key . headers . has ( 'if-none-match' ) ) {
70
- let makeStrongEtag = key . headers . get ( 'if-none-match' ) . replace ( 'W/' , '' )
71
- Reflect . set ( cacheKey . headers , 'etag' , makeStrongEtag )
71
+ cacheKey . headers = {
72
+ 'etag' : key . headers . get ( 'if-none-match' )
73
+ }
74
+ response = cacheStore . get ( JSON . stringify ( cacheKey ) )
75
+ } else {
76
+ // if client doesn't send if-none-match, we need to iterate through these keys
77
+ // and just test the URL
78
+ const activeCacheKeys : Array < string > = Array . from ( cacheStore . keys ( ) )
79
+ for ( const cacheStoreKey of activeCacheKeys ) {
80
+ if ( JSON . parse ( cacheStoreKey ) . url === key . url ) {
81
+ response = cacheStore . get ( cacheStoreKey )
82
+ }
83
+ }
84
+ }
85
+ if ( response ) {
86
+ // this appears overly verbose, but is necessary to document edge cache behavior
87
+ // The Range request header triggers the response header Content-Range ...
88
+ const range = key . headers . get ( 'range' )
89
+ if ( range ) {
90
+ response . headers . set ( 'content-range' , `bytes ${ range . split ( '=' ) . pop ( ) } /${ response . headers . get ( 'content-length' ) } ` )
91
+ }
92
+ // ... which we are using in this repository to set status 206
93
+ if ( response . headers . has ( 'content-range' ) ) {
94
+ response . status = 206
95
+ } else {
96
+ response . status = 200
97
+ }
72
98
}
73
- return cacheStore . get ( JSON . stringify ( cacheKey ) )
99
+ return response
74
100
} ,
75
101
async put ( key : any , val : Response ) {
76
102
let headers = new Headers ( val . headers )
77
- let url = new URL ( key . url )
78
- let resWithBody = new Response ( val . body , { headers, status : 200 } )
79
- let resNoBody = new Response ( null , { headers , status : 304 } )
103
+ let body = await val . text ( )
104
+ let resp = new Response ( body , { headers } )
105
+ headers . set ( 'content-length' , ( body . length ) . toString ( ) )
80
106
let cacheKey : CacheKey = {
81
107
url : key . url ,
82
108
headers : {
0 commit comments