msw 2.12.14 → 2.13.1
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
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { RequiredDeep } from '~/core/typeUtils'
|
|
2
|
-
import { mergeRight } from '~/core/utils/internal/mergeRight'
|
|
3
|
-
import {
|
|
4
|
-
SetupWorker,
|
|
5
|
-
SetupWorkerInternalContext,
|
|
6
|
-
StartHandler,
|
|
7
|
-
StartOptions,
|
|
8
|
-
} from '../../glossary'
|
|
9
|
-
|
|
10
|
-
export const DEFAULT_START_OPTIONS: RequiredDeep<StartOptions> = {
|
|
11
|
-
serviceWorker: {
|
|
12
|
-
url: '/mockServiceWorker.js',
|
|
13
|
-
options: null as any,
|
|
14
|
-
},
|
|
15
|
-
quiet: false,
|
|
16
|
-
waitUntilReady: true,
|
|
17
|
-
onUnhandledRequest: 'warn',
|
|
18
|
-
findWorker(scriptURL, mockServiceWorkerUrl) {
|
|
19
|
-
return scriptURL === mockServiceWorkerUrl
|
|
20
|
-
},
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Returns resolved worker start options, merging the default options
|
|
25
|
-
* with the given custom options.
|
|
26
|
-
*/
|
|
27
|
-
export function resolveStartOptions(
|
|
28
|
-
initialOptions?: StartOptions,
|
|
29
|
-
): RequiredDeep<StartOptions> {
|
|
30
|
-
return mergeRight(
|
|
31
|
-
DEFAULT_START_OPTIONS,
|
|
32
|
-
initialOptions || {},
|
|
33
|
-
) as RequiredDeep<StartOptions>
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export function prepareStartHandler(
|
|
37
|
-
handler: StartHandler,
|
|
38
|
-
context: SetupWorkerInternalContext,
|
|
39
|
-
): SetupWorker['start'] {
|
|
40
|
-
return (initialOptions) => {
|
|
41
|
-
context.startOptions = resolveStartOptions(initialOptions)
|
|
42
|
-
return handler(context.startOptions, initialOptions || {})
|
|
43
|
-
}
|
|
44
|
-
}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { printStartMessage } from './printStartMessage'
|
|
2
|
-
|
|
3
|
-
beforeEach(() => {
|
|
4
|
-
vi.spyOn(console, 'groupCollapsed').mockImplementation(() => void 0)
|
|
5
|
-
vi.spyOn(console, 'log').mockImplementation(() => void 0)
|
|
6
|
-
})
|
|
7
|
-
|
|
8
|
-
afterEach(() => {
|
|
9
|
-
vi.restoreAllMocks()
|
|
10
|
-
})
|
|
11
|
-
|
|
12
|
-
test('prints out a default start message into console', () => {
|
|
13
|
-
printStartMessage({
|
|
14
|
-
workerScope: 'http://localhost:3000/',
|
|
15
|
-
workerUrl: 'http://localhost:3000/worker.js',
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
expect(console.groupCollapsed).toHaveBeenCalledWith(
|
|
19
|
-
'%c[MSW] Mocking enabled.',
|
|
20
|
-
expect.anything(),
|
|
21
|
-
)
|
|
22
|
-
|
|
23
|
-
// Includes a link to the documentation.
|
|
24
|
-
expect(console.log).toHaveBeenCalledWith(
|
|
25
|
-
'%cDocumentation: %chttps://mswjs.io/docs',
|
|
26
|
-
expect.anything(),
|
|
27
|
-
expect.anything(),
|
|
28
|
-
)
|
|
29
|
-
|
|
30
|
-
// Includes a link to the GitHub issues page.
|
|
31
|
-
expect(console.log).toHaveBeenCalledWith(
|
|
32
|
-
'Found an issue? https://github.com/mswjs/msw/issues',
|
|
33
|
-
)
|
|
34
|
-
|
|
35
|
-
// Includes service worker scope.
|
|
36
|
-
expect(console.log).toHaveBeenCalledWith(
|
|
37
|
-
'Worker scope:',
|
|
38
|
-
'http://localhost:3000/',
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
// Includes service worker script location.
|
|
42
|
-
expect(console.log).toHaveBeenCalledWith(
|
|
43
|
-
'Worker script URL:',
|
|
44
|
-
'http://localhost:3000/worker.js',
|
|
45
|
-
)
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
test('supports printing a custom start message', () => {
|
|
49
|
-
printStartMessage({ message: 'Custom start message' })
|
|
50
|
-
|
|
51
|
-
expect(console.groupCollapsed).toHaveBeenCalledWith(
|
|
52
|
-
'%c[MSW] Custom start message',
|
|
53
|
-
expect.anything(),
|
|
54
|
-
)
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
test('does not print any messages when log level is quiet', () => {
|
|
58
|
-
printStartMessage({ quiet: true })
|
|
59
|
-
|
|
60
|
-
expect(console.groupCollapsed).not.toHaveBeenCalled()
|
|
61
|
-
expect(console.log).not.toHaveBeenCalled()
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
test('prints a worker scope in the start message', () => {
|
|
65
|
-
printStartMessage({
|
|
66
|
-
workerScope: 'http://localhost:3000/user',
|
|
67
|
-
})
|
|
68
|
-
|
|
69
|
-
expect(console.log).toHaveBeenCalledWith(
|
|
70
|
-
'Worker scope:',
|
|
71
|
-
'http://localhost:3000/user',
|
|
72
|
-
)
|
|
73
|
-
})
|
|
74
|
-
|
|
75
|
-
test('prints a worker script url in the start message', () => {
|
|
76
|
-
printStartMessage({
|
|
77
|
-
workerUrl: 'http://localhost:3000/mockServiceWorker.js',
|
|
78
|
-
})
|
|
79
|
-
|
|
80
|
-
expect(console.log).toHaveBeenCalledWith(
|
|
81
|
-
'Worker script URL:',
|
|
82
|
-
'http://localhost:3000/mockServiceWorker.js',
|
|
83
|
-
)
|
|
84
|
-
})
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import type { ServiceWorkerIncomingEventsMap } from '../../glossary'
|
|
2
|
-
import { devUtils } from '~/core/utils/internal/devUtils'
|
|
3
|
-
|
|
4
|
-
interface PrintStartMessageArgs {
|
|
5
|
-
quiet?: boolean
|
|
6
|
-
message?: string
|
|
7
|
-
workerUrl?: string
|
|
8
|
-
workerScope?: string
|
|
9
|
-
client?: ServiceWorkerIncomingEventsMap['MOCKING_ENABLED']['client']
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Prints a worker activation message in the browser's console.
|
|
14
|
-
*/
|
|
15
|
-
export function printStartMessage(args: PrintStartMessageArgs = {}) {
|
|
16
|
-
if (args.quiet) {
|
|
17
|
-
return
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const message = args.message || 'Mocking enabled.'
|
|
21
|
-
|
|
22
|
-
console.groupCollapsed(
|
|
23
|
-
`%c${devUtils.formatMessage(message)}`,
|
|
24
|
-
'color:orangered;font-weight:bold;',
|
|
25
|
-
)
|
|
26
|
-
// eslint-disable-next-line no-console
|
|
27
|
-
console.log(
|
|
28
|
-
'%cDocumentation: %chttps://mswjs.io/docs',
|
|
29
|
-
'font-weight:bold',
|
|
30
|
-
'font-weight:normal',
|
|
31
|
-
)
|
|
32
|
-
// eslint-disable-next-line no-console
|
|
33
|
-
console.log('Found an issue? https://github.com/mswjs/msw/issues')
|
|
34
|
-
|
|
35
|
-
if (args.workerUrl) {
|
|
36
|
-
// eslint-disable-next-line no-console
|
|
37
|
-
console.log('Worker script URL:', args.workerUrl)
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
if (args.workerScope) {
|
|
41
|
-
// eslint-disable-next-line no-console
|
|
42
|
-
console.log('Worker scope:', args.workerScope)
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
if (args.client) {
|
|
46
|
-
// eslint-disable-next-line no-console
|
|
47
|
-
console.log('Client ID: %s (%s)', args.client.id, args.client.frameType)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
console.groupEnd()
|
|
51
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { devUtils } from '~/core/utils/internal/devUtils'
|
|
2
|
-
import { StartOptions } from '../../glossary'
|
|
3
|
-
|
|
4
|
-
export function validateWorkerScope(
|
|
5
|
-
registration: ServiceWorkerRegistration,
|
|
6
|
-
options?: StartOptions,
|
|
7
|
-
): void {
|
|
8
|
-
if (!options?.quiet && !location.href.startsWith(registration.scope)) {
|
|
9
|
-
devUtils.warn(
|
|
10
|
-
`\
|
|
11
|
-
Cannot intercept requests on this page because it's outside of the worker's scope ("${registration.scope}"). If you wish to mock API requests on this page, you must resolve this scope issue.
|
|
12
|
-
|
|
13
|
-
- (Recommended) Register the worker at the root level ("/") of your application.
|
|
14
|
-
- Set the "Service-Worker-Allowed" response header to allow out-of-scope workers.\
|
|
15
|
-
`,
|
|
16
|
-
)
|
|
17
|
-
}
|
|
18
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { printStopMessage } from './printStopMessage'
|
|
2
|
-
|
|
3
|
-
beforeAll(() => {
|
|
4
|
-
vi.spyOn(global.console, 'log').mockImplementation(() => void 0)
|
|
5
|
-
})
|
|
6
|
-
|
|
7
|
-
afterEach(() => {
|
|
8
|
-
vi.resetAllMocks()
|
|
9
|
-
})
|
|
10
|
-
|
|
11
|
-
afterAll(() => {
|
|
12
|
-
vi.restoreAllMocks()
|
|
13
|
-
})
|
|
14
|
-
|
|
15
|
-
test('prints a stop message to the console', () => {
|
|
16
|
-
printStopMessage()
|
|
17
|
-
expect(console.log).toHaveBeenCalledWith(
|
|
18
|
-
'%c[MSW] Mocking disabled.',
|
|
19
|
-
'color:orangered;font-weight:bold;',
|
|
20
|
-
)
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
test('does not print any message when log level is quiet', () => {
|
|
24
|
-
printStopMessage({ quiet: true })
|
|
25
|
-
expect(console.log).not.toHaveBeenCalled()
|
|
26
|
-
})
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { devUtils } from '~/core/utils/internal/devUtils'
|
|
2
|
-
|
|
3
|
-
export function printStopMessage(args: { quiet?: boolean } = {}): void {
|
|
4
|
-
if (args.quiet) {
|
|
5
|
-
return
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
// eslint-disable-next-line no-console
|
|
9
|
-
console.log(
|
|
10
|
-
`%c${devUtils.formatMessage('Mocking disabled.')}`,
|
|
11
|
-
'color:orangered;font-weight:bold;',
|
|
12
|
-
)
|
|
13
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { devUtils } from '~/core/utils/internal/devUtils'
|
|
2
|
-
import type { SetupWorkerInternalContext } from '../setupWorker/glossary'
|
|
3
|
-
import { DeferredPromise } from '@open-draft/deferred-promise'
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Check whether the registered Service Worker has been
|
|
7
|
-
* generated by the installed version of the library.
|
|
8
|
-
* Prints a warning message if the worker scripts mismatch.
|
|
9
|
-
*/
|
|
10
|
-
export function checkWorkerIntegrity(
|
|
11
|
-
context: SetupWorkerInternalContext,
|
|
12
|
-
): Promise<void> {
|
|
13
|
-
const integrityCheckPromise = new DeferredPromise<void>()
|
|
14
|
-
|
|
15
|
-
// Request the integrity checksum from the registered worker.
|
|
16
|
-
context.workerChannel.postMessage('INTEGRITY_CHECK_REQUEST')
|
|
17
|
-
context.workerChannel.once('INTEGRITY_CHECK_RESPONSE', (event) => {
|
|
18
|
-
const { checksum, packageVersion } = event.data
|
|
19
|
-
|
|
20
|
-
// Compare the response from the Service Worker and the
|
|
21
|
-
// global variable set during the build.
|
|
22
|
-
|
|
23
|
-
// The integrity is validated based on the worker script's checksum
|
|
24
|
-
// that's derived from its minified content during the build.
|
|
25
|
-
// The "SERVICE_WORKER_CHECKSUM" global variable is injected by the build.
|
|
26
|
-
if (checksum !== SERVICE_WORKER_CHECKSUM) {
|
|
27
|
-
devUtils.warn(
|
|
28
|
-
`The currently registered Service Worker has been generated by a different version of MSW (${packageVersion}) and may not be fully compatible with the installed version.
|
|
29
|
-
|
|
30
|
-
It's recommended you update your worker script by running this command:
|
|
31
|
-
|
|
32
|
-
\u2022 npx msw init <PUBLIC_DIR>
|
|
33
|
-
|
|
34
|
-
You can also automate this process and make the worker script update automatically upon the library installations. Read more: https://mswjs.io/docs/cli/init.`,
|
|
35
|
-
)
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
integrityCheckPromise.resolve()
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
return integrityCheckPromise
|
|
42
|
-
}
|
package/src/core/SetupApi.ts
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import { invariant } from 'outvariant'
|
|
2
|
-
import { EventMap, Emitter } from 'strict-event-emitter'
|
|
3
|
-
import { RequestHandler } from './handlers/RequestHandler'
|
|
4
|
-
import { LifeCycleEventEmitter } from './sharedOptions'
|
|
5
|
-
import { devUtils } from './utils/internal/devUtils'
|
|
6
|
-
import { pipeEvents } from './utils/internal/pipeEvents'
|
|
7
|
-
import { toReadonlyArray } from './utils/internal/toReadonlyArray'
|
|
8
|
-
import { Disposable } from './utils/internal/Disposable'
|
|
9
|
-
import type { WebSocketHandler } from './handlers/WebSocketHandler'
|
|
10
|
-
|
|
11
|
-
export abstract class HandlersController {
|
|
12
|
-
abstract prepend(
|
|
13
|
-
runtimeHandlers: Array<RequestHandler | WebSocketHandler>,
|
|
14
|
-
): void
|
|
15
|
-
abstract reset(nextHandles: Array<RequestHandler | WebSocketHandler>): void
|
|
16
|
-
abstract currentHandlers(): Array<RequestHandler | WebSocketHandler>
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export class InMemoryHandlersController implements HandlersController {
|
|
20
|
-
private handlers: Array<RequestHandler | WebSocketHandler>
|
|
21
|
-
|
|
22
|
-
constructor(
|
|
23
|
-
private initialHandlers: Array<RequestHandler | WebSocketHandler>,
|
|
24
|
-
) {
|
|
25
|
-
this.handlers = [...initialHandlers]
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
public prepend(
|
|
29
|
-
runtimeHandles: Array<RequestHandler | WebSocketHandler>,
|
|
30
|
-
): void {
|
|
31
|
-
this.handlers.unshift(...runtimeHandles)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
public reset(nextHandlers: Array<RequestHandler | WebSocketHandler>): void {
|
|
35
|
-
this.handlers =
|
|
36
|
-
nextHandlers.length > 0 ? [...nextHandlers] : [...this.initialHandlers]
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
public currentHandlers(): Array<RequestHandler | WebSocketHandler> {
|
|
40
|
-
return this.handlers
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Generic class for the mock API setup.
|
|
46
|
-
*/
|
|
47
|
-
export abstract class SetupApi<EventsMap extends EventMap> extends Disposable {
|
|
48
|
-
protected handlersController: HandlersController
|
|
49
|
-
protected readonly emitter: Emitter<EventsMap>
|
|
50
|
-
protected readonly publicEmitter: Emitter<EventsMap>
|
|
51
|
-
|
|
52
|
-
public readonly events: LifeCycleEventEmitter<EventsMap>
|
|
53
|
-
|
|
54
|
-
constructor(...initialHandlers: Array<RequestHandler | WebSocketHandler>) {
|
|
55
|
-
super()
|
|
56
|
-
|
|
57
|
-
invariant(
|
|
58
|
-
this.validateHandlers(initialHandlers),
|
|
59
|
-
devUtils.formatMessage(
|
|
60
|
-
`Failed to apply given request handlers: invalid input. Did you forget to spread the request handlers Array?`,
|
|
61
|
-
),
|
|
62
|
-
)
|
|
63
|
-
|
|
64
|
-
this.handlersController = new InMemoryHandlersController(initialHandlers)
|
|
65
|
-
|
|
66
|
-
this.emitter = new Emitter<EventsMap>()
|
|
67
|
-
this.publicEmitter = new Emitter<EventsMap>()
|
|
68
|
-
pipeEvents(this.emitter, this.publicEmitter)
|
|
69
|
-
|
|
70
|
-
this.events = this.createLifeCycleEvents()
|
|
71
|
-
|
|
72
|
-
this.subscriptions.push(() => {
|
|
73
|
-
this.emitter.removeAllListeners()
|
|
74
|
-
this.publicEmitter.removeAllListeners()
|
|
75
|
-
})
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
private validateHandlers(handlers: ReadonlyArray<unknown>): boolean {
|
|
79
|
-
// Guard against incorrect call signature of the setup API.
|
|
80
|
-
return handlers.every((handler) => !Array.isArray(handler))
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
public use(
|
|
84
|
-
...runtimeHandlers: Array<RequestHandler | WebSocketHandler>
|
|
85
|
-
): void {
|
|
86
|
-
invariant(
|
|
87
|
-
this.validateHandlers(runtimeHandlers),
|
|
88
|
-
devUtils.formatMessage(
|
|
89
|
-
`Failed to call "use()" with the given request handlers: invalid input. Did you forget to spread the array of request handlers?`,
|
|
90
|
-
),
|
|
91
|
-
)
|
|
92
|
-
|
|
93
|
-
this.handlersController.prepend(runtimeHandlers)
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
public restoreHandlers(): void {
|
|
97
|
-
this.handlersController.currentHandlers().forEach((handler) => {
|
|
98
|
-
if ('isUsed' in handler) {
|
|
99
|
-
handler.isUsed = false
|
|
100
|
-
}
|
|
101
|
-
})
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
public resetHandlers(
|
|
105
|
-
...nextHandlers: Array<RequestHandler | WebSocketHandler>
|
|
106
|
-
): void {
|
|
107
|
-
this.handlersController.reset(nextHandlers)
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
public listHandlers(): ReadonlyArray<RequestHandler | WebSocketHandler> {
|
|
111
|
-
return toReadonlyArray(this.handlersController.currentHandlers())
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
private createLifeCycleEvents(): LifeCycleEventEmitter<EventsMap> {
|
|
115
|
-
return {
|
|
116
|
-
on: (...args: any[]) => {
|
|
117
|
-
return (this.publicEmitter.on as any)(...args)
|
|
118
|
-
},
|
|
119
|
-
removeListener: (...args: any[]) => {
|
|
120
|
-
return (this.publicEmitter.removeListener as any)(...args)
|
|
121
|
-
},
|
|
122
|
-
removeAllListeners: (...args: any[]) => {
|
|
123
|
-
return this.publicEmitter.removeAllListeners(...args)
|
|
124
|
-
},
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export type HandlerKind = 'RequestHandler' | 'EventHandler'
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { AsyncLocalStorage } from 'node:async_hooks'
|
|
2
|
-
import type { HttpRequestEventMap, Interceptor } from '@mswjs/interceptors'
|
|
3
|
-
import { ClientRequestInterceptor } from '@mswjs/interceptors/ClientRequest'
|
|
4
|
-
import { XMLHttpRequestInterceptor } from '@mswjs/interceptors/XMLHttpRequest'
|
|
5
|
-
import { FetchInterceptor } from '@mswjs/interceptors/fetch'
|
|
6
|
-
import { HandlersController } from '~/core/SetupApi'
|
|
7
|
-
import type { RequestHandler } from '~/core/handlers/RequestHandler'
|
|
8
|
-
import type { WebSocketHandler } from '~/core/handlers/WebSocketHandler'
|
|
9
|
-
import type { SetupServer } from './glossary'
|
|
10
|
-
import { SetupServerCommonApi } from './SetupServerCommonApi'
|
|
11
|
-
|
|
12
|
-
const store = new AsyncLocalStorage<RequestHandlersContext>()
|
|
13
|
-
|
|
14
|
-
type RequestHandlersContext = {
|
|
15
|
-
initialHandlers: Array<RequestHandler | WebSocketHandler>
|
|
16
|
-
handlers: Array<RequestHandler | WebSocketHandler>
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* A handlers controller that utilizes `AsyncLocalStorage` in Node.js
|
|
21
|
-
* to prevent the request handlers list from being a shared state
|
|
22
|
-
* across multiple tests.
|
|
23
|
-
*/
|
|
24
|
-
class AsyncHandlersController implements HandlersController {
|
|
25
|
-
private rootContext: RequestHandlersContext
|
|
26
|
-
|
|
27
|
-
constructor(initialHandlers: Array<RequestHandler | WebSocketHandler>) {
|
|
28
|
-
this.rootContext = { initialHandlers, handlers: [] }
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
get context(): RequestHandlersContext {
|
|
32
|
-
return store.getStore() || this.rootContext
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
public prepend(runtimeHandlers: Array<RequestHandler | WebSocketHandler>) {
|
|
36
|
-
this.context.handlers.unshift(...runtimeHandlers)
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
public reset(nextHandlers: Array<RequestHandler | WebSocketHandler>) {
|
|
40
|
-
const context = this.context
|
|
41
|
-
context.handlers = []
|
|
42
|
-
context.initialHandlers =
|
|
43
|
-
nextHandlers.length > 0 ? nextHandlers : context.initialHandlers
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
public currentHandlers(): Array<RequestHandler | WebSocketHandler> {
|
|
47
|
-
const { initialHandlers, handlers } = this.context
|
|
48
|
-
return handlers.concat(initialHandlers)
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
export class SetupServerApi
|
|
52
|
-
extends SetupServerCommonApi
|
|
53
|
-
implements SetupServer
|
|
54
|
-
{
|
|
55
|
-
constructor(
|
|
56
|
-
handlers: Array<RequestHandler | WebSocketHandler>,
|
|
57
|
-
interceptors: Array<Interceptor<HttpRequestEventMap>> = [
|
|
58
|
-
new ClientRequestInterceptor(),
|
|
59
|
-
new XMLHttpRequestInterceptor(),
|
|
60
|
-
new FetchInterceptor(),
|
|
61
|
-
],
|
|
62
|
-
) {
|
|
63
|
-
super(interceptors, handlers)
|
|
64
|
-
|
|
65
|
-
this.handlersController = new AsyncHandlersController(handlers)
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
public boundary<Args extends Array<any>, R>(
|
|
69
|
-
callback: (...args: Args) => R,
|
|
70
|
-
): (...args: Args) => R {
|
|
71
|
-
return (...args: Args): R => {
|
|
72
|
-
return store.run<any, any>(
|
|
73
|
-
{
|
|
74
|
-
initialHandlers: this.handlersController.currentHandlers(),
|
|
75
|
-
handlers: [],
|
|
76
|
-
},
|
|
77
|
-
callback,
|
|
78
|
-
...args,
|
|
79
|
-
)
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
public close(): void {
|
|
84
|
-
super.close()
|
|
85
|
-
store.disable()
|
|
86
|
-
}
|
|
87
|
-
}
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @note This API is extended by both "msw/node" and "msw/native"
|
|
3
|
-
* so be minding about the things you import!
|
|
4
|
-
*/
|
|
5
|
-
import type { RequiredDeep } from 'type-fest'
|
|
6
|
-
import { invariant } from 'outvariant'
|
|
7
|
-
import {
|
|
8
|
-
BatchInterceptor,
|
|
9
|
-
InterceptorReadyState,
|
|
10
|
-
type HttpRequestEventMap,
|
|
11
|
-
type Interceptor,
|
|
12
|
-
} from '@mswjs/interceptors'
|
|
13
|
-
import type { LifeCycleEventsMap, SharedOptions } from '~/core/sharedOptions'
|
|
14
|
-
import { SetupApi } from '~/core/SetupApi'
|
|
15
|
-
import { handleRequest } from '~/core/utils/handleRequest'
|
|
16
|
-
import type { RequestHandler } from '~/core/handlers/RequestHandler'
|
|
17
|
-
import type { WebSocketHandler } from '~/core/handlers/WebSocketHandler'
|
|
18
|
-
import { mergeRight } from '~/core/utils/internal/mergeRight'
|
|
19
|
-
import { InternalError, devUtils } from '~/core/utils/internal/devUtils'
|
|
20
|
-
import type { SetupServerCommon } from './glossary'
|
|
21
|
-
import { handleWebSocketEvent } from '~/core/ws/handleWebSocketEvent'
|
|
22
|
-
import { webSocketInterceptor } from '~/core/ws/webSocketInterceptor'
|
|
23
|
-
import { isHandlerKind } from '~/core/utils/internal/isHandlerKind'
|
|
24
|
-
|
|
25
|
-
const DEFAULT_LISTEN_OPTIONS: RequiredDeep<SharedOptions> = {
|
|
26
|
-
onUnhandledRequest: 'warn',
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export class SetupServerCommonApi
|
|
30
|
-
extends SetupApi<LifeCycleEventsMap>
|
|
31
|
-
implements SetupServerCommon
|
|
32
|
-
{
|
|
33
|
-
protected readonly interceptor: BatchInterceptor<
|
|
34
|
-
Array<Interceptor<HttpRequestEventMap>>,
|
|
35
|
-
HttpRequestEventMap
|
|
36
|
-
>
|
|
37
|
-
private resolvedOptions: RequiredDeep<SharedOptions>
|
|
38
|
-
|
|
39
|
-
constructor(
|
|
40
|
-
interceptors: Array<Interceptor<HttpRequestEventMap>>,
|
|
41
|
-
handlers: Array<RequestHandler | WebSocketHandler>,
|
|
42
|
-
) {
|
|
43
|
-
super(...handlers)
|
|
44
|
-
|
|
45
|
-
this.interceptor = new BatchInterceptor({
|
|
46
|
-
name: 'setup-server',
|
|
47
|
-
interceptors,
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
this.resolvedOptions = {} as RequiredDeep<SharedOptions>
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Subscribe to all requests that are using the interceptor object
|
|
55
|
-
*/
|
|
56
|
-
private init(): void {
|
|
57
|
-
this.interceptor.on(
|
|
58
|
-
'request',
|
|
59
|
-
async ({ request, requestId, controller }) => {
|
|
60
|
-
const response = await handleRequest(
|
|
61
|
-
request,
|
|
62
|
-
requestId,
|
|
63
|
-
this.handlersController
|
|
64
|
-
.currentHandlers()
|
|
65
|
-
.filter(isHandlerKind('RequestHandler')),
|
|
66
|
-
this.resolvedOptions,
|
|
67
|
-
this.emitter,
|
|
68
|
-
{
|
|
69
|
-
onPassthroughResponse(request) {
|
|
70
|
-
const acceptHeader = request.headers.get('accept')
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* @note Remove the internal bypass request header.
|
|
74
|
-
* In the browser, this is done by the worker script.
|
|
75
|
-
* In Node.js, it has to be done here.
|
|
76
|
-
*/
|
|
77
|
-
if (acceptHeader) {
|
|
78
|
-
const nextAcceptHeader = acceptHeader.replace(
|
|
79
|
-
/(,\s+)?msw\/passthrough/,
|
|
80
|
-
'',
|
|
81
|
-
)
|
|
82
|
-
|
|
83
|
-
if (nextAcceptHeader) {
|
|
84
|
-
request.headers.set('accept', nextAcceptHeader)
|
|
85
|
-
} else {
|
|
86
|
-
request.headers.delete('accept')
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
},
|
|
90
|
-
},
|
|
91
|
-
)
|
|
92
|
-
|
|
93
|
-
if (response) {
|
|
94
|
-
controller.respondWith(response)
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
return
|
|
98
|
-
},
|
|
99
|
-
)
|
|
100
|
-
|
|
101
|
-
this.interceptor.on('unhandledException', ({ error }) => {
|
|
102
|
-
if (error instanceof InternalError) {
|
|
103
|
-
throw error
|
|
104
|
-
}
|
|
105
|
-
})
|
|
106
|
-
|
|
107
|
-
this.interceptor.on(
|
|
108
|
-
'response',
|
|
109
|
-
({ response, isMockedResponse, request, requestId }) => {
|
|
110
|
-
this.emitter.emit(
|
|
111
|
-
isMockedResponse ? 'response:mocked' : 'response:bypass',
|
|
112
|
-
{
|
|
113
|
-
response,
|
|
114
|
-
request,
|
|
115
|
-
requestId,
|
|
116
|
-
},
|
|
117
|
-
)
|
|
118
|
-
},
|
|
119
|
-
)
|
|
120
|
-
|
|
121
|
-
// Preconfigure the WebSocket interception but don't enable it just yet.
|
|
122
|
-
// It will be enabled when the server starts.
|
|
123
|
-
handleWebSocketEvent({
|
|
124
|
-
getUnhandledRequestStrategy: () => {
|
|
125
|
-
return this.resolvedOptions.onUnhandledRequest
|
|
126
|
-
},
|
|
127
|
-
getHandlers: () => {
|
|
128
|
-
return this.handlersController.currentHandlers()
|
|
129
|
-
},
|
|
130
|
-
onMockedConnection: () => {},
|
|
131
|
-
onPassthroughConnection: () => {},
|
|
132
|
-
})
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
public listen(options: Partial<SharedOptions> = {}): void {
|
|
136
|
-
this.resolvedOptions = mergeRight(
|
|
137
|
-
DEFAULT_LISTEN_OPTIONS,
|
|
138
|
-
options,
|
|
139
|
-
) as RequiredDeep<SharedOptions>
|
|
140
|
-
|
|
141
|
-
// Apply the interceptor when starting the server.
|
|
142
|
-
// Attach the event listeners to the interceptor here
|
|
143
|
-
// so they get re-attached whenever `.listen()` is called.
|
|
144
|
-
this.interceptor.apply()
|
|
145
|
-
this.init()
|
|
146
|
-
this.subscriptions.push(() => this.interceptor.dispose())
|
|
147
|
-
|
|
148
|
-
// Apply the WebSocket interception.
|
|
149
|
-
webSocketInterceptor.apply()
|
|
150
|
-
this.subscriptions.push(() => webSocketInterceptor.dispose())
|
|
151
|
-
|
|
152
|
-
// Assert that the interceptor has been applied successfully.
|
|
153
|
-
// Also guards us from forgetting to call "interceptor.apply()"
|
|
154
|
-
// as a part of the "listen" method.
|
|
155
|
-
invariant(
|
|
156
|
-
[InterceptorReadyState.APPLYING, InterceptorReadyState.APPLIED].includes(
|
|
157
|
-
this.interceptor.readyState,
|
|
158
|
-
),
|
|
159
|
-
devUtils.formatMessage(
|
|
160
|
-
'Failed to start "setupServer": the interceptor failed to apply. This is likely an issue with the library and you should report it at "%s".',
|
|
161
|
-
),
|
|
162
|
-
'https://github.com/mswjs/msw/issues/new/choose',
|
|
163
|
-
)
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
public close(): void {
|
|
167
|
-
this.dispose()
|
|
168
|
-
}
|
|
169
|
-
}
|
package/src/node/setupServer.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { RequestHandler } from '~/core/handlers/RequestHandler'
|
|
2
|
-
import type { WebSocketHandler } from '~/core/handlers/WebSocketHandler'
|
|
3
|
-
import { SetupServerApi } from './SetupServerApi'
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Sets up a requests interception in Node.js with the given request handlers.
|
|
7
|
-
* @param {RequestHandler[]} handlers List of request handlers.
|
|
8
|
-
*
|
|
9
|
-
* @see {@link https://mswjs.io/docs/api/setup-server `setupServer()` API reference}
|
|
10
|
-
*/
|
|
11
|
-
export const setupServer = (
|
|
12
|
-
...handlers: Array<RequestHandler | WebSocketHandler>
|
|
13
|
-
): SetupServerApi => {
|
|
14
|
-
return new SetupServerApi(handlers)
|
|
15
|
-
}
|