msw 2.5.2 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/browser/index.d.mts +7 -6
- package/lib/browser/index.d.ts +7 -6
- package/lib/browser/index.js +28 -2
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/index.mjs +28 -2
- package/lib/browser/index.mjs.map +1 -1
- package/lib/core/{GraphQLHandler-ClMB0BOy.d.mts → GraphQLHandler-B6uni-E_.d.mts} +1 -1
- package/lib/core/{GraphQLHandler-D6mLMXGZ.d.ts → GraphQLHandler-Cjm7JNGi.d.ts} +1 -1
- package/lib/core/{HttpResponse-vn-Pb4Bi.d.mts → HttpResponse-63H9vVoL.d.mts} +1 -0
- package/lib/core/{HttpResponse-DaYkf3ml.d.ts → HttpResponse-DzhqZzTK.d.ts} +1 -0
- package/lib/core/HttpResponse.d.mts +1 -1
- package/lib/core/HttpResponse.d.ts +1 -1
- package/lib/core/SetupApi.d.mts +15 -12
- package/lib/core/SetupApi.d.ts +15 -12
- package/lib/core/SetupApi.js +3 -1
- package/lib/core/SetupApi.js.map +1 -1
- package/lib/core/SetupApi.mjs +3 -1
- package/lib/core/SetupApi.mjs.map +1 -1
- package/lib/core/getResponse.d.mts +1 -1
- package/lib/core/getResponse.d.ts +1 -1
- package/lib/core/graphql.d.mts +2 -2
- package/lib/core/graphql.d.ts +2 -2
- package/lib/core/handlers/GraphQLHandler.d.mts +2 -2
- package/lib/core/handlers/GraphQLHandler.d.ts +2 -2
- 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 +2 -0
- package/lib/core/handlers/RequestHandler.js.map +1 -1
- package/lib/core/handlers/RequestHandler.mjs +2 -0
- package/lib/core/handlers/RequestHandler.mjs.map +1 -1
- package/lib/core/handlers/WebSocketHandler.d.mts +34 -0
- package/lib/core/handlers/WebSocketHandler.d.ts +34 -0
- package/lib/core/handlers/WebSocketHandler.js +122 -0
- package/lib/core/handlers/WebSocketHandler.js.map +1 -0
- package/lib/core/handlers/WebSocketHandler.mjs +104 -0
- package/lib/core/handlers/WebSocketHandler.mjs.map +1 -0
- package/lib/core/handlers/common.d.mts +3 -0
- package/lib/core/handlers/common.d.ts +3 -0
- package/lib/core/handlers/common.js +17 -0
- package/lib/core/handlers/common.js.map +1 -0
- package/lib/core/handlers/common.mjs +1 -0
- package/lib/core/handlers/common.mjs.map +1 -0
- package/lib/core/http.d.mts +1 -1
- package/lib/core/http.d.ts +1 -1
- package/lib/core/index.d.mts +5 -2
- package/lib/core/index.d.ts +5 -2
- package/lib/core/index.js +5 -1
- package/lib/core/index.js.map +1 -1
- package/lib/core/index.mjs +7 -1
- package/lib/core/index.mjs.map +1 -1
- package/lib/core/passthrough.d.mts +1 -1
- package/lib/core/passthrough.d.ts +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/executeHandlers.d.mts +1 -1
- package/lib/core/utils/executeHandlers.d.ts +1 -1
- package/lib/core/utils/executeHandlers.js.map +1 -1
- package/lib/core/utils/executeHandlers.mjs.map +1 -1
- package/lib/core/utils/handleRequest.d.mts +2 -2
- package/lib/core/utils/handleRequest.d.ts +2 -2
- package/lib/core/utils/handleRequest.js.map +1 -1
- package/lib/core/utils/handleRequest.mjs.map +1 -1
- package/lib/core/utils/internal/isHandlerKind.d.mts +17 -0
- package/lib/core/utils/internal/isHandlerKind.d.ts +17 -0
- package/lib/core/utils/internal/isHandlerKind.js +29 -0
- package/lib/core/utils/internal/isHandlerKind.js.map +1 -0
- package/lib/core/utils/internal/isHandlerKind.mjs +9 -0
- package/lib/core/utils/internal/isHandlerKind.mjs.map +1 -0
- package/lib/core/utils/internal/parseGraphQLRequest.d.mts +2 -2
- package/lib/core/utils/internal/parseGraphQLRequest.d.ts +2 -2
- 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/logging/getTimestamp.d.mts +4 -1
- package/lib/core/utils/logging/getTimestamp.d.ts +4 -1
- package/lib/core/utils/logging/getTimestamp.js +6 -2
- package/lib/core/utils/logging/getTimestamp.js.map +1 -1
- package/lib/core/utils/logging/getTimestamp.mjs +6 -2
- package/lib/core/utils/logging/getTimestamp.mjs.map +1 -1
- package/lib/core/utils/matching/matchRequestUrl.d.mts +2 -1
- package/lib/core/utils/matching/matchRequestUrl.d.ts +2 -1
- package/lib/core/utils/matching/matchRequestUrl.js +4 -0
- package/lib/core/utils/matching/matchRequestUrl.js.map +1 -1
- package/lib/core/utils/matching/matchRequestUrl.mjs +4 -0
- package/lib/core/utils/matching/matchRequestUrl.mjs.map +1 -1
- package/lib/core/ws/WebSocketClientManager.d.mts +63 -0
- package/lib/core/ws/WebSocketClientManager.d.ts +63 -0
- package/lib/core/ws/WebSocketClientManager.js +149 -0
- package/lib/core/ws/WebSocketClientManager.js.map +1 -0
- package/lib/core/ws/WebSocketClientManager.mjs +129 -0
- package/lib/core/ws/WebSocketClientManager.mjs.map +1 -0
- package/lib/core/ws/WebSocketClientStore.d.mts +13 -0
- package/lib/core/ws/WebSocketClientStore.d.ts +13 -0
- package/lib/core/ws/WebSocketClientStore.js +26 -0
- package/lib/core/ws/WebSocketClientStore.js.map +1 -0
- package/lib/core/ws/WebSocketClientStore.mjs +6 -0
- package/lib/core/ws/WebSocketClientStore.mjs.map +1 -0
- package/lib/core/ws/WebSocketIndexedDBClientStore.d.mts +15 -0
- package/lib/core/ws/WebSocketIndexedDBClientStore.d.ts +15 -0
- package/lib/core/ws/WebSocketIndexedDBClientStore.js +130 -0
- package/lib/core/ws/WebSocketIndexedDBClientStore.js.map +1 -0
- package/lib/core/ws/WebSocketIndexedDBClientStore.mjs +110 -0
- package/lib/core/ws/WebSocketIndexedDBClientStore.mjs.map +1 -0
- package/lib/core/ws/WebSocketMemoryClientStore.d.mts +13 -0
- package/lib/core/ws/WebSocketMemoryClientStore.d.ts +13 -0
- package/lib/core/ws/WebSocketMemoryClientStore.js +41 -0
- package/lib/core/ws/WebSocketMemoryClientStore.js.map +1 -0
- package/lib/core/ws/WebSocketMemoryClientStore.mjs +21 -0
- package/lib/core/ws/WebSocketMemoryClientStore.mjs.map +1 -0
- package/lib/core/ws/handleWebSocketEvent.d.mts +19 -0
- package/lib/core/ws/handleWebSocketEvent.d.ts +19 -0
- package/lib/core/ws/handleWebSocketEvent.js +74 -0
- package/lib/core/ws/handleWebSocketEvent.js.map +1 -0
- package/lib/core/ws/handleWebSocketEvent.mjs +56 -0
- package/lib/core/ws/handleWebSocketEvent.mjs.map +1 -0
- package/lib/core/ws/utils/attachWebSocketLogger.d.mts +12 -0
- package/lib/core/ws/utils/attachWebSocketLogger.d.ts +12 -0
- package/lib/core/ws/utils/attachWebSocketLogger.js +198 -0
- package/lib/core/ws/utils/attachWebSocketLogger.js.map +1 -0
- package/lib/core/ws/utils/attachWebSocketLogger.mjs +178 -0
- package/lib/core/ws/utils/attachWebSocketLogger.mjs.map +1 -0
- package/lib/core/ws/utils/getMessageLength.d.mts +11 -0
- package/lib/core/ws/utils/getMessageLength.d.ts +11 -0
- package/lib/core/ws/utils/getMessageLength.js +33 -0
- package/lib/core/ws/utils/getMessageLength.js.map +1 -0
- package/lib/core/ws/utils/getMessageLength.mjs +13 -0
- package/lib/core/ws/utils/getMessageLength.mjs.map +1 -0
- package/lib/core/ws/utils/getPublicData.d.mts +5 -0
- package/lib/core/ws/utils/getPublicData.d.ts +5 -0
- package/lib/core/ws/utils/getPublicData.js +36 -0
- package/lib/core/ws/utils/getPublicData.js.map +1 -0
- package/lib/core/ws/utils/getPublicData.mjs +16 -0
- package/lib/core/ws/utils/getPublicData.mjs.map +1 -0
- package/lib/core/ws/utils/truncateMessage.d.mts +3 -0
- package/lib/core/ws/utils/truncateMessage.d.ts +3 -0
- package/lib/core/ws/utils/truncateMessage.js +31 -0
- package/lib/core/ws/utils/truncateMessage.js.map +1 -0
- package/lib/core/ws/utils/truncateMessage.mjs +11 -0
- package/lib/core/ws/utils/truncateMessage.mjs.map +1 -0
- package/lib/core/ws/webSocketInterceptor.d.mts +5 -0
- package/lib/core/ws/webSocketInterceptor.d.ts +5 -0
- package/lib/core/ws/webSocketInterceptor.js +26 -0
- package/lib/core/ws/webSocketInterceptor.js.map +1 -0
- package/lib/core/ws/webSocketInterceptor.mjs +6 -0
- package/lib/core/ws/webSocketInterceptor.mjs.map +1 -0
- package/lib/core/ws.d.mts +75 -0
- package/lib/core/ws.d.ts +75 -0
- package/lib/core/ws.js +71 -0
- package/lib/core/ws.js.map +1 -0
- package/lib/core/ws.mjs +54 -0
- package/lib/core/ws.mjs.map +1 -0
- package/lib/iife/index.js +1420 -86
- package/lib/iife/index.js.map +1 -1
- package/lib/mockServiceWorker.js +1 -1
- package/lib/native/index.d.mts +6 -5
- package/lib/native/index.d.ts +6 -5
- package/lib/native/index.js +19 -4
- package/lib/native/index.js.map +1 -1
- package/lib/native/index.mjs +19 -4
- package/lib/native/index.mjs.map +1 -1
- package/lib/node/index.d.mts +8 -7
- package/lib/node/index.d.ts +8 -7
- package/lib/node/index.js +19 -4
- package/lib/node/index.js.map +1 -1
- package/lib/node/index.mjs +19 -4
- package/lib/node/index.mjs.map +1 -1
- package/package.json +10 -1
- package/src/browser/setupWorker/glossary.ts +10 -10
- package/src/browser/setupWorker/setupWorker.ts +32 -3
- package/src/browser/setupWorker/start/createFallbackRequestListener.ts +2 -1
- package/src/browser/setupWorker/start/createRequestListener.ts +2 -1
- package/src/browser/setupWorker/start/createStartHandler.ts +5 -0
- package/src/browser/setupWorker/stop/createStop.ts +6 -0
- package/src/core/SetupApi.ts +28 -20
- package/src/core/handlers/RequestHandler.ts +4 -0
- package/src/core/handlers/WebSocketHandler.ts +146 -0
- package/src/core/handlers/common.ts +1 -0
- package/src/core/index.ts +11 -1
- package/src/core/utils/executeHandlers.ts +1 -1
- package/src/core/utils/handleRequest.ts +1 -1
- package/src/core/utils/internal/isHandlerKind.test.ts +64 -0
- package/src/core/utils/internal/isHandlerKind.ts +21 -0
- package/src/core/utils/logging/getTimestamp.test.ts +20 -6
- package/src/core/utils/logging/getTimestamp.ts +11 -6
- package/src/core/utils/matching/matchRequestUrl.test.ts +44 -0
- package/src/core/utils/matching/matchRequestUrl.ts +4 -0
- package/src/core/ws/WebSocketClientManager.test.ts +164 -0
- package/src/core/ws/WebSocketClientManager.ts +211 -0
- package/src/core/ws/WebSocketClientStore.ts +14 -0
- package/src/core/ws/WebSocketIndexedDBClientStore.ts +145 -0
- package/src/core/ws/WebSocketMemoryClientStore.ts +27 -0
- package/src/core/ws/handleWebSocketEvent.ts +83 -0
- package/src/core/ws/utils/attachWebSocketLogger.ts +259 -0
- package/src/core/ws/utils/getMessageLength.test.ts +16 -0
- package/src/core/ws/utils/getMessageLength.ts +19 -0
- package/src/core/ws/utils/getPublicData.test.ts +38 -0
- package/src/core/ws/utils/getPublicData.ts +17 -0
- package/src/core/ws/utils/truncateMessage.test.ts +12 -0
- package/src/core/ws/utils/truncateMessage.ts +9 -0
- package/src/core/ws/webSocketInterceptor.ts +3 -0
- package/src/core/ws.test.ts +23 -0
- package/src/core/ws.ts +166 -0
- package/src/node/SetupServerApi.ts +8 -7
- package/src/node/SetupServerCommonApi.ts +25 -5
- package/src/node/glossary.ts +5 -7
- package/src/node/setupServer.ts +2 -1
package/lib/iife/index.js
CHANGED
|
@@ -13336,6 +13336,7 @@ ${operationTypes.join("\n")}
|
|
|
13336
13336
|
SET_TIMEOUT_MAX_ALLOWED_INT: () => SET_TIMEOUT_MAX_ALLOWED_INT,
|
|
13337
13337
|
SetupApi: () => SetupApi,
|
|
13338
13338
|
SetupWorkerApi: () => SetupWorkerApi,
|
|
13339
|
+
WebSocketHandler: () => WebSocketHandler,
|
|
13339
13340
|
bypass: () => bypass,
|
|
13340
13341
|
cleanUrl: () => cleanUrl,
|
|
13341
13342
|
delay: () => delay,
|
|
@@ -13345,7 +13346,8 @@ ${operationTypes.join("\n")}
|
|
|
13345
13346
|
http: () => http,
|
|
13346
13347
|
matchRequestUrl: () => matchRequestUrl,
|
|
13347
13348
|
passthrough: () => passthrough,
|
|
13348
|
-
setupWorker: () => setupWorker
|
|
13349
|
+
setupWorker: () => setupWorker,
|
|
13350
|
+
ws: () => ws
|
|
13349
13351
|
});
|
|
13350
13352
|
|
|
13351
13353
|
// node_modules/.pnpm/outvariant@1.4.3/node_modules/outvariant/lib/index.mjs
|
|
@@ -13717,7 +13719,9 @@ ${operationTypes.join("\n")}
|
|
|
13717
13719
|
}
|
|
13718
13720
|
restoreHandlers() {
|
|
13719
13721
|
this.handlersController.currentHandlers().forEach((handler) => {
|
|
13720
|
-
|
|
13722
|
+
if ("isUsed" in handler) {
|
|
13723
|
+
handler.isUsed = false;
|
|
13724
|
+
}
|
|
13721
13725
|
});
|
|
13722
13726
|
}
|
|
13723
13727
|
resetHandlers(...nextHandlers) {
|
|
@@ -13771,6 +13775,7 @@ ${operationTypes.join("\n")}
|
|
|
13771
13775
|
// src/core/handlers/RequestHandler.ts
|
|
13772
13776
|
var RequestHandler = class _RequestHandler {
|
|
13773
13777
|
static cache = /* @__PURE__ */ new WeakMap();
|
|
13778
|
+
__kind;
|
|
13774
13779
|
info;
|
|
13775
13780
|
/**
|
|
13776
13781
|
* Indicates whether this request handler has been used
|
|
@@ -13790,6 +13795,7 @@ ${operationTypes.join("\n")}
|
|
|
13790
13795
|
callFrame
|
|
13791
13796
|
};
|
|
13792
13797
|
this.isUsed = false;
|
|
13798
|
+
this.__kind = "RequestHandler";
|
|
13793
13799
|
}
|
|
13794
13800
|
/**
|
|
13795
13801
|
* Parse the intercepted request to extract additional information from it.
|
|
@@ -13932,9 +13938,13 @@ ${operationTypes.join("\n")}
|
|
|
13932
13938
|
}
|
|
13933
13939
|
|
|
13934
13940
|
// src/core/utils/logging/getTimestamp.ts
|
|
13935
|
-
function getTimestamp() {
|
|
13941
|
+
function getTimestamp(options) {
|
|
13936
13942
|
const now = /* @__PURE__ */ new Date();
|
|
13937
|
-
|
|
13943
|
+
const timestamp = `${now.getHours().toString().padStart(2, "0")}:${now.getMinutes().toString().padStart(2, "0")}:${now.getSeconds().toString().padStart(2, "0")}`;
|
|
13944
|
+
if (options?.milliseconds) {
|
|
13945
|
+
return `${timestamp}.${now.getMilliseconds().toString().padStart(3, "0")}`;
|
|
13946
|
+
}
|
|
13947
|
+
return timestamp;
|
|
13938
13948
|
}
|
|
13939
13949
|
|
|
13940
13950
|
// src/core/utils/logging/serializeRequest.ts
|
|
@@ -15057,6 +15067,9 @@ ${operationTypes.join("\n")}
|
|
|
15057
15067
|
params
|
|
15058
15068
|
};
|
|
15059
15069
|
}
|
|
15070
|
+
function isPath(value) {
|
|
15071
|
+
return typeof value === "string" || value instanceof RegExp;
|
|
15072
|
+
}
|
|
15060
15073
|
|
|
15061
15074
|
// src/core/utils/request/toPublicUrl.ts
|
|
15062
15075
|
function toPublicUrl(url) {
|
|
@@ -28154,6 +28167,460 @@ Consider naming this operation or using "graphql.operation()" request handler to
|
|
|
28154
28167
|
link: createGraphQLLink
|
|
28155
28168
|
};
|
|
28156
28169
|
|
|
28170
|
+
// src/core/handlers/WebSocketHandler.ts
|
|
28171
|
+
var kEmitter = Symbol("kEmitter");
|
|
28172
|
+
var kDispatchEvent = Symbol("kDispatchEvent");
|
|
28173
|
+
var kSender = Symbol("kSender");
|
|
28174
|
+
var kStopPropagationPatched = Symbol("kStopPropagationPatched");
|
|
28175
|
+
var KOnStopPropagation = Symbol("KOnStopPropagation");
|
|
28176
|
+
var WebSocketHandler = class {
|
|
28177
|
+
constructor(url) {
|
|
28178
|
+
this.url = url;
|
|
28179
|
+
this.id = createRequestId();
|
|
28180
|
+
this[kEmitter] = new Emitter();
|
|
28181
|
+
this.callFrame = getCallFrame(new Error());
|
|
28182
|
+
this.__kind = "EventHandler";
|
|
28183
|
+
}
|
|
28184
|
+
__kind;
|
|
28185
|
+
id;
|
|
28186
|
+
callFrame;
|
|
28187
|
+
[kEmitter];
|
|
28188
|
+
parse(args) {
|
|
28189
|
+
const connection = args.event.data;
|
|
28190
|
+
const match2 = matchRequestUrl(connection.client.url, this.url);
|
|
28191
|
+
return {
|
|
28192
|
+
match: match2
|
|
28193
|
+
};
|
|
28194
|
+
}
|
|
28195
|
+
predicate(args) {
|
|
28196
|
+
return args.parsedResult.match.matches;
|
|
28197
|
+
}
|
|
28198
|
+
async [kDispatchEvent](event) {
|
|
28199
|
+
const parsedResult = this.parse({ event });
|
|
28200
|
+
const connection = event.data;
|
|
28201
|
+
const resolvedConnection = {
|
|
28202
|
+
...connection,
|
|
28203
|
+
params: parsedResult.match.params || {}
|
|
28204
|
+
};
|
|
28205
|
+
connection.client.addEventListener(
|
|
28206
|
+
"message",
|
|
28207
|
+
createStopPropagationListener(this)
|
|
28208
|
+
);
|
|
28209
|
+
connection.client.addEventListener(
|
|
28210
|
+
"close",
|
|
28211
|
+
createStopPropagationListener(this)
|
|
28212
|
+
);
|
|
28213
|
+
connection.server.addEventListener(
|
|
28214
|
+
"open",
|
|
28215
|
+
createStopPropagationListener(this)
|
|
28216
|
+
);
|
|
28217
|
+
connection.server.addEventListener(
|
|
28218
|
+
"message",
|
|
28219
|
+
createStopPropagationListener(this)
|
|
28220
|
+
);
|
|
28221
|
+
connection.server.addEventListener(
|
|
28222
|
+
"error",
|
|
28223
|
+
createStopPropagationListener(this)
|
|
28224
|
+
);
|
|
28225
|
+
connection.server.addEventListener(
|
|
28226
|
+
"close",
|
|
28227
|
+
createStopPropagationListener(this)
|
|
28228
|
+
);
|
|
28229
|
+
this[kEmitter].emit("connection", resolvedConnection);
|
|
28230
|
+
}
|
|
28231
|
+
};
|
|
28232
|
+
function createStopPropagationListener(handler) {
|
|
28233
|
+
return function stopPropagationListener(event) {
|
|
28234
|
+
const propagationStoppedAt = Reflect.get(event, "kPropagationStoppedAt");
|
|
28235
|
+
if (propagationStoppedAt && handler.id !== propagationStoppedAt) {
|
|
28236
|
+
event.stopImmediatePropagation();
|
|
28237
|
+
return;
|
|
28238
|
+
}
|
|
28239
|
+
Object.defineProperty(event, KOnStopPropagation, {
|
|
28240
|
+
value() {
|
|
28241
|
+
Object.defineProperty(event, "kPropagationStoppedAt", {
|
|
28242
|
+
value: handler.id
|
|
28243
|
+
});
|
|
28244
|
+
},
|
|
28245
|
+
configurable: true
|
|
28246
|
+
});
|
|
28247
|
+
if (!Reflect.get(event, kStopPropagationPatched)) {
|
|
28248
|
+
event.stopPropagation = new Proxy(event.stopPropagation, {
|
|
28249
|
+
apply: (target, thisArg, args) => {
|
|
28250
|
+
Reflect.get(event, KOnStopPropagation)?.call(handler);
|
|
28251
|
+
return Reflect.apply(target, thisArg, args);
|
|
28252
|
+
}
|
|
28253
|
+
});
|
|
28254
|
+
Object.defineProperty(event, kStopPropagationPatched, {
|
|
28255
|
+
value: true,
|
|
28256
|
+
// If something else attempts to redefine this, throw.
|
|
28257
|
+
configurable: false
|
|
28258
|
+
});
|
|
28259
|
+
}
|
|
28260
|
+
};
|
|
28261
|
+
}
|
|
28262
|
+
|
|
28263
|
+
// src/core/ws/WebSocketMemoryClientStore.ts
|
|
28264
|
+
var WebSocketMemoryClientStore = class {
|
|
28265
|
+
store;
|
|
28266
|
+
constructor() {
|
|
28267
|
+
this.store = /* @__PURE__ */ new Map();
|
|
28268
|
+
}
|
|
28269
|
+
async add(client) {
|
|
28270
|
+
this.store.set(client.id, { id: client.id, url: client.url.href });
|
|
28271
|
+
}
|
|
28272
|
+
getAll() {
|
|
28273
|
+
return Promise.resolve(Array.from(this.store.values()));
|
|
28274
|
+
}
|
|
28275
|
+
async deleteMany(clientIds) {
|
|
28276
|
+
for (const clientId of clientIds) {
|
|
28277
|
+
this.store.delete(clientId);
|
|
28278
|
+
}
|
|
28279
|
+
}
|
|
28280
|
+
};
|
|
28281
|
+
|
|
28282
|
+
// node_modules/.pnpm/@open-draft+deferred-promise@2.2.0/node_modules/@open-draft/deferred-promise/build/index.mjs
|
|
28283
|
+
function createDeferredExecutor() {
|
|
28284
|
+
const executor = (resolve, reject) => {
|
|
28285
|
+
executor.state = "pending";
|
|
28286
|
+
executor.resolve = (data) => {
|
|
28287
|
+
if (executor.state !== "pending") {
|
|
28288
|
+
return;
|
|
28289
|
+
}
|
|
28290
|
+
executor.result = data;
|
|
28291
|
+
const onFulfilled = (value) => {
|
|
28292
|
+
executor.state = "fulfilled";
|
|
28293
|
+
return value;
|
|
28294
|
+
};
|
|
28295
|
+
return resolve(
|
|
28296
|
+
data instanceof Promise ? data : Promise.resolve(data).then(onFulfilled)
|
|
28297
|
+
);
|
|
28298
|
+
};
|
|
28299
|
+
executor.reject = (reason) => {
|
|
28300
|
+
if (executor.state !== "pending") {
|
|
28301
|
+
return;
|
|
28302
|
+
}
|
|
28303
|
+
queueMicrotask(() => {
|
|
28304
|
+
executor.state = "rejected";
|
|
28305
|
+
});
|
|
28306
|
+
return reject(executor.rejectionReason = reason);
|
|
28307
|
+
};
|
|
28308
|
+
};
|
|
28309
|
+
return executor;
|
|
28310
|
+
}
|
|
28311
|
+
var DeferredPromise = class extends Promise {
|
|
28312
|
+
#executor;
|
|
28313
|
+
resolve;
|
|
28314
|
+
reject;
|
|
28315
|
+
constructor(executor = null) {
|
|
28316
|
+
const deferredExecutor = createDeferredExecutor();
|
|
28317
|
+
super((originalResolve, originalReject) => {
|
|
28318
|
+
deferredExecutor(originalResolve, originalReject);
|
|
28319
|
+
executor?.(deferredExecutor.resolve, deferredExecutor.reject);
|
|
28320
|
+
});
|
|
28321
|
+
this.#executor = deferredExecutor;
|
|
28322
|
+
this.resolve = this.#executor.resolve;
|
|
28323
|
+
this.reject = this.#executor.reject;
|
|
28324
|
+
}
|
|
28325
|
+
get state() {
|
|
28326
|
+
return this.#executor.state;
|
|
28327
|
+
}
|
|
28328
|
+
get rejectionReason() {
|
|
28329
|
+
return this.#executor.rejectionReason;
|
|
28330
|
+
}
|
|
28331
|
+
then(onFulfilled, onRejected) {
|
|
28332
|
+
return this.#decorate(super.then(onFulfilled, onRejected));
|
|
28333
|
+
}
|
|
28334
|
+
catch(onRejected) {
|
|
28335
|
+
return this.#decorate(super.catch(onRejected));
|
|
28336
|
+
}
|
|
28337
|
+
finally(onfinally) {
|
|
28338
|
+
return this.#decorate(super.finally(onfinally));
|
|
28339
|
+
}
|
|
28340
|
+
#decorate(promise) {
|
|
28341
|
+
return Object.defineProperties(promise, {
|
|
28342
|
+
resolve: { configurable: true, value: this.resolve },
|
|
28343
|
+
reject: { configurable: true, value: this.reject }
|
|
28344
|
+
});
|
|
28345
|
+
}
|
|
28346
|
+
};
|
|
28347
|
+
|
|
28348
|
+
// src/core/ws/WebSocketIndexedDBClientStore.ts
|
|
28349
|
+
var DB_NAME = "msw-websocket-clients";
|
|
28350
|
+
var DB_STORE_NAME = "clients";
|
|
28351
|
+
var WebSocketIndexedDBClientStore = class {
|
|
28352
|
+
db;
|
|
28353
|
+
constructor() {
|
|
28354
|
+
this.db = this.createDatabase();
|
|
28355
|
+
}
|
|
28356
|
+
async add(client) {
|
|
28357
|
+
const promise = new DeferredPromise();
|
|
28358
|
+
const store2 = await this.getStore();
|
|
28359
|
+
const request = store2.put({
|
|
28360
|
+
id: client.id,
|
|
28361
|
+
url: client.url.href
|
|
28362
|
+
});
|
|
28363
|
+
request.onsuccess = () => {
|
|
28364
|
+
promise.resolve();
|
|
28365
|
+
};
|
|
28366
|
+
request.onerror = () => {
|
|
28367
|
+
console.error(request.error);
|
|
28368
|
+
promise.reject(
|
|
28369
|
+
new Error(
|
|
28370
|
+
`Failed to add WebSocket client "${client.id}". There is likely an additional output above.`
|
|
28371
|
+
)
|
|
28372
|
+
);
|
|
28373
|
+
};
|
|
28374
|
+
return promise;
|
|
28375
|
+
}
|
|
28376
|
+
async getAll() {
|
|
28377
|
+
const promise = new DeferredPromise();
|
|
28378
|
+
const store2 = await this.getStore();
|
|
28379
|
+
const request = store2.getAll();
|
|
28380
|
+
request.onsuccess = () => {
|
|
28381
|
+
promise.resolve(request.result);
|
|
28382
|
+
};
|
|
28383
|
+
request.onerror = () => {
|
|
28384
|
+
console.log(request.error);
|
|
28385
|
+
promise.reject(
|
|
28386
|
+
new Error(
|
|
28387
|
+
`Failed to get all WebSocket clients. There is likely an additional output above.`
|
|
28388
|
+
)
|
|
28389
|
+
);
|
|
28390
|
+
};
|
|
28391
|
+
return promise;
|
|
28392
|
+
}
|
|
28393
|
+
async deleteMany(clientIds) {
|
|
28394
|
+
const promise = new DeferredPromise();
|
|
28395
|
+
const store2 = await this.getStore();
|
|
28396
|
+
for (const clientId of clientIds) {
|
|
28397
|
+
store2.delete(clientId);
|
|
28398
|
+
}
|
|
28399
|
+
store2.transaction.oncomplete = () => {
|
|
28400
|
+
promise.resolve();
|
|
28401
|
+
};
|
|
28402
|
+
store2.transaction.onerror = () => {
|
|
28403
|
+
console.error(store2.transaction.error);
|
|
28404
|
+
promise.reject(
|
|
28405
|
+
new Error(
|
|
28406
|
+
`Failed to delete WebSocket clients [${clientIds.join(", ")}]. There is likely an additional output above.`
|
|
28407
|
+
)
|
|
28408
|
+
);
|
|
28409
|
+
};
|
|
28410
|
+
return promise;
|
|
28411
|
+
}
|
|
28412
|
+
async createDatabase() {
|
|
28413
|
+
const promise = new DeferredPromise();
|
|
28414
|
+
const request = indexedDB.open(DB_NAME, 1);
|
|
28415
|
+
request.onsuccess = ({ currentTarget }) => {
|
|
28416
|
+
const db = Reflect.get(currentTarget, "result");
|
|
28417
|
+
if (db.objectStoreNames.contains(DB_STORE_NAME)) {
|
|
28418
|
+
return promise.resolve(db);
|
|
28419
|
+
}
|
|
28420
|
+
};
|
|
28421
|
+
request.onupgradeneeded = async ({ currentTarget }) => {
|
|
28422
|
+
const db = Reflect.get(currentTarget, "result");
|
|
28423
|
+
if (db.objectStoreNames.contains(DB_STORE_NAME)) {
|
|
28424
|
+
return;
|
|
28425
|
+
}
|
|
28426
|
+
const store2 = db.createObjectStore(DB_STORE_NAME, { keyPath: "id" });
|
|
28427
|
+
store2.transaction.oncomplete = () => {
|
|
28428
|
+
promise.resolve(db);
|
|
28429
|
+
};
|
|
28430
|
+
store2.transaction.onerror = () => {
|
|
28431
|
+
console.error(store2.transaction.error);
|
|
28432
|
+
promise.reject(
|
|
28433
|
+
new Error(
|
|
28434
|
+
"Failed to create WebSocket client store. There is likely an additional output above."
|
|
28435
|
+
)
|
|
28436
|
+
);
|
|
28437
|
+
};
|
|
28438
|
+
};
|
|
28439
|
+
request.onerror = () => {
|
|
28440
|
+
console.error(request.error);
|
|
28441
|
+
promise.reject(
|
|
28442
|
+
new Error(
|
|
28443
|
+
"Failed to open an IndexedDB database. There is likely an additional output above."
|
|
28444
|
+
)
|
|
28445
|
+
);
|
|
28446
|
+
};
|
|
28447
|
+
return promise;
|
|
28448
|
+
}
|
|
28449
|
+
async getStore() {
|
|
28450
|
+
const db = await this.db;
|
|
28451
|
+
return db.transaction(DB_STORE_NAME, "readwrite").objectStore(DB_STORE_NAME);
|
|
28452
|
+
}
|
|
28453
|
+
};
|
|
28454
|
+
|
|
28455
|
+
// src/core/ws/WebSocketClientManager.ts
|
|
28456
|
+
var WebSocketClientManager = class {
|
|
28457
|
+
constructor(channel) {
|
|
28458
|
+
this.channel = channel;
|
|
28459
|
+
this.store = typeof indexedDB !== "undefined" ? new WebSocketIndexedDBClientStore() : new WebSocketMemoryClientStore();
|
|
28460
|
+
this.runtimeClients = /* @__PURE__ */ new Map();
|
|
28461
|
+
this.allClients = /* @__PURE__ */ new Set();
|
|
28462
|
+
this.channel.addEventListener("message", (message3) => {
|
|
28463
|
+
if (message3.data?.type === "db:update") {
|
|
28464
|
+
this.flushDatabaseToMemory();
|
|
28465
|
+
}
|
|
28466
|
+
});
|
|
28467
|
+
if (typeof window !== "undefined") {
|
|
28468
|
+
window.addEventListener("message", async (message3) => {
|
|
28469
|
+
if (message3.data?.type === "msw/worker:stop") {
|
|
28470
|
+
await this.removeRuntimeClients();
|
|
28471
|
+
}
|
|
28472
|
+
});
|
|
28473
|
+
}
|
|
28474
|
+
}
|
|
28475
|
+
store;
|
|
28476
|
+
runtimeClients;
|
|
28477
|
+
allClients;
|
|
28478
|
+
async flushDatabaseToMemory() {
|
|
28479
|
+
const storedClients = await this.store.getAll();
|
|
28480
|
+
this.allClients = new Set(
|
|
28481
|
+
storedClients.map((client) => {
|
|
28482
|
+
const runtimeClient = this.runtimeClients.get(client.id);
|
|
28483
|
+
if (runtimeClient) {
|
|
28484
|
+
return runtimeClient;
|
|
28485
|
+
}
|
|
28486
|
+
return new WebSocketRemoteClientConnection(
|
|
28487
|
+
client.id,
|
|
28488
|
+
new URL(client.url),
|
|
28489
|
+
this.channel
|
|
28490
|
+
);
|
|
28491
|
+
})
|
|
28492
|
+
);
|
|
28493
|
+
}
|
|
28494
|
+
async removeRuntimeClients() {
|
|
28495
|
+
await this.store.deleteMany(Array.from(this.runtimeClients.keys()));
|
|
28496
|
+
this.runtimeClients.clear();
|
|
28497
|
+
await this.flushDatabaseToMemory();
|
|
28498
|
+
this.notifyOthersAboutDatabaseUpdate();
|
|
28499
|
+
}
|
|
28500
|
+
/**
|
|
28501
|
+
* All active WebSocket client connections.
|
|
28502
|
+
*/
|
|
28503
|
+
get clients() {
|
|
28504
|
+
return this.allClients;
|
|
28505
|
+
}
|
|
28506
|
+
/**
|
|
28507
|
+
* Notify other runtimes about the database update
|
|
28508
|
+
* using the shared `BroadcastChannel` instance.
|
|
28509
|
+
*/
|
|
28510
|
+
notifyOthersAboutDatabaseUpdate() {
|
|
28511
|
+
this.channel.postMessage({ type: "db:update" });
|
|
28512
|
+
}
|
|
28513
|
+
async addClient(client) {
|
|
28514
|
+
await this.store.add(client);
|
|
28515
|
+
await this.flushDatabaseToMemory();
|
|
28516
|
+
this.notifyOthersAboutDatabaseUpdate();
|
|
28517
|
+
}
|
|
28518
|
+
/**
|
|
28519
|
+
* Adds the given `WebSocket` client connection to the set
|
|
28520
|
+
* of all connections. The given connection is always the complete
|
|
28521
|
+
* connection object because `addConnection()` is called only
|
|
28522
|
+
* for the opened connections in the same runtime.
|
|
28523
|
+
*/
|
|
28524
|
+
async addConnection(client) {
|
|
28525
|
+
this.runtimeClients.set(client.id, client);
|
|
28526
|
+
await this.addClient(client);
|
|
28527
|
+
const handleExtraneousMessage = (message3) => {
|
|
28528
|
+
const { type, payload } = message3.data;
|
|
28529
|
+
if (typeof payload === "object" && "clientId" in payload && payload.clientId !== client.id) {
|
|
28530
|
+
return;
|
|
28531
|
+
}
|
|
28532
|
+
switch (type) {
|
|
28533
|
+
case "extraneous:send": {
|
|
28534
|
+
client.send(payload.data);
|
|
28535
|
+
break;
|
|
28536
|
+
}
|
|
28537
|
+
case "extraneous:close": {
|
|
28538
|
+
client.close(payload.code, payload.reason);
|
|
28539
|
+
break;
|
|
28540
|
+
}
|
|
28541
|
+
}
|
|
28542
|
+
};
|
|
28543
|
+
const abortController = new AbortController();
|
|
28544
|
+
this.channel.addEventListener("message", handleExtraneousMessage, {
|
|
28545
|
+
signal: abortController.signal
|
|
28546
|
+
});
|
|
28547
|
+
client.addEventListener("close", () => abortController.abort(), {
|
|
28548
|
+
once: true
|
|
28549
|
+
});
|
|
28550
|
+
}
|
|
28551
|
+
};
|
|
28552
|
+
var WebSocketRemoteClientConnection = class {
|
|
28553
|
+
constructor(id, url, channel) {
|
|
28554
|
+
this.id = id;
|
|
28555
|
+
this.url = url;
|
|
28556
|
+
this.channel = channel;
|
|
28557
|
+
}
|
|
28558
|
+
send(data) {
|
|
28559
|
+
this.channel.postMessage({
|
|
28560
|
+
type: "extraneous:send",
|
|
28561
|
+
payload: {
|
|
28562
|
+
clientId: this.id,
|
|
28563
|
+
data
|
|
28564
|
+
}
|
|
28565
|
+
});
|
|
28566
|
+
}
|
|
28567
|
+
close(code, reason) {
|
|
28568
|
+
this.channel.postMessage({
|
|
28569
|
+
type: "extraneous:close",
|
|
28570
|
+
payload: {
|
|
28571
|
+
clientId: this.id,
|
|
28572
|
+
code,
|
|
28573
|
+
reason
|
|
28574
|
+
}
|
|
28575
|
+
});
|
|
28576
|
+
}
|
|
28577
|
+
};
|
|
28578
|
+
|
|
28579
|
+
// src/core/ws.ts
|
|
28580
|
+
function isBroadcastChannelWithUnref(channel) {
|
|
28581
|
+
return typeof Reflect.get(channel, "unref") !== "undefined";
|
|
28582
|
+
}
|
|
28583
|
+
var webSocketChannel = new BroadcastChannel("msw:websocket-client-manager");
|
|
28584
|
+
if (isBroadcastChannelWithUnref(webSocketChannel)) {
|
|
28585
|
+
webSocketChannel.unref();
|
|
28586
|
+
}
|
|
28587
|
+
function createWebSocketLinkHandler(url) {
|
|
28588
|
+
invariant(url, "Expected a WebSocket server URL but got undefined");
|
|
28589
|
+
invariant(
|
|
28590
|
+
isPath(url),
|
|
28591
|
+
"Expected a WebSocket server URL to be a valid path but got %s",
|
|
28592
|
+
typeof url
|
|
28593
|
+
);
|
|
28594
|
+
const clientManager = new WebSocketClientManager(webSocketChannel);
|
|
28595
|
+
return {
|
|
28596
|
+
get clients() {
|
|
28597
|
+
return clientManager.clients;
|
|
28598
|
+
},
|
|
28599
|
+
addEventListener(event, listener) {
|
|
28600
|
+
const handler = new WebSocketHandler(url);
|
|
28601
|
+
handler[kEmitter].on("connection", async ({ client }) => {
|
|
28602
|
+
await clientManager.addConnection(client);
|
|
28603
|
+
});
|
|
28604
|
+
handler[kEmitter].on(event, listener);
|
|
28605
|
+
return handler;
|
|
28606
|
+
},
|
|
28607
|
+
broadcast(data) {
|
|
28608
|
+
this.broadcastExcept([], data);
|
|
28609
|
+
},
|
|
28610
|
+
broadcastExcept(clients, data) {
|
|
28611
|
+
const ignoreClients = Array.prototype.concat(clients).map((client) => client.id);
|
|
28612
|
+
clientManager.clients.forEach((otherClient) => {
|
|
28613
|
+
if (!ignoreClients.includes(otherClient.id)) {
|
|
28614
|
+
otherClient.send(data);
|
|
28615
|
+
}
|
|
28616
|
+
});
|
|
28617
|
+
}
|
|
28618
|
+
};
|
|
28619
|
+
}
|
|
28620
|
+
var ws = {
|
|
28621
|
+
link: createWebSocketLinkHandler
|
|
28622
|
+
};
|
|
28623
|
+
|
|
28157
28624
|
// node_modules/.pnpm/@open-draft+until@2.1.0/node_modules/@open-draft/until/lib/index.mjs
|
|
28158
28625
|
var until = async (promise) => {
|
|
28159
28626
|
try {
|
|
@@ -28700,6 +29167,13 @@ Learn more about creating the Service Worker script: https://mswjs.io/docs/cli/i
|
|
|
28700
29167
|
};
|
|
28701
29168
|
}
|
|
28702
29169
|
|
|
29170
|
+
// src/core/utils/internal/isHandlerKind.ts
|
|
29171
|
+
function isHandlerKind(kind) {
|
|
29172
|
+
return (input) => {
|
|
29173
|
+
return input != null && typeof input === "object" && "__kind" in input && input.__kind === kind;
|
|
29174
|
+
};
|
|
29175
|
+
}
|
|
29176
|
+
|
|
28703
29177
|
// src/browser/setupWorker/start/createRequestListener.ts
|
|
28704
29178
|
var createRequestListener = (context, options) => {
|
|
28705
29179
|
return async (event, message3) => {
|
|
@@ -28714,7 +29188,7 @@ Learn more about creating the Service Worker script: https://mswjs.io/docs/cli/i
|
|
|
28714
29188
|
await handleRequest(
|
|
28715
29189
|
request,
|
|
28716
29190
|
requestId,
|
|
28717
|
-
context.getRequestHandlers(),
|
|
29191
|
+
context.getRequestHandlers().filter(isHandlerKind("RequestHandler")),
|
|
28718
29192
|
options,
|
|
28719
29193
|
context.emitter,
|
|
28720
29194
|
{
|
|
@@ -28892,6 +29366,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
|
|
|
28892
29366
|
context.workerChannel.send("CLIENT_CLOSED");
|
|
28893
29367
|
}
|
|
28894
29368
|
window.clearInterval(context.keepAliveInterval);
|
|
29369
|
+
window.postMessage({ type: "msw/worker:stop" });
|
|
28895
29370
|
});
|
|
28896
29371
|
await checkWorkerIntegrity(context).catch((error3) => {
|
|
28897
29372
|
devUtils.error(
|
|
@@ -28951,6 +29426,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
|
|
|
28951
29426
|
context.workerChannel.send("MOCK_DEACTIVATE");
|
|
28952
29427
|
context.isMockingEnabled = false;
|
|
28953
29428
|
window.clearInterval(context.keepAliveInterval);
|
|
29429
|
+
window.postMessage({ type: "msw/worker:stop" });
|
|
28954
29430
|
printStopMessage({ quiet: context.startOptions?.quiet });
|
|
28955
29431
|
};
|
|
28956
29432
|
};
|
|
@@ -28994,87 +29470,21 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
|
|
|
28994
29470
|
}
|
|
28995
29471
|
};
|
|
28996
29472
|
|
|
28997
|
-
// node_modules/.pnpm/@
|
|
28998
|
-
|
|
28999
|
-
|
|
29000
|
-
|
|
29001
|
-
|
|
29002
|
-
|
|
29003
|
-
return;
|
|
29004
|
-
}
|
|
29005
|
-
executor.result = data;
|
|
29006
|
-
const onFulfilled = (value) => {
|
|
29007
|
-
executor.state = "fulfilled";
|
|
29008
|
-
return value;
|
|
29009
|
-
};
|
|
29010
|
-
return resolve(
|
|
29011
|
-
data instanceof Promise ? data : Promise.resolve(data).then(onFulfilled)
|
|
29012
|
-
);
|
|
29013
|
-
};
|
|
29014
|
-
executor.reject = (reason) => {
|
|
29015
|
-
if (executor.state !== "pending") {
|
|
29016
|
-
return;
|
|
29017
|
-
}
|
|
29018
|
-
queueMicrotask(() => {
|
|
29019
|
-
executor.state = "rejected";
|
|
29020
|
-
});
|
|
29021
|
-
return reject(executor.rejectionReason = reason);
|
|
29022
|
-
};
|
|
29023
|
-
};
|
|
29024
|
-
return executor;
|
|
29025
|
-
}
|
|
29026
|
-
var DeferredPromise = class extends Promise {
|
|
29027
|
-
#executor;
|
|
29028
|
-
resolve;
|
|
29029
|
-
reject;
|
|
29030
|
-
constructor(executor = null) {
|
|
29031
|
-
const deferredExecutor = createDeferredExecutor();
|
|
29032
|
-
super((originalResolve, originalReject) => {
|
|
29033
|
-
deferredExecutor(originalResolve, originalReject);
|
|
29034
|
-
executor?.(deferredExecutor.resolve, deferredExecutor.reject);
|
|
29035
|
-
});
|
|
29036
|
-
this.#executor = deferredExecutor;
|
|
29037
|
-
this.resolve = this.#executor.resolve;
|
|
29038
|
-
this.reject = this.#executor.reject;
|
|
29039
|
-
}
|
|
29040
|
-
get state() {
|
|
29041
|
-
return this.#executor.state;
|
|
29473
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.36.5/node_modules/@mswjs/interceptors/lib/browser/chunk-THPGBWJQ.mjs
|
|
29474
|
+
var InterceptorError = class extends Error {
|
|
29475
|
+
constructor(message3) {
|
|
29476
|
+
super(message3);
|
|
29477
|
+
this.name = "InterceptorError";
|
|
29478
|
+
Object.setPrototypeOf(this, InterceptorError.prototype);
|
|
29042
29479
|
}
|
|
29043
|
-
|
|
29044
|
-
|
|
29045
|
-
|
|
29046
|
-
|
|
29047
|
-
|
|
29048
|
-
|
|
29049
|
-
|
|
29050
|
-
|
|
29051
|
-
}
|
|
29052
|
-
finally(onfinally) {
|
|
29053
|
-
return this.#decorate(super.finally(onfinally));
|
|
29054
|
-
}
|
|
29055
|
-
#decorate(promise) {
|
|
29056
|
-
return Object.defineProperties(promise, {
|
|
29057
|
-
resolve: { configurable: true, value: this.resolve },
|
|
29058
|
-
reject: { configurable: true, value: this.reject }
|
|
29059
|
-
});
|
|
29060
|
-
}
|
|
29061
|
-
};
|
|
29062
|
-
|
|
29063
|
-
// node_modules/.pnpm/@mswjs+interceptors@0.36.5/node_modules/@mswjs/interceptors/lib/browser/chunk-THPGBWJQ.mjs
|
|
29064
|
-
var InterceptorError = class extends Error {
|
|
29065
|
-
constructor(message3) {
|
|
29066
|
-
super(message3);
|
|
29067
|
-
this.name = "InterceptorError";
|
|
29068
|
-
Object.setPrototypeOf(this, InterceptorError.prototype);
|
|
29069
|
-
}
|
|
29070
|
-
};
|
|
29071
|
-
var kRequestHandled = Symbol("kRequestHandled");
|
|
29072
|
-
var kResponsePromise = Symbol("kResponsePromise");
|
|
29073
|
-
var RequestController = class {
|
|
29074
|
-
constructor(request) {
|
|
29075
|
-
this.request = request;
|
|
29076
|
-
this[kRequestHandled] = false;
|
|
29077
|
-
this[kResponsePromise] = new DeferredPromise();
|
|
29480
|
+
};
|
|
29481
|
+
var kRequestHandled = Symbol("kRequestHandled");
|
|
29482
|
+
var kResponsePromise = Symbol("kResponsePromise");
|
|
29483
|
+
var RequestController = class {
|
|
29484
|
+
constructor(request) {
|
|
29485
|
+
this.request = request;
|
|
29486
|
+
this[kRequestHandled] = false;
|
|
29487
|
+
this[kResponsePromise] = new DeferredPromise();
|
|
29078
29488
|
}
|
|
29079
29489
|
/**
|
|
29080
29490
|
* Respond to this request with the given `Response` instance.
|
|
@@ -30221,7 +30631,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
|
|
|
30221
30631
|
const response = await handleRequest(
|
|
30222
30632
|
request,
|
|
30223
30633
|
requestId,
|
|
30224
|
-
context.getRequestHandlers(),
|
|
30634
|
+
context.getRequestHandlers().filter(isHandlerKind("RequestHandler")),
|
|
30225
30635
|
options,
|
|
30226
30636
|
context.emitter,
|
|
30227
30637
|
{
|
|
@@ -30296,6 +30706,911 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
|
|
|
30296
30706
|
}
|
|
30297
30707
|
}
|
|
30298
30708
|
|
|
30709
|
+
// node_modules/.pnpm/@mswjs+interceptors@0.36.5/node_modules/@mswjs/interceptors/lib/browser/interceptors/WebSocket/index.mjs
|
|
30710
|
+
function bindEvent(target, event) {
|
|
30711
|
+
Object.defineProperties(event, {
|
|
30712
|
+
target: {
|
|
30713
|
+
value: target,
|
|
30714
|
+
enumerable: true,
|
|
30715
|
+
writable: true
|
|
30716
|
+
},
|
|
30717
|
+
currentTarget: {
|
|
30718
|
+
value: target,
|
|
30719
|
+
enumerable: true,
|
|
30720
|
+
writable: true
|
|
30721
|
+
}
|
|
30722
|
+
});
|
|
30723
|
+
return event;
|
|
30724
|
+
}
|
|
30725
|
+
var kCancelable = Symbol("kCancelable");
|
|
30726
|
+
var kDefaultPrevented = Symbol("kDefaultPrevented");
|
|
30727
|
+
var CancelableMessageEvent = class extends MessageEvent {
|
|
30728
|
+
constructor(type, init) {
|
|
30729
|
+
super(type, init);
|
|
30730
|
+
this[kCancelable] = !!init.cancelable;
|
|
30731
|
+
this[kDefaultPrevented] = false;
|
|
30732
|
+
}
|
|
30733
|
+
get cancelable() {
|
|
30734
|
+
return this[kCancelable];
|
|
30735
|
+
}
|
|
30736
|
+
set cancelable(nextCancelable) {
|
|
30737
|
+
this[kCancelable] = nextCancelable;
|
|
30738
|
+
}
|
|
30739
|
+
get defaultPrevented() {
|
|
30740
|
+
return this[kDefaultPrevented];
|
|
30741
|
+
}
|
|
30742
|
+
set defaultPrevented(nextDefaultPrevented) {
|
|
30743
|
+
this[kDefaultPrevented] = nextDefaultPrevented;
|
|
30744
|
+
}
|
|
30745
|
+
preventDefault() {
|
|
30746
|
+
if (this.cancelable && !this[kDefaultPrevented]) {
|
|
30747
|
+
this[kDefaultPrevented] = true;
|
|
30748
|
+
}
|
|
30749
|
+
}
|
|
30750
|
+
};
|
|
30751
|
+
var CloseEvent = class extends Event {
|
|
30752
|
+
constructor(type, init = {}) {
|
|
30753
|
+
super(type, init);
|
|
30754
|
+
this.code = init.code === void 0 ? 0 : init.code;
|
|
30755
|
+
this.reason = init.reason === void 0 ? "" : init.reason;
|
|
30756
|
+
this.wasClean = init.wasClean === void 0 ? false : init.wasClean;
|
|
30757
|
+
}
|
|
30758
|
+
};
|
|
30759
|
+
var CancelableCloseEvent = class extends CloseEvent {
|
|
30760
|
+
constructor(type, init = {}) {
|
|
30761
|
+
super(type, init);
|
|
30762
|
+
this[kCancelable] = !!init.cancelable;
|
|
30763
|
+
this[kDefaultPrevented] = false;
|
|
30764
|
+
}
|
|
30765
|
+
get cancelable() {
|
|
30766
|
+
return this[kCancelable];
|
|
30767
|
+
}
|
|
30768
|
+
set cancelable(nextCancelable) {
|
|
30769
|
+
this[kCancelable] = nextCancelable;
|
|
30770
|
+
}
|
|
30771
|
+
get defaultPrevented() {
|
|
30772
|
+
return this[kDefaultPrevented];
|
|
30773
|
+
}
|
|
30774
|
+
set defaultPrevented(nextDefaultPrevented) {
|
|
30775
|
+
this[kDefaultPrevented] = nextDefaultPrevented;
|
|
30776
|
+
}
|
|
30777
|
+
preventDefault() {
|
|
30778
|
+
if (this.cancelable && !this[kDefaultPrevented]) {
|
|
30779
|
+
this[kDefaultPrevented] = true;
|
|
30780
|
+
}
|
|
30781
|
+
}
|
|
30782
|
+
};
|
|
30783
|
+
var kEmitter2 = Symbol("kEmitter");
|
|
30784
|
+
var kBoundListener = Symbol("kBoundListener");
|
|
30785
|
+
var WebSocketClientConnection = class {
|
|
30786
|
+
constructor(socket, transport) {
|
|
30787
|
+
this.socket = socket;
|
|
30788
|
+
this.transport = transport;
|
|
30789
|
+
this.id = createRequestId();
|
|
30790
|
+
this.url = new URL(socket.url);
|
|
30791
|
+
this[kEmitter2] = new EventTarget();
|
|
30792
|
+
this.transport.addEventListener("outgoing", (event) => {
|
|
30793
|
+
const message3 = bindEvent(
|
|
30794
|
+
this.socket,
|
|
30795
|
+
new CancelableMessageEvent("message", {
|
|
30796
|
+
data: event.data,
|
|
30797
|
+
origin: event.origin,
|
|
30798
|
+
cancelable: true
|
|
30799
|
+
})
|
|
30800
|
+
);
|
|
30801
|
+
this[kEmitter2].dispatchEvent(message3);
|
|
30802
|
+
if (message3.defaultPrevented) {
|
|
30803
|
+
event.preventDefault();
|
|
30804
|
+
}
|
|
30805
|
+
});
|
|
30806
|
+
this.transport.addEventListener("close", (event) => {
|
|
30807
|
+
this[kEmitter2].dispatchEvent(
|
|
30808
|
+
bindEvent(this.socket, new CloseEvent("close", event))
|
|
30809
|
+
);
|
|
30810
|
+
});
|
|
30811
|
+
}
|
|
30812
|
+
/**
|
|
30813
|
+
* Listen for the outgoing events from the connected WebSocket client.
|
|
30814
|
+
*/
|
|
30815
|
+
addEventListener(type, listener, options) {
|
|
30816
|
+
if (!Reflect.has(listener, kBoundListener)) {
|
|
30817
|
+
const boundListener = listener.bind(this.socket);
|
|
30818
|
+
Object.defineProperty(listener, kBoundListener, {
|
|
30819
|
+
value: boundListener,
|
|
30820
|
+
enumerable: false,
|
|
30821
|
+
configurable: false
|
|
30822
|
+
});
|
|
30823
|
+
}
|
|
30824
|
+
this[kEmitter2].addEventListener(
|
|
30825
|
+
type,
|
|
30826
|
+
Reflect.get(listener, kBoundListener),
|
|
30827
|
+
options
|
|
30828
|
+
);
|
|
30829
|
+
}
|
|
30830
|
+
/**
|
|
30831
|
+
* Removes the listener for the given event.
|
|
30832
|
+
*/
|
|
30833
|
+
removeEventListener(event, listener, options) {
|
|
30834
|
+
this[kEmitter2].removeEventListener(
|
|
30835
|
+
event,
|
|
30836
|
+
Reflect.get(listener, kBoundListener),
|
|
30837
|
+
options
|
|
30838
|
+
);
|
|
30839
|
+
}
|
|
30840
|
+
/**
|
|
30841
|
+
* Send data to the connected client.
|
|
30842
|
+
*/
|
|
30843
|
+
send(data) {
|
|
30844
|
+
this.transport.send(data);
|
|
30845
|
+
}
|
|
30846
|
+
/**
|
|
30847
|
+
* Close the WebSocket connection.
|
|
30848
|
+
* @param {number} code A status code (see https://www.rfc-editor.org/rfc/rfc6455#section-7.4.1).
|
|
30849
|
+
* @param {string} reason A custom connection close reason.
|
|
30850
|
+
*/
|
|
30851
|
+
close(code, reason) {
|
|
30852
|
+
this.transport.close(code, reason);
|
|
30853
|
+
}
|
|
30854
|
+
};
|
|
30855
|
+
var WEBSOCKET_CLOSE_CODE_RANGE_ERROR = "InvalidAccessError: close code out of user configurable range";
|
|
30856
|
+
var kPassthroughPromise = Symbol("kPassthroughPromise");
|
|
30857
|
+
var kOnSend = Symbol("kOnSend");
|
|
30858
|
+
var kClose = Symbol("kClose");
|
|
30859
|
+
var WebSocketOverride = class extends EventTarget {
|
|
30860
|
+
constructor(url, protocols) {
|
|
30861
|
+
super();
|
|
30862
|
+
this.CONNECTING = 0;
|
|
30863
|
+
this.OPEN = 1;
|
|
30864
|
+
this.CLOSING = 2;
|
|
30865
|
+
this.CLOSED = 3;
|
|
30866
|
+
this._onopen = null;
|
|
30867
|
+
this._onmessage = null;
|
|
30868
|
+
this._onerror = null;
|
|
30869
|
+
this._onclose = null;
|
|
30870
|
+
this.url = url.toString();
|
|
30871
|
+
this.protocol = "";
|
|
30872
|
+
this.extensions = "";
|
|
30873
|
+
this.binaryType = "blob";
|
|
30874
|
+
this.readyState = this.CONNECTING;
|
|
30875
|
+
this.bufferedAmount = 0;
|
|
30876
|
+
this[kPassthroughPromise] = new DeferredPromise();
|
|
30877
|
+
queueMicrotask(async () => {
|
|
30878
|
+
if (await this[kPassthroughPromise]) {
|
|
30879
|
+
return;
|
|
30880
|
+
}
|
|
30881
|
+
this.protocol = typeof protocols === "string" ? protocols : Array.isArray(protocols) && protocols.length > 0 ? protocols[0] : "";
|
|
30882
|
+
if (this.readyState === this.CONNECTING) {
|
|
30883
|
+
this.readyState = this.OPEN;
|
|
30884
|
+
this.dispatchEvent(bindEvent(this, new Event("open")));
|
|
30885
|
+
}
|
|
30886
|
+
});
|
|
30887
|
+
}
|
|
30888
|
+
set onopen(listener) {
|
|
30889
|
+
this.removeEventListener("open", this._onopen);
|
|
30890
|
+
this._onopen = listener;
|
|
30891
|
+
if (listener !== null) {
|
|
30892
|
+
this.addEventListener("open", listener);
|
|
30893
|
+
}
|
|
30894
|
+
}
|
|
30895
|
+
get onopen() {
|
|
30896
|
+
return this._onopen;
|
|
30897
|
+
}
|
|
30898
|
+
set onmessage(listener) {
|
|
30899
|
+
this.removeEventListener(
|
|
30900
|
+
"message",
|
|
30901
|
+
this._onmessage
|
|
30902
|
+
);
|
|
30903
|
+
this._onmessage = listener;
|
|
30904
|
+
if (listener !== null) {
|
|
30905
|
+
this.addEventListener("message", listener);
|
|
30906
|
+
}
|
|
30907
|
+
}
|
|
30908
|
+
get onmessage() {
|
|
30909
|
+
return this._onmessage;
|
|
30910
|
+
}
|
|
30911
|
+
set onerror(listener) {
|
|
30912
|
+
this.removeEventListener("error", this._onerror);
|
|
30913
|
+
this._onerror = listener;
|
|
30914
|
+
if (listener !== null) {
|
|
30915
|
+
this.addEventListener("error", listener);
|
|
30916
|
+
}
|
|
30917
|
+
}
|
|
30918
|
+
get onerror() {
|
|
30919
|
+
return this._onerror;
|
|
30920
|
+
}
|
|
30921
|
+
set onclose(listener) {
|
|
30922
|
+
this.removeEventListener("close", this._onclose);
|
|
30923
|
+
this._onclose = listener;
|
|
30924
|
+
if (listener !== null) {
|
|
30925
|
+
this.addEventListener("close", listener);
|
|
30926
|
+
}
|
|
30927
|
+
}
|
|
30928
|
+
get onclose() {
|
|
30929
|
+
return this._onclose;
|
|
30930
|
+
}
|
|
30931
|
+
/**
|
|
30932
|
+
* @see https://websockets.spec.whatwg.org/#ref-for-dom-websocket-send%E2%91%A0
|
|
30933
|
+
*/
|
|
30934
|
+
send(data) {
|
|
30935
|
+
if (this.readyState === this.CONNECTING) {
|
|
30936
|
+
this.close();
|
|
30937
|
+
throw new DOMException("InvalidStateError");
|
|
30938
|
+
}
|
|
30939
|
+
if (this.readyState === this.CLOSING || this.readyState === this.CLOSED) {
|
|
30940
|
+
return;
|
|
30941
|
+
}
|
|
30942
|
+
this.bufferedAmount += getDataSize(data);
|
|
30943
|
+
queueMicrotask(() => {
|
|
30944
|
+
var _a2;
|
|
30945
|
+
this.bufferedAmount = 0;
|
|
30946
|
+
(_a2 = this[kOnSend]) == null ? void 0 : _a2.call(this, data);
|
|
30947
|
+
});
|
|
30948
|
+
}
|
|
30949
|
+
close(code = 1e3, reason) {
|
|
30950
|
+
invariant(code, WEBSOCKET_CLOSE_CODE_RANGE_ERROR);
|
|
30951
|
+
invariant(
|
|
30952
|
+
code === 1e3 || code >= 3e3 && code <= 4999,
|
|
30953
|
+
WEBSOCKET_CLOSE_CODE_RANGE_ERROR
|
|
30954
|
+
);
|
|
30955
|
+
this[kClose](code, reason);
|
|
30956
|
+
}
|
|
30957
|
+
[(kPassthroughPromise, kOnSend, kClose)](code = 1e3, reason, wasClean = true) {
|
|
30958
|
+
if (this.readyState === this.CLOSING || this.readyState === this.CLOSED) {
|
|
30959
|
+
return;
|
|
30960
|
+
}
|
|
30961
|
+
this.readyState = this.CLOSING;
|
|
30962
|
+
queueMicrotask(() => {
|
|
30963
|
+
this.readyState = this.CLOSED;
|
|
30964
|
+
this.dispatchEvent(
|
|
30965
|
+
bindEvent(
|
|
30966
|
+
this,
|
|
30967
|
+
new CloseEvent("close", {
|
|
30968
|
+
code,
|
|
30969
|
+
reason,
|
|
30970
|
+
wasClean
|
|
30971
|
+
})
|
|
30972
|
+
)
|
|
30973
|
+
);
|
|
30974
|
+
this._onopen = null;
|
|
30975
|
+
this._onmessage = null;
|
|
30976
|
+
this._onerror = null;
|
|
30977
|
+
this._onclose = null;
|
|
30978
|
+
});
|
|
30979
|
+
}
|
|
30980
|
+
addEventListener(type, listener, options) {
|
|
30981
|
+
return super.addEventListener(
|
|
30982
|
+
type,
|
|
30983
|
+
listener,
|
|
30984
|
+
options
|
|
30985
|
+
);
|
|
30986
|
+
}
|
|
30987
|
+
removeEventListener(type, callback, options) {
|
|
30988
|
+
return super.removeEventListener(type, callback, options);
|
|
30989
|
+
}
|
|
30990
|
+
};
|
|
30991
|
+
WebSocketOverride.CONNECTING = 0;
|
|
30992
|
+
WebSocketOverride.OPEN = 1;
|
|
30993
|
+
WebSocketOverride.CLOSING = 2;
|
|
30994
|
+
WebSocketOverride.CLOSED = 3;
|
|
30995
|
+
function getDataSize(data) {
|
|
30996
|
+
if (typeof data === "string") {
|
|
30997
|
+
return data.length;
|
|
30998
|
+
}
|
|
30999
|
+
if (data instanceof Blob) {
|
|
31000
|
+
return data.size;
|
|
31001
|
+
}
|
|
31002
|
+
return data.byteLength;
|
|
31003
|
+
}
|
|
31004
|
+
var kEmitter22 = Symbol("kEmitter");
|
|
31005
|
+
var kBoundListener2 = Symbol("kBoundListener");
|
|
31006
|
+
var kSend = Symbol("kSend");
|
|
31007
|
+
var WebSocketServerConnection = class {
|
|
31008
|
+
constructor(client, transport, createConnection) {
|
|
31009
|
+
this.client = client;
|
|
31010
|
+
this.transport = transport;
|
|
31011
|
+
this.createConnection = createConnection;
|
|
31012
|
+
this[kEmitter22] = new EventTarget();
|
|
31013
|
+
this.mockCloseController = new AbortController();
|
|
31014
|
+
this.realCloseController = new AbortController();
|
|
31015
|
+
this.transport.addEventListener("outgoing", (event) => {
|
|
31016
|
+
if (typeof this.realWebSocket === "undefined") {
|
|
31017
|
+
return;
|
|
31018
|
+
}
|
|
31019
|
+
queueMicrotask(() => {
|
|
31020
|
+
if (!event.defaultPrevented) {
|
|
31021
|
+
this[kSend](event.data);
|
|
31022
|
+
}
|
|
31023
|
+
});
|
|
31024
|
+
});
|
|
31025
|
+
this.transport.addEventListener(
|
|
31026
|
+
"incoming",
|
|
31027
|
+
this.handleIncomingMessage.bind(this)
|
|
31028
|
+
);
|
|
31029
|
+
}
|
|
31030
|
+
/**
|
|
31031
|
+
* The `WebSocket` instance connected to the original server.
|
|
31032
|
+
* Accessing this before calling `server.connect()` will throw.
|
|
31033
|
+
*/
|
|
31034
|
+
get socket() {
|
|
31035
|
+
invariant(
|
|
31036
|
+
this.realWebSocket,
|
|
31037
|
+
'Cannot access "socket" on the original WebSocket server object: the connection is not open. Did you forget to call `server.connect()`?'
|
|
31038
|
+
);
|
|
31039
|
+
return this.realWebSocket;
|
|
31040
|
+
}
|
|
31041
|
+
/**
|
|
31042
|
+
* Open connection to the original WebSocket server.
|
|
31043
|
+
*/
|
|
31044
|
+
connect() {
|
|
31045
|
+
invariant(
|
|
31046
|
+
!this.realWebSocket || this.realWebSocket.readyState !== WebSocket.OPEN,
|
|
31047
|
+
'Failed to call "connect()" on the original WebSocket instance: the connection already open'
|
|
31048
|
+
);
|
|
31049
|
+
const realWebSocket = this.createConnection();
|
|
31050
|
+
realWebSocket.binaryType = this.client.binaryType;
|
|
31051
|
+
realWebSocket.addEventListener(
|
|
31052
|
+
"open",
|
|
31053
|
+
(event) => {
|
|
31054
|
+
this[kEmitter22].dispatchEvent(
|
|
31055
|
+
bindEvent(this.realWebSocket, new Event("open", event))
|
|
31056
|
+
);
|
|
31057
|
+
},
|
|
31058
|
+
{ once: true }
|
|
31059
|
+
);
|
|
31060
|
+
realWebSocket.addEventListener("message", (event) => {
|
|
31061
|
+
this.transport.dispatchEvent(
|
|
31062
|
+
bindEvent(
|
|
31063
|
+
this.realWebSocket,
|
|
31064
|
+
new MessageEvent("incoming", {
|
|
31065
|
+
data: event.data,
|
|
31066
|
+
origin: event.origin
|
|
31067
|
+
})
|
|
31068
|
+
)
|
|
31069
|
+
);
|
|
31070
|
+
});
|
|
31071
|
+
this.client.addEventListener(
|
|
31072
|
+
"close",
|
|
31073
|
+
(event) => {
|
|
31074
|
+
this.handleMockClose(event);
|
|
31075
|
+
},
|
|
31076
|
+
{
|
|
31077
|
+
signal: this.mockCloseController.signal
|
|
31078
|
+
}
|
|
31079
|
+
);
|
|
31080
|
+
realWebSocket.addEventListener(
|
|
31081
|
+
"close",
|
|
31082
|
+
(event) => {
|
|
31083
|
+
this.handleRealClose(event);
|
|
31084
|
+
},
|
|
31085
|
+
{
|
|
31086
|
+
signal: this.realCloseController.signal
|
|
31087
|
+
}
|
|
31088
|
+
);
|
|
31089
|
+
realWebSocket.addEventListener("error", () => {
|
|
31090
|
+
const errorEvent = bindEvent(
|
|
31091
|
+
realWebSocket,
|
|
31092
|
+
new Event("error", { cancelable: true })
|
|
31093
|
+
);
|
|
31094
|
+
this[kEmitter22].dispatchEvent(errorEvent);
|
|
31095
|
+
if (!errorEvent.defaultPrevented) {
|
|
31096
|
+
this.client.dispatchEvent(bindEvent(this.client, new Event("error")));
|
|
31097
|
+
}
|
|
31098
|
+
});
|
|
31099
|
+
this.realWebSocket = realWebSocket;
|
|
31100
|
+
}
|
|
31101
|
+
/**
|
|
31102
|
+
* Listen for the incoming events from the original WebSocket server.
|
|
31103
|
+
*/
|
|
31104
|
+
addEventListener(event, listener, options) {
|
|
31105
|
+
if (!Reflect.has(listener, kBoundListener2)) {
|
|
31106
|
+
const boundListener = listener.bind(this.client);
|
|
31107
|
+
Object.defineProperty(listener, kBoundListener2, {
|
|
31108
|
+
value: boundListener,
|
|
31109
|
+
enumerable: false
|
|
31110
|
+
});
|
|
31111
|
+
}
|
|
31112
|
+
this[kEmitter22].addEventListener(
|
|
31113
|
+
event,
|
|
31114
|
+
Reflect.get(listener, kBoundListener2),
|
|
31115
|
+
options
|
|
31116
|
+
);
|
|
31117
|
+
}
|
|
31118
|
+
/**
|
|
31119
|
+
* Remove the listener for the given event.
|
|
31120
|
+
*/
|
|
31121
|
+
removeEventListener(event, listener, options) {
|
|
31122
|
+
this[kEmitter22].removeEventListener(
|
|
31123
|
+
event,
|
|
31124
|
+
Reflect.get(listener, kBoundListener2),
|
|
31125
|
+
options
|
|
31126
|
+
);
|
|
31127
|
+
}
|
|
31128
|
+
/**
|
|
31129
|
+
* Send data to the original WebSocket server.
|
|
31130
|
+
* @example
|
|
31131
|
+
* server.send('hello')
|
|
31132
|
+
* server.send(new Blob(['hello']))
|
|
31133
|
+
* server.send(new TextEncoder().encode('hello'))
|
|
31134
|
+
*/
|
|
31135
|
+
send(data) {
|
|
31136
|
+
this[kSend](data);
|
|
31137
|
+
}
|
|
31138
|
+
[(kEmitter22, kSend)](data) {
|
|
31139
|
+
const { realWebSocket } = this;
|
|
31140
|
+
invariant(
|
|
31141
|
+
realWebSocket,
|
|
31142
|
+
'Failed to call "server.send()" for "%s": the connection is not open. Did you forget to call "server.connect()"?',
|
|
31143
|
+
this.client.url
|
|
31144
|
+
);
|
|
31145
|
+
if (realWebSocket.readyState === WebSocket.CLOSING || realWebSocket.readyState === WebSocket.CLOSED) {
|
|
31146
|
+
return;
|
|
31147
|
+
}
|
|
31148
|
+
if (realWebSocket.readyState === WebSocket.CONNECTING) {
|
|
31149
|
+
realWebSocket.addEventListener(
|
|
31150
|
+
"open",
|
|
31151
|
+
() => {
|
|
31152
|
+
realWebSocket.send(data);
|
|
31153
|
+
},
|
|
31154
|
+
{ once: true }
|
|
31155
|
+
);
|
|
31156
|
+
return;
|
|
31157
|
+
}
|
|
31158
|
+
realWebSocket.send(data);
|
|
31159
|
+
}
|
|
31160
|
+
/**
|
|
31161
|
+
* Close the actual server connection.
|
|
31162
|
+
*/
|
|
31163
|
+
close() {
|
|
31164
|
+
const { realWebSocket } = this;
|
|
31165
|
+
invariant(
|
|
31166
|
+
realWebSocket,
|
|
31167
|
+
'Failed to close server connection for "%s": the connection is not open. Did you forget to call "server.connect()"?',
|
|
31168
|
+
this.client.url
|
|
31169
|
+
);
|
|
31170
|
+
this.realCloseController.abort();
|
|
31171
|
+
if (realWebSocket.readyState === WebSocket.CLOSING || realWebSocket.readyState === WebSocket.CLOSED) {
|
|
31172
|
+
return;
|
|
31173
|
+
}
|
|
31174
|
+
realWebSocket.close();
|
|
31175
|
+
queueMicrotask(() => {
|
|
31176
|
+
this[kEmitter22].dispatchEvent(
|
|
31177
|
+
bindEvent(
|
|
31178
|
+
this.realWebSocket,
|
|
31179
|
+
new CancelableCloseEvent("close", {
|
|
31180
|
+
/**
|
|
31181
|
+
* @note `server.close()` in the interceptor
|
|
31182
|
+
* always results in clean closures.
|
|
31183
|
+
*/
|
|
31184
|
+
code: 1e3,
|
|
31185
|
+
cancelable: true
|
|
31186
|
+
})
|
|
31187
|
+
)
|
|
31188
|
+
);
|
|
31189
|
+
});
|
|
31190
|
+
}
|
|
31191
|
+
handleIncomingMessage(event) {
|
|
31192
|
+
const messageEvent = bindEvent(
|
|
31193
|
+
event.target,
|
|
31194
|
+
new CancelableMessageEvent("message", {
|
|
31195
|
+
data: event.data,
|
|
31196
|
+
origin: event.origin,
|
|
31197
|
+
cancelable: true
|
|
31198
|
+
})
|
|
31199
|
+
);
|
|
31200
|
+
this[kEmitter22].dispatchEvent(messageEvent);
|
|
31201
|
+
if (!messageEvent.defaultPrevented) {
|
|
31202
|
+
this.client.dispatchEvent(
|
|
31203
|
+
bindEvent(
|
|
31204
|
+
/**
|
|
31205
|
+
* @note Bind the forwarded original server events
|
|
31206
|
+
* to the mock WebSocket instance so it would
|
|
31207
|
+
* dispatch them straight away.
|
|
31208
|
+
*/
|
|
31209
|
+
this.client,
|
|
31210
|
+
// Clone the message event again to prevent
|
|
31211
|
+
// the "already being dispatched" exception.
|
|
31212
|
+
new MessageEvent("message", {
|
|
31213
|
+
data: event.data,
|
|
31214
|
+
origin: event.origin
|
|
31215
|
+
})
|
|
31216
|
+
)
|
|
31217
|
+
);
|
|
31218
|
+
}
|
|
31219
|
+
}
|
|
31220
|
+
handleMockClose(_event) {
|
|
31221
|
+
if (this.realWebSocket) {
|
|
31222
|
+
this.realWebSocket.close();
|
|
31223
|
+
}
|
|
31224
|
+
}
|
|
31225
|
+
handleRealClose(event) {
|
|
31226
|
+
this.mockCloseController.abort();
|
|
31227
|
+
const closeEvent = bindEvent(
|
|
31228
|
+
this.realWebSocket,
|
|
31229
|
+
new CancelableCloseEvent("close", {
|
|
31230
|
+
code: event.code,
|
|
31231
|
+
reason: event.reason,
|
|
31232
|
+
wasClean: event.wasClean,
|
|
31233
|
+
cancelable: true
|
|
31234
|
+
})
|
|
31235
|
+
);
|
|
31236
|
+
this[kEmitter22].dispatchEvent(closeEvent);
|
|
31237
|
+
if (!closeEvent.defaultPrevented) {
|
|
31238
|
+
this.client[kClose](event.code, event.reason);
|
|
31239
|
+
}
|
|
31240
|
+
}
|
|
31241
|
+
};
|
|
31242
|
+
var WebSocketClassTransport = class extends EventTarget {
|
|
31243
|
+
constructor(socket) {
|
|
31244
|
+
super();
|
|
31245
|
+
this.socket = socket;
|
|
31246
|
+
this.socket.addEventListener("close", (event) => {
|
|
31247
|
+
this.dispatchEvent(bindEvent(this.socket, new CloseEvent("close", event)));
|
|
31248
|
+
});
|
|
31249
|
+
this.socket[kOnSend] = (data) => {
|
|
31250
|
+
this.dispatchEvent(
|
|
31251
|
+
bindEvent(
|
|
31252
|
+
this.socket,
|
|
31253
|
+
// Dispatch this as cancelable because "client" connection
|
|
31254
|
+
// re-creates this message event (cannot dispatch the same event).
|
|
31255
|
+
new CancelableMessageEvent("outgoing", {
|
|
31256
|
+
data,
|
|
31257
|
+
origin: this.socket.url,
|
|
31258
|
+
cancelable: true
|
|
31259
|
+
})
|
|
31260
|
+
)
|
|
31261
|
+
);
|
|
31262
|
+
};
|
|
31263
|
+
}
|
|
31264
|
+
addEventListener(type, callback, options) {
|
|
31265
|
+
return super.addEventListener(type, callback, options);
|
|
31266
|
+
}
|
|
31267
|
+
dispatchEvent(event) {
|
|
31268
|
+
return super.dispatchEvent(event);
|
|
31269
|
+
}
|
|
31270
|
+
send(data) {
|
|
31271
|
+
queueMicrotask(() => {
|
|
31272
|
+
this.socket.dispatchEvent(
|
|
31273
|
+
bindEvent(
|
|
31274
|
+
/**
|
|
31275
|
+
* @note Setting this event's "target" to the
|
|
31276
|
+
* WebSocket override instance is important.
|
|
31277
|
+
* This way it can tell apart original incoming events
|
|
31278
|
+
* (must be forwarded to the transport) from the
|
|
31279
|
+
* mocked message events like the one below
|
|
31280
|
+
* (must be dispatched on the client instance).
|
|
31281
|
+
*/
|
|
31282
|
+
this.socket,
|
|
31283
|
+
new MessageEvent("message", {
|
|
31284
|
+
data,
|
|
31285
|
+
origin: this.socket.url
|
|
31286
|
+
})
|
|
31287
|
+
)
|
|
31288
|
+
);
|
|
31289
|
+
});
|
|
31290
|
+
}
|
|
31291
|
+
close(code, reason) {
|
|
31292
|
+
this.socket[kClose](code, reason);
|
|
31293
|
+
}
|
|
31294
|
+
};
|
|
31295
|
+
var _WebSocketInterceptor = class extends Interceptor {
|
|
31296
|
+
constructor() {
|
|
31297
|
+
super(_WebSocketInterceptor.symbol);
|
|
31298
|
+
}
|
|
31299
|
+
checkEnvironment() {
|
|
31300
|
+
return typeof globalThis.WebSocket !== "undefined";
|
|
31301
|
+
}
|
|
31302
|
+
setup() {
|
|
31303
|
+
const originalWebSocket = globalThis.WebSocket;
|
|
31304
|
+
const webSocketProxy = new Proxy(globalThis.WebSocket, {
|
|
31305
|
+
construct: (target, args, newTarget) => {
|
|
31306
|
+
const [url, protocols] = args;
|
|
31307
|
+
const createConnection = () => {
|
|
31308
|
+
return Reflect.construct(target, args, newTarget);
|
|
31309
|
+
};
|
|
31310
|
+
const socket = new WebSocketOverride(url, protocols);
|
|
31311
|
+
const transport = new WebSocketClassTransport(socket);
|
|
31312
|
+
queueMicrotask(() => {
|
|
31313
|
+
try {
|
|
31314
|
+
const server = new WebSocketServerConnection(
|
|
31315
|
+
socket,
|
|
31316
|
+
transport,
|
|
31317
|
+
createConnection
|
|
31318
|
+
);
|
|
31319
|
+
const hasConnectionListeners = this.emitter.emit("connection", {
|
|
31320
|
+
client: new WebSocketClientConnection(socket, transport),
|
|
31321
|
+
server,
|
|
31322
|
+
info: {
|
|
31323
|
+
protocols
|
|
31324
|
+
}
|
|
31325
|
+
});
|
|
31326
|
+
if (hasConnectionListeners) {
|
|
31327
|
+
socket[kPassthroughPromise].resolve(false);
|
|
31328
|
+
} else {
|
|
31329
|
+
socket[kPassthroughPromise].resolve(true);
|
|
31330
|
+
server.connect();
|
|
31331
|
+
server.addEventListener("open", () => {
|
|
31332
|
+
socket.dispatchEvent(bindEvent(socket, new Event("open")));
|
|
31333
|
+
if (server["realWebSocket"]) {
|
|
31334
|
+
socket.protocol = server["realWebSocket"].protocol;
|
|
31335
|
+
}
|
|
31336
|
+
});
|
|
31337
|
+
}
|
|
31338
|
+
} catch (error3) {
|
|
31339
|
+
if (error3 instanceof Error) {
|
|
31340
|
+
socket.dispatchEvent(new Event("error"));
|
|
31341
|
+
if (socket.readyState !== WebSocket.CLOSING && socket.readyState !== WebSocket.CLOSED) {
|
|
31342
|
+
socket[kClose](1011, error3.message, false);
|
|
31343
|
+
}
|
|
31344
|
+
console.error(error3);
|
|
31345
|
+
}
|
|
31346
|
+
}
|
|
31347
|
+
});
|
|
31348
|
+
return socket;
|
|
31349
|
+
}
|
|
31350
|
+
});
|
|
31351
|
+
globalThis.WebSocket = webSocketProxy;
|
|
31352
|
+
this.subscriptions.push(() => {
|
|
31353
|
+
globalThis.WebSocket = originalWebSocket;
|
|
31354
|
+
});
|
|
31355
|
+
}
|
|
31356
|
+
};
|
|
31357
|
+
var WebSocketInterceptor = _WebSocketInterceptor;
|
|
31358
|
+
WebSocketInterceptor.symbol = Symbol("websocket");
|
|
31359
|
+
|
|
31360
|
+
// src/core/ws/webSocketInterceptor.ts
|
|
31361
|
+
var webSocketInterceptor = new WebSocketInterceptor();
|
|
31362
|
+
|
|
31363
|
+
// src/core/ws/handleWebSocketEvent.ts
|
|
31364
|
+
function handleWebSocketEvent(options) {
|
|
31365
|
+
webSocketInterceptor.on("connection", async (connection) => {
|
|
31366
|
+
const handlers = options.getHandlers();
|
|
31367
|
+
const connectionEvent = new MessageEvent("connection", {
|
|
31368
|
+
data: connection
|
|
31369
|
+
});
|
|
31370
|
+
const matchingHandlers = [];
|
|
31371
|
+
for (const handler of handlers) {
|
|
31372
|
+
if (isHandlerKind("EventHandler")(handler) && handler.predicate({
|
|
31373
|
+
event: connectionEvent,
|
|
31374
|
+
parsedResult: handler.parse({
|
|
31375
|
+
event: connectionEvent
|
|
31376
|
+
})
|
|
31377
|
+
})) {
|
|
31378
|
+
matchingHandlers.push(handler);
|
|
31379
|
+
}
|
|
31380
|
+
}
|
|
31381
|
+
if (matchingHandlers.length > 0) {
|
|
31382
|
+
options?.onMockedConnection(connection);
|
|
31383
|
+
for (const handler of matchingHandlers) {
|
|
31384
|
+
handler[kDispatchEvent](connectionEvent);
|
|
31385
|
+
}
|
|
31386
|
+
} else {
|
|
31387
|
+
const request = new Request(connection.client.url, {
|
|
31388
|
+
headers: {
|
|
31389
|
+
upgrade: "websocket",
|
|
31390
|
+
connection: "upgrade"
|
|
31391
|
+
}
|
|
31392
|
+
});
|
|
31393
|
+
await onUnhandledRequest(
|
|
31394
|
+
request,
|
|
31395
|
+
options.getUnhandledRequestStrategy()
|
|
31396
|
+
).catch((error3) => {
|
|
31397
|
+
const errorEvent = new Event("error");
|
|
31398
|
+
Object.defineProperty(errorEvent, "cause", {
|
|
31399
|
+
enumerable: true,
|
|
31400
|
+
configurable: false,
|
|
31401
|
+
value: error3
|
|
31402
|
+
});
|
|
31403
|
+
connection.client.socket.dispatchEvent(errorEvent);
|
|
31404
|
+
});
|
|
31405
|
+
options?.onPassthroughConnection(connection);
|
|
31406
|
+
connection.server.connect();
|
|
31407
|
+
}
|
|
31408
|
+
});
|
|
31409
|
+
}
|
|
31410
|
+
|
|
31411
|
+
// src/core/ws/utils/getMessageLength.ts
|
|
31412
|
+
function getMessageLength(data) {
|
|
31413
|
+
if (data instanceof Blob) {
|
|
31414
|
+
return data.size;
|
|
31415
|
+
}
|
|
31416
|
+
if (data instanceof ArrayBuffer) {
|
|
31417
|
+
return data.byteLength;
|
|
31418
|
+
}
|
|
31419
|
+
return new Blob([data]).size;
|
|
31420
|
+
}
|
|
31421
|
+
|
|
31422
|
+
// src/core/ws/utils/truncateMessage.ts
|
|
31423
|
+
var MAX_LENGTH = 24;
|
|
31424
|
+
function truncateMessage(message3) {
|
|
31425
|
+
if (message3.length <= MAX_LENGTH) {
|
|
31426
|
+
return message3;
|
|
31427
|
+
}
|
|
31428
|
+
return `${message3.slice(0, MAX_LENGTH)}\u2026`;
|
|
31429
|
+
}
|
|
31430
|
+
|
|
31431
|
+
// src/core/ws/utils/getPublicData.ts
|
|
31432
|
+
async function getPublicData(data) {
|
|
31433
|
+
if (data instanceof Blob) {
|
|
31434
|
+
const text = await data.text();
|
|
31435
|
+
return `Blob(${truncateMessage(text)})`;
|
|
31436
|
+
}
|
|
31437
|
+
if (typeof data === "object" && "byteLength" in data) {
|
|
31438
|
+
const text = new TextDecoder().decode(data);
|
|
31439
|
+
return `ArrayBuffer(${truncateMessage(text)})`;
|
|
31440
|
+
}
|
|
31441
|
+
return truncateMessage(data);
|
|
31442
|
+
}
|
|
31443
|
+
|
|
31444
|
+
// src/core/ws/utils/attachWebSocketLogger.ts
|
|
31445
|
+
var colors = {
|
|
31446
|
+
system: "#3b82f6",
|
|
31447
|
+
outgoing: "#22c55e",
|
|
31448
|
+
incoming: "#ef4444",
|
|
31449
|
+
mocked: "#ff6a33"
|
|
31450
|
+
};
|
|
31451
|
+
function attachWebSocketLogger(connection) {
|
|
31452
|
+
const { client, server } = connection;
|
|
31453
|
+
logConnectionOpen(client);
|
|
31454
|
+
client.addEventListener("message", (event) => {
|
|
31455
|
+
logOutgoingClientMessage(event);
|
|
31456
|
+
});
|
|
31457
|
+
client.addEventListener("close", (event) => {
|
|
31458
|
+
logConnectionClose(event);
|
|
31459
|
+
});
|
|
31460
|
+
client.socket.addEventListener("error", (event) => {
|
|
31461
|
+
logClientError(event);
|
|
31462
|
+
});
|
|
31463
|
+
client.send = new Proxy(client.send, {
|
|
31464
|
+
apply(target, thisArg, args) {
|
|
31465
|
+
const [data] = args;
|
|
31466
|
+
const messageEvent = new MessageEvent("message", { data });
|
|
31467
|
+
Object.defineProperties(messageEvent, {
|
|
31468
|
+
currentTarget: {
|
|
31469
|
+
enumerable: true,
|
|
31470
|
+
writable: false,
|
|
31471
|
+
value: client.socket
|
|
31472
|
+
},
|
|
31473
|
+
target: {
|
|
31474
|
+
enumerable: true,
|
|
31475
|
+
writable: false,
|
|
31476
|
+
value: client.socket
|
|
31477
|
+
}
|
|
31478
|
+
});
|
|
31479
|
+
queueMicrotask(() => {
|
|
31480
|
+
logIncomingMockedClientMessage(messageEvent);
|
|
31481
|
+
});
|
|
31482
|
+
return Reflect.apply(target, thisArg, args);
|
|
31483
|
+
}
|
|
31484
|
+
});
|
|
31485
|
+
server.addEventListener(
|
|
31486
|
+
"open",
|
|
31487
|
+
() => {
|
|
31488
|
+
server.addEventListener("message", (event) => {
|
|
31489
|
+
logIncomingServerMessage(event);
|
|
31490
|
+
});
|
|
31491
|
+
},
|
|
31492
|
+
{ once: true }
|
|
31493
|
+
);
|
|
31494
|
+
server.send = new Proxy(server.send, {
|
|
31495
|
+
apply(target, thisArg, args) {
|
|
31496
|
+
const [data] = args;
|
|
31497
|
+
const messageEvent = new MessageEvent("message", { data });
|
|
31498
|
+
Object.defineProperties(messageEvent, {
|
|
31499
|
+
currentTarget: {
|
|
31500
|
+
enumerable: true,
|
|
31501
|
+
writable: false,
|
|
31502
|
+
value: server.socket
|
|
31503
|
+
},
|
|
31504
|
+
target: {
|
|
31505
|
+
enumerable: true,
|
|
31506
|
+
writable: false,
|
|
31507
|
+
value: server.socket
|
|
31508
|
+
}
|
|
31509
|
+
});
|
|
31510
|
+
logOutgoingMockedClientMessage(messageEvent);
|
|
31511
|
+
return Reflect.apply(target, thisArg, args);
|
|
31512
|
+
}
|
|
31513
|
+
});
|
|
31514
|
+
}
|
|
31515
|
+
function logConnectionOpen(client) {
|
|
31516
|
+
const publicUrl = toPublicUrl(client.url);
|
|
31517
|
+
console.groupCollapsed(
|
|
31518
|
+
devUtils.formatMessage(`${getTimestamp()} %c\u25B6%c ${publicUrl}`),
|
|
31519
|
+
`color:${colors.system}`,
|
|
31520
|
+
"color:inherit"
|
|
31521
|
+
);
|
|
31522
|
+
console.log("Client:", client.socket);
|
|
31523
|
+
console.groupEnd();
|
|
31524
|
+
}
|
|
31525
|
+
function logConnectionClose(event) {
|
|
31526
|
+
const target = event.target;
|
|
31527
|
+
const publicUrl = toPublicUrl(target.url);
|
|
31528
|
+
console.groupCollapsed(
|
|
31529
|
+
devUtils.formatMessage(
|
|
31530
|
+
`${getTimestamp({ milliseconds: true })} %c\u25A0%c ${publicUrl}`
|
|
31531
|
+
),
|
|
31532
|
+
`color:${colors.system}`,
|
|
31533
|
+
"color:inherit"
|
|
31534
|
+
);
|
|
31535
|
+
console.log(event);
|
|
31536
|
+
console.groupEnd();
|
|
31537
|
+
}
|
|
31538
|
+
function logClientError(event) {
|
|
31539
|
+
const socket = event.target;
|
|
31540
|
+
const publicUrl = toPublicUrl(socket.url);
|
|
31541
|
+
console.groupCollapsed(
|
|
31542
|
+
devUtils.formatMessage(
|
|
31543
|
+
`${getTimestamp({ milliseconds: true })} %c\xD7%c ${publicUrl}`
|
|
31544
|
+
),
|
|
31545
|
+
`color:${colors.system}`,
|
|
31546
|
+
"color:inherit"
|
|
31547
|
+
);
|
|
31548
|
+
console.log(event);
|
|
31549
|
+
console.groupEnd();
|
|
31550
|
+
}
|
|
31551
|
+
async function logOutgoingClientMessage(event) {
|
|
31552
|
+
const byteLength = getMessageLength(event.data);
|
|
31553
|
+
const publicData = await getPublicData(event.data);
|
|
31554
|
+
const arrow = event.defaultPrevented ? "\u21E1" : "\u2B06";
|
|
31555
|
+
console.groupCollapsed(
|
|
31556
|
+
devUtils.formatMessage(
|
|
31557
|
+
`${getTimestamp({ milliseconds: true })} %c${arrow}%c ${publicData} %c${byteLength}%c`
|
|
31558
|
+
),
|
|
31559
|
+
`color:${colors.outgoing}`,
|
|
31560
|
+
"color:inherit",
|
|
31561
|
+
"color:gray;font-weight:normal",
|
|
31562
|
+
"color:inherit;font-weight:inherit"
|
|
31563
|
+
);
|
|
31564
|
+
console.log(event);
|
|
31565
|
+
console.groupEnd();
|
|
31566
|
+
}
|
|
31567
|
+
async function logOutgoingMockedClientMessage(event) {
|
|
31568
|
+
const byteLength = getMessageLength(event.data);
|
|
31569
|
+
const publicData = await getPublicData(event.data);
|
|
31570
|
+
console.groupCollapsed(
|
|
31571
|
+
devUtils.formatMessage(
|
|
31572
|
+
`${getTimestamp({ milliseconds: true })} %c\u2B06%c ${publicData} %c${byteLength}%c`
|
|
31573
|
+
),
|
|
31574
|
+
`color:${colors.mocked}`,
|
|
31575
|
+
"color:inherit",
|
|
31576
|
+
"color:gray;font-weight:normal",
|
|
31577
|
+
"color:inherit;font-weight:inherit"
|
|
31578
|
+
);
|
|
31579
|
+
console.log(event);
|
|
31580
|
+
console.groupEnd();
|
|
31581
|
+
}
|
|
31582
|
+
async function logIncomingMockedClientMessage(event) {
|
|
31583
|
+
const byteLength = getMessageLength(event.data);
|
|
31584
|
+
const publicData = await getPublicData(event.data);
|
|
31585
|
+
console.groupCollapsed(
|
|
31586
|
+
devUtils.formatMessage(
|
|
31587
|
+
`${getTimestamp({ milliseconds: true })} %c\u2B07%c ${publicData} %c${byteLength}%c`
|
|
31588
|
+
),
|
|
31589
|
+
`color:${colors.mocked}`,
|
|
31590
|
+
"color:inherit",
|
|
31591
|
+
"color:gray;font-weight:normal",
|
|
31592
|
+
"color:inherit;font-weight:inherit"
|
|
31593
|
+
);
|
|
31594
|
+
console.log(event);
|
|
31595
|
+
console.groupEnd();
|
|
31596
|
+
}
|
|
31597
|
+
async function logIncomingServerMessage(event) {
|
|
31598
|
+
const byteLength = getMessageLength(event.data);
|
|
31599
|
+
const publicData = await getPublicData(event.data);
|
|
31600
|
+
const arrow = event.defaultPrevented ? "\u21E3" : "\u2B07";
|
|
31601
|
+
console.groupCollapsed(
|
|
31602
|
+
devUtils.formatMessage(
|
|
31603
|
+
`${getTimestamp({ milliseconds: true })} %c${arrow}%c ${publicData} %c${byteLength}%c`
|
|
31604
|
+
),
|
|
31605
|
+
`color:${colors.incoming}`,
|
|
31606
|
+
"color:inherit",
|
|
31607
|
+
"color:gray;font-weight:normal",
|
|
31608
|
+
"color:inherit;font-weight:inherit"
|
|
31609
|
+
);
|
|
31610
|
+
console.log(event);
|
|
31611
|
+
console.groupEnd();
|
|
31612
|
+
}
|
|
31613
|
+
|
|
30299
31614
|
// src/browser/setupWorker/setupWorker.ts
|
|
30300
31615
|
var SetupWorkerApi = class extends SetupApi {
|
|
30301
31616
|
context;
|
|
@@ -30412,6 +31727,25 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
|
|
|
30412
31727
|
DEFAULT_START_OPTIONS,
|
|
30413
31728
|
options
|
|
30414
31729
|
);
|
|
31730
|
+
handleWebSocketEvent({
|
|
31731
|
+
getUnhandledRequestStrategy: () => {
|
|
31732
|
+
return this.context.startOptions.onUnhandledRequest;
|
|
31733
|
+
},
|
|
31734
|
+
getHandlers: () => {
|
|
31735
|
+
return this.handlersController.currentHandlers();
|
|
31736
|
+
},
|
|
31737
|
+
onMockedConnection: (connection) => {
|
|
31738
|
+
if (!this.context.startOptions.quiet) {
|
|
31739
|
+
attachWebSocketLogger(connection);
|
|
31740
|
+
}
|
|
31741
|
+
},
|
|
31742
|
+
onPassthroughConnection() {
|
|
31743
|
+
}
|
|
31744
|
+
});
|
|
31745
|
+
webSocketInterceptor.apply();
|
|
31746
|
+
this.subscriptions.push(() => {
|
|
31747
|
+
webSocketInterceptor.dispose();
|
|
31748
|
+
});
|
|
30415
31749
|
return await this.startHandler(this.context.startOptions, options);
|
|
30416
31750
|
}
|
|
30417
31751
|
stop() {
|