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
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { TypedEvent } from 'rettime';
|
|
2
|
+
import { WebSocketConnectionData } from '@mswjs/interceptors/WebSocket';
|
|
3
|
+
import { WebSocketHandler } from '../../handlers/WebSocketHandler.mjs';
|
|
4
|
+
import { N as NetworkFrame, b as UnhandledFrameHandle, a as NetworkFrameResolutionContext } from '../../network-frame-B7A0ggXE.mjs';
|
|
5
|
+
import { HandlersController, AnyHandler } from '../handlers-controller.mjs';
|
|
6
|
+
import 'strict-event-emitter';
|
|
7
|
+
import '../../utils/matching/matchRequestUrl.mjs';
|
|
8
|
+
import '../../HttpResponse-DlRR1D-f.mjs';
|
|
9
|
+
import '@mswjs/interceptors';
|
|
10
|
+
import '../../utils/internal/isIterable.mjs';
|
|
11
|
+
import '../../typeUtils.mjs';
|
|
12
|
+
import 'graphql';
|
|
13
|
+
|
|
14
|
+
interface WebSocketNetworkFrameOptions {
|
|
15
|
+
connection: WebSocketConnectionData;
|
|
16
|
+
}
|
|
17
|
+
type WebSocketNetworkFrameEventMap = {
|
|
18
|
+
connection: WebSocketConnectionEvent;
|
|
19
|
+
unhandledException: UnhandledWebSocketExceptionEvent;
|
|
20
|
+
};
|
|
21
|
+
declare class WebSocketConnectionEvent<DataType extends {
|
|
22
|
+
url: URL;
|
|
23
|
+
protocols: string | Array<string> | undefined;
|
|
24
|
+
} = {
|
|
25
|
+
url: URL;
|
|
26
|
+
protocols: string | Array<string> | undefined;
|
|
27
|
+
}, ReturnType = void, EventType extends string = string> extends TypedEvent<DataType, ReturnType, EventType> {
|
|
28
|
+
readonly url: URL;
|
|
29
|
+
readonly protocols: string | Array<string> | undefined;
|
|
30
|
+
constructor(type: EventType, data: DataType);
|
|
31
|
+
}
|
|
32
|
+
declare class UnhandledWebSocketExceptionEvent<DataType extends {
|
|
33
|
+
url: URL;
|
|
34
|
+
protocols: string | Array<string> | undefined;
|
|
35
|
+
error: unknown;
|
|
36
|
+
} = {
|
|
37
|
+
url: URL;
|
|
38
|
+
protocols: string | Array<string> | undefined;
|
|
39
|
+
error: unknown;
|
|
40
|
+
}, ReturnType = void, EventType extends string = string> extends TypedEvent<DataType, ReturnType, EventType> {
|
|
41
|
+
readonly url: URL;
|
|
42
|
+
readonly protocols: string | Array<string> | undefined;
|
|
43
|
+
readonly error: unknown;
|
|
44
|
+
constructor(type: EventType, data: DataType);
|
|
45
|
+
}
|
|
46
|
+
declare abstract class WebSocketNetworkFrame extends NetworkFrame<'ws', {
|
|
47
|
+
connection: WebSocketConnectionData;
|
|
48
|
+
}, WebSocketNetworkFrameEventMap> {
|
|
49
|
+
constructor(options: WebSocketNetworkFrameOptions);
|
|
50
|
+
getHandlers(controller: HandlersController): Array<AnyHandler>;
|
|
51
|
+
resolve(handlers: Array<WebSocketHandler>, onUnhandledFrame: UnhandledFrameHandle, resolutionContext?: NetworkFrameResolutionContext): Promise<boolean | null>;
|
|
52
|
+
getUnhandledMessage(): Promise<string>;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export { WebSocketNetworkFrame, type WebSocketNetworkFrameEventMap, type WebSocketNetworkFrameOptions };
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { TypedEvent } from 'rettime';
|
|
2
|
+
import { WebSocketConnectionData } from '@mswjs/interceptors/WebSocket';
|
|
3
|
+
import { WebSocketHandler } from '../../handlers/WebSocketHandler.js';
|
|
4
|
+
import { N as NetworkFrame, b as UnhandledFrameHandle, a as NetworkFrameResolutionContext } from '../../network-frame-usYiHS0K.js';
|
|
5
|
+
import { HandlersController, AnyHandler } from '../handlers-controller.js';
|
|
6
|
+
import 'strict-event-emitter';
|
|
7
|
+
import '../../utils/matching/matchRequestUrl.js';
|
|
8
|
+
import '../../HttpResponse-CksOMVAa.js';
|
|
9
|
+
import '@mswjs/interceptors';
|
|
10
|
+
import '../../utils/internal/isIterable.js';
|
|
11
|
+
import '../../typeUtils.js';
|
|
12
|
+
import 'graphql';
|
|
13
|
+
|
|
14
|
+
interface WebSocketNetworkFrameOptions {
|
|
15
|
+
connection: WebSocketConnectionData;
|
|
16
|
+
}
|
|
17
|
+
type WebSocketNetworkFrameEventMap = {
|
|
18
|
+
connection: WebSocketConnectionEvent;
|
|
19
|
+
unhandledException: UnhandledWebSocketExceptionEvent;
|
|
20
|
+
};
|
|
21
|
+
declare class WebSocketConnectionEvent<DataType extends {
|
|
22
|
+
url: URL;
|
|
23
|
+
protocols: string | Array<string> | undefined;
|
|
24
|
+
} = {
|
|
25
|
+
url: URL;
|
|
26
|
+
protocols: string | Array<string> | undefined;
|
|
27
|
+
}, ReturnType = void, EventType extends string = string> extends TypedEvent<DataType, ReturnType, EventType> {
|
|
28
|
+
readonly url: URL;
|
|
29
|
+
readonly protocols: string | Array<string> | undefined;
|
|
30
|
+
constructor(type: EventType, data: DataType);
|
|
31
|
+
}
|
|
32
|
+
declare class UnhandledWebSocketExceptionEvent<DataType extends {
|
|
33
|
+
url: URL;
|
|
34
|
+
protocols: string | Array<string> | undefined;
|
|
35
|
+
error: unknown;
|
|
36
|
+
} = {
|
|
37
|
+
url: URL;
|
|
38
|
+
protocols: string | Array<string> | undefined;
|
|
39
|
+
error: unknown;
|
|
40
|
+
}, ReturnType = void, EventType extends string = string> extends TypedEvent<DataType, ReturnType, EventType> {
|
|
41
|
+
readonly url: URL;
|
|
42
|
+
readonly protocols: string | Array<string> | undefined;
|
|
43
|
+
readonly error: unknown;
|
|
44
|
+
constructor(type: EventType, data: DataType);
|
|
45
|
+
}
|
|
46
|
+
declare abstract class WebSocketNetworkFrame extends NetworkFrame<'ws', {
|
|
47
|
+
connection: WebSocketConnectionData;
|
|
48
|
+
}, WebSocketNetworkFrameEventMap> {
|
|
49
|
+
constructor(options: WebSocketNetworkFrameOptions);
|
|
50
|
+
getHandlers(controller: HandlersController): Array<AnyHandler>;
|
|
51
|
+
resolve(handlers: Array<WebSocketHandler>, onUnhandledFrame: UnhandledFrameHandle, resolutionContext?: NetworkFrameResolutionContext): Promise<boolean | null>;
|
|
52
|
+
getUnhandledMessage(): Promise<string>;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export { WebSocketNetworkFrame, type WebSocketNetworkFrameEventMap, type WebSocketNetworkFrameOptions };
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var websocket_frame_exports = {};
|
|
20
|
+
__export(websocket_frame_exports, {
|
|
21
|
+
WebSocketNetworkFrame: () => WebSocketNetworkFrame
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(websocket_frame_exports);
|
|
24
|
+
var import_rettime = require("rettime");
|
|
25
|
+
var import_WebSocketHandler = require("../../handlers/WebSocketHandler");
|
|
26
|
+
var import_network_frame = require("./network-frame");
|
|
27
|
+
var import_on_unhandled_frame = require("../on-unhandled-frame");
|
|
28
|
+
var import_devUtils = require("../../utils/internal/devUtils");
|
|
29
|
+
class WebSocketConnectionEvent extends import_rettime.TypedEvent {
|
|
30
|
+
url;
|
|
31
|
+
protocols;
|
|
32
|
+
constructor(type, data) {
|
|
33
|
+
super(...[type, {}]);
|
|
34
|
+
this.url = data.url;
|
|
35
|
+
this.protocols = data.protocols;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
class UnhandledWebSocketExceptionEvent extends import_rettime.TypedEvent {
|
|
39
|
+
url;
|
|
40
|
+
protocols;
|
|
41
|
+
error;
|
|
42
|
+
constructor(type, data) {
|
|
43
|
+
super(...[type, {}]);
|
|
44
|
+
this.url = data.url;
|
|
45
|
+
this.protocols = data.protocols;
|
|
46
|
+
this.error = data.error;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
class WebSocketNetworkFrame extends import_network_frame.NetworkFrame {
|
|
50
|
+
constructor(options) {
|
|
51
|
+
super("ws", {
|
|
52
|
+
connection: options.connection
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
getHandlers(controller) {
|
|
56
|
+
return controller.getHandlersByKind("websocket");
|
|
57
|
+
}
|
|
58
|
+
async resolve(handlers, onUnhandledFrame, resolutionContext) {
|
|
59
|
+
const { connection } = this.data;
|
|
60
|
+
this.events.emit(
|
|
61
|
+
new WebSocketConnectionEvent("connection", {
|
|
62
|
+
url: connection.client.url,
|
|
63
|
+
protocols: connection.info.protocols
|
|
64
|
+
})
|
|
65
|
+
);
|
|
66
|
+
if (handlers.length === 0) {
|
|
67
|
+
await (0, import_on_unhandled_frame.executeUnhandledFrameHandle)(this, onUnhandledFrame).then(
|
|
68
|
+
() => this.passthrough(),
|
|
69
|
+
(error) => this.errorWith(error)
|
|
70
|
+
);
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
let hasMatchingHandlers = false;
|
|
74
|
+
for (const handler of handlers) {
|
|
75
|
+
const handlerConnection = await handler.run(connection, {
|
|
76
|
+
baseUrl: resolutionContext?.baseUrl?.toString(),
|
|
77
|
+
/**
|
|
78
|
+
* @note Do not emit the "connection" event when running the handler.
|
|
79
|
+
* Use the run only to get the resolved connection object.
|
|
80
|
+
*/
|
|
81
|
+
[import_WebSocketHandler.kAutoConnect]: false
|
|
82
|
+
});
|
|
83
|
+
if (!handlerConnection) {
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
hasMatchingHandlers = true;
|
|
87
|
+
const removeLogger = !resolutionContext?.quiet ? handler.log(connection) : void 0;
|
|
88
|
+
try {
|
|
89
|
+
if (!handler[import_WebSocketHandler.kConnect](handlerConnection)) {
|
|
90
|
+
removeLogger?.();
|
|
91
|
+
}
|
|
92
|
+
} catch (error) {
|
|
93
|
+
if (!this.events.emit(
|
|
94
|
+
new UnhandledWebSocketExceptionEvent("unhandledException", {
|
|
95
|
+
error,
|
|
96
|
+
url: connection.client.url,
|
|
97
|
+
protocols: connection.info.protocols
|
|
98
|
+
})
|
|
99
|
+
)) {
|
|
100
|
+
console.error(error);
|
|
101
|
+
import_devUtils.devUtils.error(
|
|
102
|
+
'Encountered an unhandled exception during the handler lookup for "%s". Please see the original error above.',
|
|
103
|
+
connection.client.url
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
throw error;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (!hasMatchingHandlers) {
|
|
110
|
+
await (0, import_on_unhandled_frame.executeUnhandledFrameHandle)(this, onUnhandledFrame).then(
|
|
111
|
+
() => this.passthrough(),
|
|
112
|
+
(error) => this.errorWith(error)
|
|
113
|
+
);
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
async getUnhandledMessage() {
|
|
119
|
+
const { connection } = this.data;
|
|
120
|
+
const details = `
|
|
121
|
+
|
|
122
|
+
\u2022 ${connection.client.url}
|
|
123
|
+
|
|
124
|
+
`;
|
|
125
|
+
return `intercepted a WebSocket connection without a matching event handler:${details}If you still wish to intercept this unhandled connection, please create an event handler for it.
|
|
126
|
+
Read more: https://mswjs.io/docs/websocket`;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=websocket-frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/experimental/frames/websocket-frame.ts"],"sourcesContent":["import { TypedEvent } from 'rettime'\nimport { type WebSocketConnectionData } from '@mswjs/interceptors/WebSocket'\nimport {\n kConnect,\n kAutoConnect,\n type WebSocketHandler,\n} from '../../handlers/WebSocketHandler'\nimport {\n NetworkFrame,\n type NetworkFrameResolutionContext,\n} from './network-frame'\nimport {\n executeUnhandledFrameHandle,\n UnhandledFrameHandle,\n} from '../on-unhandled-frame'\nimport { devUtils } from '../../utils/internal/devUtils'\nimport { HandlersController, AnyHandler } from '../handlers-controller'\n\nexport interface WebSocketNetworkFrameOptions {\n connection: WebSocketConnectionData\n}\n\nexport type WebSocketNetworkFrameEventMap = {\n connection: WebSocketConnectionEvent\n unhandledException: UnhandledWebSocketExceptionEvent\n}\n\nclass WebSocketConnectionEvent<\n DataType extends {\n url: URL\n protocols: string | Array<string> | undefined\n } = { url: URL; protocols: string | Array<string> | undefined },\n ReturnType = void,\n EventType extends string = string,\n> extends TypedEvent<DataType, ReturnType, EventType> {\n public readonly url: URL\n public readonly protocols: string | Array<string> | undefined\n\n constructor(type: EventType, data: DataType) {\n super(...([type, {}] as any))\n this.url = data.url\n this.protocols = data.protocols\n }\n}\n\nclass UnhandledWebSocketExceptionEvent<\n DataType extends {\n url: URL\n protocols: string | Array<string> | undefined\n error: unknown\n } = {\n url: URL\n protocols: string | Array<string> | undefined\n error: unknown\n },\n ReturnType = void,\n EventType extends string = string,\n> extends TypedEvent<DataType, ReturnType, EventType> {\n public readonly url: URL\n public readonly protocols: string | Array<string> | undefined\n public readonly error: unknown\n\n constructor(type: EventType, data: DataType) {\n super(...([type, {}] as any))\n this.url = data.url\n this.protocols = data.protocols\n this.error = data.error\n }\n}\n\nexport abstract class WebSocketNetworkFrame extends NetworkFrame<\n 'ws',\n {\n connection: WebSocketConnectionData\n },\n WebSocketNetworkFrameEventMap\n> {\n constructor(options: WebSocketNetworkFrameOptions) {\n super('ws', {\n connection: options.connection,\n })\n }\n\n public getHandlers(controller: HandlersController): Array<AnyHandler> {\n return controller.getHandlersByKind('websocket')\n }\n\n public async resolve(\n handlers: Array<WebSocketHandler>,\n onUnhandledFrame: UnhandledFrameHandle,\n resolutionContext?: NetworkFrameResolutionContext,\n ): Promise<boolean | null> {\n const { connection } = this.data\n\n this.events.emit(\n new WebSocketConnectionEvent('connection', {\n url: connection.client.url,\n protocols: connection.info.protocols,\n }),\n )\n\n // No WebSocket handlers defined.\n if (handlers.length === 0) {\n await executeUnhandledFrameHandle(this, onUnhandledFrame).then(\n () => this.passthrough(),\n (error) => this.errorWith(error),\n )\n\n return false\n }\n\n let hasMatchingHandlers = false\n\n for (const handler of handlers) {\n const handlerConnection = await handler.run(connection, {\n baseUrl: resolutionContext?.baseUrl?.toString(),\n /**\n * @note Do not emit the \"connection\" event when running the handler.\n * Use the run only to get the resolved connection object.\n */\n [kAutoConnect]: false,\n })\n\n if (!handlerConnection) {\n continue\n }\n\n hasMatchingHandlers = true\n\n /**\n * @note Attach the WebSocket logger *before* emitting the \"connection\" event.\n * Connection event listeners may perform actions that should be reflected in the logs\n * (e.g. closing the connection immediately). If the logger is attached after the connection,\n * those actions cannot be properly logged.\n */\n const removeLogger = !resolutionContext?.quiet\n ? handler.log(connection)\n : undefined\n\n try {\n if (!handler[kConnect](handlerConnection)) {\n removeLogger?.()\n }\n } catch (error) {\n if (\n !this.events.emit(\n new UnhandledWebSocketExceptionEvent('unhandledException', {\n error,\n url: connection.client.url,\n protocols: connection.info.protocols,\n }),\n )\n ) {\n console.error(error)\n devUtils.error(\n 'Encountered an unhandled exception during the handler lookup for \"%s\". Please see the original error above.',\n connection.client.url,\n )\n }\n\n /**\n * @note Throw the caught error so it gets picked up by WebSocketInterceptor.\n * It's the interceptor who translates handler errors to WebSocket closures.\n */\n throw error\n }\n }\n\n // No matching WebSocket handlers found.\n if (!hasMatchingHandlers) {\n await executeUnhandledFrameHandle(this, onUnhandledFrame).then(\n () => this.passthrough(),\n (error) => this.errorWith(error),\n )\n\n return false\n }\n\n return true\n }\n\n public async getUnhandledMessage(): Promise<string> {\n const { connection } = this.data\n const details = `\\n\\n \\u2022 ${connection.client.url}\\n\\n`\n\n return `intercepted a WebSocket connection without a matching event handler:${details}If you still wish to intercept this unhandled connection, please create an event handler for it.\\nRead more: https://mswjs.io/docs/websocket`\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA2B;AAE3B,8BAIO;AACP,2BAGO;AACP,gCAGO;AACP,sBAAyB;AAYzB,MAAM,iCAOI,0BAA4C;AAAA,EACpC;AAAA,EACA;AAAA,EAEhB,YAAY,MAAiB,MAAgB;AAC3C,UAAM,GAAI,CAAC,MAAM,CAAC,CAAC,CAAS;AAC5B,SAAK,MAAM,KAAK;AAChB,SAAK,YAAY,KAAK;AAAA,EACxB;AACF;AAEA,MAAM,yCAYI,0BAA4C;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EAEhB,YAAY,MAAiB,MAAgB;AAC3C,UAAM,GAAI,CAAC,MAAM,CAAC,CAAC,CAAS;AAC5B,SAAK,MAAM,KAAK;AAChB,SAAK,YAAY,KAAK;AACtB,SAAK,QAAQ,KAAK;AAAA,EACpB;AACF;AAEO,MAAe,8BAA8B,kCAMlD;AAAA,EACA,YAAY,SAAuC;AACjD,UAAM,MAAM;AAAA,MACV,YAAY,QAAQ;AAAA,IACtB,CAAC;AAAA,EACH;AAAA,EAEO,YAAY,YAAmD;AACpE,WAAO,WAAW,kBAAkB,WAAW;AAAA,EACjD;AAAA,EAEA,MAAa,QACX,UACA,kBACA,mBACyB;AACzB,UAAM,EAAE,WAAW,IAAI,KAAK;AAE5B,SAAK,OAAO;AAAA,MACV,IAAI,yBAAyB,cAAc;AAAA,QACzC,KAAK,WAAW,OAAO;AAAA,QACvB,WAAW,WAAW,KAAK;AAAA,MAC7B,CAAC;AAAA,IACH;AAGA,QAAI,SAAS,WAAW,GAAG;AACzB,gBAAM,uDAA4B,MAAM,gBAAgB,EAAE;AAAA,QACxD,MAAM,KAAK,YAAY;AAAA,QACvB,CAAC,UAAU,KAAK,UAAU,KAAK;AAAA,MACjC;AAEA,aAAO;AAAA,IACT;AAEA,QAAI,sBAAsB;AAE1B,eAAW,WAAW,UAAU;AAC9B,YAAM,oBAAoB,MAAM,QAAQ,IAAI,YAAY;AAAA,QACtD,SAAS,mBAAmB,SAAS,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,QAK9C,CAAC,oCAAY,GAAG;AAAA,MAClB,CAAC;AAED,UAAI,CAAC,mBAAmB;AACtB;AAAA,MACF;AAEA,4BAAsB;AAQtB,YAAM,eAAe,CAAC,mBAAmB,QACrC,QAAQ,IAAI,UAAU,IACtB;AAEJ,UAAI;AACF,YAAI,CAAC,QAAQ,gCAAQ,EAAE,iBAAiB,GAAG;AACzC,yBAAe;AAAA,QACjB;AAAA,MACF,SAAS,OAAO;AACd,YACE,CAAC,KAAK,OAAO;AAAA,UACX,IAAI,iCAAiC,sBAAsB;AAAA,YACzD;AAAA,YACA,KAAK,WAAW,OAAO;AAAA,YACvB,WAAW,WAAW,KAAK;AAAA,UAC7B,CAAC;AAAA,QACH,GACA;AACA,kBAAQ,MAAM,KAAK;AACnB,mCAAS;AAAA,YACP;AAAA,YACA,WAAW,OAAO;AAAA,UACpB;AAAA,QACF;AAMA,cAAM;AAAA,MACR;AAAA,IACF;AAGA,QAAI,CAAC,qBAAqB;AACxB,gBAAM,uDAA4B,MAAM,gBAAgB,EAAE;AAAA,QACxD,MAAM,KAAK,YAAY;AAAA,QACvB,CAAC,UAAU,KAAK,UAAU,KAAK;AAAA,MACjC;AAEA,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAa,sBAAuC;AAClD,UAAM,EAAE,WAAW,IAAI,KAAK;AAC5B,UAAM,UAAU;AAAA;AAAA,WAAgB,WAAW,OAAO,GAAG;AAAA;AAAA;AAErD,WAAO,uEAAuE,OAAO;AAAA;AAAA,EACvF;AACF;","names":[]}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { TypedEvent } from "rettime";
|
|
2
|
+
import {
|
|
3
|
+
kConnect,
|
|
4
|
+
kAutoConnect
|
|
5
|
+
} from '../../handlers/WebSocketHandler.mjs';
|
|
6
|
+
import {
|
|
7
|
+
NetworkFrame
|
|
8
|
+
} from './network-frame.mjs';
|
|
9
|
+
import {
|
|
10
|
+
executeUnhandledFrameHandle
|
|
11
|
+
} from '../on-unhandled-frame.mjs';
|
|
12
|
+
import { devUtils } from '../../utils/internal/devUtils.mjs';
|
|
13
|
+
class WebSocketConnectionEvent extends TypedEvent {
|
|
14
|
+
url;
|
|
15
|
+
protocols;
|
|
16
|
+
constructor(type, data) {
|
|
17
|
+
super(...[type, {}]);
|
|
18
|
+
this.url = data.url;
|
|
19
|
+
this.protocols = data.protocols;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
class UnhandledWebSocketExceptionEvent extends TypedEvent {
|
|
23
|
+
url;
|
|
24
|
+
protocols;
|
|
25
|
+
error;
|
|
26
|
+
constructor(type, data) {
|
|
27
|
+
super(...[type, {}]);
|
|
28
|
+
this.url = data.url;
|
|
29
|
+
this.protocols = data.protocols;
|
|
30
|
+
this.error = data.error;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
class WebSocketNetworkFrame extends NetworkFrame {
|
|
34
|
+
constructor(options) {
|
|
35
|
+
super("ws", {
|
|
36
|
+
connection: options.connection
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
getHandlers(controller) {
|
|
40
|
+
return controller.getHandlersByKind("websocket");
|
|
41
|
+
}
|
|
42
|
+
async resolve(handlers, onUnhandledFrame, resolutionContext) {
|
|
43
|
+
const { connection } = this.data;
|
|
44
|
+
this.events.emit(
|
|
45
|
+
new WebSocketConnectionEvent("connection", {
|
|
46
|
+
url: connection.client.url,
|
|
47
|
+
protocols: connection.info.protocols
|
|
48
|
+
})
|
|
49
|
+
);
|
|
50
|
+
if (handlers.length === 0) {
|
|
51
|
+
await executeUnhandledFrameHandle(this, onUnhandledFrame).then(
|
|
52
|
+
() => this.passthrough(),
|
|
53
|
+
(error) => this.errorWith(error)
|
|
54
|
+
);
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
let hasMatchingHandlers = false;
|
|
58
|
+
for (const handler of handlers) {
|
|
59
|
+
const handlerConnection = await handler.run(connection, {
|
|
60
|
+
baseUrl: resolutionContext?.baseUrl?.toString(),
|
|
61
|
+
/**
|
|
62
|
+
* @note Do not emit the "connection" event when running the handler.
|
|
63
|
+
* Use the run only to get the resolved connection object.
|
|
64
|
+
*/
|
|
65
|
+
[kAutoConnect]: false
|
|
66
|
+
});
|
|
67
|
+
if (!handlerConnection) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
hasMatchingHandlers = true;
|
|
71
|
+
const removeLogger = !resolutionContext?.quiet ? handler.log(connection) : void 0;
|
|
72
|
+
try {
|
|
73
|
+
if (!handler[kConnect](handlerConnection)) {
|
|
74
|
+
removeLogger?.();
|
|
75
|
+
}
|
|
76
|
+
} catch (error) {
|
|
77
|
+
if (!this.events.emit(
|
|
78
|
+
new UnhandledWebSocketExceptionEvent("unhandledException", {
|
|
79
|
+
error,
|
|
80
|
+
url: connection.client.url,
|
|
81
|
+
protocols: connection.info.protocols
|
|
82
|
+
})
|
|
83
|
+
)) {
|
|
84
|
+
console.error(error);
|
|
85
|
+
devUtils.error(
|
|
86
|
+
'Encountered an unhandled exception during the handler lookup for "%s". Please see the original error above.',
|
|
87
|
+
connection.client.url
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (!hasMatchingHandlers) {
|
|
94
|
+
await executeUnhandledFrameHandle(this, onUnhandledFrame).then(
|
|
95
|
+
() => this.passthrough(),
|
|
96
|
+
(error) => this.errorWith(error)
|
|
97
|
+
);
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
async getUnhandledMessage() {
|
|
103
|
+
const { connection } = this.data;
|
|
104
|
+
const details = `
|
|
105
|
+
|
|
106
|
+
\u2022 ${connection.client.url}
|
|
107
|
+
|
|
108
|
+
`;
|
|
109
|
+
return `intercepted a WebSocket connection without a matching event handler:${details}If you still wish to intercept this unhandled connection, please create an event handler for it.
|
|
110
|
+
Read more: https://mswjs.io/docs/websocket`;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
export {
|
|
114
|
+
WebSocketNetworkFrame
|
|
115
|
+
};
|
|
116
|
+
//# sourceMappingURL=websocket-frame.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/experimental/frames/websocket-frame.ts"],"sourcesContent":["import { TypedEvent } from 'rettime'\nimport { type WebSocketConnectionData } from '@mswjs/interceptors/WebSocket'\nimport {\n kConnect,\n kAutoConnect,\n type WebSocketHandler,\n} from '../../handlers/WebSocketHandler'\nimport {\n NetworkFrame,\n type NetworkFrameResolutionContext,\n} from './network-frame'\nimport {\n executeUnhandledFrameHandle,\n UnhandledFrameHandle,\n} from '../on-unhandled-frame'\nimport { devUtils } from '../../utils/internal/devUtils'\nimport { HandlersController, AnyHandler } from '../handlers-controller'\n\nexport interface WebSocketNetworkFrameOptions {\n connection: WebSocketConnectionData\n}\n\nexport type WebSocketNetworkFrameEventMap = {\n connection: WebSocketConnectionEvent\n unhandledException: UnhandledWebSocketExceptionEvent\n}\n\nclass WebSocketConnectionEvent<\n DataType extends {\n url: URL\n protocols: string | Array<string> | undefined\n } = { url: URL; protocols: string | Array<string> | undefined },\n ReturnType = void,\n EventType extends string = string,\n> extends TypedEvent<DataType, ReturnType, EventType> {\n public readonly url: URL\n public readonly protocols: string | Array<string> | undefined\n\n constructor(type: EventType, data: DataType) {\n super(...([type, {}] as any))\n this.url = data.url\n this.protocols = data.protocols\n }\n}\n\nclass UnhandledWebSocketExceptionEvent<\n DataType extends {\n url: URL\n protocols: string | Array<string> | undefined\n error: unknown\n } = {\n url: URL\n protocols: string | Array<string> | undefined\n error: unknown\n },\n ReturnType = void,\n EventType extends string = string,\n> extends TypedEvent<DataType, ReturnType, EventType> {\n public readonly url: URL\n public readonly protocols: string | Array<string> | undefined\n public readonly error: unknown\n\n constructor(type: EventType, data: DataType) {\n super(...([type, {}] as any))\n this.url = data.url\n this.protocols = data.protocols\n this.error = data.error\n }\n}\n\nexport abstract class WebSocketNetworkFrame extends NetworkFrame<\n 'ws',\n {\n connection: WebSocketConnectionData\n },\n WebSocketNetworkFrameEventMap\n> {\n constructor(options: WebSocketNetworkFrameOptions) {\n super('ws', {\n connection: options.connection,\n })\n }\n\n public getHandlers(controller: HandlersController): Array<AnyHandler> {\n return controller.getHandlersByKind('websocket')\n }\n\n public async resolve(\n handlers: Array<WebSocketHandler>,\n onUnhandledFrame: UnhandledFrameHandle,\n resolutionContext?: NetworkFrameResolutionContext,\n ): Promise<boolean | null> {\n const { connection } = this.data\n\n this.events.emit(\n new WebSocketConnectionEvent('connection', {\n url: connection.client.url,\n protocols: connection.info.protocols,\n }),\n )\n\n // No WebSocket handlers defined.\n if (handlers.length === 0) {\n await executeUnhandledFrameHandle(this, onUnhandledFrame).then(\n () => this.passthrough(),\n (error) => this.errorWith(error),\n )\n\n return false\n }\n\n let hasMatchingHandlers = false\n\n for (const handler of handlers) {\n const handlerConnection = await handler.run(connection, {\n baseUrl: resolutionContext?.baseUrl?.toString(),\n /**\n * @note Do not emit the \"connection\" event when running the handler.\n * Use the run only to get the resolved connection object.\n */\n [kAutoConnect]: false,\n })\n\n if (!handlerConnection) {\n continue\n }\n\n hasMatchingHandlers = true\n\n /**\n * @note Attach the WebSocket logger *before* emitting the \"connection\" event.\n * Connection event listeners may perform actions that should be reflected in the logs\n * (e.g. closing the connection immediately). If the logger is attached after the connection,\n * those actions cannot be properly logged.\n */\n const removeLogger = !resolutionContext?.quiet\n ? handler.log(connection)\n : undefined\n\n try {\n if (!handler[kConnect](handlerConnection)) {\n removeLogger?.()\n }\n } catch (error) {\n if (\n !this.events.emit(\n new UnhandledWebSocketExceptionEvent('unhandledException', {\n error,\n url: connection.client.url,\n protocols: connection.info.protocols,\n }),\n )\n ) {\n console.error(error)\n devUtils.error(\n 'Encountered an unhandled exception during the handler lookup for \"%s\". Please see the original error above.',\n connection.client.url,\n )\n }\n\n /**\n * @note Throw the caught error so it gets picked up by WebSocketInterceptor.\n * It's the interceptor who translates handler errors to WebSocket closures.\n */\n throw error\n }\n }\n\n // No matching WebSocket handlers found.\n if (!hasMatchingHandlers) {\n await executeUnhandledFrameHandle(this, onUnhandledFrame).then(\n () => this.passthrough(),\n (error) => this.errorWith(error),\n )\n\n return false\n }\n\n return true\n }\n\n public async getUnhandledMessage(): Promise<string> {\n const { connection } = this.data\n const details = `\\n\\n \\u2022 ${connection.client.url}\\n\\n`\n\n return `intercepted a WebSocket connection without a matching event handler:${details}If you still wish to intercept this unhandled connection, please create an event handler for it.\\nRead more: https://mswjs.io/docs/websocket`\n }\n}\n"],"mappings":"AAAA,SAAS,kBAAkB;AAE3B;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,OAEK;AACP,SAAS,gBAAgB;AAYzB,MAAM,iCAOI,WAA4C;AAAA,EACpC;AAAA,EACA;AAAA,EAEhB,YAAY,MAAiB,MAAgB;AAC3C,UAAM,GAAI,CAAC,MAAM,CAAC,CAAC,CAAS;AAC5B,SAAK,MAAM,KAAK;AAChB,SAAK,YAAY,KAAK;AAAA,EACxB;AACF;AAEA,MAAM,yCAYI,WAA4C;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EAEhB,YAAY,MAAiB,MAAgB;AAC3C,UAAM,GAAI,CAAC,MAAM,CAAC,CAAC,CAAS;AAC5B,SAAK,MAAM,KAAK;AAChB,SAAK,YAAY,KAAK;AACtB,SAAK,QAAQ,KAAK;AAAA,EACpB;AACF;AAEO,MAAe,8BAA8B,aAMlD;AAAA,EACA,YAAY,SAAuC;AACjD,UAAM,MAAM;AAAA,MACV,YAAY,QAAQ;AAAA,IACtB,CAAC;AAAA,EACH;AAAA,EAEO,YAAY,YAAmD;AACpE,WAAO,WAAW,kBAAkB,WAAW;AAAA,EACjD;AAAA,EAEA,MAAa,QACX,UACA,kBACA,mBACyB;AACzB,UAAM,EAAE,WAAW,IAAI,KAAK;AAE5B,SAAK,OAAO;AAAA,MACV,IAAI,yBAAyB,cAAc;AAAA,QACzC,KAAK,WAAW,OAAO;AAAA,QACvB,WAAW,WAAW,KAAK;AAAA,MAC7B,CAAC;AAAA,IACH;AAGA,QAAI,SAAS,WAAW,GAAG;AACzB,YAAM,4BAA4B,MAAM,gBAAgB,EAAE;AAAA,QACxD,MAAM,KAAK,YAAY;AAAA,QACvB,CAAC,UAAU,KAAK,UAAU,KAAK;AAAA,MACjC;AAEA,aAAO;AAAA,IACT;AAEA,QAAI,sBAAsB;AAE1B,eAAW,WAAW,UAAU;AAC9B,YAAM,oBAAoB,MAAM,QAAQ,IAAI,YAAY;AAAA,QACtD,SAAS,mBAAmB,SAAS,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,QAK9C,CAAC,YAAY,GAAG;AAAA,MAClB,CAAC;AAED,UAAI,CAAC,mBAAmB;AACtB;AAAA,MACF;AAEA,4BAAsB;AAQtB,YAAM,eAAe,CAAC,mBAAmB,QACrC,QAAQ,IAAI,UAAU,IACtB;AAEJ,UAAI;AACF,YAAI,CAAC,QAAQ,QAAQ,EAAE,iBAAiB,GAAG;AACzC,yBAAe;AAAA,QACjB;AAAA,MACF,SAAS,OAAO;AACd,YACE,CAAC,KAAK,OAAO;AAAA,UACX,IAAI,iCAAiC,sBAAsB;AAAA,YACzD;AAAA,YACA,KAAK,WAAW,OAAO;AAAA,YACvB,WAAW,WAAW,KAAK;AAAA,UAC7B,CAAC;AAAA,QACH,GACA;AACA,kBAAQ,MAAM,KAAK;AACnB,mBAAS;AAAA,YACP;AAAA,YACA,WAAW,OAAO;AAAA,UACpB;AAAA,QACF;AAMA,cAAM;AAAA,MACR;AAAA,IACF;AAGA,QAAI,CAAC,qBAAqB;AACxB,YAAM,4BAA4B,MAAM,gBAAgB,EAAE;AAAA,QACxD,MAAM,KAAK,YAAY;AAAA,QACvB,CAAC,UAAU,KAAK,UAAU,KAAK;AAAA,MACjC;AAEA,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAa,sBAAuC;AAClD,UAAM,EAAE,WAAW,IAAI,KAAK;AAC5B,UAAM,UAAU;AAAA;AAAA,WAAgB,WAAW,OAAO,GAAG;AAAA;AAAA;AAErD,WAAO,uEAAuE,OAAO;AAAA;AAAA,EACvF;AACF;","names":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { R as RequestHandler } from '../HttpResponse-DlRR1D-f.mjs';
|
|
2
|
+
import { WebSocketHandler } from '../handlers/WebSocketHandler.mjs';
|
|
3
|
+
import '@mswjs/interceptors';
|
|
4
|
+
import '../utils/internal/isIterable.mjs';
|
|
5
|
+
import '../typeUtils.mjs';
|
|
6
|
+
import 'graphql';
|
|
7
|
+
import '../utils/matching/matchRequestUrl.mjs';
|
|
8
|
+
import 'strict-event-emitter';
|
|
9
|
+
import '@mswjs/interceptors/WebSocket';
|
|
10
|
+
|
|
11
|
+
type AnyHandler = RequestHandler | WebSocketHandler;
|
|
12
|
+
type HandlersMap = Partial<Record<AnyHandler['kind'], Array<AnyHandler>>>;
|
|
13
|
+
declare function groupHandlersByKind(handlers: Array<AnyHandler>): HandlersMap;
|
|
14
|
+
interface HandlersControllerState {
|
|
15
|
+
initialHandlers: HandlersMap;
|
|
16
|
+
handlers: HandlersMap;
|
|
17
|
+
}
|
|
18
|
+
declare abstract class HandlersController {
|
|
19
|
+
#private;
|
|
20
|
+
protected getInitialState(initialHandlers: Array<AnyHandler>): HandlersControllerState;
|
|
21
|
+
protected abstract getState(): HandlersControllerState;
|
|
22
|
+
protected abstract setState(nextState: Partial<HandlersControllerState>): void;
|
|
23
|
+
currentHandlers(): Array<AnyHandler>;
|
|
24
|
+
getHandlersByKind(kind: AnyHandler['kind']): Array<AnyHandler>;
|
|
25
|
+
use(nextHandlers: Array<AnyHandler>): void;
|
|
26
|
+
reset(nextHandlers: Array<AnyHandler>): void;
|
|
27
|
+
}
|
|
28
|
+
declare class InMemoryHandlersController extends HandlersController {
|
|
29
|
+
#private;
|
|
30
|
+
constructor(initialHandlers: Array<AnyHandler>);
|
|
31
|
+
protected getState(): HandlersControllerState;
|
|
32
|
+
protected setState(nextState: Partial<HandlersControllerState>): void;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export { type AnyHandler, HandlersController, type HandlersControllerState, type HandlersMap, InMemoryHandlersController, groupHandlersByKind };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { R as RequestHandler } from '../HttpResponse-CksOMVAa.js';
|
|
2
|
+
import { WebSocketHandler } from '../handlers/WebSocketHandler.js';
|
|
3
|
+
import '@mswjs/interceptors';
|
|
4
|
+
import '../utils/internal/isIterable.js';
|
|
5
|
+
import '../typeUtils.js';
|
|
6
|
+
import 'graphql';
|
|
7
|
+
import '../utils/matching/matchRequestUrl.js';
|
|
8
|
+
import 'strict-event-emitter';
|
|
9
|
+
import '@mswjs/interceptors/WebSocket';
|
|
10
|
+
|
|
11
|
+
type AnyHandler = RequestHandler | WebSocketHandler;
|
|
12
|
+
type HandlersMap = Partial<Record<AnyHandler['kind'], Array<AnyHandler>>>;
|
|
13
|
+
declare function groupHandlersByKind(handlers: Array<AnyHandler>): HandlersMap;
|
|
14
|
+
interface HandlersControllerState {
|
|
15
|
+
initialHandlers: HandlersMap;
|
|
16
|
+
handlers: HandlersMap;
|
|
17
|
+
}
|
|
18
|
+
declare abstract class HandlersController {
|
|
19
|
+
#private;
|
|
20
|
+
protected getInitialState(initialHandlers: Array<AnyHandler>): HandlersControllerState;
|
|
21
|
+
protected abstract getState(): HandlersControllerState;
|
|
22
|
+
protected abstract setState(nextState: Partial<HandlersControllerState>): void;
|
|
23
|
+
currentHandlers(): Array<AnyHandler>;
|
|
24
|
+
getHandlersByKind(kind: AnyHandler['kind']): Array<AnyHandler>;
|
|
25
|
+
use(nextHandlers: Array<AnyHandler>): void;
|
|
26
|
+
reset(nextHandlers: Array<AnyHandler>): void;
|
|
27
|
+
}
|
|
28
|
+
declare class InMemoryHandlersController extends HandlersController {
|
|
29
|
+
#private;
|
|
30
|
+
constructor(initialHandlers: Array<AnyHandler>);
|
|
31
|
+
protected getState(): HandlersControllerState;
|
|
32
|
+
protected setState(nextState: Partial<HandlersControllerState>): void;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export { type AnyHandler, HandlersController, type HandlersControllerState, type HandlersMap, InMemoryHandlersController, groupHandlersByKind };
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var handlers_controller_exports = {};
|
|
20
|
+
__export(handlers_controller_exports, {
|
|
21
|
+
HandlersController: () => HandlersController,
|
|
22
|
+
InMemoryHandlersController: () => InMemoryHandlersController,
|
|
23
|
+
groupHandlersByKind: () => groupHandlersByKind
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(handlers_controller_exports);
|
|
26
|
+
var import_outvariant = require("outvariant");
|
|
27
|
+
var import_devUtils = require("../utils/internal/devUtils");
|
|
28
|
+
function groupHandlersByKind(handlers) {
|
|
29
|
+
const groups = {};
|
|
30
|
+
for (const handler of handlers) {
|
|
31
|
+
;
|
|
32
|
+
(groups[handler.kind] ||= []).push(handler);
|
|
33
|
+
}
|
|
34
|
+
return groups;
|
|
35
|
+
}
|
|
36
|
+
class HandlersController {
|
|
37
|
+
getInitialState(initialHandlers) {
|
|
38
|
+
(0, import_outvariant.invariant)(
|
|
39
|
+
this.#validateHandlers(initialHandlers),
|
|
40
|
+
import_devUtils.devUtils.formatMessage(
|
|
41
|
+
"[MSW] Failed to apply given request handlers: invalid input. Did you forget to spread the request handlers Array?"
|
|
42
|
+
)
|
|
43
|
+
);
|
|
44
|
+
const normalizedInitialHandlers = groupHandlersByKind(initialHandlers);
|
|
45
|
+
return {
|
|
46
|
+
initialHandlers: normalizedInitialHandlers,
|
|
47
|
+
handlers: { ...normalizedInitialHandlers }
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
currentHandlers() {
|
|
51
|
+
return Object.values(this.getState().handlers).flat().filter((handler) => handler != null);
|
|
52
|
+
}
|
|
53
|
+
getHandlersByKind(kind) {
|
|
54
|
+
return this.getState().handlers[kind] || [];
|
|
55
|
+
}
|
|
56
|
+
use(nextHandlers) {
|
|
57
|
+
(0, import_outvariant.invariant)(
|
|
58
|
+
this.#validateHandlers(nextHandlers),
|
|
59
|
+
import_devUtils.devUtils.formatMessage(
|
|
60
|
+
'[MSW] Failed to call "use()" with the given request handlers: invalid input. Did you forget to spread the array of request handlers?'
|
|
61
|
+
)
|
|
62
|
+
);
|
|
63
|
+
if (nextHandlers.length === 0) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const { handlers } = this.getState();
|
|
67
|
+
for (let i = nextHandlers.length - 1; i >= 0; i--) {
|
|
68
|
+
const handler = nextHandlers[i];
|
|
69
|
+
handlers[handler.kind] = handlers[handler.kind] ? [handler, ...handlers[handler.kind]] : [handler];
|
|
70
|
+
}
|
|
71
|
+
this.setState({ handlers });
|
|
72
|
+
}
|
|
73
|
+
reset(nextHandlers) {
|
|
74
|
+
(0, import_outvariant.invariant)(
|
|
75
|
+
nextHandlers.length > 0 ? this.#validateHandlers(nextHandlers) : true,
|
|
76
|
+
import_devUtils.devUtils.formatMessage(
|
|
77
|
+
"Failed to replace initial handlers during reset: invalid handlers. Did you forget to spread the handlers array?"
|
|
78
|
+
)
|
|
79
|
+
);
|
|
80
|
+
const { initialHandlers } = this.getState();
|
|
81
|
+
if (nextHandlers.length === 0) {
|
|
82
|
+
this.setState({
|
|
83
|
+
handlers: { ...initialHandlers }
|
|
84
|
+
});
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const normalizedNextHandlers = groupHandlersByKind(nextHandlers);
|
|
88
|
+
this.setState({
|
|
89
|
+
initialHandlers: normalizedNextHandlers,
|
|
90
|
+
handlers: { ...normalizedNextHandlers }
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
#validateHandlers(handlers) {
|
|
94
|
+
return handlers.every((handler) => !Array.isArray(handler));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
class InMemoryHandlersController extends HandlersController {
|
|
98
|
+
#handlers;
|
|
99
|
+
#initialHandlers;
|
|
100
|
+
constructor(initialHandlers) {
|
|
101
|
+
super();
|
|
102
|
+
const initialState = this.getInitialState(initialHandlers);
|
|
103
|
+
this.#initialHandlers = initialState.initialHandlers;
|
|
104
|
+
this.#handlers = initialState.handlers;
|
|
105
|
+
}
|
|
106
|
+
getState() {
|
|
107
|
+
return {
|
|
108
|
+
initialHandlers: this.#initialHandlers,
|
|
109
|
+
handlers: this.#handlers
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
setState(nextState) {
|
|
113
|
+
if (nextState.initialHandlers) {
|
|
114
|
+
this.#initialHandlers = nextState.initialHandlers;
|
|
115
|
+
}
|
|
116
|
+
if (nextState.handlers) {
|
|
117
|
+
this.#handlers = nextState.handlers;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=handlers-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/core/experimental/handlers-controller.ts"],"sourcesContent":["import { invariant } from 'outvariant'\nimport { type RequestHandler } from '../handlers/RequestHandler'\nimport { type WebSocketHandler } from '../handlers/WebSocketHandler'\nimport { devUtils } from '../utils/internal/devUtils'\n\nexport type AnyHandler = RequestHandler | WebSocketHandler\nexport type HandlersMap = Partial<Record<AnyHandler['kind'], Array<AnyHandler>>>\n\nexport function groupHandlersByKind(handlers: Array<AnyHandler>): HandlersMap {\n const groups: HandlersMap = {}\n\n /**\n * @note `Object.groupBy` is not implemented in Node.js v20.\n */\n for (const handler of handlers) {\n ;(groups[handler.kind] ||= []).push(handler)\n }\n\n return groups\n}\n\nexport interface HandlersControllerState {\n initialHandlers: HandlersMap\n handlers: HandlersMap\n}\n\nexport abstract class HandlersController {\n protected getInitialState(\n initialHandlers: Array<AnyHandler>,\n ): HandlersControllerState {\n invariant(\n this.#validateHandlers(initialHandlers),\n devUtils.formatMessage(\n '[MSW] Failed to apply given request handlers: invalid input. Did you forget to spread the request handlers Array?',\n ),\n )\n\n const normalizedInitialHandlers = groupHandlersByKind(initialHandlers)\n\n return {\n initialHandlers: normalizedInitialHandlers,\n handlers: { ...normalizedInitialHandlers },\n }\n }\n\n protected abstract getState(): HandlersControllerState\n protected abstract setState(nextState: Partial<HandlersControllerState>): void\n\n public currentHandlers(): Array<AnyHandler> {\n return Object.values(this.getState().handlers)\n .flat()\n .filter((handler) => handler != null)\n }\n\n public getHandlersByKind(kind: AnyHandler['kind']): Array<AnyHandler> {\n return this.getState().handlers[kind] || []\n }\n\n public use(nextHandlers: Array<AnyHandler>): void {\n invariant(\n this.#validateHandlers(nextHandlers),\n devUtils.formatMessage(\n '[MSW] Failed to call \"use()\" with the given request handlers: invalid input. Did you forget to spread the array of request handlers?',\n ),\n )\n\n if (nextHandlers.length === 0) {\n return\n }\n\n const { handlers } = this.getState()\n\n // Iterate over next handlers and prepend them to their respective lists.\n // Iterate in a reverse order to the keep the order of the runtime handlers as provided.\n for (let i = nextHandlers.length - 1; i >= 0; i--) {\n const handler = nextHandlers[i]\n handlers[handler.kind] = handlers[handler.kind]\n ? [handler, ...handlers[handler.kind]!]\n : [handler]\n }\n\n this.setState({ handlers })\n }\n\n public reset(nextHandlers: Array<AnyHandler>): void {\n invariant(\n nextHandlers.length > 0 ? this.#validateHandlers(nextHandlers) : true,\n devUtils.formatMessage(\n 'Failed to replace initial handlers during reset: invalid handlers. Did you forget to spread the handlers array?',\n ),\n )\n\n const { initialHandlers } = this.getState()\n\n if (nextHandlers.length === 0) {\n this.setState({\n handlers: { ...initialHandlers },\n })\n\n return\n }\n\n const normalizedNextHandlers = groupHandlersByKind(nextHandlers)\n\n this.setState({\n initialHandlers: normalizedNextHandlers,\n handlers: { ...normalizedNextHandlers },\n })\n }\n\n #validateHandlers(handlers: Array<AnyHandler>): boolean {\n return handlers.every((handler) => !Array.isArray(handler))\n }\n}\n\nexport class InMemoryHandlersController extends HandlersController {\n #handlers: HandlersMap\n #initialHandlers: HandlersMap\n\n constructor(initialHandlers: Array<AnyHandler>) {\n super()\n\n const initialState = this.getInitialState(initialHandlers)\n\n this.#initialHandlers = initialState.initialHandlers\n this.#handlers = initialState.handlers\n }\n\n protected getState(): HandlersControllerState {\n return {\n initialHandlers: this.#initialHandlers,\n handlers: this.#handlers,\n }\n }\n\n protected setState(nextState: Partial<HandlersControllerState>): void {\n if (nextState.initialHandlers) {\n this.#initialHandlers = nextState.initialHandlers\n }\n\n if (nextState.handlers) {\n this.#handlers = nextState.handlers\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAA0B;AAG1B,sBAAyB;AAKlB,SAAS,oBAAoB,UAA0C;AAC5E,QAAM,SAAsB,CAAC;AAK7B,aAAW,WAAW,UAAU;AAC9B;AAAC,KAAC,OAAO,QAAQ,IAAI,MAAM,CAAC,GAAG,KAAK,OAAO;AAAA,EAC7C;AAEA,SAAO;AACT;AAOO,MAAe,mBAAmB;AAAA,EAC7B,gBACR,iBACyB;AACzB;AAAA,MACE,KAAK,kBAAkB,eAAe;AAAA,MACtC,yBAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,UAAM,4BAA4B,oBAAoB,eAAe;AAErE,WAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,UAAU,EAAE,GAAG,0BAA0B;AAAA,IAC3C;AAAA,EACF;AAAA,EAKO,kBAAqC;AAC1C,WAAO,OAAO,OAAO,KAAK,SAAS,EAAE,QAAQ,EAC1C,KAAK,EACL,OAAO,CAAC,YAAY,WAAW,IAAI;AAAA,EACxC;AAAA,EAEO,kBAAkB,MAA6C;AACpE,WAAO,KAAK,SAAS,EAAE,SAAS,IAAI,KAAK,CAAC;AAAA,EAC5C;AAAA,EAEO,IAAI,cAAuC;AAChD;AAAA,MACE,KAAK,kBAAkB,YAAY;AAAA,MACnC,yBAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,QAAI,aAAa,WAAW,GAAG;AAC7B;AAAA,IACF;AAEA,UAAM,EAAE,SAAS,IAAI,KAAK,SAAS;AAInC,aAAS,IAAI,aAAa,SAAS,GAAG,KAAK,GAAG,KAAK;AACjD,YAAM,UAAU,aAAa,CAAC;AAC9B,eAAS,QAAQ,IAAI,IAAI,SAAS,QAAQ,IAAI,IAC1C,CAAC,SAAS,GAAG,SAAS,QAAQ,IAAI,CAAE,IACpC,CAAC,OAAO;AAAA,IACd;AAEA,SAAK,SAAS,EAAE,SAAS,CAAC;AAAA,EAC5B;AAAA,EAEO,MAAM,cAAuC;AAClD;AAAA,MACE,aAAa,SAAS,IAAI,KAAK,kBAAkB,YAAY,IAAI;AAAA,MACjE,yBAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,UAAM,EAAE,gBAAgB,IAAI,KAAK,SAAS;AAE1C,QAAI,aAAa,WAAW,GAAG;AAC7B,WAAK,SAAS;AAAA,QACZ,UAAU,EAAE,GAAG,gBAAgB;AAAA,MACjC,CAAC;AAED;AAAA,IACF;AAEA,UAAM,yBAAyB,oBAAoB,YAAY;AAE/D,SAAK,SAAS;AAAA,MACZ,iBAAiB;AAAA,MACjB,UAAU,EAAE,GAAG,uBAAuB;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEA,kBAAkB,UAAsC;AACtD,WAAO,SAAS,MAAM,CAAC,YAAY,CAAC,MAAM,QAAQ,OAAO,CAAC;AAAA,EAC5D;AACF;AAEO,MAAM,mCAAmC,mBAAmB;AAAA,EACjE;AAAA,EACA;AAAA,EAEA,YAAY,iBAAoC;AAC9C,UAAM;AAEN,UAAM,eAAe,KAAK,gBAAgB,eAAe;AAEzD,SAAK,mBAAmB,aAAa;AACrC,SAAK,YAAY,aAAa;AAAA,EAChC;AAAA,EAEU,WAAoC;AAC5C,WAAO;AAAA,MACL,iBAAiB,KAAK;AAAA,MACtB,UAAU,KAAK;AAAA,IACjB;AAAA,EACF;AAAA,EAEU,SAAS,WAAmD;AACpE,QAAI,UAAU,iBAAiB;AAC7B,WAAK,mBAAmB,UAAU;AAAA,IACpC;AAEA,QAAI,UAAU,UAAU;AACtB,WAAK,YAAY,UAAU;AAAA,IAC7B;AAAA,EACF;AACF;","names":[]}
|