msw 2.11.0 → 2.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/lib/browser/index.d.mts +0 -3
  2. package/lib/browser/index.d.ts +0 -3
  3. package/lib/browser/index.js +503 -294
  4. package/lib/browser/index.js.map +1 -1
  5. package/lib/browser/index.mjs +503 -294
  6. package/lib/browser/index.mjs.map +1 -1
  7. package/lib/core/{HttpResponse-DiuKTgC7.d.mts → HttpResponse-B4YmE-GJ.d.mts} +1 -1
  8. package/lib/core/{HttpResponse-DlQEvD4q.d.ts → HttpResponse-BbwAqLE_.d.ts} +1 -1
  9. package/lib/core/HttpResponse.d.mts +1 -1
  10. package/lib/core/HttpResponse.d.ts +1 -1
  11. package/lib/core/HttpResponse.js.map +1 -1
  12. package/lib/core/HttpResponse.mjs.map +1 -1
  13. package/lib/core/SetupApi.d.mts +1 -1
  14. package/lib/core/SetupApi.d.ts +1 -1
  15. package/lib/core/getResponse.d.mts +1 -1
  16. package/lib/core/getResponse.d.ts +1 -1
  17. package/lib/core/graphql.d.mts +1 -1
  18. package/lib/core/graphql.d.ts +1 -1
  19. package/lib/core/handlers/GraphQLHandler.d.mts +1 -1
  20. package/lib/core/handlers/GraphQLHandler.d.ts +1 -1
  21. package/lib/core/handlers/GraphQLHandler.js.map +1 -1
  22. package/lib/core/handlers/GraphQLHandler.mjs.map +1 -1
  23. package/lib/core/handlers/HttpHandler.d.mts +1 -1
  24. package/lib/core/handlers/HttpHandler.d.ts +1 -1
  25. package/lib/core/handlers/HttpHandler.js.map +1 -1
  26. package/lib/core/handlers/HttpHandler.mjs.map +1 -1
  27. package/lib/core/handlers/RequestHandler.d.mts +1 -1
  28. package/lib/core/handlers/RequestHandler.d.ts +1 -1
  29. package/lib/core/http.d.mts +1 -1
  30. package/lib/core/http.d.ts +1 -1
  31. package/lib/core/index.d.mts +1 -1
  32. package/lib/core/index.d.ts +1 -1
  33. package/lib/core/passthrough.d.mts +1 -1
  34. package/lib/core/passthrough.d.ts +1 -1
  35. package/lib/core/utils/HttpResponse/decorators.d.mts +1 -1
  36. package/lib/core/utils/HttpResponse/decorators.d.ts +1 -1
  37. package/lib/core/utils/cookieStore.d.mts +10 -2
  38. package/lib/core/utils/cookieStore.d.ts +10 -2
  39. package/lib/core/utils/cookieStore.js +49 -146
  40. package/lib/core/utils/cookieStore.js.map +1 -1
  41. package/lib/core/utils/cookieStore.mjs +53 -136
  42. package/lib/core/utils/cookieStore.mjs.map +1 -1
  43. package/lib/core/utils/executeHandlers.d.mts +1 -1
  44. package/lib/core/utils/executeHandlers.d.ts +1 -1
  45. package/lib/core/utils/handleRequest.d.mts +1 -1
  46. package/lib/core/utils/handleRequest.d.ts +1 -1
  47. package/lib/core/utils/handleRequest.js +1 -1
  48. package/lib/core/utils/handleRequest.js.map +1 -1
  49. package/lib/core/utils/handleRequest.mjs +1 -1
  50. package/lib/core/utils/handleRequest.mjs.map +1 -1
  51. package/lib/core/utils/internal/devUtils.js.map +1 -1
  52. package/lib/core/utils/internal/devUtils.mjs.map +1 -1
  53. package/lib/core/utils/internal/getCallFrame.js +2 -2
  54. package/lib/core/utils/internal/getCallFrame.js.map +1 -1
  55. package/lib/core/utils/internal/getCallFrame.mjs +2 -2
  56. package/lib/core/utils/internal/getCallFrame.mjs.map +1 -1
  57. package/lib/core/utils/internal/isHandlerKind.d.mts +1 -1
  58. package/lib/core/utils/internal/isHandlerKind.d.ts +1 -1
  59. package/lib/core/utils/internal/parseGraphQLRequest.d.mts +1 -1
  60. package/lib/core/utils/internal/parseGraphQLRequest.d.ts +1 -1
  61. package/lib/core/utils/internal/parseGraphQLRequest.js +1 -0
  62. package/lib/core/utils/internal/parseGraphQLRequest.js.map +1 -1
  63. package/lib/core/utils/internal/parseGraphQLRequest.mjs +1 -0
  64. package/lib/core/utils/internal/parseGraphQLRequest.mjs.map +1 -1
  65. package/lib/core/utils/internal/parseMultipartData.d.mts +1 -1
  66. package/lib/core/utils/internal/parseMultipartData.d.ts +1 -1
  67. package/lib/core/utils/internal/requestHandlerUtils.d.mts +1 -1
  68. package/lib/core/utils/internal/requestHandlerUtils.d.ts +1 -1
  69. package/lib/core/utils/matching/matchRequestUrl.js +1 -1
  70. package/lib/core/utils/matching/matchRequestUrl.js.map +1 -1
  71. package/lib/core/utils/matching/matchRequestUrl.mjs +1 -1
  72. package/lib/core/utils/matching/matchRequestUrl.mjs.map +1 -1
  73. package/lib/core/utils/request/getRequestCookies.js +1 -1
  74. package/lib/core/utils/request/getRequestCookies.js.map +1 -1
  75. package/lib/core/utils/request/getRequestCookies.mjs +1 -1
  76. package/lib/core/utils/request/getRequestCookies.mjs.map +1 -1
  77. package/lib/core/utils/request/storeResponseCookies.d.mts +1 -1
  78. package/lib/core/utils/request/storeResponseCookies.d.ts +1 -1
  79. package/lib/core/utils/request/storeResponseCookies.js +2 -2
  80. package/lib/core/utils/request/storeResponseCookies.js.map +1 -1
  81. package/lib/core/utils/request/storeResponseCookies.mjs +2 -2
  82. package/lib/core/utils/request/storeResponseCookies.mjs.map +1 -1
  83. package/lib/core/utils/url/cleanUrl.js +1 -1
  84. package/lib/core/utils/url/cleanUrl.js.map +1 -1
  85. package/lib/core/utils/url/cleanUrl.mjs +1 -1
  86. package/lib/core/utils/url/cleanUrl.mjs.map +1 -1
  87. package/lib/core/utils/url/isAbsoluteUrl.js +1 -1
  88. package/lib/core/utils/url/isAbsoluteUrl.js.map +1 -1
  89. package/lib/core/utils/url/isAbsoluteUrl.mjs +1 -1
  90. package/lib/core/utils/url/isAbsoluteUrl.mjs.map +1 -1
  91. package/lib/core/ws/WebSocketIndexedDBClientStore.js.map +1 -1
  92. package/lib/core/ws/WebSocketIndexedDBClientStore.mjs.map +1 -1
  93. package/lib/core/ws/handleWebSocketEvent.d.mts +1 -1
  94. package/lib/core/ws/handleWebSocketEvent.d.ts +1 -1
  95. package/lib/core/ws/utils/attachWebSocketLogger.js.map +1 -1
  96. package/lib/core/ws/utils/attachWebSocketLogger.mjs.map +1 -1
  97. package/lib/iife/index.js +6885 -16153
  98. package/lib/iife/index.js.map +1 -1
  99. package/lib/mockServiceWorker.js +16 -12
  100. package/lib/node/index.js.map +1 -1
  101. package/lib/node/index.mjs.map +1 -1
  102. package/package.json +22 -15
  103. package/src/browser/setupWorker/glossary.ts +9 -114
  104. package/src/browser/setupWorker/setupWorker.ts +83 -120
  105. package/src/browser/setupWorker/start/createRequestListener.ts +20 -24
  106. package/src/browser/setupWorker/start/createResponseListener.ts +15 -22
  107. package/src/browser/setupWorker/start/createStartHandler.ts +24 -18
  108. package/src/browser/setupWorker/start/utils/enableMocking.ts +18 -21
  109. package/src/browser/setupWorker/start/utils/printStartMessage.ts +0 -2
  110. package/src/browser/utils/checkWorkerIntegrity.ts +22 -14
  111. package/src/browser/utils/workerChannel.ts +146 -0
  112. package/src/core/HttpResponse.ts +3 -3
  113. package/src/core/handlers/GraphQLHandler.test.ts +1 -1
  114. package/src/core/handlers/GraphQLHandler.ts +0 -3
  115. package/src/core/handlers/HttpHandler.ts +0 -2
  116. package/src/core/utils/cookieStore.ts +56 -198
  117. package/src/core/utils/handleRequest.ts +1 -1
  118. package/src/core/utils/internal/devUtils.ts +0 -2
  119. package/src/core/utils/internal/getCallFrame.ts +2 -2
  120. package/src/core/utils/internal/parseGraphQLRequest.ts +1 -0
  121. package/src/core/utils/matching/matchRequestUrl.ts +2 -2
  122. package/src/core/utils/request/getRequestCookies.ts +1 -1
  123. package/src/core/utils/request/onUnhandledRequest.test.ts +1 -1
  124. package/src/core/utils/request/storeResponseCookies.ts +3 -3
  125. package/src/core/utils/request/toPublicUrl.test.ts +1 -1
  126. package/src/core/utils/url/cleanUrl.ts +1 -1
  127. package/src/core/utils/url/isAbsoluteUrl.ts +1 -1
  128. package/src/core/ws/WebSocketClientManager.test.ts +1 -1
  129. package/src/core/ws/WebSocketIndexedDBClientStore.ts +0 -4
  130. package/src/core/ws/utils/attachWebSocketLogger.ts +0 -14
  131. package/src/mockServiceWorker.js +14 -10
  132. package/src/node/SetupServerApi.ts +1 -1
  133. package/src/browser/setupWorker/start/createFallbackStart.ts +0 -21
  134. package/src/browser/setupWorker/start/utils/createMessageChannel.ts +0 -32
  135. package/src/browser/setupWorker/stop/createFallbackStop.ts +0 -11
  136. package/src/browser/setupWorker/stop/createStop.ts +0 -35
