File tree Expand file tree Collapse file tree 2 files changed +41
-0
lines changed
packages/service-worker-mock Expand file tree Collapse file tree 2 files changed +41
-0
lines changed Original file line number Diff line number Diff line change @@ -63,4 +63,28 @@ describe('Cache', () => {
63
63
64
64
expect ( keys . length ) . toBe ( 1 ) ;
65
65
} ) ;
66
+
67
+ it ( 'throw when the request is not cacheable' , async ( ) => {
68
+ const cache = new Cache ( ) ;
69
+ [
70
+ 'HEAD' ,
71
+ 'POST' ,
72
+ 'PUT' ,
73
+ 'DELETE' ,
74
+ 'CONNECT' ,
75
+ 'OPTIONS' ,
76
+ 'TRACE' ,
77
+ 'PATCH'
78
+ ] . forEach ( ( method ) => {
79
+ cache . put ( new Request ( 'http://example.org' , { method } ) ) . catch ( ( e ) => {
80
+ expect ( e ) . toEqual ( new TypeError ( `'${ method } ' HTTP method is unsupported.` ) ) ;
81
+ } ) ;
82
+ } ) ;
83
+
84
+ expect ( async ( ) => {
85
+ cache . put ( new Request ( 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7' ) ) . catch ( ( e ) => {
86
+ expect ( e ) . toEqual ( new TypeError ( 'Request scheme \'data\' is unsupported' ) ) ;
87
+ } ) ;
88
+ } ) ;
89
+ } ) ;
66
90
} ) ;
Original file line number Diff line number Diff line change 1
1
// https://developer.mozilla.org/en-US/docs/Web/API/Cache
2
+ function validateCacheableRequest ( request ) {
3
+ const requestScheme = new URL ( request . url ) . protocol . replace ( ':' , '' ) ;
4
+ if ( request . method !== 'GET' ) {
5
+ throw new TypeError ( `'${ request . method } ' HTTP method is unsupported.` ) ;
6
+ }
7
+ if ( ! [ 'http' , 'https' ] . includes ( requestScheme ) ) {
8
+ throw new TypeError ( `Request scheme '${ requestScheme } ' is unsupported` ) ;
9
+ }
10
+ return true ;
11
+ }
12
+
2
13
class Cache {
3
14
constructor ( ) {
4
15
this . store = new Map ( ) ;
@@ -40,6 +51,12 @@ class Cache {
40
51
request = new Request ( request ) ;
41
52
// Add relative url as well (non-standard)
42
53
this . store . set ( relativeUrl , { request, response } ) ;
54
+ } else {
55
+ try {
56
+ validateCacheableRequest ( request ) ;
57
+ } catch ( error ) {
58
+ return Promise . reject ( error ) ;
59
+ }
43
60
}
44
61
45
62
this . store . set ( request . url , { request, response } ) ;
You can’t perform that action at this time.
0 commit comments