msw 2.12.14 → 2.13.0
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 +29 -19
- package/lib/browser/index.d.ts +29 -19
- package/lib/browser/index.js +1763 -1321
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/index.mjs +1769 -1321
- package/lib/browser/index.mjs.map +1 -1
- package/lib/core/{HttpResponse-Dj6ibgFJ.d.ts → HttpResponse-CksOMVAa.d.ts} +5 -5
- package/lib/core/{HttpResponse-Be4eT3x6.d.mts → HttpResponse-DlRR1D-f.d.mts} +5 -5
- package/lib/core/HttpResponse.d.mts +1 -1
- package/lib/core/HttpResponse.d.ts +1 -1
- package/lib/core/experimental/compat.d.mts +17 -0
- package/lib/core/experimental/compat.d.ts +17 -0
- package/lib/core/experimental/compat.js +54 -0
- package/lib/core/experimental/compat.js.map +1 -0
- package/lib/core/experimental/compat.mjs +36 -0
- package/lib/core/experimental/compat.mjs.map +1 -0
- package/lib/core/experimental/define-network.d.mts +75 -0
- package/lib/core/experimental/define-network.d.ts +75 -0
- package/lib/core/experimental/define-network.js +124 -0
- package/lib/core/experimental/define-network.js.map +1 -0
- package/lib/core/experimental/define-network.mjs +107 -0
- package/lib/core/experimental/define-network.mjs.map +1 -0
- package/lib/core/experimental/frames/http-frame.d.mts +77 -0
- package/lib/core/experimental/frames/http-frame.d.ts +77 -0
- package/lib/core/experimental/frames/http-frame.js +194 -0
- package/lib/core/experimental/frames/http-frame.js.map +1 -0
- package/lib/core/experimental/frames/http-frame.mjs +176 -0
- package/lib/core/experimental/frames/http-frame.mjs.map +1 -0
- package/lib/core/experimental/frames/network-frame.d.mts +12 -0
- package/lib/core/experimental/frames/network-frame.d.ts +12 -0
- package/lib/core/{handlers/common.js → experimental/frames/network-frame.js} +19 -3
- package/lib/core/experimental/frames/network-frame.js.map +1 -0
- package/lib/core/experimental/frames/network-frame.mjs +13 -0
- package/lib/core/experimental/frames/network-frame.mjs.map +1 -0
- package/lib/core/experimental/frames/websocket-frame.d.mts +55 -0
- package/lib/core/experimental/frames/websocket-frame.d.ts +55 -0
- package/lib/core/experimental/frames/websocket-frame.js +129 -0
- package/lib/core/experimental/frames/websocket-frame.js.map +1 -0
- package/lib/core/experimental/frames/websocket-frame.mjs +116 -0
- package/lib/core/experimental/frames/websocket-frame.mjs.map +1 -0
- package/lib/core/experimental/handlers-controller.d.mts +35 -0
- package/lib/core/experimental/handlers-controller.d.ts +35 -0
- package/lib/core/experimental/handlers-controller.js +121 -0
- package/lib/core/experimental/handlers-controller.js.map +1 -0
- package/lib/core/experimental/handlers-controller.mjs +101 -0
- package/lib/core/experimental/handlers-controller.mjs.map +1 -0
- package/lib/core/experimental/index.d.mts +17 -0
- package/lib/core/experimental/index.d.ts +17 -0
- package/lib/core/experimental/index.js +36 -0
- package/lib/core/experimental/index.js.map +1 -0
- package/lib/core/experimental/index.mjs +20 -0
- package/lib/core/experimental/index.mjs.map +1 -0
- package/lib/core/experimental/on-unhandled-frame.d.mts +12 -0
- package/lib/core/experimental/on-unhandled-frame.d.ts +12 -0
- package/lib/core/experimental/on-unhandled-frame.js +90 -0
- package/lib/core/experimental/on-unhandled-frame.js.map +1 -0
- package/lib/core/experimental/on-unhandled-frame.mjs +70 -0
- package/lib/core/experimental/on-unhandled-frame.mjs.map +1 -0
- package/lib/core/experimental/request-utils.d.mts +12 -0
- package/lib/core/experimental/request-utils.d.ts +12 -0
- package/lib/core/experimental/request-utils.js +50 -0
- package/lib/core/experimental/request-utils.js.map +1 -0
- package/lib/core/experimental/request-utils.mjs +30 -0
- package/lib/core/experimental/request-utils.mjs.map +1 -0
- package/lib/core/experimental/setup-api.d.mts +33 -0
- package/lib/core/experimental/setup-api.d.ts +33 -0
- package/lib/core/experimental/setup-api.js +61 -0
- package/lib/core/experimental/setup-api.js.map +1 -0
- package/lib/core/experimental/setup-api.mjs +43 -0
- package/lib/core/experimental/setup-api.mjs.map +1 -0
- package/lib/core/experimental/sources/interceptor-source.d.mts +28 -0
- package/lib/core/experimental/sources/interceptor-source.d.ts +28 -0
- package/lib/core/experimental/sources/interceptor-source.js +142 -0
- package/lib/core/experimental/sources/interceptor-source.js.map +1 -0
- package/lib/core/experimental/sources/interceptor-source.mjs +124 -0
- package/lib/core/experimental/sources/interceptor-source.mjs.map +1 -0
- package/lib/core/experimental/sources/network-source.d.mts +31 -0
- package/lib/core/experimental/sources/network-source.d.ts +31 -0
- package/lib/core/experimental/sources/network-source.js +50 -0
- package/lib/core/experimental/sources/network-source.js.map +1 -0
- package/lib/core/experimental/sources/network-source.mjs +30 -0
- package/lib/core/experimental/sources/network-source.mjs.map +1 -0
- package/lib/core/getResponse.d.mts +1 -1
- package/lib/core/getResponse.d.ts +1 -1
- package/lib/core/graphql.d.mts +1 -1
- package/lib/core/graphql.d.ts +1 -1
- package/lib/core/handlers/GraphQLHandler.d.mts +1 -1
- package/lib/core/handlers/GraphQLHandler.d.ts +1 -1
- package/lib/core/handlers/HttpHandler.d.mts +1 -1
- package/lib/core/handlers/HttpHandler.d.ts +1 -1
- package/lib/core/handlers/RequestHandler.d.mts +1 -1
- package/lib/core/handlers/RequestHandler.d.ts +1 -1
- package/lib/core/handlers/RequestHandler.js +5 -6
- package/lib/core/handlers/RequestHandler.js.map +1 -1
- package/lib/core/handlers/RequestHandler.mjs +5 -6
- package/lib/core/handlers/RequestHandler.mjs.map +1 -1
- package/lib/core/handlers/WebSocketHandler.d.mts +8 -4
- package/lib/core/handlers/WebSocketHandler.d.ts +8 -4
- package/lib/core/handlers/WebSocketHandler.js +18 -5
- package/lib/core/handlers/WebSocketHandler.js.map +1 -1
- package/lib/core/handlers/WebSocketHandler.mjs +18 -5
- package/lib/core/handlers/WebSocketHandler.mjs.map +1 -1
- package/lib/core/http.d.mts +1 -1
- package/lib/core/http.d.ts +1 -1
- package/lib/core/index.d.mts +7 -12
- package/lib/core/index.d.ts +7 -12
- package/lib/core/index.js +2 -2
- package/lib/core/index.js.map +1 -1
- package/lib/core/index.mjs +1 -1
- package/lib/core/index.mjs.map +1 -1
- package/lib/core/network-frame-B7A0ggXE.d.mts +56 -0
- package/lib/core/network-frame-usYiHS0K.d.ts +56 -0
- package/lib/core/passthrough.d.mts +1 -1
- package/lib/core/passthrough.d.ts +1 -1
- package/lib/core/sharedOptions.d.mts +6 -2
- package/lib/core/sharedOptions.d.ts +6 -2
- package/lib/core/sharedOptions.js.map +1 -1
- package/lib/core/sse.d.mts +1 -1
- package/lib/core/sse.d.ts +1 -1
- package/lib/core/sse.js.map +1 -1
- package/lib/core/sse.mjs.map +1 -1
- package/lib/core/utils/HttpResponse/decorators.d.mts +1 -1
- package/lib/core/utils/HttpResponse/decorators.d.ts +1 -1
- package/lib/core/utils/cookieStore.js.map +1 -1
- package/lib/core/utils/cookieStore.mjs.map +1 -1
- package/lib/core/utils/executeHandlers.d.mts +1 -1
- package/lib/core/utils/executeHandlers.d.ts +1 -1
- package/lib/core/utils/handleRequest.d.mts +2 -1
- package/lib/core/utils/handleRequest.d.ts +2 -1
- package/lib/core/utils/internal/isHandlerKind.d.mts +3 -3
- package/lib/core/utils/internal/isHandlerKind.d.ts +3 -3
- package/lib/core/utils/internal/isHandlerKind.js +2 -1
- package/lib/core/utils/internal/isHandlerKind.js.map +1 -1
- package/lib/core/utils/internal/isHandlerKind.mjs +2 -1
- package/lib/core/utils/internal/isHandlerKind.mjs.map +1 -1
- package/lib/core/utils/internal/parseGraphQLRequest.d.mts +1 -1
- package/lib/core/utils/internal/parseGraphQLRequest.d.ts +1 -1
- package/lib/core/utils/internal/parseMultipartData.d.mts +1 -1
- package/lib/core/utils/internal/parseMultipartData.d.ts +1 -1
- package/lib/core/utils/internal/requestHandlerUtils.d.mts +1 -1
- package/lib/core/utils/internal/requestHandlerUtils.d.ts +1 -1
- package/lib/core/utils/request/onUnhandledRequest.d.mts +2 -2
- package/lib/core/utils/request/onUnhandledRequest.d.ts +2 -2
- package/lib/core/utils/request/onUnhandledRequest.js.map +1 -1
- package/lib/core/utils/request/onUnhandledRequest.mjs.map +1 -1
- package/lib/core/ws/handleWebSocketEvent.d.mts +1 -1
- package/lib/core/ws/handleWebSocketEvent.d.ts +1 -1
- package/lib/core/ws/handleWebSocketEvent.js +1 -1
- package/lib/core/ws/handleWebSocketEvent.js.map +1 -1
- package/lib/core/ws/handleWebSocketEvent.mjs +1 -1
- package/lib/core/ws/handleWebSocketEvent.mjs.map +1 -1
- package/lib/core/ws/utils/attachWebSocketLogger.d.mts +1 -1
- package/lib/core/ws/utils/attachWebSocketLogger.d.ts +1 -1
- package/lib/core/ws/utils/attachWebSocketLogger.js +39 -10
- package/lib/core/ws/utils/attachWebSocketLogger.js.map +1 -1
- package/lib/core/ws/utils/attachWebSocketLogger.mjs +39 -10
- package/lib/core/ws/utils/attachWebSocketLogger.mjs.map +1 -1
- package/lib/core/ws.d.mts +3 -3
- package/lib/core/ws.d.ts +3 -3
- package/lib/core/ws.js.map +1 -1
- package/lib/core/ws.mjs.map +1 -1
- package/lib/iife/index.js +2021 -1432
- package/lib/iife/index.js.map +1 -1
- package/lib/mockServiceWorker.js +1 -1
- package/lib/native/index.d.mts +21 -29
- package/lib/native/index.d.ts +21 -29
- package/lib/native/index.js +48 -116
- package/lib/native/index.js.map +1 -1
- package/lib/native/index.mjs +51 -118
- package/lib/native/index.mjs.map +1 -1
- package/lib/node/index.d.mts +55 -33
- package/lib/node/index.d.ts +55 -33
- package/lib/node/index.js +152 -154
- package/lib/node/index.js.map +1 -1
- package/lib/node/index.mjs +156 -156
- package/lib/node/index.mjs.map +1 -1
- package/package.json +10 -2
- package/src/browser/{setupWorker/glossary.ts → glossary.ts} +16 -33
- package/src/browser/index.ts +2 -3
- package/src/browser/{setupWorker/setupWorker.node.test.ts → setup-worker.node.test.ts} +2 -4
- package/src/browser/setup-worker.ts +148 -0
- package/src/browser/sources/fallback-http-source.ts +56 -0
- package/src/browser/sources/service-worker-source.ts +455 -0
- package/src/browser/tsconfig.browser.json +7 -2
- package/src/browser/utils/deserializeRequest.ts +1 -1
- package/src/browser/{setupWorker/start/utils/getWorkerByRegistration.ts → utils/get-worker-by-registration.ts} +3 -1
- package/src/browser/{setupWorker/start/utils/getWorkerInstance.ts → utils/get-worker-instance.ts} +4 -4
- package/src/browser/utils/pruneGetRequestBody.test.ts +1 -3
- package/src/browser/utils/pruneGetRequestBody.ts +1 -1
- package/src/browser/utils/validate-worker-scope.ts +19 -0
- package/src/browser/utils/workerChannel.ts +2 -2
- package/src/core/experimental/compat.ts +50 -0
- package/src/core/experimental/define-network.test.ts +124 -0
- package/src/core/experimental/define-network.ts +215 -0
- package/src/core/experimental/frames/http-frame.test.ts +360 -0
- package/src/core/experimental/frames/http-frame.ts +271 -0
- package/src/core/experimental/frames/network-frame.ts +64 -0
- package/src/core/experimental/frames/websocket-frame.test.ts +280 -0
- package/src/core/experimental/frames/websocket-frame.ts +188 -0
- package/src/core/experimental/handlers-controller.test.ts +198 -0
- package/src/core/experimental/handlers-controller.ts +145 -0
- package/src/core/experimental/index.ts +16 -0
- package/src/core/experimental/on-unhandled-frame.test.ts +360 -0
- package/src/core/experimental/on-unhandled-frame.ts +110 -0
- package/src/core/experimental/request-utils.test.ts +70 -0
- package/src/core/experimental/request-utils.ts +39 -0
- package/src/core/experimental/setup-api.ts +59 -0
- package/src/core/experimental/sources/interceptor-source.ts +185 -0
- package/src/core/experimental/sources/network-source.test.ts +74 -0
- package/src/core/experimental/sources/network-source.ts +56 -0
- package/src/core/handlers/RequestHandler.ts +9 -10
- package/src/core/handlers/WebSocketHandler.ts +27 -11
- package/src/core/index.ts +3 -7
- package/src/core/sharedOptions.ts +9 -4
- package/src/core/sse.ts +1 -1
- package/src/core/utils/cookieStore.ts +2 -1
- package/src/core/utils/internal/isHandlerKind.test.ts +20 -22
- package/src/core/utils/internal/isHandlerKind.ts +5 -9
- package/src/core/utils/request/onUnhandledRequest.ts +2 -2
- package/src/core/ws/WebSocketClientManager.test.ts +2 -10
- package/src/core/ws/handleWebSocketEvent.ts +5 -1
- package/src/core/ws/utils/attachWebSocketLogger.ts +43 -11
- package/src/core/ws.test.ts +1 -3
- package/src/core/ws.ts +6 -6
- package/src/iife/index.ts +1 -1
- package/src/native/index.ts +34 -11
- package/src/node/async-handlers-controller.test.ts +50 -0
- package/src/node/async-handlers-controller.ts +69 -0
- package/src/node/glossary.ts +19 -18
- package/src/node/index.ts +6 -2
- package/src/node/setup-server-common.ts +100 -0
- package/src/node/setup-server.ts +91 -0
- package/src/tsconfig.core.json +8 -0
- package/src/tsconfig.node.json +8 -3
- package/src/tsconfig.src.json +0 -2
- package/src/tsconfig.worker.json +2 -1
- package/lib/core/SetupApi.d.mts +0 -44
- package/lib/core/SetupApi.d.ts +0 -44
- package/lib/core/SetupApi.js +0 -112
- package/lib/core/SetupApi.js.map +0 -1
- package/lib/core/SetupApi.mjs +0 -92
- package/lib/core/SetupApi.mjs.map +0 -1
- package/lib/core/handlers/common.d.mts +0 -3
- package/lib/core/handlers/common.d.ts +0 -3
- package/lib/core/handlers/common.js.map +0 -1
- package/lib/core/handlers/common.mjs +0 -1
- package/lib/core/handlers/common.mjs.map +0 -1
- package/src/browser/setupWorker/setupWorker.ts +0 -184
- package/src/browser/setupWorker/start/createFallbackRequestListener.ts +0 -71
- package/src/browser/setupWorker/start/createRequestListener.ts +0 -138
- package/src/browser/setupWorker/start/createResponseListener.ts +0 -57
- package/src/browser/setupWorker/start/createStartHandler.ts +0 -137
- package/src/browser/setupWorker/start/utils/enableMocking.ts +0 -30
- package/src/browser/setupWorker/start/utils/prepareStartHandler.test.ts +0 -59
- package/src/browser/setupWorker/start/utils/prepareStartHandler.ts +0 -44
- package/src/browser/setupWorker/start/utils/printStartMessage.test.ts +0 -84
- package/src/browser/setupWorker/start/utils/printStartMessage.ts +0 -51
- package/src/browser/setupWorker/start/utils/validateWorkerScope.ts +0 -18
- package/src/browser/setupWorker/stop/utils/printStopMessage.test.ts +0 -26
- package/src/browser/setupWorker/stop/utils/printStopMessage.ts +0 -13
- package/src/browser/utils/checkWorkerIntegrity.ts +0 -42
- package/src/core/SetupApi.ts +0 -127
- package/src/core/handlers/common.ts +0 -1
- package/src/node/SetupServerApi.ts +0 -87
- package/src/node/SetupServerCommonApi.ts +0 -169
- package/src/node/setupServer.ts +0 -15
|
@@ -5,14 +5,12 @@ import { WebSocketHandler } from '../../handlers/WebSocketHandler'
|
|
|
5
5
|
import { isHandlerKind } from './isHandlerKind'
|
|
6
6
|
|
|
7
7
|
it('returns true if expected a request handler and given a request handler', () => {
|
|
8
|
-
expect(
|
|
9
|
-
|
|
10
|
-
)
|
|
8
|
+
expect(isHandlerKind('request')(new HttpHandler('*', '*', () => {}))).toBe(
|
|
9
|
+
true,
|
|
10
|
+
)
|
|
11
11
|
|
|
12
12
|
expect(
|
|
13
|
-
isHandlerKind('
|
|
14
|
-
new GraphQLHandler('all', '*', '*', () => {}),
|
|
15
|
-
),
|
|
13
|
+
isHandlerKind('request')(new GraphQLHandler('all', '*', '*', () => {})),
|
|
16
14
|
).toBe(true)
|
|
17
15
|
})
|
|
18
16
|
|
|
@@ -25,24 +23,24 @@ it('returns true if expected a request handler and given a custom request handle
|
|
|
25
23
|
log() {}
|
|
26
24
|
}
|
|
27
25
|
|
|
28
|
-
expect(isHandlerKind('
|
|
26
|
+
expect(isHandlerKind('request')(new MyHandler())).toBe(true)
|
|
29
27
|
})
|
|
30
28
|
|
|
31
29
|
it('returns false if expected a request handler but given event handler', () => {
|
|
32
|
-
expect(isHandlerKind('
|
|
30
|
+
expect(isHandlerKind('request')(new WebSocketHandler('*'))).toBe(false)
|
|
33
31
|
})
|
|
34
32
|
|
|
35
33
|
it('returns false if expected a request handler but given arbitrary object', () => {
|
|
36
|
-
expect(isHandlerKind('
|
|
37
|
-
expect(isHandlerKind('
|
|
38
|
-
expect(isHandlerKind('
|
|
39
|
-
expect(isHandlerKind('
|
|
40
|
-
expect(isHandlerKind('
|
|
41
|
-
expect(isHandlerKind('
|
|
34
|
+
expect(isHandlerKind('request')(undefined)).toBe(false)
|
|
35
|
+
expect(isHandlerKind('request')(null)).toBe(false)
|
|
36
|
+
expect(isHandlerKind('request')({})).toBe(false)
|
|
37
|
+
expect(isHandlerKind('request')([])).toBe(false)
|
|
38
|
+
expect(isHandlerKind('request')(123)).toBe(false)
|
|
39
|
+
expect(isHandlerKind('request')('hello')).toBe(false)
|
|
42
40
|
})
|
|
43
41
|
|
|
44
42
|
it('returns true if expected an event handler and given an event handler', () => {
|
|
45
|
-
expect(isHandlerKind('
|
|
43
|
+
expect(isHandlerKind('websocket')(new WebSocketHandler('*'))).toBe(true)
|
|
46
44
|
})
|
|
47
45
|
|
|
48
46
|
it('returns true if expected an event handler and given a custom event handler', () => {
|
|
@@ -51,14 +49,14 @@ it('returns true if expected an event handler and given a custom event handler',
|
|
|
51
49
|
super('*')
|
|
52
50
|
}
|
|
53
51
|
}
|
|
54
|
-
expect(isHandlerKind('
|
|
52
|
+
expect(isHandlerKind('websocket')(new MyEventHandler())).toBe(true)
|
|
55
53
|
})
|
|
56
54
|
|
|
57
55
|
it('returns false if expected an event handler but given arbitrary object', () => {
|
|
58
|
-
expect(isHandlerKind('
|
|
59
|
-
expect(isHandlerKind('
|
|
60
|
-
expect(isHandlerKind('
|
|
61
|
-
expect(isHandlerKind('
|
|
62
|
-
expect(isHandlerKind('
|
|
63
|
-
expect(isHandlerKind('
|
|
56
|
+
expect(isHandlerKind('websocket')(undefined)).toBe(false)
|
|
57
|
+
expect(isHandlerKind('websocket')(null)).toBe(false)
|
|
58
|
+
expect(isHandlerKind('websocket')({})).toBe(false)
|
|
59
|
+
expect(isHandlerKind('websocket')([])).toBe(false)
|
|
60
|
+
expect(isHandlerKind('websocket')(123)).toBe(false)
|
|
61
|
+
expect(isHandlerKind('websocket')('hello')).toBe(false)
|
|
64
62
|
})
|
|
@@ -1,21 +1,17 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AnyHandler } from '../../experimental/handlers-controller'
|
|
2
2
|
import type { RequestHandler } from '../../handlers/RequestHandler'
|
|
3
3
|
import type { WebSocketHandler } from '../../handlers/WebSocketHandler'
|
|
4
|
+
import { isObject } from './isObject'
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* A filter function that ensures that the provided argument
|
|
7
8
|
* is a handler of the given kind. This helps differentiate
|
|
8
9
|
* between different kinds of handlers, e.g. request and event handlers.
|
|
9
10
|
*/
|
|
10
|
-
export function isHandlerKind<K extends
|
|
11
|
+
export function isHandlerKind<K extends AnyHandler['kind']>(kind: K) {
|
|
11
12
|
return (
|
|
12
13
|
input: unknown,
|
|
13
|
-
): input is K extends '
|
|
14
|
-
return (
|
|
15
|
-
input != null &&
|
|
16
|
-
typeof input === 'object' &&
|
|
17
|
-
'__kind' in input &&
|
|
18
|
-
input.__kind === kind
|
|
19
|
-
)
|
|
14
|
+
): input is K extends 'websocket' ? WebSocketHandler : RequestHandler => {
|
|
15
|
+
return isObject(input) && 'kind' in input && input.kind === kind
|
|
20
16
|
}
|
|
21
17
|
}
|
|
@@ -3,8 +3,8 @@ import { InternalError, devUtils } from '../internal/devUtils'
|
|
|
3
3
|
import { isCommonAssetRequest } from '../../isCommonAssetRequest'
|
|
4
4
|
|
|
5
5
|
export interface UnhandledRequestPrint {
|
|
6
|
-
warning()
|
|
7
|
-
error()
|
|
6
|
+
warning: () => void
|
|
7
|
+
error: () => void
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export type UnhandledRequestCallback = (
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
// @vitest-environment node-websocket
|
|
2
2
|
import { setMaxListeners } from 'node:events'
|
|
3
|
-
import {
|
|
4
|
-
WebSocketClientConnection,
|
|
5
|
-
WebSocketData,
|
|
6
|
-
WebSocketTransport,
|
|
7
|
-
} from '@mswjs/interceptors/WebSocket'
|
|
3
|
+
import { WebSocketClientConnection } from '@mswjs/interceptors/WebSocket'
|
|
8
4
|
import {
|
|
9
5
|
WebSocketClientManager,
|
|
10
6
|
WebSocketBroadcastChannelMessage,
|
|
11
7
|
} from './WebSocketClientManager'
|
|
8
|
+
import { TestWebSocketTransport } from '../../../test/support/ws-test-utils'
|
|
12
9
|
|
|
13
10
|
const channel = new BroadcastChannel('test:channel')
|
|
14
11
|
|
|
@@ -23,11 +20,6 @@ vi.spyOn(channel, 'postMessage')
|
|
|
23
20
|
|
|
24
21
|
const socket = new WebSocket('ws://localhost')
|
|
25
22
|
|
|
26
|
-
class TestWebSocketTransport extends EventTarget implements WebSocketTransport {
|
|
27
|
-
send(_data: WebSocketData): void {}
|
|
28
|
-
close(_code?: number | undefined, _reason?: string | undefined): void {}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
23
|
afterEach(() => {
|
|
32
24
|
vi.resetAllMocks()
|
|
33
25
|
})
|
|
@@ -17,7 +17,11 @@ interface HandleWebSocketEventOptions {
|
|
|
17
17
|
|
|
18
18
|
export function handleWebSocketEvent(options: HandleWebSocketEventOptions) {
|
|
19
19
|
webSocketInterceptor.on('connection', async (connection) => {
|
|
20
|
-
|
|
20
|
+
/**
|
|
21
|
+
* @todo @fixme Reference the handlers controller here and use `.getHandlersByKind`.
|
|
22
|
+
* That one relies on the pre-grouped handlers map and will be more performant.
|
|
23
|
+
*/
|
|
24
|
+
const handlers = options.getHandlers().filter(isHandlerKind('websocket'))
|
|
21
25
|
|
|
22
26
|
// Ignore this connection if the user hasn't defined any handlers.
|
|
23
27
|
if (handlers.length > 0) {
|
|
@@ -18,8 +18,9 @@ export const colors = {
|
|
|
18
18
|
|
|
19
19
|
export function attachWebSocketLogger(
|
|
20
20
|
connection: WebSocketConnectionData,
|
|
21
|
-
): void {
|
|
21
|
+
): () => void {
|
|
22
22
|
const { client, server } = connection
|
|
23
|
+
const controller = new AbortController()
|
|
23
24
|
|
|
24
25
|
logConnectionOpen(client)
|
|
25
26
|
|
|
@@ -30,19 +31,32 @@ export function attachWebSocketLogger(
|
|
|
30
31
|
* @todo Provide the reference to the exact event handler
|
|
31
32
|
* that called this `client.send()`.
|
|
32
33
|
*/
|
|
33
|
-
client.addEventListener(
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
client.addEventListener(
|
|
35
|
+
'message',
|
|
36
|
+
(event) => {
|
|
37
|
+
logOutgoingClientMessage(event)
|
|
38
|
+
},
|
|
39
|
+
{ signal: controller.signal },
|
|
40
|
+
)
|
|
36
41
|
|
|
37
|
-
client.addEventListener(
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
client.addEventListener(
|
|
43
|
+
'close',
|
|
44
|
+
(event) => {
|
|
45
|
+
logConnectionClose(event)
|
|
46
|
+
},
|
|
47
|
+
{ signal: controller.signal },
|
|
48
|
+
)
|
|
40
49
|
|
|
41
50
|
// Log client errors (connection closures due to errors).
|
|
42
|
-
client.socket.addEventListener(
|
|
43
|
-
|
|
44
|
-
|
|
51
|
+
client.socket.addEventListener(
|
|
52
|
+
'error',
|
|
53
|
+
(event) => {
|
|
54
|
+
logClientError(event)
|
|
55
|
+
},
|
|
56
|
+
{ signal: controller.signal },
|
|
57
|
+
)
|
|
45
58
|
|
|
59
|
+
const { send: originalClientSend } = client
|
|
46
60
|
client.send = new Proxy(client.send, {
|
|
47
61
|
apply(target, thisArg, args) {
|
|
48
62
|
const [data] = args
|
|
@@ -75,11 +89,15 @@ export function attachWebSocketLogger(
|
|
|
75
89
|
logIncomingServerMessage(event)
|
|
76
90
|
})
|
|
77
91
|
},
|
|
78
|
-
{
|
|
92
|
+
{
|
|
93
|
+
once: true,
|
|
94
|
+
signal: controller.signal,
|
|
95
|
+
},
|
|
79
96
|
)
|
|
80
97
|
|
|
81
98
|
// Log outgoing client events initiated by the event handler.
|
|
82
99
|
// The actual client never sent these but the handler did.
|
|
100
|
+
const { send: originalServerSend } = server
|
|
83
101
|
server.send = new Proxy(server.send, {
|
|
84
102
|
apply(target, thisArg, args) {
|
|
85
103
|
const [data] = args
|
|
@@ -102,6 +120,20 @@ export function attachWebSocketLogger(
|
|
|
102
120
|
return Reflect.apply(target, thisArg, args)
|
|
103
121
|
},
|
|
104
122
|
})
|
|
123
|
+
|
|
124
|
+
// Undo method proxies.
|
|
125
|
+
controller.signal.addEventListener(
|
|
126
|
+
'abort',
|
|
127
|
+
() => {
|
|
128
|
+
client.send = originalClientSend
|
|
129
|
+
server.send = originalServerSend
|
|
130
|
+
},
|
|
131
|
+
{ once: true },
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
return () => {
|
|
135
|
+
controller.abort()
|
|
136
|
+
}
|
|
105
137
|
}
|
|
106
138
|
|
|
107
139
|
/**
|
package/src/core/ws.test.ts
CHANGED
package/src/core/ws.ts
CHANGED
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
type WebSocketHandlerEventMap,
|
|
10
10
|
} from './handlers/WebSocketHandler'
|
|
11
11
|
import { hasRefCounted } from './utils/internal/hasRefCounted'
|
|
12
|
-
import { Path, isPath } from './utils/matching/matchRequestUrl'
|
|
12
|
+
import { type Path, isPath } from './utils/matching/matchRequestUrl'
|
|
13
13
|
import { WebSocketClientManager } from './ws/WebSocketClientManager'
|
|
14
14
|
|
|
15
15
|
const webSocketChannel = new BroadcastChannel('msw:websocket-client-manager')
|
|
@@ -42,10 +42,10 @@ export type WebSocketLink = {
|
|
|
42
42
|
*
|
|
43
43
|
* @see {@link https://mswjs.io/docs/api/ws#onevent-listener `on()` API reference}
|
|
44
44
|
*/
|
|
45
|
-
addEventListener<EventType extends keyof WebSocketHandlerEventMap>(
|
|
45
|
+
addEventListener: <EventType extends keyof WebSocketHandlerEventMap>(
|
|
46
46
|
event: EventType,
|
|
47
47
|
listener: WebSocketEventListener<EventType>,
|
|
48
|
-
)
|
|
48
|
+
) => WebSocketHandler
|
|
49
49
|
|
|
50
50
|
/**
|
|
51
51
|
* Broadcasts the given data to all WebSocket clients.
|
|
@@ -58,7 +58,7 @@ export type WebSocketLink = {
|
|
|
58
58
|
*
|
|
59
59
|
* @see {@link https://mswjs.io/docs/api/ws#broadcastdata `broadcast()` API reference}
|
|
60
60
|
*/
|
|
61
|
-
broadcast(data: WebSocketData)
|
|
61
|
+
broadcast: (data: WebSocketData) => void
|
|
62
62
|
|
|
63
63
|
/**
|
|
64
64
|
* Broadcasts the given data to all WebSocket clients
|
|
@@ -72,12 +72,12 @@ export type WebSocketLink = {
|
|
|
72
72
|
*
|
|
73
73
|
* @see {@link https://mswjs.io/docs/api/ws#broadcastexceptclients-data `broadcast()` API reference}
|
|
74
74
|
*/
|
|
75
|
-
broadcastExcept(
|
|
75
|
+
broadcastExcept: (
|
|
76
76
|
clients:
|
|
77
77
|
| WebSocketClientConnectionProtocol
|
|
78
78
|
| Array<WebSocketClientConnectionProtocol>,
|
|
79
79
|
data: WebSocketData,
|
|
80
|
-
)
|
|
80
|
+
) => void
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
/**
|
package/src/iife/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '
|
|
1
|
+
export * from '#core'
|
|
2
2
|
export * from '../browser'
|
package/src/native/index.ts
CHANGED
|
@@ -1,21 +1,44 @@
|
|
|
1
|
+
import type { Interceptor } from '@mswjs/interceptors'
|
|
1
2
|
import { FetchInterceptor } from '@mswjs/interceptors/fetch'
|
|
2
3
|
import { XMLHttpRequestInterceptor } from '@mswjs/interceptors/XMLHttpRequest'
|
|
3
|
-
import type
|
|
4
|
-
import {
|
|
4
|
+
import { type AnyHandler } from '#core/experimental/handlers-controller'
|
|
5
|
+
import {
|
|
6
|
+
defineNetwork,
|
|
7
|
+
DefineNetworkOptions,
|
|
8
|
+
} from '#core/experimental/define-network'
|
|
9
|
+
import { InterceptorSource } from '#core/experimental/sources/interceptor-source'
|
|
10
|
+
import { type SetupServerCommon } from '../node/glossary'
|
|
11
|
+
import { defineSetupServerApi } from '../node/setup-server-common'
|
|
12
|
+
|
|
13
|
+
const defaultInterceptors: Array<Interceptor<any>> = [
|
|
14
|
+
new FetchInterceptor(),
|
|
15
|
+
new XMLHttpRequestInterceptor(),
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
export const defaultNetworkOptions: DefineNetworkOptions<[InterceptorSource]> =
|
|
19
|
+
{
|
|
20
|
+
sources: [
|
|
21
|
+
new InterceptorSource({
|
|
22
|
+
interceptors: defaultInterceptors,
|
|
23
|
+
}),
|
|
24
|
+
],
|
|
25
|
+
onUnhandledFrame: 'warn',
|
|
26
|
+
context: {
|
|
27
|
+
quiet: true,
|
|
28
|
+
},
|
|
29
|
+
}
|
|
5
30
|
|
|
6
31
|
/**
|
|
7
32
|
* Sets up a requests interception in React Native with the given request handlers.
|
|
8
|
-
* @param {
|
|
33
|
+
* @param {Array<AnyHandler>} handlers List of request handlers.
|
|
9
34
|
*
|
|
10
35
|
* @see {@link https://mswjs.io/docs/api/setup-server `setupServer()` API reference}
|
|
11
36
|
*/
|
|
12
|
-
export function setupServer(
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
// Provision request interception via patching the `XMLHttpRequest` class only
|
|
16
|
-
// in React Native. There is no `http`/`https` modules in that environment.
|
|
17
|
-
return new SetupServerCommonApi(
|
|
18
|
-
[new FetchInterceptor(), new XMLHttpRequestInterceptor()],
|
|
37
|
+
export function setupServer(...handlers: Array<AnyHandler>): SetupServerCommon {
|
|
38
|
+
const network = defineNetwork({
|
|
39
|
+
...defaultNetworkOptions,
|
|
19
40
|
handlers,
|
|
20
|
-
)
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
return defineSetupServerApi(network)
|
|
21
44
|
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { http } from '../core/http'
|
|
2
|
+
import { AsyncHandlersController } from './async-handlers-controller'
|
|
3
|
+
|
|
4
|
+
it('respects initial handlers in the boundary', () => {
|
|
5
|
+
{
|
|
6
|
+
const controller = new AsyncHandlersController([])
|
|
7
|
+
controller.boundary(() => {
|
|
8
|
+
expect(controller.currentHandlers()).toEqual([])
|
|
9
|
+
})()
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
{
|
|
13
|
+
const initialHandlers = [http.get('/', () => {})]
|
|
14
|
+
const controller = new AsyncHandlersController(initialHandlers)
|
|
15
|
+
controller.boundary(() => {
|
|
16
|
+
expect(controller.currentHandlers()).toEqual(initialHandlers)
|
|
17
|
+
})()
|
|
18
|
+
}
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
it('provides boundary-specific overrides', () => {
|
|
22
|
+
const initialHandlers = [http.get('/one', () => {})]
|
|
23
|
+
const controller = new AsyncHandlersController(initialHandlers)
|
|
24
|
+
|
|
25
|
+
controller.boundary(() => {
|
|
26
|
+
const runtimeHandlers = [http.get('/two', () => {})]
|
|
27
|
+
controller.use(runtimeHandlers)
|
|
28
|
+
expect(controller.currentHandlers()).toEqual([
|
|
29
|
+
...runtimeHandlers,
|
|
30
|
+
...initialHandlers,
|
|
31
|
+
])
|
|
32
|
+
})()
|
|
33
|
+
|
|
34
|
+
expect(controller.currentHandlers()).toEqual(initialHandlers)
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
it('resets the handlers in the boundary', () => {
|
|
38
|
+
const initialHandlers = [http.get('/one', () => {})]
|
|
39
|
+
const controller = new AsyncHandlersController(initialHandlers)
|
|
40
|
+
|
|
41
|
+
controller.boundary(() => {
|
|
42
|
+
const runtimeHandlers = [http.get('/two', () => {})]
|
|
43
|
+
controller.use(runtimeHandlers)
|
|
44
|
+
controller.reset([])
|
|
45
|
+
|
|
46
|
+
expect(controller.currentHandlers()).toEqual(initialHandlers)
|
|
47
|
+
})()
|
|
48
|
+
|
|
49
|
+
expect(controller.currentHandlers()).toEqual(initialHandlers)
|
|
50
|
+
})
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks'
|
|
2
|
+
import {
|
|
3
|
+
type AnyHandler,
|
|
4
|
+
type HandlersMap,
|
|
5
|
+
HandlersController,
|
|
6
|
+
HandlersControllerState,
|
|
7
|
+
} from '#core/experimental/handlers-controller'
|
|
8
|
+
|
|
9
|
+
export interface AsyncHandlersControllerContext {
|
|
10
|
+
initialHandlers: HandlersMap
|
|
11
|
+
handlers: HandlersMap
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export class AsyncHandlersController extends HandlersController {
|
|
15
|
+
#asyncContext: AsyncLocalStorage<AsyncHandlersControllerContext>
|
|
16
|
+
#fallbackContext: AsyncHandlersControllerContext
|
|
17
|
+
|
|
18
|
+
constructor(initialHandlers: Array<AnyHandler>) {
|
|
19
|
+
super()
|
|
20
|
+
|
|
21
|
+
const initialState = this.getInitialState(initialHandlers)
|
|
22
|
+
|
|
23
|
+
this.#asyncContext = new AsyncLocalStorage()
|
|
24
|
+
this.#fallbackContext = {
|
|
25
|
+
initialHandlers: initialState.initialHandlers,
|
|
26
|
+
handlers: initialState.handlers,
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
protected getState() {
|
|
31
|
+
const { initialHandlers, handlers } = this.#getContext()
|
|
32
|
+
|
|
33
|
+
return {
|
|
34
|
+
initialHandlers,
|
|
35
|
+
handlers,
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
protected setState(nextState: HandlersControllerState): void {
|
|
40
|
+
const context = this.#getContext()
|
|
41
|
+
|
|
42
|
+
if (nextState.initialHandlers) {
|
|
43
|
+
context.initialHandlers = nextState.initialHandlers
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (nextState.handlers) {
|
|
47
|
+
context.handlers = nextState.handlers
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
public boundary<Args extends Array<any>, R>(callback: (...args: Args) => R) {
|
|
52
|
+
return (...args: Args) => {
|
|
53
|
+
const initialHandlers = { ...this.getState().handlers }
|
|
54
|
+
|
|
55
|
+
return this.#asyncContext.run(
|
|
56
|
+
{
|
|
57
|
+
initialHandlers,
|
|
58
|
+
handlers: { ...initialHandlers },
|
|
59
|
+
},
|
|
60
|
+
callback,
|
|
61
|
+
...args,
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
#getContext() {
|
|
67
|
+
return this.#asyncContext.getStore() || this.#fallbackContext
|
|
68
|
+
}
|
|
69
|
+
}
|
package/src/node/glossary.ts
CHANGED
|
@@ -1,54 +1,53 @@
|
|
|
1
1
|
import type { PartialDeep } from 'type-fest'
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
} from '~/core/sharedOptions'
|
|
2
|
+
import type { HttpNetworkFrameEventMap } from '#core/experimental/frames/http-frame'
|
|
3
|
+
import type { WebSocketNetworkFrameEventMap } from '#core/experimental/frames/websocket-frame'
|
|
4
|
+
import type { AnyHandler } from '#core/experimental/handlers-controller'
|
|
5
|
+
import type { LifeCycleEventEmitter, SharedOptions } from '#core/sharedOptions'
|
|
6
|
+
|
|
7
|
+
export interface ListenOptions extends SharedOptions {}
|
|
9
8
|
|
|
10
9
|
export interface SetupServerCommon {
|
|
11
10
|
/**
|
|
12
|
-
* Starts
|
|
11
|
+
* Starts the request interception based on the previously provided request handlers.
|
|
13
12
|
*
|
|
14
13
|
* @see {@link https://mswjs.io/docs/api/setup-server/listen `server.listen()` API reference}
|
|
15
14
|
*/
|
|
16
|
-
listen(options?: PartialDeep<
|
|
15
|
+
listen: (options?: PartialDeep<ListenOptions>) => void
|
|
17
16
|
|
|
18
17
|
/**
|
|
19
|
-
* Stops
|
|
18
|
+
* Stops the request interception by restoring all augmented modules.
|
|
20
19
|
*
|
|
21
20
|
* @see {@link https://mswjs.io/docs/api/setup-server/close `server.close()` API reference}
|
|
22
21
|
*/
|
|
23
|
-
close()
|
|
22
|
+
close: () => void
|
|
24
23
|
|
|
25
24
|
/**
|
|
26
25
|
* Prepends given request handlers to the list of existing handlers.
|
|
27
26
|
*
|
|
28
27
|
* @see {@link https://mswjs.io/docs/api/setup-server/use `server.use()` API reference}
|
|
29
28
|
*/
|
|
30
|
-
use(...handlers: Array<
|
|
29
|
+
use: (...handlers: Array<AnyHandler>) => void
|
|
31
30
|
|
|
32
31
|
/**
|
|
33
32
|
* Marks all request handlers that respond using `res.once()` as unused.
|
|
34
33
|
*
|
|
35
34
|
* @see {@link https://mswjs.io/docs/api/setup-server/restore-handlers `server.restore-handlers()` API reference}
|
|
36
35
|
*/
|
|
37
|
-
restoreHandlers()
|
|
36
|
+
restoreHandlers: () => void
|
|
38
37
|
|
|
39
38
|
/**
|
|
40
39
|
* Resets request handlers to the initial list given to the `setupServer` call, or to the explicit next request handlers list, if given.
|
|
41
40
|
*
|
|
42
41
|
* @see {@link https://mswjs.io/docs/api/setup-server/reset-handlers `server.reset-handlers()` API reference}
|
|
43
42
|
*/
|
|
44
|
-
resetHandlers(...nextHandlers: Array<
|
|
43
|
+
resetHandlers: (...nextHandlers: Array<AnyHandler>) => void
|
|
45
44
|
|
|
46
45
|
/**
|
|
47
46
|
* Returns a readonly list of currently active request handlers.
|
|
48
47
|
*
|
|
49
48
|
* @see {@link https://mswjs.io/docs/api/setup-server/list-handlers `server.listHandlers()` API reference}
|
|
50
49
|
*/
|
|
51
|
-
listHandlers()
|
|
50
|
+
listHandlers: () => ReadonlyArray<AnyHandler>
|
|
52
51
|
|
|
53
52
|
/**
|
|
54
53
|
* Life-cycle events.
|
|
@@ -56,7 +55,9 @@ export interface SetupServerCommon {
|
|
|
56
55
|
*
|
|
57
56
|
* @see {@link https://mswjs.io/docs/api/life-cycle-events Life-cycle Events API reference}
|
|
58
57
|
*/
|
|
59
|
-
events: LifeCycleEventEmitter<
|
|
58
|
+
events: LifeCycleEventEmitter<
|
|
59
|
+
HttpNetworkFrameEventMap | WebSocketNetworkFrameEventMap
|
|
60
|
+
>
|
|
60
61
|
}
|
|
61
62
|
|
|
62
63
|
export interface SetupServer extends SetupServerCommon {
|
|
@@ -68,7 +69,7 @@ export interface SetupServer extends SetupServerCommon {
|
|
|
68
69
|
*
|
|
69
70
|
* @see {@link https://mswjs.io/docs/api/setup-server/boundary `server.boundary()` API reference}
|
|
70
71
|
*/
|
|
71
|
-
boundary<Args extends Array<any>, R>(
|
|
72
|
+
boundary: <Args extends Array<any>, R>(
|
|
72
73
|
callback: (...args: Args) => R,
|
|
73
|
-
)
|
|
74
|
+
) => (...args: Args) => R
|
|
74
75
|
}
|
package/src/node/index.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
export type { SetupServer } from './glossary'
|
|
2
|
-
export {
|
|
3
|
-
|
|
2
|
+
export {
|
|
3
|
+
setupServer,
|
|
4
|
+
SetupServerApi,
|
|
5
|
+
defaultNetworkOptions,
|
|
6
|
+
} from './setup-server'
|
|
7
|
+
export { SetupServerCommonApi } from './setup-server-common'
|