@@ -113,7 +113,6 @@ export function attachWebSocketLogger(
113
113
  export function logConnectionOpen(client: WebSocketClientConnection) {
114
114
  const publicUrl = toPublicUrl(client.url)
115
115
 
116
- // eslint-disable-next-line no-console
117
116
  console.groupCollapsed(
118
117
  devUtils.formatMessage(`${getTimestamp()} %c▶%c ${publicUrl}`),
119
118
  `color:${colors.system}`,
@@ -121,7 +120,6 @@ export function logConnectionOpen(client: WebSocketClientConnection) {
121
120
  )
122
121
  // eslint-disable-next-line no-console
123
122
  console.log('Client:', client.socket)
124
- // eslint-disable-next-line no-console
125
123
  console.groupEnd()
126
124
  }
127
125
 
@@ -129,7 +127,6 @@ function logConnectionClose(event: CloseEvent) {
129
127
  const target = event.target as WebSocket
130
128
  const publicUrl = toPublicUrl(target.url)
131
129
 
132
- // eslint-disable-next-line no-console
133
130
  console.groupCollapsed(
134
131
  devUtils.formatMessage(
135
132
  `${getTimestamp({ milliseconds: true })} %c■%c ${publicUrl}`,
@@ -139,7 +136,6 @@ function logConnectionClose(event: CloseEvent) {
139
136
  )
140
137
  // eslint-disable-next-line no-console
141
138
  console.log(event)
142
- // eslint-disable-next-line no-console
143
139
  console.groupEnd()
144
140
  }
145
141
 
@@ -147,7 +143,6 @@ function logClientError(event: Event) {
147
143
  const socket = event.target as WebSocket
148
144
  const publicUrl = toPublicUrl(socket.url)
149
145
 
150
- // eslint-disable-next-line no-console
151
146
  console.groupCollapsed(
152
147
  devUtils.formatMessage(
153
148
  `${getTimestamp({ milliseconds: true })} %c\u00D7%c ${publicUrl}`,
@@ -157,7 +152,6 @@ function logClientError(event: Event) {
157
152
  )
158
153
  // eslint-disable-next-line no-console
159
154
  console.log(event)
160
- // eslint-disable-next-line no-console
161
155
  console.groupEnd()
162
156
  }
163
157
 
@@ -169,7 +163,6 @@ async function logOutgoingClientMessage(event: MessageEvent<WebSocketData>) {
169
163
  const publicData = await getPublicData(event.data)
170
164
  const arrow = event.defaultPrevented ? '⇡' : '⬆'
171
165
 
172
- // eslint-disable-next-line no-console
173
166
  console.groupCollapsed(
174
167
  devUtils.formatMessage(
175
168
  `${getTimestamp({ milliseconds: true })} %c${arrow}%c ${publicData} %c${byteLength}%c`,
@@ -181,7 +174,6 @@ async function logOutgoingClientMessage(event: MessageEvent<WebSocketData>) {
181
174
  )
182
175
  // eslint-disable-next-line no-console
183
176
  console.log(event)
184
- // eslint-disable-next-line no-console
185
177
  console.groupEnd()
186
178
  }
187
179
 
@@ -195,7 +187,6 @@ async function logOutgoingMockedClientMessage(
195
187
  const byteLength = getMessageLength(event.data)
196
188
  const publicData = await getPublicData(event.data)
197
189
 
198
- // eslint-disable-next-line no-console
199
190
  console.groupCollapsed(
200
191
  devUtils.formatMessage(
201
192
  `${getTimestamp({ milliseconds: true })} %c⬆%c ${publicData} %c${byteLength}%c`,
@@ -207,7 +198,6 @@ async function logOutgoingMockedClientMessage(
207
198
  )
208
199
  // eslint-disable-next-line no-console
209
200
  console.log(event)
210
- // eslint-disable-next-line no-console
211
201
  console.groupEnd()
212
202
  }
213
203
 
@@ -221,7 +211,6 @@ async function logIncomingMockedClientMessage(
221
211
  const byteLength = getMessageLength(event.data)
222
212
  const publicData = await getPublicData(event.data)
223
213
 
224
- // eslint-disable-next-line no-console
225
214
  console.groupCollapsed(
226
215
  devUtils.formatMessage(
227
216
  `${getTimestamp({ milliseconds: true })} %c⬇%c ${publicData} %c${byteLength}%c`,
@@ -233,7 +222,6 @@ async function logIncomingMockedClientMessage(
233
222
  )
234
223
  // eslint-disable-next-line no-console
235
224
  console.log(event)
236
- // eslint-disable-next-line no-console
237
225
  console.groupEnd()
238
226
  }
239
227
 
@@ -242,7 +230,6 @@ async function logIncomingServerMessage(event: MessageEvent<WebSocketData>) {
242
230
  const publicData = await getPublicData(event.data)
243
231
  const arrow = event.defaultPrevented ? '⇣' : '⬇'
244
232
 
245
- // eslint-disable-next-line no-console
246
233
  console.groupCollapsed(
247
234
  devUtils.formatMessage(
248
235
  `${getTimestamp({ milliseconds: true })} %c${arrow}%c ${publicData} %c${byteLength}%c`,
@@ -254,6 +241,5 @@ async function logIncomingServerMessage(event: MessageEvent<WebSocketData>) {
254
241
  )
255
242
  // eslint-disable-next-line no-console
256
243
  console.log(event)
257
- // eslint-disable-next-line no-console
258
244
  console.groupEnd()
259
245
  }
@@ -71,11 +71,6 @@ addEventListener('message', async function (event) {
71
71
  break
72
72
  }
73
73
 
74
- case 'MOCK_DEACTIVATE': {
75
- activeClientIds.delete(clientId)
76
- break
77
- }
78
-
79
74
  case 'CLIENT_CLOSED': {
80
75
  activeClientIds.delete(clientId)
81
76
 
@@ -94,6 +89,8 @@ addEventListener('message', async function (event) {
94
89
  })
95
90
 
96
91
  addEventListener('fetch', function (event) {
92
+ const requestInterceptedAt = Date.now()
93
+
97
94
  // Bypass navigation requests.
98
95
  if (event.request.mode === 'navigate') {
99
96
  return
@@ -110,23 +107,29 @@ addEventListener('fetch', function (event) {
110
107
 
111
108
  // Bypass all requests when there are no active clients.
112
109
  // Prevents the self-unregistered worked from handling requests
113
- // after it's been deleted (still remains active until the next reload).
110
+ // after it's been terminated (still remains active until the next reload).
114
111
  if (activeClientIds.size === 0) {
115
112
  return
116
113
  }
117
114
 
118
115
  const requestId = crypto.randomUUID()
119
- event.respondWith(handleRequest(event, requestId))
116
+ event.respondWith(handleRequest(event, requestId, requestInterceptedAt))
120
117
  })
121
118
 
122
119
  /**
123
120
  * @param {FetchEvent} event
124
121
  * @param {string} requestId
122
+ * @param {number} requestInterceptedAt
125
123
  */
126
- async function handleRequest(event, requestId) {
124
+ async function handleRequest(event, requestId, requestInterceptedAt) {
127
125
  const client = await resolveMainClient(event)
128
126
  const requestCloneForEvents = event.request.clone()
129
- const response = await getResponse(event, client, requestId)
127
+ const response = await getResponse(
128
+ event,
129
+ client,
130
+ requestId,
131
+ requestInterceptedAt,
132
+ )
130
133
 
131
134
  // Send back the response clone for the "response:*" life-cycle events.
132
135
  // Ensure MSW is active and ready to handle the message, otherwise
@@ -204,7 +207,7 @@ async function resolveMainClient(event) {
204
207
  * @param {string} requestId
205
208
  * @returns {Promise<Response>}
206
209
  */
207
- async function getResponse(event, client, requestId) {
210
+ async function getResponse(event, client, requestId, requestInterceptedAt) {
208
211
  // Clone the request because it might've been already used
209
212
  // (i.e. its body has been read and sent to the client).
210
213
  const requestClone = event.request.clone()
@@ -255,6 +258,7 @@ async function getResponse(event, client, requestId) {
255
258
  type: 'REQUEST',
256
259
  payload: {
257
260
  id: requestId,
261
+ interceptedAt: requestInterceptedAt,
258
262
  ...serializedRequest,
259
263
  },
260
264
  },
@@ -19,7 +19,7 @@ type RequestHandlersContext = {
19
19
  /**
20
20
  * A handlers controller that utilizes `AsyncLocalStorage` in Node.js
21
21
  * to prevent the request handlers list from being a shared state
22
- * across mutliple tests.
22
+ * across multiple tests.
23
23
  */
24
24
  class AsyncHandlersController implements HandlersController {
25
25
  private rootContext: RequestHandlersContext
@@ -1,21 +0,0 @@
1
- import { createFallbackRequestListener } from './createFallbackRequestListener'
2
- import { SetupWorkerInternalContext, StartHandler } from '../glossary'
3
- import { printStartMessage } from './utils/printStartMessage'
4
-
5
- export function createFallbackStart(
6
- context: SetupWorkerInternalContext,
7
- ): StartHandler {
8
- return async function start(options) {
9
- context.fallbackInterceptor = createFallbackRequestListener(
10
- context,
11
- options,
12
- )
13
-
14
- printStartMessage({
15
- message: 'Mocking enabled (fallback mode).',
16
- quiet: options.quiet,
17
- })
18
-
19
- return undefined
20
- }
21
- }
@@ -1,32 +0,0 @@
1
- import {
2
- StringifiedResponse,
3
- ServiceWorkerIncomingEventsMap,
4
- } from '../../glossary'
5
-
6
- export interface ServiceWorkerMessage<
7
- EventType extends keyof ServiceWorkerIncomingEventsMap,
8
- EventPayload,
9
- > {
10
- type: EventType
11
- payload: EventPayload
12
- }
13
-
14
- interface WorkerChannelEventsMap {
15
- MOCK_RESPONSE: [
16
- data: StringifiedResponse,
17
- transfer?: [ReadableStream<Uint8Array>],
18
- ]
19
- PASSTHROUGH: []
20
- }
21
-
22
- export class WorkerChannel {
23
- constructor(private readonly port: MessagePort) {}
24
-
25
- public postMessage<Event extends keyof WorkerChannelEventsMap>(
26
- event: Event,
27
- ...rest: WorkerChannelEventsMap[Event]
28
- ): void {
29
- const [data, transfer] = rest
30
- this.port.postMessage({ type: event, data }, { transfer })
31
- }
32
- }
@@ -1,11 +0,0 @@
1
- import { SetupWorkerInternalContext, StopHandler } from '../glossary'
2
- import { printStopMessage } from './utils/printStopMessage'
3
-
4
- export function createFallbackStop(
5
- context: SetupWorkerInternalContext,
6
- ): StopHandler {
7
- return function stop() {
8
- context.fallbackInterceptor?.dispose()
9
- printStopMessage({ quiet: context.startOptions?.quiet })
10
- }
11
- }
@@ -1,35 +0,0 @@
1
- import { devUtils } from '~/core/utils/internal/devUtils'
2
- import { SetupWorkerInternalContext, StopHandler } from '../glossary'
3
- import { printStopMessage } from './utils/printStopMessage'
4
-
5
- export const createStop = (
6
- context: SetupWorkerInternalContext,
7
- ): StopHandler => {
8
- return function stop() {
9
- // Warn developers calling "worker.stop()" more times than necessary.
10
- // This likely indicates a mistake in their code.
11
- if (!context.isMockingEnabled) {
12
- devUtils.warn(
13
- 'Found a redundant "worker.stop()" call. Note that stopping the worker while mocking already stopped has no effect. Consider removing this "worker.stop()" call.',
14
- )
15
- return
16
- }
17
-
18
- /**
19
- * Signal the Service Worker to disable mocking for this client.
20
- * Use this an an explicit way to stop the mocking, while preserving
21
- * the worker-client relation. Does not affect the worker's lifecycle.
22
- */
23
- context.workerChannel.send('MOCK_DEACTIVATE')
24
- context.isMockingEnabled = false
25
- window.clearInterval(context.keepAliveInterval)
26
-
27
- // Post the internal stop message on the window
28
- // to let any logic know when the worker has stopped.
29
- // E.g. the WebSocket client manager needs this to know
30
- // when to clear its in-memory clients list.
31
- window.postMessage({ type: 'msw/worker:stop' })
32
-
33
- printStopMessage({ quiet: context.startOptions?.quiet })
34
- }
35
- }