msw 2.11.1 → 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.
- package/lib/browser/index.d.mts +0 -3
- package/lib/browser/index.d.ts +0 -3
- package/lib/browser/index.js +503 -294
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/index.mjs +503 -294
- package/lib/browser/index.mjs.map +1 -1
- package/lib/core/handlers/GraphQLHandler.js.map +1 -1
- package/lib/core/handlers/GraphQLHandler.mjs.map +1 -1
- package/lib/core/handlers/HttpHandler.js.map +1 -1
- package/lib/core/handlers/HttpHandler.mjs.map +1 -1
- package/lib/core/utils/internal/devUtils.js.map +1 -1
- package/lib/core/utils/internal/devUtils.mjs.map +1 -1
- package/lib/core/utils/internal/getCallFrame.js +2 -2
- package/lib/core/utils/internal/getCallFrame.js.map +1 -1
- package/lib/core/utils/internal/getCallFrame.mjs +2 -2
- package/lib/core/utils/internal/getCallFrame.mjs.map +1 -1
- package/lib/core/utils/internal/parseGraphQLRequest.js +1 -0
- package/lib/core/utils/internal/parseGraphQLRequest.js.map +1 -1
- package/lib/core/utils/internal/parseGraphQLRequest.mjs +1 -0
- package/lib/core/utils/internal/parseGraphQLRequest.mjs.map +1 -1
- package/lib/core/utils/matching/matchRequestUrl.js +1 -1
- package/lib/core/utils/matching/matchRequestUrl.js.map +1 -1
- package/lib/core/utils/matching/matchRequestUrl.mjs +1 -1
- package/lib/core/utils/matching/matchRequestUrl.mjs.map +1 -1
- package/lib/core/utils/url/cleanUrl.js +1 -1
- package/lib/core/utils/url/cleanUrl.js.map +1 -1
- package/lib/core/utils/url/cleanUrl.mjs +1 -1
- package/lib/core/utils/url/cleanUrl.mjs.map +1 -1
- package/lib/core/utils/url/isAbsoluteUrl.js +1 -1
- package/lib/core/utils/url/isAbsoluteUrl.js.map +1 -1
- package/lib/core/utils/url/isAbsoluteUrl.mjs +1 -1
- package/lib/core/utils/url/isAbsoluteUrl.mjs.map +1 -1
- package/lib/core/ws/WebSocketIndexedDBClientStore.js.map +1 -1
- package/lib/core/ws/WebSocketIndexedDBClientStore.mjs.map +1 -1
- package/lib/core/ws/utils/attachWebSocketLogger.js.map +1 -1
- package/lib/core/ws/utils/attachWebSocketLogger.mjs.map +1 -1
- package/lib/iife/index.js +2494 -2281
- package/lib/iife/index.js.map +1 -1
- package/lib/mockServiceWorker.js +16 -12
- package/package.json +20 -13
- package/src/browser/setupWorker/glossary.ts +9 -114
- package/src/browser/setupWorker/setupWorker.ts +82 -119
- package/src/browser/setupWorker/start/createRequestListener.ts +20 -24
- package/src/browser/setupWorker/start/createResponseListener.ts +15 -22
- package/src/browser/setupWorker/start/createStartHandler.ts +24 -18
- package/src/browser/setupWorker/start/utils/enableMocking.ts +18 -21
- package/src/browser/setupWorker/start/utils/printStartMessage.ts +0 -2
- package/src/browser/utils/checkWorkerIntegrity.ts +22 -14
- package/src/browser/utils/workerChannel.ts +146 -0
- package/src/core/handlers/GraphQLHandler.ts +0 -3
- package/src/core/handlers/HttpHandler.ts +0 -2
- package/src/core/utils/internal/devUtils.ts +0 -2
- package/src/core/utils/internal/getCallFrame.ts +2 -2
- package/src/core/utils/internal/parseGraphQLRequest.ts +1 -0
- package/src/core/utils/matching/matchRequestUrl.ts +2 -2
- package/src/core/utils/request/onUnhandledRequest.test.ts +1 -1
- package/src/core/utils/url/cleanUrl.ts +1 -1
- package/src/core/utils/url/isAbsoluteUrl.ts +1 -1
- package/src/core/ws/WebSocketIndexedDBClientStore.ts +0 -4
- package/src/core/ws/utils/attachWebSocketLogger.ts +0 -14
- package/src/mockServiceWorker.js +14 -10
- package/src/browser/setupWorker/start/createFallbackStart.ts +0 -21
- package/src/browser/setupWorker/start/utils/createMessageChannel.ts +0 -32
- package/src/browser/setupWorker/stop/createFallbackStop.ts +0 -11
- 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
|
}
|
package/src/mockServiceWorker.js
CHANGED
|
@@ -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
|
|
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(
|
|
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
|
},
|
|
@@ -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
|
-
}
|