authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-03-10 18:49:04-07:00
committergravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-03-10 18:49:04-07:00
log82a50da8b1f72da407a0c596a7be6b62e2ead284
tree03015f7c5c3b9f1c01d2f4509c7df6af51951775
parent7ddcb239c5ce4031653afbc404a860ccf5606549

revert formatting on mockServiceWorker.js


1 files changed, 106 insertions(+), 93 deletions(-)

apps/web/public/mockServiceWorker.js+106-93
......@@ -7,111 +7,114 @@
77 * - Please do NOT modify this file.
88 */
99
10const PACKAGE_VERSION = "2.12.10";
11const INTEGRITY_CHECKSUM = "4db4a41e972cec1b64cc569c66952d82";
12const IS_MOCKED_RESPONSE = Symbol("isMockedResponse");
13const activeClientIds = new Set();
10const PACKAGE_VERSION = '2.12.9'
11const INTEGRITY_CHECKSUM = '4db4a41e972cec1b64cc569c66952d82'
12const IS_MOCKED_RESPONSE = Symbol('isMockedResponse')
13const activeClientIds = new Set()
1414
15addEventListener("install", function () {
16 self.skipWaiting();
17});
15addEventListener('install', function () {
16 self.skipWaiting()
17})
1818
19addEventListener("activate", function (event) {
20 event.waitUntil(self.clients.claim());
21});
19addEventListener('activate', function (event) {
20 event.waitUntil(self.clients.claim())
21})
2222
23addEventListener("message", async function (event) {
24 const clientId = Reflect.get(event.source || {}, "id");
23addEventListener('message', async function (event) {
24 const clientId = Reflect.get(event.source || {}, 'id')
2525
2626 if (!clientId || !self.clients) {
27 return;
27 return
2828 }
2929
30 const client = await self.clients.get(clientId);
30 const client = await self.clients.get(clientId)
3131
3232 if (!client) {
33 return;
33 return
3434 }
3535
3636 const allClients = await self.clients.matchAll({
37 type: "window",
38 });
37 type: 'window',
38 })
3939
4040 switch (event.data) {
41 case "KEEPALIVE_REQUEST": {
41 case 'KEEPALIVE_REQUEST': {
4242 sendToClient(client, {
43 type: "KEEPALIVE_RESPONSE",
44 });
45 break;
43 type: 'KEEPALIVE_RESPONSE',
44 })
45 break
4646 }
4747
48 case "INTEGRITY_CHECK_REQUEST": {
48 case 'INTEGRITY_CHECK_REQUEST': {
4949 sendToClient(client, {
50 type: "INTEGRITY_CHECK_RESPONSE",
50 type: 'INTEGRITY_CHECK_RESPONSE',
5151 payload: {
5252 packageVersion: PACKAGE_VERSION,
5353 checksum: INTEGRITY_CHECKSUM,
5454 },
55 });
56 break;
55 })
56 break
5757 }
5858
59 case "MOCK_ACTIVATE": {
60 activeClientIds.add(clientId);
59 case 'MOCK_ACTIVATE': {
60 activeClientIds.add(clientId)
6161
6262 sendToClient(client, {
63 type: "MOCKING_ENABLED",
63 type: 'MOCKING_ENABLED',
6464 payload: {
6565 client: {
6666 id: client.id,
6767 frameType: client.frameType,
6868 },
6969 },
70 });
71 break;
70 })
71 break
7272 }
7373
74 case "CLIENT_CLOSED": {
75 activeClientIds.delete(clientId);
74 case 'CLIENT_CLOSED': {
75 activeClientIds.delete(clientId)
7676
7777 const remainingClients = allClients.filter((client) => {
78 return client.id !== clientId;
79 });
78 return client.id !== clientId
79 })
8080
8181 // Unregister itself when there are no more clients
8282 if (remainingClients.length === 0) {
83 self.registration.unregister();
83 self.registration.unregister()
8484 }
8585
86 break;
86 break
8787 }
8888 }
89});
89})
9090
91addEventListener("fetch", function (event) {
92 const requestInterceptedAt = Date.now();
91addEventListener('fetch', function (event) {
92 const requestInterceptedAt = Date.now()
9393
9494 // Bypass navigation requests.
95 if (event.request.mode === "navigate") {
96 return;
95 if (event.request.mode === 'navigate') {
96 return
9797 }
9898
9999 // Opening the DevTools triggers the "only-if-cached" request
100100 // that cannot be handled by the worker. Bypass such requests.
101 if (event.request.cache === "only-if-cached" && event.request.mode !== "same-origin") {
102 return;
101 if (
102 event.request.cache === 'only-if-cached' &&
103 event.request.mode !== 'same-origin'
104 ) {
105 return
103106 }
104107
105108 // Bypass all requests when there are no active clients.
106109 // Prevents the self-unregistered worked from handling requests
107110 // after it's been terminated (still remains active until the next reload).
108111 if (activeClientIds.size === 0) {
109 return;
112 return
110113 }
111114
112 const requestId = crypto.randomUUID();
113 event.respondWith(handleRequest(event, requestId, requestInterceptedAt));
114});
115 const requestId = crypto.randomUUID()
116 event.respondWith(handleRequest(event, requestId, requestInterceptedAt))
117})
115118
116119/**
117120 * @param {FetchEvent} event
......@@ -119,23 +122,28 @@ addEventListener("fetch", function (event) {
119122 * @param {number} requestInterceptedAt
120123 */
121124async function handleRequest(event, requestId, requestInterceptedAt) {
122 const client = await resolveMainClient(event);
123 const requestCloneForEvents = event.request.clone();
124 const response = await getResponse(event, client, requestId, requestInterceptedAt);
125 const client = await resolveMainClient(event)
126 const requestCloneForEvents = event.request.clone()
127 const response = await getResponse(
128 event,
129 client,
130 requestId,
131 requestInterceptedAt,
132 )
125133
126134 // Send back the response clone for the "response:*" life-cycle events.
127135 // Ensure MSW is active and ready to handle the message, otherwise
128136 // this message will pend indefinitely.
129137 if (client && activeClientIds.has(client.id)) {
130 const serializedRequest = await serializeRequest(requestCloneForEvents);
138 const serializedRequest = await serializeRequest(requestCloneForEvents)
131139
132140 // Clone the response so both the client and the library could consume it.
133 const responseClone = response.clone();
141 const responseClone = response.clone()
134142
135143 sendToClient(
136144 client,
137145 {
138 type: "RESPONSE",
146 type: 'RESPONSE',
139147 payload: {
140148 isMockedResponse: IS_MOCKED_RESPONSE in response,
141149 request: {
......@@ -152,10 +160,10 @@ async function handleRequest(event, requestId, requestInterceptedAt) {
152160 },
153161 },
154162 responseClone.body ? [serializedRequest.body, responseClone.body] : [],
155 );
163 )
156164 }
157165
158 return response;
166 return response
159167}
160168
161169/**
......@@ -167,30 +175,30 @@ async function handleRequest(event, requestId, requestInterceptedAt) {
167175 * @returns {Promise<Client | undefined>}
168176 */
169177async function resolveMainClient(event) {
170 const client = await self.clients.get(event.clientId);
178 const client = await self.clients.get(event.clientId)
171179
172180 if (activeClientIds.has(event.clientId)) {
173 return client;
181 return client
174182 }
175183
176 if (client?.frameType === "top-level") {
177 return client;
184 if (client?.frameType === 'top-level') {
185 return client
178186 }
179187
180188 const allClients = await self.clients.matchAll({
181 type: "window",
182 });
189 type: 'window',
190 })
183191
184192 return allClients
185193 .filter((client) => {
186194 // Get only those clients that are currently visible.
187 return client.visibilityState === "visible";
195 return client.visibilityState === 'visible'
188196 })
189197 .find((client) => {
190198 // Find the client ID that's recorded in the
191199 // set of clients that have registered the worker.
192 return activeClientIds.has(client.id);
193 });
200 return activeClientIds.has(client.id)
201 })
194202}
195203
196204/**
......@@ -203,34 +211,36 @@ async function resolveMainClient(event) {
203211async function getResponse(event, client, requestId, requestInterceptedAt) {
204212 // Clone the request because it might've been already used
205213 // (i.e. its body has been read and sent to the client).
206 const requestClone = event.request.clone();
214 const requestClone = event.request.clone()
207215
208216 function passthrough() {
209217 // Cast the request headers to a new Headers instance
210218 // so the headers can be manipulated with.
211 const headers = new Headers(requestClone.headers);
219 const headers = new Headers(requestClone.headers)
212220
213221 // Remove the "accept" header value that marked this request as passthrough.
214222 // This prevents request alteration and also keeps it compliant with the
215223 // user-defined CORS policies.
216 const acceptHeader = headers.get("accept");
224 const acceptHeader = headers.get('accept')
217225 if (acceptHeader) {
218 const values = acceptHeader.split(",").map((value) => value.trim());
219 const filteredValues = values.filter((value) => value !== "msw/passthrough");
226 const values = acceptHeader.split(',').map((value) => value.trim())
227 const filteredValues = values.filter(
228 (value) => value !== 'msw/passthrough',
229 )
220230
221231 if (filteredValues.length > 0) {
222 headers.set("accept", filteredValues.join(", "));
232 headers.set('accept', filteredValues.join(', '))
223233 } else {
224 headers.delete("accept");
234 headers.delete('accept')
225235 }
226236 }
227237
228 return fetch(requestClone, { headers });
238 return fetch(requestClone, { headers })
229239 }
230240
231241 // Bypass mocking when the client is not active.
232242 if (!client) {
233 return passthrough();
243 return passthrough()
234244 }
235245
236246 // Bypass initial page load requests (i.e. static assets).
......@@ -238,15 +248,15 @@ async function getResponse(event, client, requestId, requestInterceptedAt) {
238248 // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet
239249 // and is not ready to handle requests.
240250 if (!activeClientIds.has(client.id)) {
241 return passthrough();
251 return passthrough()
242252 }
243253
244254 // Notify the client that a request has been intercepted.
245 const serializedRequest = await serializeRequest(event.request);
255 const serializedRequest = await serializeRequest(event.request)
246256 const clientMessage = await sendToClient(
247257 client,
248258 {
249 type: "REQUEST",
259 type: 'REQUEST',
250260 payload: {
251261 id: requestId,
252262 interceptedAt: requestInterceptedAt,
......@@ -254,19 +264,19 @@ async function getResponse(event, client, requestId, requestInterceptedAt) {
254264 },
255265 },
256266 [serializedRequest.body],
257 );
267 )
258268
259269 switch (clientMessage.type) {
260 case "MOCK_RESPONSE": {
261 return respondWithMock(clientMessage.data);
270 case 'MOCK_RESPONSE': {
271 return respondWithMock(clientMessage.data)
262272 }
263273
264 case "PASSTHROUGH": {
265 return passthrough();
274 case 'PASSTHROUGH': {
275 return passthrough()
266276 }
267277 }
268278
269 return passthrough();
279 return passthrough()
270280}
271281
272282/**
......@@ -277,18 +287,21 @@ async function getResponse(event, client, requestId, requestInterceptedAt) {
277287 */
278288function sendToClient(client, message, transferrables = []) {
279289 return new Promise((resolve, reject) => {
280 const channel = new MessageChannel();
290 const channel = new MessageChannel()
281291
282292 channel.port1.onmessage = (event) => {
283293 if (event.data && event.data.error) {
284 return reject(event.data.error);
294 return reject(event.data.error)
285295 }
286296
287 resolve(event.data);
288 };
297 resolve(event.data)
298 }
289299
290 client.postMessage(message, [channel.port2, ...transferrables.filter(Boolean)]);
291 });
300 client.postMessage(message, [
301 channel.port2,
302 ...transferrables.filter(Boolean),
303 ])
304 })
292305}
293306
294307/**
......@@ -301,17 +314,17 @@ function respondWithMock(response) {
301314 // instance will have status code set to 0. Since it's not possible to create
302315 // a Response instance with status code 0, handle that use-case separately.
303316 if (response.status === 0) {
304 return Response.error();
317 return Response.error()
305318 }
306319
307 const mockedResponse = new Response(response.body, response);
320 const mockedResponse = new Response(response.body, response)
308321
309322 Reflect.defineProperty(mockedResponse, IS_MOCKED_RESPONSE, {
310323 value: true,
311324 enumerable: true,
312 });
325 })
313326
314 return mockedResponse;
327 return mockedResponse
315328}
316329
317330/**
......@@ -332,5 +345,5 @@ async function serializeRequest(request) {
332345 referrerPolicy: request.referrerPolicy,
333346 body: await request.arrayBuffer(),
334347 keepalive: request.keepalive,
335 };
348 }
336349}