msw 2.12.13 → 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/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/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 +2022 -1433
- 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/matching/matchRequestUrl.test.ts +87 -3
- package/src/core/utils/matching/matchRequestUrl.ts +2 -2
- 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
package/lib/node/index.mjs
CHANGED
|
@@ -1,184 +1,184 @@
|
|
|
1
|
-
// src/node/
|
|
2
|
-
import { AsyncLocalStorage } from "async_hooks";
|
|
1
|
+
// src/node/setup-server.ts
|
|
3
2
|
import { ClientRequestInterceptor } from "@mswjs/interceptors/ClientRequest";
|
|
4
3
|
import { XMLHttpRequestInterceptor } from "@mswjs/interceptors/XMLHttpRequest";
|
|
5
4
|
import { FetchInterceptor } from "@mswjs/interceptors/fetch";
|
|
6
|
-
|
|
7
|
-
// src/node/SetupServerCommonApi.ts
|
|
8
|
-
import { invariant } from "outvariant";
|
|
5
|
+
import { WebSocketInterceptor } from "@mswjs/interceptors/WebSocket";
|
|
9
6
|
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
} from
|
|
13
|
-
import { SetupApi } from '../core/SetupApi.mjs';
|
|
14
|
-
import { handleRequest } from '../core/utils/handleRequest.mjs';
|
|
15
|
-
import { mergeRight } from '../core/utils/internal/mergeRight.mjs';
|
|
16
|
-
import { InternalError, devUtils } from '../core/utils/internal/devUtils.mjs';
|
|
17
|
-
import { handleWebSocketEvent } from '../core/ws/handleWebSocketEvent.mjs';
|
|
18
|
-
import { webSocketInterceptor } from '../core/ws/webSocketInterceptor.mjs';
|
|
19
|
-
import { isHandlerKind } from '../core/utils/internal/isHandlerKind.mjs';
|
|
20
|
-
var DEFAULT_LISTEN_OPTIONS = {
|
|
21
|
-
onUnhandledRequest: "warn"
|
|
22
|
-
};
|
|
23
|
-
var SetupServerCommonApi = class extends SetupApi {
|
|
24
|
-
interceptor;
|
|
25
|
-
resolvedOptions;
|
|
26
|
-
constructor(interceptors, handlers) {
|
|
27
|
-
super(...handlers);
|
|
28
|
-
this.interceptor = new BatchInterceptor({
|
|
29
|
-
name: "setup-server",
|
|
30
|
-
interceptors
|
|
31
|
-
});
|
|
32
|
-
this.resolvedOptions = {};
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Subscribe to all requests that are using the interceptor object
|
|
36
|
-
*/
|
|
37
|
-
init() {
|
|
38
|
-
this.interceptor.on(
|
|
39
|
-
"request",
|
|
40
|
-
async ({ request, requestId, controller }) => {
|
|
41
|
-
const response = await handleRequest(
|
|
42
|
-
request,
|
|
43
|
-
requestId,
|
|
44
|
-
this.handlersController.currentHandlers().filter(isHandlerKind("RequestHandler")),
|
|
45
|
-
this.resolvedOptions,
|
|
46
|
-
this.emitter,
|
|
47
|
-
{
|
|
48
|
-
onPassthroughResponse(request2) {
|
|
49
|
-
const acceptHeader = request2.headers.get("accept");
|
|
50
|
-
if (acceptHeader) {
|
|
51
|
-
const nextAcceptHeader = acceptHeader.replace(
|
|
52
|
-
/(,\s+)?msw\/passthrough/,
|
|
53
|
-
""
|
|
54
|
-
);
|
|
55
|
-
if (nextAcceptHeader) {
|
|
56
|
-
request2.headers.set("accept", nextAcceptHeader);
|
|
57
|
-
} else {
|
|
58
|
-
request2.headers.delete("accept");
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
);
|
|
64
|
-
if (response) {
|
|
65
|
-
controller.respondWith(response);
|
|
66
|
-
}
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
);
|
|
70
|
-
this.interceptor.on("unhandledException", ({ error }) => {
|
|
71
|
-
if (error instanceof InternalError) {
|
|
72
|
-
throw error;
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
this.interceptor.on(
|
|
76
|
-
"response",
|
|
77
|
-
({ response, isMockedResponse, request, requestId }) => {
|
|
78
|
-
this.emitter.emit(
|
|
79
|
-
isMockedResponse ? "response:mocked" : "response:bypass",
|
|
80
|
-
{
|
|
81
|
-
response,
|
|
82
|
-
request,
|
|
83
|
-
requestId
|
|
84
|
-
}
|
|
85
|
-
);
|
|
86
|
-
}
|
|
87
|
-
);
|
|
88
|
-
handleWebSocketEvent({
|
|
89
|
-
getUnhandledRequestStrategy: () => {
|
|
90
|
-
return this.resolvedOptions.onUnhandledRequest;
|
|
91
|
-
},
|
|
92
|
-
getHandlers: () => {
|
|
93
|
-
return this.handlersController.currentHandlers();
|
|
94
|
-
},
|
|
95
|
-
onMockedConnection: () => {
|
|
96
|
-
},
|
|
97
|
-
onPassthroughConnection: () => {
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
listen(options = {}) {
|
|
102
|
-
this.resolvedOptions = mergeRight(
|
|
103
|
-
DEFAULT_LISTEN_OPTIONS,
|
|
104
|
-
options
|
|
105
|
-
);
|
|
106
|
-
this.interceptor.apply();
|
|
107
|
-
this.init();
|
|
108
|
-
this.subscriptions.push(() => this.interceptor.dispose());
|
|
109
|
-
webSocketInterceptor.apply();
|
|
110
|
-
this.subscriptions.push(() => webSocketInterceptor.dispose());
|
|
111
|
-
invariant(
|
|
112
|
-
[InterceptorReadyState.APPLYING, InterceptorReadyState.APPLIED].includes(
|
|
113
|
-
this.interceptor.readyState
|
|
114
|
-
),
|
|
115
|
-
devUtils.formatMessage(
|
|
116
|
-
'Failed to start "setupServer": the interceptor failed to apply. This is likely an issue with the library and you should report it at "%s".'
|
|
117
|
-
),
|
|
118
|
-
"https://github.com/mswjs/msw/issues/new/choose"
|
|
119
|
-
);
|
|
120
|
-
}
|
|
121
|
-
close() {
|
|
122
|
-
this.dispose();
|
|
123
|
-
}
|
|
124
|
-
};
|
|
7
|
+
defineNetwork as defineNetwork2
|
|
8
|
+
} from '../core/experimental/define-network.mjs';
|
|
9
|
+
import { InterceptorSource as InterceptorSource2 } from '../core/experimental/sources/interceptor-source.mjs';
|
|
125
10
|
|
|
126
|
-
// src/node/
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
11
|
+
// src/node/async-handlers-controller.ts
|
|
12
|
+
import { AsyncLocalStorage } from "async_hooks";
|
|
13
|
+
import {
|
|
14
|
+
HandlersController
|
|
15
|
+
} from '../core/experimental/handlers-controller.mjs';
|
|
16
|
+
var AsyncHandlersController = class extends HandlersController {
|
|
17
|
+
#asyncContext;
|
|
18
|
+
#fallbackContext;
|
|
130
19
|
constructor(initialHandlers) {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
20
|
+
super();
|
|
21
|
+
const initialState = this.getInitialState(initialHandlers);
|
|
22
|
+
this.#asyncContext = new AsyncLocalStorage();
|
|
23
|
+
this.#fallbackContext = {
|
|
24
|
+
initialHandlers: initialState.initialHandlers,
|
|
25
|
+
handlers: initialState.handlers
|
|
26
|
+
};
|
|
138
27
|
}
|
|
139
|
-
|
|
140
|
-
const
|
|
141
|
-
|
|
142
|
-
|
|
28
|
+
getState() {
|
|
29
|
+
const { initialHandlers, handlers } = this.#getContext();
|
|
30
|
+
return {
|
|
31
|
+
initialHandlers,
|
|
32
|
+
handlers
|
|
33
|
+
};
|
|
143
34
|
}
|
|
144
|
-
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
new XMLHttpRequestInterceptor(),
|
|
153
|
-
new FetchInterceptor()
|
|
154
|
-
]) {
|
|
155
|
-
super(interceptors, handlers);
|
|
156
|
-
this.handlersController = new AsyncHandlersController(handlers);
|
|
35
|
+
setState(nextState) {
|
|
36
|
+
const context = this.#getContext();
|
|
37
|
+
if (nextState.initialHandlers) {
|
|
38
|
+
context.initialHandlers = nextState.initialHandlers;
|
|
39
|
+
}
|
|
40
|
+
if (nextState.handlers) {
|
|
41
|
+
context.handlers = nextState.handlers;
|
|
42
|
+
}
|
|
157
43
|
}
|
|
158
44
|
boundary(callback) {
|
|
159
45
|
return (...args) => {
|
|
160
|
-
|
|
46
|
+
const initialHandlers = { ...this.getState().handlers };
|
|
47
|
+
return this.#asyncContext.run(
|
|
161
48
|
{
|
|
162
|
-
initialHandlers
|
|
163
|
-
handlers:
|
|
49
|
+
initialHandlers,
|
|
50
|
+
handlers: { ...initialHandlers }
|
|
164
51
|
},
|
|
165
52
|
callback,
|
|
166
53
|
...args
|
|
167
54
|
);
|
|
168
55
|
};
|
|
169
56
|
}
|
|
57
|
+
#getContext() {
|
|
58
|
+
return this.#asyncContext.getStore() || this.#fallbackContext;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// src/node/setup-server-common.ts
|
|
63
|
+
import {
|
|
64
|
+
NetworkReadyState,
|
|
65
|
+
defineNetwork
|
|
66
|
+
} from '../core/experimental/define-network.mjs';
|
|
67
|
+
import { InterceptorSource } from '../core/experimental/sources/interceptor-source.mjs';
|
|
68
|
+
import { fromLegacyOnUnhandledRequest } from '../core/experimental/compat.mjs';
|
|
69
|
+
function defineSetupServerApi(network) {
|
|
70
|
+
return {
|
|
71
|
+
events: network.events,
|
|
72
|
+
listen(options) {
|
|
73
|
+
network.configure({
|
|
74
|
+
onUnhandledFrame: fromLegacyOnUnhandledRequest(() => {
|
|
75
|
+
return options?.onUnhandledRequest || "warn";
|
|
76
|
+
})
|
|
77
|
+
});
|
|
78
|
+
network.enable();
|
|
79
|
+
},
|
|
80
|
+
use: network.use.bind(network),
|
|
81
|
+
resetHandlers: network.resetHandlers.bind(network),
|
|
82
|
+
restoreHandlers: network.restoreHandlers.bind(network),
|
|
83
|
+
listHandlers: network.listHandlers.bind(network),
|
|
84
|
+
close() {
|
|
85
|
+
if (network.readyState === NetworkReadyState.DISABLED) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
network.disable();
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
var SetupServerCommonApi = class {
|
|
93
|
+
network;
|
|
94
|
+
constructor(interceptors, handlers) {
|
|
95
|
+
this.network = defineNetwork({
|
|
96
|
+
sources: [new InterceptorSource({ interceptors })],
|
|
97
|
+
handlers
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
get events() {
|
|
101
|
+
return this.network.events;
|
|
102
|
+
}
|
|
103
|
+
listen(options) {
|
|
104
|
+
this.network.configure({
|
|
105
|
+
onUnhandledFrame: fromLegacyOnUnhandledRequest(() => {
|
|
106
|
+
return options?.onUnhandledRequest || "warn";
|
|
107
|
+
})
|
|
108
|
+
});
|
|
109
|
+
this.network.enable();
|
|
110
|
+
}
|
|
111
|
+
use(...handlers) {
|
|
112
|
+
this.network.use(...handlers);
|
|
113
|
+
}
|
|
114
|
+
resetHandlers(...nextHandlers) {
|
|
115
|
+
return this.network.resetHandlers(...nextHandlers);
|
|
116
|
+
}
|
|
117
|
+
restoreHandlers() {
|
|
118
|
+
return this.network.restoreHandlers();
|
|
119
|
+
}
|
|
120
|
+
listHandlers() {
|
|
121
|
+
return this.network.listHandlers();
|
|
122
|
+
}
|
|
170
123
|
close() {
|
|
171
|
-
|
|
172
|
-
store.disable();
|
|
124
|
+
this.network.disable();
|
|
173
125
|
}
|
|
174
126
|
};
|
|
175
127
|
|
|
176
|
-
// src/node/
|
|
177
|
-
var
|
|
178
|
-
|
|
128
|
+
// src/node/setup-server.ts
|
|
129
|
+
var defaultInterceptors = [
|
|
130
|
+
new ClientRequestInterceptor(),
|
|
131
|
+
new XMLHttpRequestInterceptor(),
|
|
132
|
+
new FetchInterceptor(),
|
|
133
|
+
/**
|
|
134
|
+
* @fixme WebSocketInterceptor is in a browser-only export of Interceptors
|
|
135
|
+
* while the Interceptor class imported from the root module points to `lib/node`.
|
|
136
|
+
* An absolute madness to solve as it requires to duplicate the build config we have
|
|
137
|
+
* in MSW: shared core, CJS/ESM patching, .d.ts patching...
|
|
138
|
+
*/
|
|
139
|
+
new WebSocketInterceptor()
|
|
140
|
+
];
|
|
141
|
+
var defaultNetworkOptions = {
|
|
142
|
+
sources: [
|
|
143
|
+
new InterceptorSource2({
|
|
144
|
+
interceptors: defaultInterceptors
|
|
145
|
+
})
|
|
146
|
+
],
|
|
147
|
+
onUnhandledFrame: "warn",
|
|
148
|
+
context: {
|
|
149
|
+
quiet: true
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
function setupServer(...handlers) {
|
|
153
|
+
const handlersController = new AsyncHandlersController(handlers);
|
|
154
|
+
const network = defineNetwork2({
|
|
155
|
+
...defaultNetworkOptions,
|
|
156
|
+
handlers: handlersController
|
|
157
|
+
});
|
|
158
|
+
const commonApi = defineSetupServerApi(network);
|
|
159
|
+
return {
|
|
160
|
+
...commonApi,
|
|
161
|
+
boundary: handlersController.boundary.bind(handlersController)
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
var SetupServerApi = class extends SetupServerCommonApi {
|
|
165
|
+
#handlersController;
|
|
166
|
+
boundary;
|
|
167
|
+
constructor(handlers, interceptors) {
|
|
168
|
+
const controller = new AsyncHandlersController(handlers);
|
|
169
|
+
super(interceptors, controller);
|
|
170
|
+
const { sources: _, ...networkOptions } = defaultNetworkOptions;
|
|
171
|
+
this.network.configure(networkOptions);
|
|
172
|
+
this.#handlersController = controller;
|
|
173
|
+
this.boundary = this.#handlersController.boundary.bind(
|
|
174
|
+
this.#handlersController
|
|
175
|
+
);
|
|
176
|
+
}
|
|
179
177
|
};
|
|
180
178
|
export {
|
|
181
179
|
SetupServerApi,
|
|
180
|
+
SetupServerCommonApi,
|
|
181
|
+
defaultNetworkOptions,
|
|
182
182
|
setupServer
|
|
183
183
|
};
|
|
184
184
|
//# sourceMappingURL=index.mjs.map
|
package/lib/node/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/node/SetupServerApi.ts","../../src/node/SetupServerCommonApi.ts","../../src/node/setupServer.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks'\nimport type { HttpRequestEventMap, Interceptor } from '@mswjs/interceptors'\nimport { ClientRequestInterceptor } from '@mswjs/interceptors/ClientRequest'\nimport { XMLHttpRequestInterceptor } from '@mswjs/interceptors/XMLHttpRequest'\nimport { FetchInterceptor } from '@mswjs/interceptors/fetch'\nimport { HandlersController } from '~/core/SetupApi'\nimport type { RequestHandler } from '~/core/handlers/RequestHandler'\nimport type { WebSocketHandler } from '~/core/handlers/WebSocketHandler'\nimport type { SetupServer } from './glossary'\nimport { SetupServerCommonApi } from './SetupServerCommonApi'\n\nconst store = new AsyncLocalStorage<RequestHandlersContext>()\n\ntype RequestHandlersContext = {\n initialHandlers: Array<RequestHandler | WebSocketHandler>\n handlers: Array<RequestHandler | WebSocketHandler>\n}\n\n/**\n * A handlers controller that utilizes `AsyncLocalStorage` in Node.js\n * to prevent the request handlers list from being a shared state\n * across multiple tests.\n */\nclass AsyncHandlersController implements HandlersController {\n private rootContext: RequestHandlersContext\n\n constructor(initialHandlers: Array<RequestHandler | WebSocketHandler>) {\n this.rootContext = { initialHandlers, handlers: [] }\n }\n\n get context(): RequestHandlersContext {\n return store.getStore() || this.rootContext\n }\n\n public prepend(runtimeHandlers: Array<RequestHandler | WebSocketHandler>) {\n this.context.handlers.unshift(...runtimeHandlers)\n }\n\n public reset(nextHandlers: Array<RequestHandler | WebSocketHandler>) {\n const context = this.context\n context.handlers = []\n context.initialHandlers =\n nextHandlers.length > 0 ? nextHandlers : context.initialHandlers\n }\n\n public currentHandlers(): Array<RequestHandler | WebSocketHandler> {\n const { initialHandlers, handlers } = this.context\n return handlers.concat(initialHandlers)\n }\n}\nexport class SetupServerApi\n extends SetupServerCommonApi\n implements SetupServer\n{\n constructor(\n handlers: Array<RequestHandler | WebSocketHandler>,\n interceptors: Array<Interceptor<HttpRequestEventMap>> = [\n new ClientRequestInterceptor(),\n new XMLHttpRequestInterceptor(),\n new FetchInterceptor(),\n ],\n ) {\n super(interceptors, handlers)\n\n this.handlersController = new AsyncHandlersController(handlers)\n }\n\n public boundary<Args extends Array<any>, R>(\n callback: (...args: Args) => R,\n ): (...args: Args) => R {\n return (...args: Args): R => {\n return store.run<any, any>(\n {\n initialHandlers: this.handlersController.currentHandlers(),\n handlers: [],\n },\n callback,\n ...args,\n )\n }\n }\n\n public close(): void {\n super.close()\n store.disable()\n }\n}\n","/**\n * @note This API is extended by both \"msw/node\" and \"msw/native\"\n * so be minding about the things you import!\n */\nimport type { RequiredDeep } from 'type-fest'\nimport { invariant } from 'outvariant'\nimport {\n BatchInterceptor,\n InterceptorReadyState,\n type HttpRequestEventMap,\n type Interceptor,\n} from '@mswjs/interceptors'\nimport type { LifeCycleEventsMap, SharedOptions } from '~/core/sharedOptions'\nimport { SetupApi } from '~/core/SetupApi'\nimport { handleRequest } from '~/core/utils/handleRequest'\nimport type { RequestHandler } from '~/core/handlers/RequestHandler'\nimport type { WebSocketHandler } from '~/core/handlers/WebSocketHandler'\nimport { mergeRight } from '~/core/utils/internal/mergeRight'\nimport { InternalError, devUtils } from '~/core/utils/internal/devUtils'\nimport type { SetupServerCommon } from './glossary'\nimport { handleWebSocketEvent } from '~/core/ws/handleWebSocketEvent'\nimport { webSocketInterceptor } from '~/core/ws/webSocketInterceptor'\nimport { isHandlerKind } from '~/core/utils/internal/isHandlerKind'\n\nconst DEFAULT_LISTEN_OPTIONS: RequiredDeep<SharedOptions> = {\n onUnhandledRequest: 'warn',\n}\n\nexport class SetupServerCommonApi\n extends SetupApi<LifeCycleEventsMap>\n implements SetupServerCommon\n{\n protected readonly interceptor: BatchInterceptor<\n Array<Interceptor<HttpRequestEventMap>>,\n HttpRequestEventMap\n >\n private resolvedOptions: RequiredDeep<SharedOptions>\n\n constructor(\n interceptors: Array<Interceptor<HttpRequestEventMap>>,\n handlers: Array<RequestHandler | WebSocketHandler>,\n ) {\n super(...handlers)\n\n this.interceptor = new BatchInterceptor({\n name: 'setup-server',\n interceptors,\n })\n\n this.resolvedOptions = {} as RequiredDeep<SharedOptions>\n }\n\n /**\n * Subscribe to all requests that are using the interceptor object\n */\n private init(): void {\n this.interceptor.on(\n 'request',\n async ({ request, requestId, controller }) => {\n const response = await handleRequest(\n request,\n requestId,\n this.handlersController\n .currentHandlers()\n .filter(isHandlerKind('RequestHandler')),\n this.resolvedOptions,\n this.emitter,\n {\n onPassthroughResponse(request) {\n const acceptHeader = request.headers.get('accept')\n\n /**\n * @note Remove the internal bypass request header.\n * In the browser, this is done by the worker script.\n * In Node.js, it has to be done here.\n */\n if (acceptHeader) {\n const nextAcceptHeader = acceptHeader.replace(\n /(,\\s+)?msw\\/passthrough/,\n '',\n )\n\n if (nextAcceptHeader) {\n request.headers.set('accept', nextAcceptHeader)\n } else {\n request.headers.delete('accept')\n }\n }\n },\n },\n )\n\n if (response) {\n controller.respondWith(response)\n }\n\n return\n },\n )\n\n this.interceptor.on('unhandledException', ({ error }) => {\n if (error instanceof InternalError) {\n throw error\n }\n })\n\n this.interceptor.on(\n 'response',\n ({ response, isMockedResponse, request, requestId }) => {\n this.emitter.emit(\n isMockedResponse ? 'response:mocked' : 'response:bypass',\n {\n response,\n request,\n requestId,\n },\n )\n },\n )\n\n // Preconfigure the WebSocket interception but don't enable it just yet.\n // It will be enabled when the server starts.\n handleWebSocketEvent({\n getUnhandledRequestStrategy: () => {\n return this.resolvedOptions.onUnhandledRequest\n },\n getHandlers: () => {\n return this.handlersController.currentHandlers()\n },\n onMockedConnection: () => {},\n onPassthroughConnection: () => {},\n })\n }\n\n public listen(options: Partial<SharedOptions> = {}): void {\n this.resolvedOptions = mergeRight(\n DEFAULT_LISTEN_OPTIONS,\n options,\n ) as RequiredDeep<SharedOptions>\n\n // Apply the interceptor when starting the server.\n // Attach the event listeners to the interceptor here\n // so they get re-attached whenever `.listen()` is called.\n this.interceptor.apply()\n this.init()\n this.subscriptions.push(() => this.interceptor.dispose())\n\n // Apply the WebSocket interception.\n webSocketInterceptor.apply()\n this.subscriptions.push(() => webSocketInterceptor.dispose())\n\n // Assert that the interceptor has been applied successfully.\n // Also guards us from forgetting to call \"interceptor.apply()\"\n // as a part of the \"listen\" method.\n invariant(\n [InterceptorReadyState.APPLYING, InterceptorReadyState.APPLIED].includes(\n this.interceptor.readyState,\n ),\n devUtils.formatMessage(\n 'Failed to start \"setupServer\": the interceptor failed to apply. This is likely an issue with the library and you should report it at \"%s\".',\n ),\n 'https://github.com/mswjs/msw/issues/new/choose',\n )\n }\n\n public close(): void {\n this.dispose()\n }\n}\n","import type { RequestHandler } from '~/core/handlers/RequestHandler'\nimport type { WebSocketHandler } from '~/core/handlers/WebSocketHandler'\nimport { SetupServerApi } from './SetupServerApi'\n\n/**\n * Sets up a requests interception in Node.js with the given request handlers.\n * @param {RequestHandler[]} handlers List of request handlers.\n *\n * @see {@link https://mswjs.io/docs/api/setup-server `setupServer()` API reference}\n */\nexport const setupServer = (\n ...handlers: Array<RequestHandler | WebSocketHandler>\n): SetupServerApi => {\n return new SetupServerApi(handlers)\n}\n"],"mappings":"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","names":["request"]}
|
|
1
|
+
{"version":3,"sources":["../../src/node/setup-server.ts","../../src/node/async-handlers-controller.ts","../../src/node/setup-server-common.ts"],"sourcesContent":["import type { Interceptor } from '@mswjs/interceptors'\nimport { ClientRequestInterceptor } from '@mswjs/interceptors/ClientRequest'\nimport { XMLHttpRequestInterceptor } from '@mswjs/interceptors/XMLHttpRequest'\nimport { FetchInterceptor } from '@mswjs/interceptors/fetch'\nimport { WebSocketInterceptor } from '@mswjs/interceptors/WebSocket'\nimport {\n defineNetwork,\n type DefineNetworkOptions,\n} from '#core/experimental/define-network'\nimport { type AnyHandler } from '#core/experimental/handlers-controller'\nimport { InterceptorSource } from '#core/experimental/sources/interceptor-source'\nimport { SetupServer } from './glossary'\nimport { AsyncHandlersController } from './async-handlers-controller'\nimport {\n defineSetupServerApi,\n SetupServerCommonApi,\n} from './setup-server-common'\n\nconst defaultInterceptors: Array<Interceptor<any>> = [\n new ClientRequestInterceptor(),\n new XMLHttpRequestInterceptor(),\n new FetchInterceptor(),\n /**\n * @fixme WebSocketInterceptor is in a browser-only export of Interceptors\n * while the Interceptor class imported from the root module points to `lib/node`.\n * An absolute madness to solve as it requires to duplicate the build config we have\n * in MSW: shared core, CJS/ESM patching, .d.ts patching...\n */\n new WebSocketInterceptor() as any,\n]\n\nexport const defaultNetworkOptions: DefineNetworkOptions<[InterceptorSource]> =\n {\n sources: [\n new InterceptorSource({\n interceptors: defaultInterceptors,\n }),\n ],\n onUnhandledFrame: 'warn',\n context: {\n quiet: true,\n },\n }\n\n/**\n * Enables request interception in Node.js with the given request handlers.\n * @see {@link https://mswjs.io/docs/api/setup-server `setupServer()` API reference}\n */\nexport function setupServer(...handlers: Array<AnyHandler>): SetupServer {\n const handlersController = new AsyncHandlersController(handlers)\n const network = defineNetwork({\n ...defaultNetworkOptions,\n handlers: handlersController,\n })\n\n const commonApi = defineSetupServerApi(network)\n\n return {\n ...commonApi,\n boundary: handlersController.boundary.bind(handlersController),\n }\n}\n\n/**\n * @deprecated\n * Please use the `defineNetwork` API instead.\n */\nexport class SetupServerApi\n extends SetupServerCommonApi\n implements SetupServer\n{\n #handlersController: AsyncHandlersController\n\n public boundary: AsyncHandlersController['boundary']\n\n constructor(\n handlers: Array<AnyHandler>,\n interceptors: Array<Interceptor<any>>,\n ) {\n const controller = new AsyncHandlersController(handlers)\n super(interceptors, controller)\n\n const { sources: _, ...networkOptions } = defaultNetworkOptions\n this.network.configure(networkOptions)\n\n this.#handlersController = controller\n this.boundary = this.#handlersController.boundary.bind(\n this.#handlersController,\n )\n }\n}\n","import { AsyncLocalStorage } from 'node:async_hooks'\nimport {\n type AnyHandler,\n type HandlersMap,\n HandlersController,\n HandlersControllerState,\n} from '#core/experimental/handlers-controller'\n\nexport interface AsyncHandlersControllerContext {\n initialHandlers: HandlersMap\n handlers: HandlersMap\n}\n\nexport class AsyncHandlersController extends HandlersController {\n #asyncContext: AsyncLocalStorage<AsyncHandlersControllerContext>\n #fallbackContext: AsyncHandlersControllerContext\n\n constructor(initialHandlers: Array<AnyHandler>) {\n super()\n\n const initialState = this.getInitialState(initialHandlers)\n\n this.#asyncContext = new AsyncLocalStorage()\n this.#fallbackContext = {\n initialHandlers: initialState.initialHandlers,\n handlers: initialState.handlers,\n }\n }\n\n protected getState() {\n const { initialHandlers, handlers } = this.#getContext()\n\n return {\n initialHandlers,\n handlers,\n }\n }\n\n protected setState(nextState: HandlersControllerState): void {\n const context = this.#getContext()\n\n if (nextState.initialHandlers) {\n context.initialHandlers = nextState.initialHandlers\n }\n\n if (nextState.handlers) {\n context.handlers = nextState.handlers\n }\n }\n\n public boundary<Args extends Array<any>, R>(callback: (...args: Args) => R) {\n return (...args: Args) => {\n const initialHandlers = { ...this.getState().handlers }\n\n return this.#asyncContext.run(\n {\n initialHandlers,\n handlers: { ...initialHandlers },\n },\n callback,\n ...args,\n )\n }\n }\n\n #getContext() {\n return this.#asyncContext.getStore() || this.#fallbackContext\n }\n}\n","import type { PartialDeep } from 'type-fest'\nimport { Interceptor } from '@mswjs/interceptors'\nimport {\n type NetworkApi,\n NetworkReadyState,\n defineNetwork,\n} from '#core/experimental/define-network'\nimport { type AnyHandler } from '#core/experimental/handlers-controller'\nimport { type HandlersController } from '#core/experimental/handlers-controller'\nimport { InterceptorSource } from '#core/experimental/sources/interceptor-source'\nimport { fromLegacyOnUnhandledRequest } from '#core/experimental/compat'\nimport type { ListenOptions, SetupServerCommon } from './glossary'\n\n/**\n * Define the common `setupServer` API around the given network.\n * This is used by both `msw/node` and `msw/native` to implement the same\n * baseline setup methods, like `.use()`, `.resetHandlers()`, `.close()`, etc.\n */\nexport function defineSetupServerApi(\n network: NetworkApi<any>,\n): SetupServerCommon {\n return {\n events: network.events,\n listen(options) {\n network.configure({\n onUnhandledFrame: fromLegacyOnUnhandledRequest(() => {\n return options?.onUnhandledRequest || 'warn'\n }),\n })\n\n network.enable()\n },\n use: network.use.bind(network),\n resetHandlers: network.resetHandlers.bind(network),\n restoreHandlers: network.restoreHandlers.bind(network),\n listHandlers: network.listHandlers.bind(network),\n close() {\n /**\n * @note Ignore closing after closed for backwards compatibility.\n */\n if (network.readyState === NetworkReadyState.DISABLED) {\n return\n }\n\n network.disable()\n },\n }\n}\n\n/**\n * @deprecated\n * Please use the `defineNetwork` API instead.\n */\nexport class SetupServerCommonApi implements SetupServerCommon {\n protected network: NetworkApi<[InterceptorSource]>\n\n constructor(\n interceptors: Array<Interceptor<any>>,\n handlers: Array<AnyHandler> | HandlersController,\n ) {\n this.network = defineNetwork({\n sources: [new InterceptorSource({ interceptors })],\n handlers,\n })\n }\n\n get events() {\n return this.network.events\n }\n\n public listen(options?: PartialDeep<ListenOptions>): void {\n this.network.configure({\n onUnhandledFrame: fromLegacyOnUnhandledRequest(() => {\n return options?.onUnhandledRequest || 'warn'\n }),\n })\n\n this.network.enable()\n }\n\n public use(...handlers: Array<AnyHandler>): void {\n this.network.use(...handlers)\n }\n\n public resetHandlers(...nextHandlers: Array<AnyHandler>): void {\n return this.network.resetHandlers(...nextHandlers)\n }\n\n public restoreHandlers(): void {\n return this.network.restoreHandlers()\n }\n\n public listHandlers(): ReadonlyArray<AnyHandler> {\n return this.network.listHandlers()\n }\n\n public close(): void {\n this.network.disable()\n }\n}\n"],"mappings":"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","names":["defineNetwork","InterceptorSource","InterceptorSource","defineNetwork"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "msw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.13.0",
|
|
4
4
|
"description": "Seamless REST/GraphQL API mocking library for browser and Node.js.",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "./lib/core/index.js",
|
|
@@ -158,9 +158,17 @@
|
|
|
158
158
|
"default": "./lib/core/ws.js"
|
|
159
159
|
}
|
|
160
160
|
},
|
|
161
|
+
"./experimental": {
|
|
162
|
+
"import": "./lib/core/experimental/index.mjs",
|
|
163
|
+
"default": "./lib/core/experimental/index.js"
|
|
164
|
+
},
|
|
161
165
|
"./mockServiceWorker.js": "./lib/mockServiceWorker.js",
|
|
162
166
|
"./package.json": "./package.json"
|
|
163
167
|
},
|
|
168
|
+
"imports": {
|
|
169
|
+
"#core": "./src/core",
|
|
170
|
+
"#core/*": "./src/core/*"
|
|
171
|
+
},
|
|
164
172
|
"bin": {
|
|
165
173
|
"msw": "cli/index.js"
|
|
166
174
|
},
|
|
@@ -285,7 +293,7 @@
|
|
|
285
293
|
"vitest-environment-miniflare": "^2.14.4",
|
|
286
294
|
"webpack": "^5.95.0",
|
|
287
295
|
"webpack-http-server": "^0.5.0",
|
|
288
|
-
"msw": "2.
|
|
296
|
+
"msw": "2.13.0"
|
|
289
297
|
},
|
|
290
298
|
"peerDependencies": {
|
|
291
299
|
"typescript": ">= 4.8.x"
|
|
@@ -1,33 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
LifeCycleEventsMap,
|
|
7
|
-
SharedOptions,
|
|
8
|
-
} from '~/core/sharedOptions'
|
|
9
|
-
import { RequestHandler } from '~/core/handlers/RequestHandler'
|
|
10
|
-
import type { RequiredDeep } from '~/core/typeUtils'
|
|
11
|
-
import type { WebSocketHandler } from '~/core/handlers/WebSocketHandler'
|
|
12
|
-
import type { WorkerChannel } from '../utils/workerChannel'
|
|
1
|
+
import type { LifeCycleEventEmitter, SharedOptions } from '#core/sharedOptions'
|
|
2
|
+
import type { RequiredDeep } from '#core/typeUtils'
|
|
3
|
+
import type { HttpNetworkFrameEventMap } from '#core/experimental/frames/http-frame'
|
|
4
|
+
import type { WebSocketNetworkFrameEventMap } from '#core/experimental/frames/websocket-frame'
|
|
5
|
+
import { AnyHandler } from '#core/experimental/handlers-controller'
|
|
13
6
|
|
|
14
7
|
export interface StringifiedResponse extends ResponseInit {
|
|
15
8
|
body: string | ArrayBuffer | ReadableStream<Uint8Array> | null
|
|
16
9
|
}
|
|
17
10
|
|
|
18
|
-
export type SetupWorkerInternalContext = {
|
|
19
|
-
isMockingEnabled: boolean
|
|
20
|
-
workerStoppedAt?: number
|
|
21
|
-
startOptions: RequiredDeep<StartOptions>
|
|
22
|
-
workerPromise: DeferredPromise<ServiceWorker>
|
|
23
|
-
registration: ServiceWorkerRegistration | undefined
|
|
24
|
-
getRequestHandlers: () => Array<RequestHandler | WebSocketHandler>
|
|
25
|
-
emitter: Emitter<LifeCycleEventsMap>
|
|
26
|
-
keepAliveInterval?: number
|
|
27
|
-
workerChannel: WorkerChannel
|
|
28
|
-
fallbackInterceptor?: Interceptor<HttpRequestEventMap>
|
|
29
|
-
}
|
|
30
|
-
|
|
31
11
|
export type ServiceWorkerInstanceTuple = [
|
|
32
12
|
ServiceWorker | null,
|
|
33
13
|
ServiceWorkerRegistration,
|
|
@@ -62,6 +42,9 @@ export interface StartOptions extends SharedOptions {
|
|
|
62
42
|
* Defers any network requests until the Service Worker
|
|
63
43
|
* instance is activated.
|
|
64
44
|
* @default true
|
|
45
|
+
* @deprecated
|
|
46
|
+
* Please use a proper browser integration instead.
|
|
47
|
+
* @see https://mswjs.io/docs/integrations/browser
|
|
65
48
|
*/
|
|
66
49
|
waitUntilReady?: boolean
|
|
67
50
|
|
|
@@ -98,11 +81,11 @@ export interface SetupWorker {
|
|
|
98
81
|
|
|
99
82
|
/**
|
|
100
83
|
* Prepends given request handlers to the list of existing handlers.
|
|
101
|
-
* @param {
|
|
84
|
+
* @param {Array<AnyHandler>} handlers List of runtime request handlers.
|
|
102
85
|
*
|
|
103
86
|
* @see {@link https://mswjs.io/docs/api/setup-worker/use `worker.use()` API reference}
|
|
104
87
|
*/
|
|
105
|
-
use: (...handlers: Array<
|
|
88
|
+
use: (...handlers: Array<AnyHandler>) => void
|
|
106
89
|
|
|
107
90
|
/**
|
|
108
91
|
* Marks all request handlers that respond using `res.once()` as unused.
|
|
@@ -113,20 +96,18 @@ export interface SetupWorker {
|
|
|
113
96
|
|
|
114
97
|
/**
|
|
115
98
|
* Resets request handlers to the initial list given to the `setupWorker` call, or to the explicit next request handlers list, if given.
|
|
116
|
-
* @param {
|
|
99
|
+
* @param {Array<AnyHandler>} nextHandlers List of the new initial request handlers.
|
|
117
100
|
*
|
|
118
101
|
* @see {@link https://mswjs.io/docs/api/setup-worker/reset-handlers `worker.resetHandlers()` API reference}
|
|
119
102
|
*/
|
|
120
|
-
resetHandlers: (
|
|
121
|
-
...nextHandlers: Array<RequestHandler | WebSocketHandler>
|
|
122
|
-
) => void
|
|
103
|
+
resetHandlers: (...nextHandlers: Array<AnyHandler>) => void
|
|
123
104
|
|
|
124
105
|
/**
|
|
125
106
|
* Returns a readonly list of currently active request handlers.
|
|
126
107
|
*
|
|
127
108
|
* @see {@link https://mswjs.io/docs/api/setup-worker/list-handlers `worker.listHandlers()` API reference}
|
|
128
109
|
*/
|
|
129
|
-
listHandlers()
|
|
110
|
+
listHandlers: () => ReadonlyArray<AnyHandler>
|
|
130
111
|
|
|
131
112
|
/**
|
|
132
113
|
* Life-cycle events.
|
|
@@ -134,5 +115,7 @@ export interface SetupWorker {
|
|
|
134
115
|
*
|
|
135
116
|
* @see {@link https://mswjs.io/docs/api/life-cycle-events Life-cycle Events API reference}
|
|
136
117
|
*/
|
|
137
|
-
events: LifeCycleEventEmitter<
|
|
118
|
+
events: LifeCycleEventEmitter<
|
|
119
|
+
HttpNetworkFrameEventMap | WebSocketNetworkFrameEventMap
|
|
120
|
+
>
|
|
138
121
|
}
|
package/src/browser/index.ts
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
export { setupWorker } from './
|
|
2
|
-
export type { SetupWorker, StartOptions } from './
|
|
3
|
-
export { SetupWorkerApi } from './setupWorker/setupWorker'
|
|
1
|
+
export { setupWorker, SetupWorkerApi } from './setup-worker'
|
|
2
|
+
export type { SetupWorker, StartOptions } from './glossary'
|