msw 2.3.0-ws.rc-5 → 2.3.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/cli/init.js +0 -0
- package/config/scripts/postinstall.js +0 -0
- package/lib/browser/index.d.mts +6 -7
- package/lib/browser/index.d.ts +6 -7
- package/lib/browser/index.js +156 -81
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/index.mjs +156 -81
- package/lib/browser/index.mjs.map +1 -1
- package/lib/core/{GraphQLHandler-DGyzNtRQ.d.ts → GraphQLHandler-COiPfZ8k.d.ts} +1 -1
- package/lib/core/{GraphQLHandler-CzcXr7At.d.mts → GraphQLHandler-Dq_WRbKe.d.mts} +1 -1
- package/lib/core/{HttpResponse-BOzDwzB6.d.ts → HttpResponse-B07UKAkU.d.ts} +2 -2
- package/lib/core/{HttpResponse-CSyJ1cbO.d.mts → HttpResponse-C7niBMwb.d.mts} +2 -2
- package/lib/core/HttpResponse.d.mts +1 -1
- package/lib/core/HttpResponse.d.ts +1 -1
- package/lib/core/SetupApi.d.mts +12 -15
- package/lib/core/SetupApi.d.ts +12 -15
- package/lib/core/SetupApi.js +1 -3
- package/lib/core/SetupApi.js.map +1 -1
- package/lib/core/SetupApi.mjs +1 -3
- 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/http.d.mts +1 -1
- package/lib/core/http.d.ts +1 -1
- package/lib/core/index.d.mts +2 -5
- package/lib/core/index.d.ts +2 -5
- package/lib/core/index.js +1 -5
- package/lib/core/index.js.map +1 -1
- package/lib/core/index.mjs +1 -7
- 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 +0 -4
- package/lib/core/utils/executeHandlers.js.map +1 -1
- package/lib/core/utils/executeHandlers.mjs +0 -6
- 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/Disposable.d.mts +2 -2
- package/lib/core/utils/internal/Disposable.d.ts +2 -2
- package/lib/core/utils/internal/Disposable.js +5 -2
- package/lib/core/utils/internal/Disposable.js.map +1 -1
- package/lib/core/utils/internal/Disposable.mjs +5 -2
- package/lib/core/utils/internal/Disposable.mjs.map +1 -1
- package/lib/core/utils/internal/devUtils.d.mts +10 -1
- package/lib/core/utils/internal/devUtils.d.ts +10 -1
- package/lib/core/utils/internal/devUtils.js +7 -0
- package/lib/core/utils/internal/devUtils.js.map +1 -1
- package/lib/core/utils/internal/devUtils.mjs +7 -0
- package/lib/core/utils/internal/devUtils.mjs.map +1 -1
- 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 +1 -4
- package/lib/core/utils/logging/getTimestamp.d.ts +1 -4
- package/lib/core/utils/logging/getTimestamp.js +2 -6
- package/lib/core/utils/logging/getTimestamp.js.map +1 -1
- package/lib/core/utils/logging/getTimestamp.mjs +2 -6
- package/lib/core/utils/logging/getTimestamp.mjs.map +1 -1
- package/lib/core/utils/matching/matchRequestUrl.d.mts +1 -2
- package/lib/core/utils/matching/matchRequestUrl.d.ts +1 -2
- package/lib/core/utils/matching/matchRequestUrl.js +0 -4
- package/lib/core/utils/matching/matchRequestUrl.js.map +1 -1
- package/lib/core/utils/matching/matchRequestUrl.mjs +0 -4
- package/lib/core/utils/matching/matchRequestUrl.mjs.map +1 -1
- package/lib/core/utils/request/onUnhandledRequest.js +3 -3
- package/lib/core/utils/request/onUnhandledRequest.js.map +1 -1
- package/lib/core/utils/request/onUnhandledRequest.mjs +4 -4
- package/lib/core/utils/request/onUnhandledRequest.mjs.map +1 -1
- package/lib/iife/index.js +177 -1063
- package/lib/iife/index.js.map +1 -1
- package/lib/mockServiceWorker.js +1 -1
- package/lib/native/index.d.mts +5 -6
- package/lib/native/index.d.ts +5 -6
- package/lib/native/index.js +5 -13
- package/lib/native/index.js.map +1 -1
- package/lib/native/index.mjs +6 -14
- package/lib/native/index.mjs.map +1 -1
- package/lib/node/index.d.mts +7 -8
- package/lib/node/index.d.ts +7 -8
- package/lib/node/index.js +5 -13
- package/lib/node/index.js.map +1 -1
- package/lib/node/index.mjs +6 -14
- package/lib/node/index.mjs.map +1 -1
- package/package.json +36 -29
- package/src/browser/setupWorker/glossary.ts +10 -10
- package/src/browser/setupWorker/setupWorker.ts +3 -34
- package/src/core/SetupApi.ts +20 -28
- package/src/core/index.ts +1 -8
- package/src/core/utils/executeHandlers.ts +2 -6
- package/src/core/utils/handleRequest.ts +2 -1
- package/src/core/utils/internal/Disposable.ts +6 -3
- package/src/core/utils/internal/devUtils.test.ts +21 -0
- package/src/core/utils/internal/devUtils.ts +13 -0
- package/src/core/utils/logging/getTimestamp.test.ts +6 -20
- package/src/core/utils/logging/getTimestamp.ts +6 -11
- package/src/core/utils/matching/matchRequestUrl.test.ts +0 -44
- package/src/core/utils/matching/matchRequestUrl.ts +0 -4
- package/src/core/utils/request/onUnhandledRequest.test.ts +30 -4
- package/src/core/utils/request/onUnhandledRequest.ts +4 -4
- package/src/node/SetupServerApi.ts +7 -8
- package/src/node/SetupServerCommonApi.ts +8 -15
- package/src/node/glossary.ts +7 -5
- package/src/node/setupServer.ts +1 -2
- package/lib/core/handlers/WebSocketHandler.d.mts +0 -32
- package/lib/core/handlers/WebSocketHandler.d.ts +0 -32
- package/lib/core/handlers/WebSocketHandler.js +0 -62
- package/lib/core/handlers/WebSocketHandler.js.map +0 -1
- package/lib/core/handlers/WebSocketHandler.mjs +0 -44
- package/lib/core/handlers/WebSocketHandler.mjs.map +0 -1
- package/lib/core/ws/WebSocketClientManager.d.mts +0 -64
- package/lib/core/ws/WebSocketClientManager.d.ts +0 -64
- package/lib/core/ws/WebSocketClientManager.js +0 -123
- package/lib/core/ws/WebSocketClientManager.js.map +0 -1
- package/lib/core/ws/WebSocketClientManager.mjs +0 -103
- package/lib/core/ws/WebSocketClientManager.mjs.map +0 -1
- package/lib/core/ws/handleWebSocketEvent.d.mts +0 -16
- package/lib/core/ws/handleWebSocketEvent.d.ts +0 -16
- package/lib/core/ws/handleWebSocketEvent.js +0 -56
- package/lib/core/ws/handleWebSocketEvent.js.map +0 -1
- package/lib/core/ws/handleWebSocketEvent.mjs +0 -36
- package/lib/core/ws/handleWebSocketEvent.mjs.map +0 -1
- package/lib/core/ws/utils/attachWebSocketLogger.d.mts +0 -34
- package/lib/core/ws/utils/attachWebSocketLogger.d.ts +0 -34
- package/lib/core/ws/utils/attachWebSocketLogger.js +0 -217
- package/lib/core/ws/utils/attachWebSocketLogger.js.map +0 -1
- package/lib/core/ws/utils/attachWebSocketLogger.mjs +0 -197
- package/lib/core/ws/utils/attachWebSocketLogger.mjs.map +0 -1
- package/lib/core/ws/utils/getMessageLength.d.mts +0 -11
- package/lib/core/ws/utils/getMessageLength.d.ts +0 -11
- package/lib/core/ws/utils/getMessageLength.js +0 -33
- package/lib/core/ws/utils/getMessageLength.js.map +0 -1
- package/lib/core/ws/utils/getMessageLength.mjs +0 -13
- package/lib/core/ws/utils/getMessageLength.mjs.map +0 -1
- package/lib/core/ws/utils/getPublicData.d.mts +0 -5
- package/lib/core/ws/utils/getPublicData.d.ts +0 -5
- package/lib/core/ws/utils/getPublicData.js +0 -36
- package/lib/core/ws/utils/getPublicData.js.map +0 -1
- package/lib/core/ws/utils/getPublicData.mjs +0 -16
- package/lib/core/ws/utils/getPublicData.mjs.map +0 -1
- package/lib/core/ws/utils/truncateMessage.d.mts +0 -3
- package/lib/core/ws/utils/truncateMessage.d.ts +0 -3
- package/lib/core/ws/utils/truncateMessage.js +0 -31
- package/lib/core/ws/utils/truncateMessage.js.map +0 -1
- package/lib/core/ws/utils/truncateMessage.mjs +0 -11
- package/lib/core/ws/utils/truncateMessage.mjs.map +0 -1
- package/lib/core/ws/webSocketInterceptor.d.mts +0 -5
- package/lib/core/ws/webSocketInterceptor.d.ts +0 -5
- package/lib/core/ws/webSocketInterceptor.js +0 -26
- package/lib/core/ws/webSocketInterceptor.js.map +0 -1
- package/lib/core/ws/webSocketInterceptor.mjs +0 -6
- package/lib/core/ws/webSocketInterceptor.mjs.map +0 -1
- package/lib/core/ws.d.mts +0 -49
- package/lib/core/ws.d.ts +0 -49
- package/lib/core/ws.js +0 -63
- package/lib/core/ws.js.map +0 -1
- package/lib/core/ws.mjs +0 -46
- package/lib/core/ws.mjs.map +0 -1
- package/src/core/handlers/WebSocketHandler.ts +0 -71
- package/src/core/ws/WebSocketClientManager.test.ts +0 -159
- package/src/core/ws/WebSocketClientManager.ts +0 -170
- package/src/core/ws/handleWebSocketEvent.ts +0 -56
- package/src/core/ws/utils/attachWebSocketLogger.ts +0 -269
- package/src/core/ws/utils/getMessageLength.test.ts +0 -16
- package/src/core/ws/utils/getMessageLength.ts +0 -19
- package/src/core/ws/utils/getPublicData.test.ts +0 -38
- package/src/core/ws/utils/getPublicData.ts +0 -17
- package/src/core/ws/utils/truncateMessage.test.ts +0 -12
- package/src/core/ws/utils/truncateMessage.ts +0 -9
- package/src/core/ws/webSocketInterceptor.ts +0 -3
- package/src/core/ws.test.ts +0 -23
- package/src/core/ws.ts +0 -122
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
const kAddByClientId = Symbol("kAddByClientId");
|
|
2
|
-
class WebSocketClientManager {
|
|
3
|
-
constructor(channel) {
|
|
4
|
-
this.channel = channel;
|
|
5
|
-
this.clients = /* @__PURE__ */ new Set();
|
|
6
|
-
this.channel.addEventListener("message", (message) => {
|
|
7
|
-
const { type, payload } = message.data;
|
|
8
|
-
switch (type) {
|
|
9
|
-
case "connection:open": {
|
|
10
|
-
this.onRemoteConnection(payload.clientId, new URL(payload.url));
|
|
11
|
-
break;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* All active WebSocket client connections.
|
|
18
|
-
*/
|
|
19
|
-
clients;
|
|
20
|
-
/**
|
|
21
|
-
* Adds the given `WebSocket` client connection to the set
|
|
22
|
-
* of all connections. The given connection is always the complete
|
|
23
|
-
* connection object because `addConnection()` is called only
|
|
24
|
-
* for the opened connections in the same runtime.
|
|
25
|
-
*/
|
|
26
|
-
addConnection(client) {
|
|
27
|
-
this.clients.add(client);
|
|
28
|
-
this.channel.postMessage({
|
|
29
|
-
type: "connection:open",
|
|
30
|
-
payload: {
|
|
31
|
-
clientId: client.id,
|
|
32
|
-
url: client.url.toString()
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
const handleExtraneousMessage = (message) => {
|
|
36
|
-
const { type, payload } = message.data;
|
|
37
|
-
if (typeof payload === "object" && "clientId" in payload && payload.clientId !== client.id) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
switch (type) {
|
|
41
|
-
case "extraneous:send": {
|
|
42
|
-
client.send(payload.data);
|
|
43
|
-
break;
|
|
44
|
-
}
|
|
45
|
-
case "extraneous:close": {
|
|
46
|
-
client.close(payload.code, payload.reason);
|
|
47
|
-
break;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
const abortController = new AbortController();
|
|
52
|
-
this.channel.addEventListener("message", handleExtraneousMessage, {
|
|
53
|
-
signal: abortController.signal
|
|
54
|
-
});
|
|
55
|
-
client.addEventListener("close", () => abortController.abort(), {
|
|
56
|
-
once: true
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Adds a client connection wrapper to operate with
|
|
61
|
-
* WebSocket client connections in other runtimes.
|
|
62
|
-
*/
|
|
63
|
-
onRemoteConnection(id, url) {
|
|
64
|
-
this.clients.add(
|
|
65
|
-
// Create a connection-compatible instance that can
|
|
66
|
-
// operate with this client from a different runtime
|
|
67
|
-
// using the BroadcastChannel messages.
|
|
68
|
-
new WebSocketRemoteClientConnection(id, url, this.channel)
|
|
69
|
-
);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
class WebSocketRemoteClientConnection {
|
|
73
|
-
constructor(id, url, channel) {
|
|
74
|
-
this.id = id;
|
|
75
|
-
this.url = url;
|
|
76
|
-
this.channel = channel;
|
|
77
|
-
}
|
|
78
|
-
send(data) {
|
|
79
|
-
this.channel.postMessage({
|
|
80
|
-
type: "extraneous:send",
|
|
81
|
-
payload: {
|
|
82
|
-
clientId: this.id,
|
|
83
|
-
data
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
close(code, reason) {
|
|
88
|
-
this.channel.postMessage({
|
|
89
|
-
type: "extraneous:close",
|
|
90
|
-
payload: {
|
|
91
|
-
clientId: this.id,
|
|
92
|
-
code,
|
|
93
|
-
reason
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
export {
|
|
99
|
-
WebSocketClientManager,
|
|
100
|
-
WebSocketRemoteClientConnection,
|
|
101
|
-
kAddByClientId
|
|
102
|
-
};
|
|
103
|
-
//# sourceMappingURL=WebSocketClientManager.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/ws/WebSocketClientManager.ts"],"sourcesContent":["import type {\n WebSocketData,\n WebSocketClientConnection,\n WebSocketClientConnectionProtocol,\n} from '@mswjs/interceptors/WebSocket'\n\nexport type WebSocketBroadcastChannelMessage =\n | {\n type: 'connection:open'\n payload: {\n clientId: string\n url: string\n }\n }\n | {\n type: 'extraneous:send'\n payload: {\n clientId: string\n data: WebSocketData\n }\n }\n | {\n type: 'extraneous:close'\n payload: {\n clientId: string\n code?: number\n reason?: string\n }\n }\n\nexport const kAddByClientId = Symbol('kAddByClientId')\n\n/**\n * A manager responsible for accumulating WebSocket client\n * connections across different browser runtimes.\n */\nexport class WebSocketClientManager {\n /**\n * All active WebSocket client connections.\n */\n public clients: Set<WebSocketClientConnectionProtocol>\n\n constructor(private channel: BroadcastChannel) {\n this.clients = new Set()\n\n this.channel.addEventListener('message', (message) => {\n const { type, payload } = message.data as WebSocketBroadcastChannelMessage\n\n switch (type) {\n case 'connection:open': {\n // When another runtime notifies about a new connection,\n // create a connection wrapper class and add it to the set.\n this.onRemoteConnection(payload.clientId, new URL(payload.url))\n break\n }\n }\n })\n }\n\n /**\n * Adds the given `WebSocket` client connection to the set\n * of all connections. The given connection is always the complete\n * connection object because `addConnection()` is called only\n * for the opened connections in the same runtime.\n */\n public addConnection(client: WebSocketClientConnection): void {\n this.clients.add(client)\n\n // Signal to other runtimes about this connection.\n this.channel.postMessage({\n type: 'connection:open',\n payload: {\n clientId: client.id,\n url: client.url.toString(),\n },\n } as WebSocketBroadcastChannelMessage)\n\n // Instruct the current client how to handle events\n // coming from other runtimes (e.g. when calling `.broadcast()`).\n const handleExtraneousMessage = (\n message: MessageEvent<WebSocketBroadcastChannelMessage>,\n ) => {\n const { type, payload } = message.data\n\n // Ignore broadcasted messages for other clients.\n if (\n typeof payload === 'object' &&\n 'clientId' in payload &&\n payload.clientId !== client.id\n ) {\n return\n }\n\n switch (type) {\n case 'extraneous:send': {\n client.send(payload.data)\n break\n }\n\n case 'extraneous:close': {\n client.close(payload.code, payload.reason)\n break\n }\n }\n }\n\n const abortController = new AbortController()\n\n this.channel.addEventListener('message', handleExtraneousMessage, {\n signal: abortController.signal,\n })\n\n // Once closed, this connection cannot be operated on.\n // This must include the extraneous runtimes as well.\n client.addEventListener('close', () => abortController.abort(), {\n once: true,\n })\n }\n\n /**\n * Adds a client connection wrapper to operate with\n * WebSocket client connections in other runtimes.\n */\n private onRemoteConnection(id: string, url: URL): void {\n this.clients.add(\n // Create a connection-compatible instance that can\n // operate with this client from a different runtime\n // using the BroadcastChannel messages.\n new WebSocketRemoteClientConnection(id, url, this.channel),\n )\n }\n}\n\n/**\n * A wrapper class to operate with WebSocket client connections\n * from other runtimes. This class maintains 1-1 public API\n * compatibility to the `WebSocketClientConnection` but relies\n * on the given `BroadcastChannel` to communicate instructions\n * with the client connections from other runtimes.\n */\nexport class WebSocketRemoteClientConnection\n implements WebSocketClientConnectionProtocol\n{\n constructor(\n public readonly id: string,\n public readonly url: URL,\n private channel: BroadcastChannel,\n ) {}\n\n send(data: WebSocketData): void {\n this.channel.postMessage({\n type: 'extraneous:send',\n payload: {\n clientId: this.id,\n data,\n },\n } as WebSocketBroadcastChannelMessage)\n }\n\n close(code?: number | undefined, reason?: string | undefined): void {\n this.channel.postMessage({\n type: 'extraneous:close',\n payload: {\n clientId: this.id,\n code,\n reason,\n },\n } as WebSocketBroadcastChannelMessage)\n }\n}\n"],"mappings":"AA8BO,MAAM,iBAAiB,OAAO,gBAAgB;AAM9C,MAAM,uBAAuB;AAAA,EAMlC,YAAoB,SAA2B;AAA3B;AAClB,SAAK,UAAU,oBAAI,IAAI;AAEvB,SAAK,QAAQ,iBAAiB,WAAW,CAAC,YAAY;AACpD,YAAM,EAAE,MAAM,QAAQ,IAAI,QAAQ;AAElC,cAAQ,MAAM;AAAA,QACZ,KAAK,mBAAmB;AAGtB,eAAK,mBAAmB,QAAQ,UAAU,IAAI,IAAI,QAAQ,GAAG,CAAC;AAC9D;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAjBO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBA,cAAc,QAAyC;AAC5D,SAAK,QAAQ,IAAI,MAAM;AAGvB,SAAK,QAAQ,YAAY;AAAA,MACvB,MAAM;AAAA,MACN,SAAS;AAAA,QACP,UAAU,OAAO;AAAA,QACjB,KAAK,OAAO,IAAI,SAAS;AAAA,MAC3B;AAAA,IACF,CAAqC;AAIrC,UAAM,0BAA0B,CAC9B,YACG;AACH,YAAM,EAAE,MAAM,QAAQ,IAAI,QAAQ;AAGlC,UACE,OAAO,YAAY,YACnB,cAAc,WACd,QAAQ,aAAa,OAAO,IAC5B;AACA;AAAA,MACF;AAEA,cAAQ,MAAM;AAAA,QACZ,KAAK,mBAAmB;AACtB,iBAAO,KAAK,QAAQ,IAAI;AACxB;AAAA,QACF;AAAA,QAEA,KAAK,oBAAoB;AACvB,iBAAO,MAAM,QAAQ,MAAM,QAAQ,MAAM;AACzC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,kBAAkB,IAAI,gBAAgB;AAE5C,SAAK,QAAQ,iBAAiB,WAAW,yBAAyB;AAAA,MAChE,QAAQ,gBAAgB;AAAA,IAC1B,CAAC;AAID,WAAO,iBAAiB,SAAS,MAAM,gBAAgB,MAAM,GAAG;AAAA,MAC9D,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,mBAAmB,IAAY,KAAgB;AACrD,SAAK,QAAQ;AAAA;AAAA;AAAA;AAAA,MAIX,IAAI,gCAAgC,IAAI,KAAK,KAAK,OAAO;AAAA,IAC3D;AAAA,EACF;AACF;AASO,MAAM,gCAEb;AAAA,EACE,YACkB,IACA,KACR,SACR;AAHgB;AACA;AACR;AAAA,EACP;AAAA,EAEH,KAAK,MAA2B;AAC9B,SAAK,QAAQ,YAAY;AAAA,MACvB,MAAM;AAAA,MACN,SAAS;AAAA,QACP,UAAU,KAAK;AAAA,QACf;AAAA,MACF;AAAA,IACF,CAAqC;AAAA,EACvC;AAAA,EAEA,MAAM,MAA2B,QAAmC;AAClE,SAAK,QAAQ,YAAY;AAAA,MACvB,MAAM;AAAA,MACN,SAAS;AAAA,QACP,UAAU,KAAK;AAAA,QACf;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAqC;AAAA,EACvC;AACF;","names":[]}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { WebSocketConnectionData } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket';
|
|
2
|
-
import { R as RequestHandler } from '../HttpResponse-CSyJ1cbO.mjs';
|
|
3
|
-
import { WebSocketHandler } from '../handlers/WebSocketHandler.mjs';
|
|
4
|
-
import '../typeUtils.mjs';
|
|
5
|
-
import 'strict-event-emitter';
|
|
6
|
-
import '@mswjs/interceptors/WebSocket';
|
|
7
|
-
import '../utils/matching/matchRequestUrl.mjs';
|
|
8
|
-
|
|
9
|
-
interface HandleWebSocketEventOptions {
|
|
10
|
-
getHandlers: () => Array<RequestHandler | WebSocketHandler>;
|
|
11
|
-
onMockedConnection: (connection: WebSocketConnectionData) => void;
|
|
12
|
-
onPassthroughConnection: (onnection: WebSocketConnectionData) => void;
|
|
13
|
-
}
|
|
14
|
-
declare function handleWebSocketEvent(options: HandleWebSocketEventOptions): void;
|
|
15
|
-
|
|
16
|
-
export { handleWebSocketEvent };
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { WebSocketConnectionData } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket';
|
|
2
|
-
import { R as RequestHandler } from '../HttpResponse-BOzDwzB6.js';
|
|
3
|
-
import { WebSocketHandler } from '../handlers/WebSocketHandler.js';
|
|
4
|
-
import '../typeUtils.js';
|
|
5
|
-
import 'strict-event-emitter';
|
|
6
|
-
import '@mswjs/interceptors/WebSocket';
|
|
7
|
-
import '../utils/matching/matchRequestUrl.js';
|
|
8
|
-
|
|
9
|
-
interface HandleWebSocketEventOptions {
|
|
10
|
-
getHandlers: () => Array<RequestHandler | WebSocketHandler>;
|
|
11
|
-
onMockedConnection: (connection: WebSocketConnectionData) => void;
|
|
12
|
-
onPassthroughConnection: (onnection: WebSocketConnectionData) => void;
|
|
13
|
-
}
|
|
14
|
-
declare function handleWebSocketEvent(options: HandleWebSocketEventOptions): void;
|
|
15
|
-
|
|
16
|
-
export { handleWebSocketEvent };
|
|
@@ -1,56 +0,0 @@
|
|
|
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 handleWebSocketEvent_exports = {};
|
|
20
|
-
__export(handleWebSocketEvent_exports, {
|
|
21
|
-
handleWebSocketEvent: () => handleWebSocketEvent
|
|
22
|
-
});
|
|
23
|
-
module.exports = __toCommonJS(handleWebSocketEvent_exports);
|
|
24
|
-
var import_WebSocketHandler = require("../handlers/WebSocketHandler.js");
|
|
25
|
-
var import_webSocketInterceptor = require("./webSocketInterceptor.js");
|
|
26
|
-
function handleWebSocketEvent(options) {
|
|
27
|
-
import_webSocketInterceptor.webSocketInterceptor.on("connection", (connection) => {
|
|
28
|
-
const handlers = options.getHandlers();
|
|
29
|
-
const connectionEvent = new MessageEvent("connection", {
|
|
30
|
-
data: connection
|
|
31
|
-
});
|
|
32
|
-
const matchingHandlers = handlers.filter(
|
|
33
|
-
(handler) => {
|
|
34
|
-
if (handler instanceof import_WebSocketHandler.WebSocketHandler) {
|
|
35
|
-
return handler.predicate({
|
|
36
|
-
event: connectionEvent,
|
|
37
|
-
parsedResult: handler.parse({
|
|
38
|
-
event: connectionEvent
|
|
39
|
-
})
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
);
|
|
45
|
-
if (matchingHandlers.length > 0) {
|
|
46
|
-
options?.onMockedConnection(connection);
|
|
47
|
-
for (const handler of matchingHandlers) {
|
|
48
|
-
handler[import_WebSocketHandler.kDispatchEvent](connectionEvent);
|
|
49
|
-
}
|
|
50
|
-
} else {
|
|
51
|
-
options?.onPassthroughConnection(connection);
|
|
52
|
-
connection.server.connect();
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=handleWebSocketEvent.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/ws/handleWebSocketEvent.ts"],"sourcesContent":["import type { WebSocketConnectionData } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket'\nimport { RequestHandler } from '../handlers/RequestHandler'\nimport { WebSocketHandler, kDispatchEvent } from '../handlers/WebSocketHandler'\nimport { webSocketInterceptor } from './webSocketInterceptor'\n\ninterface HandleWebSocketEventOptions {\n getHandlers: () => Array<RequestHandler | WebSocketHandler>\n onMockedConnection: (connection: WebSocketConnectionData) => void\n onPassthroughConnection: (onnection: WebSocketConnectionData) => void\n}\n\nexport function handleWebSocketEvent(options: HandleWebSocketEventOptions) {\n webSocketInterceptor.on('connection', (connection) => {\n const handlers = options.getHandlers()\n\n const connectionEvent = new MessageEvent('connection', {\n data: connection,\n })\n\n // First, filter only those WebSocket handlers that\n // match the \"ws.link()\" endpoint predicate. Don't dispatch\n // anything yet so the logger can be attached to the connection\n // before it potentially sends events.\n const matchingHandlers = handlers.filter<WebSocketHandler>(\n (handler): handler is WebSocketHandler => {\n if (handler instanceof WebSocketHandler) {\n return handler.predicate({\n event: connectionEvent,\n parsedResult: handler.parse({\n event: connectionEvent,\n }),\n })\n }\n\n return false\n },\n )\n\n if (matchingHandlers.length > 0) {\n options?.onMockedConnection(connection)\n\n // Iterate over the handlers and forward the connection\n // event to WebSocket event handlers. This is equivalent\n // to dispatching that event onto multiple listeners.\n for (const handler of matchingHandlers) {\n handler[kDispatchEvent](connectionEvent)\n }\n } else {\n options?.onPassthroughConnection(connection)\n\n // If none of the \"ws\" handlers matched,\n // establish the WebSocket connection as-is.\n connection.server.connect()\n }\n })\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,8BAAiD;AACjD,kCAAqC;AAQ9B,SAAS,qBAAqB,SAAsC;AACzE,mDAAqB,GAAG,cAAc,CAAC,eAAe;AACpD,UAAM,WAAW,QAAQ,YAAY;AAErC,UAAM,kBAAkB,IAAI,aAAa,cAAc;AAAA,MACrD,MAAM;AAAA,IACR,CAAC;AAMD,UAAM,mBAAmB,SAAS;AAAA,MAChC,CAAC,YAAyC;AACxC,YAAI,mBAAmB,0CAAkB;AACvC,iBAAO,QAAQ,UAAU;AAAA,YACvB,OAAO;AAAA,YACP,cAAc,QAAQ,MAAM;AAAA,cAC1B,OAAO;AAAA,YACT,CAAC;AAAA,UACH,CAAC;AAAA,QACH;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAI,iBAAiB,SAAS,GAAG;AAC/B,eAAS,mBAAmB,UAAU;AAKtC,iBAAW,WAAW,kBAAkB;AACtC,gBAAQ,sCAAc,EAAE,eAAe;AAAA,MACzC;AAAA,IACF,OAAO;AACL,eAAS,wBAAwB,UAAU;AAI3C,iBAAW,OAAO,QAAQ;AAAA,IAC5B;AAAA,EACF,CAAC;AACH;","names":[]}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { WebSocketHandler, kDispatchEvent } from '../handlers/WebSocketHandler.mjs';
|
|
2
|
-
import { webSocketInterceptor } from './webSocketInterceptor.mjs';
|
|
3
|
-
function handleWebSocketEvent(options) {
|
|
4
|
-
webSocketInterceptor.on("connection", (connection) => {
|
|
5
|
-
const handlers = options.getHandlers();
|
|
6
|
-
const connectionEvent = new MessageEvent("connection", {
|
|
7
|
-
data: connection
|
|
8
|
-
});
|
|
9
|
-
const matchingHandlers = handlers.filter(
|
|
10
|
-
(handler) => {
|
|
11
|
-
if (handler instanceof WebSocketHandler) {
|
|
12
|
-
return handler.predicate({
|
|
13
|
-
event: connectionEvent,
|
|
14
|
-
parsedResult: handler.parse({
|
|
15
|
-
event: connectionEvent
|
|
16
|
-
})
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
);
|
|
22
|
-
if (matchingHandlers.length > 0) {
|
|
23
|
-
options?.onMockedConnection(connection);
|
|
24
|
-
for (const handler of matchingHandlers) {
|
|
25
|
-
handler[kDispatchEvent](connectionEvent);
|
|
26
|
-
}
|
|
27
|
-
} else {
|
|
28
|
-
options?.onPassthroughConnection(connection);
|
|
29
|
-
connection.server.connect();
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
export {
|
|
34
|
-
handleWebSocketEvent
|
|
35
|
-
};
|
|
36
|
-
//# sourceMappingURL=handleWebSocketEvent.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/ws/handleWebSocketEvent.ts"],"sourcesContent":["import type { WebSocketConnectionData } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket'\nimport { RequestHandler } from '../handlers/RequestHandler'\nimport { WebSocketHandler, kDispatchEvent } from '../handlers/WebSocketHandler'\nimport { webSocketInterceptor } from './webSocketInterceptor'\n\ninterface HandleWebSocketEventOptions {\n getHandlers: () => Array<RequestHandler | WebSocketHandler>\n onMockedConnection: (connection: WebSocketConnectionData) => void\n onPassthroughConnection: (onnection: WebSocketConnectionData) => void\n}\n\nexport function handleWebSocketEvent(options: HandleWebSocketEventOptions) {\n webSocketInterceptor.on('connection', (connection) => {\n const handlers = options.getHandlers()\n\n const connectionEvent = new MessageEvent('connection', {\n data: connection,\n })\n\n // First, filter only those WebSocket handlers that\n // match the \"ws.link()\" endpoint predicate. Don't dispatch\n // anything yet so the logger can be attached to the connection\n // before it potentially sends events.\n const matchingHandlers = handlers.filter<WebSocketHandler>(\n (handler): handler is WebSocketHandler => {\n if (handler instanceof WebSocketHandler) {\n return handler.predicate({\n event: connectionEvent,\n parsedResult: handler.parse({\n event: connectionEvent,\n }),\n })\n }\n\n return false\n },\n )\n\n if (matchingHandlers.length > 0) {\n options?.onMockedConnection(connection)\n\n // Iterate over the handlers and forward the connection\n // event to WebSocket event handlers. This is equivalent\n // to dispatching that event onto multiple listeners.\n for (const handler of matchingHandlers) {\n handler[kDispatchEvent](connectionEvent)\n }\n } else {\n options?.onPassthroughConnection(connection)\n\n // If none of the \"ws\" handlers matched,\n // establish the WebSocket connection as-is.\n connection.server.connect()\n }\n })\n}\n"],"mappings":"AAEA,SAAS,kBAAkB,sBAAsB;AACjD,SAAS,4BAA4B;AAQ9B,SAAS,qBAAqB,SAAsC;AACzE,uBAAqB,GAAG,cAAc,CAAC,eAAe;AACpD,UAAM,WAAW,QAAQ,YAAY;AAErC,UAAM,kBAAkB,IAAI,aAAa,cAAc;AAAA,MACrD,MAAM;AAAA,IACR,CAAC;AAMD,UAAM,mBAAmB,SAAS;AAAA,MAChC,CAAC,YAAyC;AACxC,YAAI,mBAAmB,kBAAkB;AACvC,iBAAO,QAAQ,UAAU;AAAA,YACvB,OAAO;AAAA,YACP,cAAc,QAAQ,MAAM;AAAA,cAC1B,OAAO;AAAA,YACT,CAAC;AAAA,UACH,CAAC;AAAA,QACH;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAI,iBAAiB,SAAS,GAAG;AAC/B,eAAS,mBAAmB,UAAU;AAKtC,iBAAW,WAAW,kBAAkB;AACtC,gBAAQ,cAAc,EAAE,eAAe;AAAA,MACzC;AAAA,IACF,OAAO;AACL,eAAS,wBAAwB,UAAU;AAI3C,iBAAW,OAAO,QAAQ;AAAA,IAC5B;AAAA,EACF,CAAC;AACH;","names":[]}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { WebSocketConnectionData, WebSocketClientConnection, WebSocketData } from '@mswjs/interceptors/WebSocket';
|
|
2
|
-
|
|
3
|
-
declare function attachWebSocketLogger(connection: WebSocketConnectionData): void;
|
|
4
|
-
/**
|
|
5
|
-
* Prints the WebSocket connection.
|
|
6
|
-
* This is meant to be logged by every WebSocket handler
|
|
7
|
-
* that intercepted this connection. This helps you see
|
|
8
|
-
* what handlers observe this connection.
|
|
9
|
-
*/
|
|
10
|
-
declare function logConnectionOpen(client: WebSocketClientConnection): void;
|
|
11
|
-
/**
|
|
12
|
-
* Prints the outgoing client message.
|
|
13
|
-
*/
|
|
14
|
-
declare function logOutgoingClientMessage(event: MessageEvent<WebSocketData>): Promise<void>;
|
|
15
|
-
/**
|
|
16
|
-
* Prints the outgoing client message initiated
|
|
17
|
-
* by `server.send()` in the event handler.
|
|
18
|
-
*/
|
|
19
|
-
declare function logOutgoingMockedClientMessage(event: MessageEvent<WebSocketData>): Promise<void>;
|
|
20
|
-
/**
|
|
21
|
-
* Prings the message received by the WebSocket client.
|
|
22
|
-
* This is fired when the "message" event is dispatched
|
|
23
|
-
* on the actual WebSocket client instance, and translates to
|
|
24
|
-
* the client receiving a message from the server.
|
|
25
|
-
*/
|
|
26
|
-
declare function logIncomingClientMessage(event: MessageEvent<WebSocketData>): Promise<void>;
|
|
27
|
-
/**
|
|
28
|
-
* Prints the outgoing client message initiated
|
|
29
|
-
* by `client.send()` in the event handler.
|
|
30
|
-
*/
|
|
31
|
-
declare function logIncomingMockedClientMessage(event: MessageEvent<WebSocketData>): Promise<void>;
|
|
32
|
-
declare function logIncomingServerMessage(event: MessageEvent<WebSocketData>): Promise<void>;
|
|
33
|
-
|
|
34
|
-
export { attachWebSocketLogger, logConnectionOpen, logIncomingClientMessage, logIncomingMockedClientMessage, logIncomingServerMessage, logOutgoingClientMessage, logOutgoingMockedClientMessage };
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { WebSocketConnectionData, WebSocketClientConnection, WebSocketData } from '@mswjs/interceptors/WebSocket';
|
|
2
|
-
|
|
3
|
-
declare function attachWebSocketLogger(connection: WebSocketConnectionData): void;
|
|
4
|
-
/**
|
|
5
|
-
* Prints the WebSocket connection.
|
|
6
|
-
* This is meant to be logged by every WebSocket handler
|
|
7
|
-
* that intercepted this connection. This helps you see
|
|
8
|
-
* what handlers observe this connection.
|
|
9
|
-
*/
|
|
10
|
-
declare function logConnectionOpen(client: WebSocketClientConnection): void;
|
|
11
|
-
/**
|
|
12
|
-
* Prints the outgoing client message.
|
|
13
|
-
*/
|
|
14
|
-
declare function logOutgoingClientMessage(event: MessageEvent<WebSocketData>): Promise<void>;
|
|
15
|
-
/**
|
|
16
|
-
* Prints the outgoing client message initiated
|
|
17
|
-
* by `server.send()` in the event handler.
|
|
18
|
-
*/
|
|
19
|
-
declare function logOutgoingMockedClientMessage(event: MessageEvent<WebSocketData>): Promise<void>;
|
|
20
|
-
/**
|
|
21
|
-
* Prings the message received by the WebSocket client.
|
|
22
|
-
* This is fired when the "message" event is dispatched
|
|
23
|
-
* on the actual WebSocket client instance, and translates to
|
|
24
|
-
* the client receiving a message from the server.
|
|
25
|
-
*/
|
|
26
|
-
declare function logIncomingClientMessage(event: MessageEvent<WebSocketData>): Promise<void>;
|
|
27
|
-
/**
|
|
28
|
-
* Prints the outgoing client message initiated
|
|
29
|
-
* by `client.send()` in the event handler.
|
|
30
|
-
*/
|
|
31
|
-
declare function logIncomingMockedClientMessage(event: MessageEvent<WebSocketData>): Promise<void>;
|
|
32
|
-
declare function logIncomingServerMessage(event: MessageEvent<WebSocketData>): Promise<void>;
|
|
33
|
-
|
|
34
|
-
export { attachWebSocketLogger, logConnectionOpen, logIncomingClientMessage, logIncomingMockedClientMessage, logIncomingServerMessage, logOutgoingClientMessage, logOutgoingMockedClientMessage };
|
|
@@ -1,217 +0,0 @@
|
|
|
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 attachWebSocketLogger_exports = {};
|
|
20
|
-
__export(attachWebSocketLogger_exports, {
|
|
21
|
-
attachWebSocketLogger: () => attachWebSocketLogger,
|
|
22
|
-
logConnectionOpen: () => logConnectionOpen,
|
|
23
|
-
logIncomingClientMessage: () => logIncomingClientMessage,
|
|
24
|
-
logIncomingMockedClientMessage: () => logIncomingMockedClientMessage,
|
|
25
|
-
logIncomingServerMessage: () => logIncomingServerMessage,
|
|
26
|
-
logOutgoingClientMessage: () => logOutgoingClientMessage,
|
|
27
|
-
logOutgoingMockedClientMessage: () => logOutgoingMockedClientMessage
|
|
28
|
-
});
|
|
29
|
-
module.exports = __toCommonJS(attachWebSocketLogger_exports);
|
|
30
|
-
var import_devUtils = require("../../utils/internal/devUtils.js");
|
|
31
|
-
var import_getTimestamp = require("../../utils/logging/getTimestamp.js");
|
|
32
|
-
var import_toPublicUrl = require("../../utils/request/toPublicUrl.js");
|
|
33
|
-
var import_getMessageLength = require("./getMessageLength.js");
|
|
34
|
-
var import_getPublicData = require("./getPublicData.js");
|
|
35
|
-
const colors = {
|
|
36
|
-
blue: "#3b82f6",
|
|
37
|
-
green: "#22c55e",
|
|
38
|
-
red: "#ef4444",
|
|
39
|
-
orange: "#ff6a33"
|
|
40
|
-
};
|
|
41
|
-
function attachWebSocketLogger(connection) {
|
|
42
|
-
const { client, server } = connection;
|
|
43
|
-
logConnectionOpen(client);
|
|
44
|
-
client.addEventListener("message", (event) => {
|
|
45
|
-
logOutgoingClientMessage(event);
|
|
46
|
-
});
|
|
47
|
-
client.addEventListener("close", (event) => {
|
|
48
|
-
logConnectionClose(event);
|
|
49
|
-
});
|
|
50
|
-
client.socket.addEventListener("message", (event) => {
|
|
51
|
-
logIncomingClientMessage(event);
|
|
52
|
-
});
|
|
53
|
-
client.socket.addEventListener("error", (event) => {
|
|
54
|
-
logClientError(event);
|
|
55
|
-
});
|
|
56
|
-
client.send = new Proxy(client.send, {
|
|
57
|
-
apply(target, thisArg, args) {
|
|
58
|
-
const [data] = args;
|
|
59
|
-
const messageEvent = new MessageEvent("message", { data });
|
|
60
|
-
Object.defineProperties(messageEvent, {
|
|
61
|
-
currentTarget: {
|
|
62
|
-
enumerable: true,
|
|
63
|
-
writable: false,
|
|
64
|
-
value: client.socket
|
|
65
|
-
},
|
|
66
|
-
target: {
|
|
67
|
-
enumerable: true,
|
|
68
|
-
writable: false,
|
|
69
|
-
value: client.socket
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
logIncomingMockedClientMessage(messageEvent);
|
|
73
|
-
return Reflect.apply(target, thisArg, args);
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
server.addEventListener(
|
|
77
|
-
"open",
|
|
78
|
-
() => {
|
|
79
|
-
server.addEventListener("message", (event) => {
|
|
80
|
-
logIncomingServerMessage(event);
|
|
81
|
-
});
|
|
82
|
-
},
|
|
83
|
-
{ once: true }
|
|
84
|
-
);
|
|
85
|
-
server.send = new Proxy(server.send, {
|
|
86
|
-
apply(target, thisArg, args) {
|
|
87
|
-
const [data] = args;
|
|
88
|
-
const messageEvent = new MessageEvent("message", { data });
|
|
89
|
-
Object.defineProperties(messageEvent, {
|
|
90
|
-
currentTarget: {
|
|
91
|
-
enumerable: true,
|
|
92
|
-
writable: false,
|
|
93
|
-
value: server["realWebSocket"]
|
|
94
|
-
},
|
|
95
|
-
target: {
|
|
96
|
-
enumerable: true,
|
|
97
|
-
writable: false,
|
|
98
|
-
value: server["realWebSocket"]
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
logOutgoingMockedClientMessage(messageEvent);
|
|
102
|
-
return Reflect.apply(target, thisArg, args);
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
function logConnectionOpen(client) {
|
|
107
|
-
const publicUrl = (0, import_toPublicUrl.toPublicUrl)(client.url);
|
|
108
|
-
console.groupCollapsed(
|
|
109
|
-
import_devUtils.devUtils.formatMessage(`${(0, import_getTimestamp.getTimestamp)()} %c\u25B6%c ${publicUrl}`),
|
|
110
|
-
`color:${colors.blue}`,
|
|
111
|
-
"color:inherit"
|
|
112
|
-
);
|
|
113
|
-
console.log("Client:", client.socket);
|
|
114
|
-
console.groupEnd();
|
|
115
|
-
}
|
|
116
|
-
async function logOutgoingClientMessage(event) {
|
|
117
|
-
const byteLength = (0, import_getMessageLength.getMessageLength)(event.data);
|
|
118
|
-
const publicData = await (0, import_getPublicData.getPublicData)(event.data);
|
|
119
|
-
console.groupCollapsed(
|
|
120
|
-
import_devUtils.devUtils.formatMessage(
|
|
121
|
-
`${(0, import_getTimestamp.getTimestamp)({ milliseconds: true })} %c\u2191%c ${publicData} %c${byteLength}%c`
|
|
122
|
-
),
|
|
123
|
-
`color:${colors.green}`,
|
|
124
|
-
"color:inherit",
|
|
125
|
-
"color:gray;font-weight:normal",
|
|
126
|
-
"color:inherit;font-weight:inherit"
|
|
127
|
-
);
|
|
128
|
-
console.log(event);
|
|
129
|
-
console.groupEnd();
|
|
130
|
-
}
|
|
131
|
-
async function logOutgoingMockedClientMessage(event) {
|
|
132
|
-
const byteLength = (0, import_getMessageLength.getMessageLength)(event.data);
|
|
133
|
-
const publicData = await (0, import_getPublicData.getPublicData)(event.data);
|
|
134
|
-
console.groupCollapsed(
|
|
135
|
-
import_devUtils.devUtils.formatMessage(
|
|
136
|
-
`${(0, import_getTimestamp.getTimestamp)({ milliseconds: true })} %c\u21E1%c ${publicData} %c${byteLength}%c`
|
|
137
|
-
),
|
|
138
|
-
`color:${colors.orange}`,
|
|
139
|
-
"color:inherit",
|
|
140
|
-
"color:gray;font-weight:normal",
|
|
141
|
-
"color:inherit;font-weight:inherit"
|
|
142
|
-
);
|
|
143
|
-
console.log(event);
|
|
144
|
-
console.groupEnd();
|
|
145
|
-
}
|
|
146
|
-
async function logIncomingClientMessage(event) {
|
|
147
|
-
const byteLength = (0, import_getMessageLength.getMessageLength)(event.data);
|
|
148
|
-
const publicData = await (0, import_getPublicData.getPublicData)(event.data);
|
|
149
|
-
console.groupCollapsed(
|
|
150
|
-
import_devUtils.devUtils.formatMessage(
|
|
151
|
-
`${(0, import_getTimestamp.getTimestamp)({ milliseconds: true })} %c\u2193%c ${publicData} %c${byteLength}%c`
|
|
152
|
-
),
|
|
153
|
-
`color:${colors.red}`,
|
|
154
|
-
"color:inherit",
|
|
155
|
-
"color:gray;font-weight:normal",
|
|
156
|
-
"color:inherit;font-weight:inherit"
|
|
157
|
-
);
|
|
158
|
-
console.log(event);
|
|
159
|
-
console.groupEnd();
|
|
160
|
-
}
|
|
161
|
-
async function logIncomingMockedClientMessage(event) {
|
|
162
|
-
const byteLength = (0, import_getMessageLength.getMessageLength)(event.data);
|
|
163
|
-
const publicData = await (0, import_getPublicData.getPublicData)(event.data);
|
|
164
|
-
console.groupCollapsed(
|
|
165
|
-
import_devUtils.devUtils.formatMessage(
|
|
166
|
-
`${(0, import_getTimestamp.getTimestamp)({ milliseconds: true })} %c\u21E3%c ${publicData} %c${byteLength}%c`
|
|
167
|
-
),
|
|
168
|
-
`color:${colors.orange}`,
|
|
169
|
-
"color:inherit",
|
|
170
|
-
"color:gray;font-weight:normal",
|
|
171
|
-
"color:inherit;font-weight:inherit"
|
|
172
|
-
);
|
|
173
|
-
console.log(event);
|
|
174
|
-
console.groupEnd();
|
|
175
|
-
}
|
|
176
|
-
function logConnectionClose(event) {
|
|
177
|
-
const target = event.target;
|
|
178
|
-
const publicUrl = (0, import_toPublicUrl.toPublicUrl)(target.url);
|
|
179
|
-
console.groupCollapsed(
|
|
180
|
-
import_devUtils.devUtils.formatMessage(
|
|
181
|
-
`${(0, import_getTimestamp.getTimestamp)({ milliseconds: true })} %c\u25A0%c ${publicUrl}`
|
|
182
|
-
),
|
|
183
|
-
`color:${colors.blue}`,
|
|
184
|
-
"color:inherit"
|
|
185
|
-
);
|
|
186
|
-
console.log(event);
|
|
187
|
-
console.groupEnd();
|
|
188
|
-
}
|
|
189
|
-
async function logIncomingServerMessage(event) {
|
|
190
|
-
const byteLength = (0, import_getMessageLength.getMessageLength)(event.data);
|
|
191
|
-
const publicData = await (0, import_getPublicData.getPublicData)(event.data);
|
|
192
|
-
console.groupCollapsed(
|
|
193
|
-
import_devUtils.devUtils.formatMessage(
|
|
194
|
-
`${(0, import_getTimestamp.getTimestamp)({ milliseconds: true })} %c\u21E3%c ${publicData} %c${byteLength}%c`
|
|
195
|
-
),
|
|
196
|
-
`color:${colors.green}`,
|
|
197
|
-
"color:inherit",
|
|
198
|
-
"color:gray;font-weight:normal",
|
|
199
|
-
"color:inherit;font-weight:inherit"
|
|
200
|
-
);
|
|
201
|
-
console.log(event);
|
|
202
|
-
console.groupEnd();
|
|
203
|
-
}
|
|
204
|
-
function logClientError(event) {
|
|
205
|
-
const socket = event.target;
|
|
206
|
-
const publicUrl = (0, import_toPublicUrl.toPublicUrl)(socket.url);
|
|
207
|
-
console.groupCollapsed(
|
|
208
|
-
import_devUtils.devUtils.formatMessage(
|
|
209
|
-
`${(0, import_getTimestamp.getTimestamp)({ milliseconds: true })} %c\xD7%c ${publicUrl}`
|
|
210
|
-
),
|
|
211
|
-
`color:${colors.blue}`,
|
|
212
|
-
"color:inherit"
|
|
213
|
-
);
|
|
214
|
-
console.log(event);
|
|
215
|
-
console.groupEnd();
|
|
216
|
-
}
|
|
217
|
-
//# sourceMappingURL=attachWebSocketLogger.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/ws/utils/attachWebSocketLogger.ts"],"sourcesContent":["import type {\n WebSocketClientConnection,\n WebSocketConnectionData,\n WebSocketData,\n} from '@mswjs/interceptors/WebSocket'\nimport { devUtils } from '../../utils/internal/devUtils'\nimport { getTimestamp } from '../../utils/logging/getTimestamp'\nimport { toPublicUrl } from '../../utils/request/toPublicUrl'\nimport { getMessageLength } from './getMessageLength'\nimport { getPublicData } from './getPublicData'\n\nconst colors = {\n blue: '#3b82f6',\n green: '#22c55e',\n red: '#ef4444',\n orange: '#ff6a33',\n}\n\nexport function attachWebSocketLogger(\n connection: WebSocketConnectionData,\n): void {\n const { client, server } = connection\n\n logConnectionOpen(client)\n\n // Log the events sent from the WebSocket client.\n // WebSocket client connection object is written from the\n // server's perspective so these message events are outgoing.\n /**\n * @todo Provide the reference to the exact event handler\n * that called this `client.send()`.\n */\n client.addEventListener('message', (event) => {\n logOutgoingClientMessage(event)\n })\n\n client.addEventListener('close', (event) => {\n logConnectionClose(event)\n })\n\n // Log the events received by the WebSocket client.\n // \"client.socket\" references the actual WebSocket instance\n // so these message events are incoming messages.\n client.socket.addEventListener('message', (event) => {\n logIncomingClientMessage(event)\n })\n\n // Log client errors (connection closures due to errors).\n client.socket.addEventListener('error', (event) => {\n logClientError(event)\n })\n\n client.send = new Proxy(client.send, {\n apply(target, thisArg, args) {\n const [data] = args\n const messageEvent = new MessageEvent('message', { data })\n Object.defineProperties(messageEvent, {\n currentTarget: {\n enumerable: true,\n writable: false,\n value: client.socket,\n },\n target: {\n enumerable: true,\n writable: false,\n value: client.socket,\n },\n })\n logIncomingMockedClientMessage(messageEvent)\n\n return Reflect.apply(target, thisArg, args)\n },\n })\n\n server.addEventListener(\n 'open',\n () => {\n server.addEventListener('message', (event) => {\n logIncomingServerMessage(event)\n })\n },\n { once: true },\n )\n\n // Log outgoing client events initiated by the event handler.\n // The actual client never sent these but the handler did.\n server.send = new Proxy(server.send, {\n apply(target, thisArg, args) {\n const [data] = args\n const messageEvent = new MessageEvent('message', { data })\n Object.defineProperties(messageEvent, {\n currentTarget: {\n enumerable: true,\n writable: false,\n value: server['realWebSocket'],\n },\n target: {\n enumerable: true,\n writable: false,\n value: server['realWebSocket'],\n },\n })\n\n logOutgoingMockedClientMessage(messageEvent)\n\n return Reflect.apply(target, thisArg, args)\n },\n })\n}\n\n/**\n * Prints the WebSocket connection.\n * This is meant to be logged by every WebSocket handler\n * that intercepted this connection. This helps you see\n * what handlers observe this connection.\n */\nexport function logConnectionOpen(client: WebSocketClientConnection) {\n const publicUrl = toPublicUrl(client.url)\n\n console.groupCollapsed(\n devUtils.formatMessage(`${getTimestamp()} %c▶%c ${publicUrl}`),\n `color:${colors.blue}`,\n 'color:inherit',\n )\n console.log('Client:', client.socket)\n console.groupEnd()\n}\n\n/**\n * Prints the outgoing client message.\n */\nexport async function logOutgoingClientMessage(\n event: MessageEvent<WebSocketData>,\n) {\n const byteLength = getMessageLength(event.data)\n const publicData = await getPublicData(event.data)\n\n console.groupCollapsed(\n devUtils.formatMessage(\n `${getTimestamp({ milliseconds: true })} %c↑%c ${publicData} %c${byteLength}%c`,\n ),\n `color:${colors.green}`,\n 'color:inherit',\n 'color:gray;font-weight:normal',\n 'color:inherit;font-weight:inherit',\n )\n console.log(event)\n console.groupEnd()\n}\n\n/**\n * Prints the outgoing client message initiated\n * by `server.send()` in the event handler.\n */\nexport async function logOutgoingMockedClientMessage(\n event: MessageEvent<WebSocketData>,\n) {\n const byteLength = getMessageLength(event.data)\n const publicData = await getPublicData(event.data)\n\n console.groupCollapsed(\n devUtils.formatMessage(\n `${getTimestamp({ milliseconds: true })} %c⇡%c ${publicData} %c${byteLength}%c`,\n ),\n `color:${colors.orange}`,\n 'color:inherit',\n 'color:gray;font-weight:normal',\n 'color:inherit;font-weight:inherit',\n )\n console.log(event)\n console.groupEnd()\n}\n\n/**\n * Prings the message received by the WebSocket client.\n * This is fired when the \"message\" event is dispatched\n * on the actual WebSocket client instance, and translates to\n * the client receiving a message from the server.\n */\nexport async function logIncomingClientMessage(\n event: MessageEvent<WebSocketData>,\n) {\n const byteLength = getMessageLength(event.data)\n const publicData = await getPublicData(event.data)\n\n console.groupCollapsed(\n devUtils.formatMessage(\n `${getTimestamp({ milliseconds: true })} %c↓%c ${publicData} %c${byteLength}%c`,\n ),\n `color:${colors.red}`,\n 'color:inherit',\n 'color:gray;font-weight:normal',\n 'color:inherit;font-weight:inherit',\n )\n console.log(event)\n console.groupEnd()\n}\n\n/**\n * Prints the outgoing client message initiated\n * by `client.send()` in the event handler.\n */\nexport async function logIncomingMockedClientMessage(\n event: MessageEvent<WebSocketData>,\n) {\n const byteLength = getMessageLength(event.data)\n const publicData = await getPublicData(event.data)\n\n console.groupCollapsed(\n devUtils.formatMessage(\n `${getTimestamp({ milliseconds: true })} %c⇣%c ${publicData} %c${byteLength}%c`,\n ),\n `color:${colors.orange}`,\n 'color:inherit',\n 'color:gray;font-weight:normal',\n 'color:inherit;font-weight:inherit',\n )\n console.log(event)\n console.groupEnd()\n}\n\nfunction logConnectionClose(event: CloseEvent) {\n const target = event.target as WebSocket\n const publicUrl = toPublicUrl(target.url)\n\n console.groupCollapsed(\n devUtils.formatMessage(\n `${getTimestamp({ milliseconds: true })} %c■%c ${publicUrl}`,\n ),\n `color:${colors.blue}`,\n 'color:inherit',\n )\n console.log(event)\n console.groupEnd()\n}\n\nexport async function logIncomingServerMessage(\n event: MessageEvent<WebSocketData>,\n) {\n const byteLength = getMessageLength(event.data)\n const publicData = await getPublicData(event.data)\n\n console.groupCollapsed(\n devUtils.formatMessage(\n `${getTimestamp({ milliseconds: true })} %c⇣%c ${publicData} %c${byteLength}%c`,\n ),\n `color:${colors.green}`,\n 'color:inherit',\n 'color:gray;font-weight:normal',\n 'color:inherit;font-weight:inherit',\n )\n console.log(event)\n console.groupEnd()\n}\n\nfunction logClientError(event: Event) {\n const socket = event.target as WebSocket\n const publicUrl = toPublicUrl(socket.url)\n\n console.groupCollapsed(\n devUtils.formatMessage(\n `${getTimestamp({ milliseconds: true })} %c\\u00D7%c ${publicUrl}`,\n ),\n `color:${colors.blue}`,\n 'color:inherit',\n )\n console.log(event)\n console.groupEnd()\n}\n"],"mappings":"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","names":[]}
|