88 * - Please do NOT serve this file on production.
99 */
1010
11- const INTEGRITY_CHECKSUM = " 3d6b9f06410d179a7f7404d4bf4c3c70" ;
12- const activeClientIds = new Set ( ) ;
11+ const INTEGRITY_CHECKSUM = ' 3d6b9f06410d179a7f7404d4bf4c3c70'
12+ const activeClientIds = new Set ( )
1313
14- self . addEventListener ( " install" , function ( ) {
15- self . skipWaiting ( ) ;
16- } ) ;
14+ self . addEventListener ( ' install' , function ( ) {
15+ self . skipWaiting ( )
16+ } )
1717
18- self . addEventListener ( " activate" , function ( event ) {
19- event . waitUntil ( self . clients . claim ( ) ) ;
20- } ) ;
18+ self . addEventListener ( ' activate' , function ( event ) {
19+ event . waitUntil ( self . clients . claim ( ) )
20+ } )
2121
22- self . addEventListener ( " message" , async function ( event ) {
23- const clientId = event . source . id ;
22+ self . addEventListener ( ' message' , async function ( event ) {
23+ const clientId = event . source . id
2424
2525 if ( ! clientId || ! self . clients ) {
26- return ;
26+ return
2727 }
2828
29- const client = await self . clients . get ( clientId ) ;
29+ const client = await self . clients . get ( clientId )
3030
3131 if ( ! client ) {
32- return ;
32+ return
3333 }
3434
3535 const allClients = await self . clients . matchAll ( {
36- type : " window"
37- } ) ;
36+ type : ' window' ,
37+ } )
3838
3939 switch ( event . data ) {
40- case " KEEPALIVE_REQUEST" : {
40+ case ' KEEPALIVE_REQUEST' : {
4141 sendToClient ( client , {
42- type : " KEEPALIVE_RESPONSE"
43- } ) ;
44- break ;
42+ type : ' KEEPALIVE_RESPONSE' ,
43+ } )
44+ break
4545 }
4646
47- case " INTEGRITY_CHECK_REQUEST" : {
47+ case ' INTEGRITY_CHECK_REQUEST' : {
4848 sendToClient ( client , {
49- type : " INTEGRITY_CHECK_RESPONSE" ,
50- payload : INTEGRITY_CHECKSUM
51- } ) ;
52- break ;
49+ type : ' INTEGRITY_CHECK_RESPONSE' ,
50+ payload : INTEGRITY_CHECKSUM ,
51+ } )
52+ break
5353 }
5454
55- case " MOCK_ACTIVATE" : {
56- activeClientIds . add ( clientId ) ;
55+ case ' MOCK_ACTIVATE' : {
56+ activeClientIds . add ( clientId )
5757
5858 sendToClient ( client , {
59- type : " MOCKING_ENABLED" ,
60- payload : true
61- } ) ;
62- break ;
59+ type : ' MOCKING_ENABLED' ,
60+ payload : true ,
61+ } )
62+ break
6363 }
6464
65- case " MOCK_DEACTIVATE" : {
66- activeClientIds . delete ( clientId ) ;
67- break ;
65+ case ' MOCK_DEACTIVATE' : {
66+ activeClientIds . delete ( clientId )
67+ break
6868 }
6969
70- case " CLIENT_CLOSED" : {
71- activeClientIds . delete ( clientId ) ;
70+ case ' CLIENT_CLOSED' : {
71+ activeClientIds . delete ( clientId )
7272
7373 const remainingClients = allClients . filter ( ( client ) => {
74- return client . id !== clientId ;
75- } ) ;
74+ return client . id !== clientId
75+ } )
7676
7777 // Unregister itself when there are no more clients
7878 if ( remainingClients . length === 0 ) {
79- self . registration . unregister ( ) ;
79+ self . registration . unregister ( )
8080 }
8181
82- break ;
82+ break
8383 }
8484 }
85- } ) ;
85+ } )
8686
87- self . addEventListener ( " fetch" , function ( event ) {
88- const { request } = event ;
89- const accept = request . headers . get ( " accept" ) || "" ;
87+ self . addEventListener ( ' fetch' , function ( event ) {
88+ const { request } = event
89+ const accept = request . headers . get ( ' accept' ) || ''
9090
9191 // Bypass server-sent events.
92- if ( accept . includes ( " text/event-stream" ) ) {
93- return ;
92+ if ( accept . includes ( ' text/event-stream' ) ) {
93+ return
9494 }
9595
9696 // Bypass navigation requests.
97- if ( request . mode === " navigate" ) {
98- return ;
97+ if ( request . mode === ' navigate' ) {
98+ return
9999 }
100100
101101 // Opening the DevTools triggers the "only-if-cached" request
102102 // that cannot be handled by the worker. Bypass such requests.
103- if ( request . cache === " only-if-cached" && request . mode !== " same-origin" ) {
104- return ;
103+ if ( request . cache === ' only-if-cached' && request . mode !== ' same-origin' ) {
104+ return
105105 }
106106
107107 // Bypass all requests when there are no active clients.
108108 // Prevents the self-unregistered worked from handling requests
109109 // after it's been deleted (still remains active until the next reload).
110110 if ( activeClientIds . size === 0 ) {
111- return ;
111+ return
112112 }
113113
114114 // Generate unique request ID.
115- const requestId = Math . random ( ) . toString ( 16 ) . slice ( 2 ) ;
115+ const requestId = Math . random ( ) . toString ( 16 ) . slice ( 2 )
116116
117117 event . respondWith (
118118 handleRequest ( event , requestId ) . catch ( ( error ) => {
119- if ( error . name === " NetworkError" ) {
119+ if ( error . name === ' NetworkError' ) {
120120 console . warn (
121121 '[MSW] Successfully emulated a network error for the "%s %s" request.' ,
122122 request . method ,
123- request . url
124- ) ;
125- return ;
123+ request . url ,
124+ )
125+ return
126126 }
127127
128128 // At this point, any exception indicates an issue with the original request/response.
@@ -131,24 +131,24 @@ self.addEventListener("fetch", function (event) {
131131[MSW] Caught an exception from the "%s %s" request (%s). This is probably not a problem with Mock Service Worker. There is likely an additional logging output above.` ,
132132 request . method ,
133133 request . url ,
134- `${ error . name } : ${ error . message } `
135- ) ;
136- } )
137- ) ;
138- } ) ;
134+ `${ error . name } : ${ error . message } ` ,
135+ )
136+ } ) ,
137+ )
138+ } )
139139
140140async function handleRequest ( event , requestId ) {
141- const client = await resolveMainClient ( event ) ;
142- const response = await getResponse ( event , client , requestId ) ;
141+ const client = await resolveMainClient ( event )
142+ const response = await getResponse ( event , client , requestId )
143143
144144 // Send back the response clone for the "response:*" life-cycle events.
145145 // Ensure MSW is active and ready to handle the message, otherwise
146146 // this message will pend indefinitely.
147147 if ( client && activeClientIds . has ( client . id ) ) {
148- ( async function ( ) {
149- const clonedResponse = response . clone ( ) ;
148+ ; ( async function ( ) {
149+ const clonedResponse = response . clone ( )
150150 sendToClient ( client , {
151- type : " RESPONSE" ,
151+ type : ' RESPONSE' ,
152152 payload : {
153153 requestId,
154154 type : clonedResponse . type ,
@@ -158,82 +158,82 @@ async function handleRequest(event, requestId) {
158158 body :
159159 clonedResponse . body === null ? null : await clonedResponse . text ( ) ,
160160 headers : Object . fromEntries ( clonedResponse . headers . entries ( ) ) ,
161- redirected : clonedResponse . redirected
162- }
163- } ) ;
164- } ) ( ) ;
161+ redirected : clonedResponse . redirected ,
162+ } ,
163+ } )
164+ } ) ( )
165165 }
166166
167- return response ;
167+ return response
168168}
169169
170170// Resolve the main client for the given event.
171171// Client that issues a request doesn't necessarily equal the client
172172// that registered the worker. It's with the latter the worker should
173173// communicate with during the response resolving phase.
174174async function resolveMainClient ( event ) {
175- const client = await self . clients . get ( event . clientId ) ;
175+ const client = await self . clients . get ( event . clientId )
176176
177- if ( client ?. frameType === " top-level" ) {
178- return client ;
177+ if ( client ?. frameType === ' top-level' ) {
178+ return client
179179 }
180180
181181 const allClients = await self . clients . matchAll ( {
182- type : " window"
183- } ) ;
182+ type : ' window' ,
183+ } )
184184
185185 return allClients
186186 . filter ( ( client ) => {
187187 // Get only those clients that are currently visible.
188- return client . visibilityState === " visible" ;
188+ return client . visibilityState === ' visible'
189189 } )
190190 . find ( ( client ) => {
191191 // Find the client ID that's recorded in the
192192 // set of clients that have registered the worker.
193- return activeClientIds . has ( client . id ) ;
194- } ) ;
193+ return activeClientIds . has ( client . id )
194+ } )
195195}
196196
197197async function getResponse ( event , client , requestId ) {
198- const { request } = event ;
199- const clonedRequest = request . clone ( ) ;
198+ const { request } = event
199+ const clonedRequest = request . clone ( )
200200
201201 function passthrough ( ) {
202202 // Clone the request because it might've been already used
203203 // (i.e. its body has been read and sent to the client).
204- const headers = Object . fromEntries ( clonedRequest . headers . entries ( ) ) ;
204+ const headers = Object . fromEntries ( clonedRequest . headers . entries ( ) )
205205
206206 // Remove MSW-specific request headers so the bypassed requests
207207 // comply with the server's CORS preflight check.
208208 // Operate with the headers as an object because request "Headers"
209209 // are immutable.
210- delete headers [ " x-msw-bypass" ] ;
210+ delete headers [ ' x-msw-bypass' ]
211211
212- return fetch ( clonedRequest , { headers } ) ;
212+ return fetch ( clonedRequest , { headers } )
213213 }
214214
215215 // Bypass mocking when the client is not active.
216216 if ( ! client ) {
217- return passthrough ( ) ;
217+ return passthrough ( )
218218 }
219219
220220 // Bypass initial page load requests (i.e. static assets).
221221 // The absence of the immediate/parent client in the map of the active clients
222222 // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet
223223 // and is not ready to handle requests.
224224 if ( ! activeClientIds . has ( client . id ) ) {
225- return passthrough ( ) ;
225+ return passthrough ( )
226226 }
227227
228228 // Bypass requests with the explicit bypass header.
229229 // Such requests can be issued by "ctx.fetch()".
230- if ( request . headers . get ( " x-msw-bypass" ) === " true" ) {
231- return passthrough ( ) ;
230+ if ( request . headers . get ( ' x-msw-bypass' ) === ' true' ) {
231+ return passthrough ( )
232232 }
233233
234234 // Notify the client that a request has been intercepted.
235235 const clientMessage = await sendToClient ( client , {
236- type : " REQUEST" ,
236+ type : ' REQUEST' ,
237237 payload : {
238238 id : requestId ,
239239 url : request . url ,
@@ -249,55 +249,55 @@ async function getResponse(event, client, requestId) {
249249 referrerPolicy : request . referrerPolicy ,
250250 body : await request . text ( ) ,
251251 bodyUsed : request . bodyUsed ,
252- keepalive : request . keepalive
253- }
254- } ) ;
252+ keepalive : request . keepalive ,
253+ } ,
254+ } )
255255
256256 switch ( clientMessage . type ) {
257- case " MOCK_RESPONSE" : {
258- return respondWithMock ( clientMessage . data ) ;
257+ case ' MOCK_RESPONSE' : {
258+ return respondWithMock ( clientMessage . data )
259259 }
260260
261- case " MOCK_NOT_FOUND" : {
262- return passthrough ( ) ;
261+ case ' MOCK_NOT_FOUND' : {
262+ return passthrough ( )
263263 }
264264
265- case " NETWORK_ERROR" : {
266- const { name, message } = clientMessage . data ;
267- const networkError = new Error ( message ) ;
268- networkError . name = name ;
265+ case ' NETWORK_ERROR' : {
266+ const { name, message } = clientMessage . data
267+ const networkError = new Error ( message )
268+ networkError . name = name
269269
270270 // Rejecting a "respondWith" promise emulates a network error.
271- throw networkError ;
271+ throw networkError
272272 }
273273 }
274274
275- return passthrough ( ) ;
275+ return passthrough ( )
276276}
277277
278278function sendToClient ( client , message ) {
279279 return new Promise ( ( resolve , reject ) => {
280- const channel = new MessageChannel ( ) ;
280+ const channel = new MessageChannel ( )
281281
282282 channel . port1 . onmessage = ( event ) => {
283283 if ( event . data && event . data . error ) {
284- return reject ( event . data . error ) ;
284+ return reject ( event . data . error )
285285 }
286286
287- resolve ( event . data ) ;
288- } ;
287+ resolve ( event . data )
288+ }
289289
290- client . postMessage ( message , [ channel . port2 ] ) ;
291- } ) ;
290+ client . postMessage ( message , [ channel . port2 ] )
291+ } )
292292}
293293
294294function sleep ( timeMs ) {
295295 return new Promise ( ( resolve ) => {
296- setTimeout ( resolve , timeMs ) ;
297- } ) ;
296+ setTimeout ( resolve , timeMs )
297+ } )
298298}
299299
300300async function respondWithMock ( response ) {
301- await sleep ( response . delay ) ;
302- return new Response ( response . body , response ) ;
301+ await sleep ( response . delay )
302+ return new Response ( response . body , response )
303303}
0 commit comments