msw 2.9.0 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/core/handlers/WebSocketHandler.d.mts +5 -5
- package/lib/core/handlers/WebSocketHandler.d.ts +5 -5
- package/lib/core/handlers/WebSocketHandler.js +12 -8
- package/lib/core/handlers/WebSocketHandler.js.map +1 -1
- package/lib/core/handlers/WebSocketHandler.mjs +12 -8
- package/lib/core/handlers/WebSocketHandler.mjs.map +1 -1
- package/lib/core/ws/handleWebSocketEvent.js +26 -39
- package/lib/core/ws/handleWebSocketEvent.js.map +1 -1
- package/lib/core/ws/handleWebSocketEvent.mjs +26 -39
- package/lib/core/ws/handleWebSocketEvent.mjs.map +1 -1
- package/lib/core/ws/utils/getMessageLength.js.map +1 -1
- package/lib/core/ws/utils/getMessageLength.mjs.map +1 -1
- package/lib/core/ws/utils/getPublicData.js.map +1 -1
- package/lib/core/ws/utils/getPublicData.mjs.map +1 -1
- package/lib/iife/index.js +38 -45
- package/lib/iife/index.js.map +1 -1
- package/lib/mockServiceWorker.js +1 -1
- package/package.json +2 -2
- package/src/core/handlers/WebSocketHandler.test.ts +12 -61
- package/src/core/handlers/WebSocketHandler.ts +16 -13
- package/src/core/ws/handleWebSocketEvent.ts +36 -55
- package/src/core/ws/utils/getMessageLength.ts +1 -1
- package/src/core/ws/utils/getPublicData.ts +1 -1
|
@@ -12,7 +12,6 @@ interface WebSocketHandlerConnection extends WebSocketConnectionData {
|
|
|
12
12
|
params: PathParams;
|
|
13
13
|
}
|
|
14
14
|
declare const kEmitter: unique symbol;
|
|
15
|
-
declare const kDispatchEvent: unique symbol;
|
|
16
15
|
declare const kSender: unique symbol;
|
|
17
16
|
declare class WebSocketHandler {
|
|
18
17
|
private readonly url;
|
|
@@ -22,13 +21,14 @@ declare class WebSocketHandler {
|
|
|
22
21
|
protected [kEmitter]: Emitter<WebSocketHandlerEventMap>;
|
|
23
22
|
constructor(url: Path);
|
|
24
23
|
parse(args: {
|
|
25
|
-
|
|
24
|
+
url: URL;
|
|
26
25
|
}): WebSocketHandlerParsedResult;
|
|
27
26
|
predicate(args: {
|
|
28
|
-
|
|
27
|
+
url: URL;
|
|
29
28
|
parsedResult: WebSocketHandlerParsedResult;
|
|
30
29
|
}): boolean;
|
|
31
|
-
|
|
30
|
+
run(connection: WebSocketConnectionData): Promise<boolean>;
|
|
31
|
+
protected connect(connection: WebSocketHandlerConnection): boolean;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
export { WebSocketHandler, type WebSocketHandlerConnection, type WebSocketHandlerEventMap,
|
|
34
|
+
export { WebSocketHandler, type WebSocketHandlerConnection, type WebSocketHandlerEventMap, kEmitter, kSender };
|
|
@@ -12,7 +12,6 @@ interface WebSocketHandlerConnection extends WebSocketConnectionData {
|
|
|
12
12
|
params: PathParams;
|
|
13
13
|
}
|
|
14
14
|
declare const kEmitter: unique symbol;
|
|
15
|
-
declare const kDispatchEvent: unique symbol;
|
|
16
15
|
declare const kSender: unique symbol;
|
|
17
16
|
declare class WebSocketHandler {
|
|
18
17
|
private readonly url;
|
|
@@ -22,13 +21,14 @@ declare class WebSocketHandler {
|
|
|
22
21
|
protected [kEmitter]: Emitter<WebSocketHandlerEventMap>;
|
|
23
22
|
constructor(url: Path);
|
|
24
23
|
parse(args: {
|
|
25
|
-
|
|
24
|
+
url: URL;
|
|
26
25
|
}): WebSocketHandlerParsedResult;
|
|
27
26
|
predicate(args: {
|
|
28
|
-
|
|
27
|
+
url: URL;
|
|
29
28
|
parsedResult: WebSocketHandlerParsedResult;
|
|
30
29
|
}): boolean;
|
|
31
|
-
|
|
30
|
+
run(connection: WebSocketConnectionData): Promise<boolean>;
|
|
31
|
+
protected connect(connection: WebSocketHandlerConnection): boolean;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
export { WebSocketHandler, type WebSocketHandlerConnection, type WebSocketHandlerEventMap,
|
|
34
|
+
export { WebSocketHandler, type WebSocketHandlerConnection, type WebSocketHandlerEventMap, kEmitter, kSender };
|
|
@@ -19,7 +19,6 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
19
19
|
var WebSocketHandler_exports = {};
|
|
20
20
|
__export(WebSocketHandler_exports, {
|
|
21
21
|
WebSocketHandler: () => WebSocketHandler,
|
|
22
|
-
kDispatchEvent: () => kDispatchEvent,
|
|
23
22
|
kEmitter: () => kEmitter,
|
|
24
23
|
kSender: () => kSender
|
|
25
24
|
});
|
|
@@ -29,7 +28,6 @@ var import_interceptors = require("@mswjs/interceptors");
|
|
|
29
28
|
var import_matchRequestUrl = require("../utils/matching/matchRequestUrl");
|
|
30
29
|
var import_getCallFrame = require("../utils/internal/getCallFrame");
|
|
31
30
|
const kEmitter = Symbol("kEmitter");
|
|
32
|
-
const kDispatchEvent = Symbol("kDispatchEvent");
|
|
33
31
|
const kSender = Symbol("kSender");
|
|
34
32
|
const kStopPropagationPatched = Symbol("kStopPropagationPatched");
|
|
35
33
|
const KOnStopPropagation = Symbol("KOnStopPropagation");
|
|
@@ -46,8 +44,7 @@ class WebSocketHandler {
|
|
|
46
44
|
callFrame;
|
|
47
45
|
[kEmitter];
|
|
48
46
|
parse(args) {
|
|
49
|
-
const
|
|
50
|
-
const { url: clientUrl } = connection.client;
|
|
47
|
+
const clientUrl = new URL(args.url);
|
|
51
48
|
clientUrl.pathname = clientUrl.pathname.replace(/^\/socket.io\//, "/");
|
|
52
49
|
const match = (0, import_matchRequestUrl.matchRequestUrl)(clientUrl, this.url);
|
|
53
50
|
return {
|
|
@@ -57,13 +54,20 @@ class WebSocketHandler {
|
|
|
57
54
|
predicate(args) {
|
|
58
55
|
return args.parsedResult.match.matches;
|
|
59
56
|
}
|
|
60
|
-
async
|
|
61
|
-
const parsedResult = this.parse({
|
|
62
|
-
|
|
57
|
+
async run(connection) {
|
|
58
|
+
const parsedResult = this.parse({
|
|
59
|
+
url: connection.client.url
|
|
60
|
+
});
|
|
61
|
+
if (!this.predicate({ url: connection.client.url, parsedResult })) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
63
64
|
const resolvedConnection = {
|
|
64
65
|
...connection,
|
|
65
66
|
params: parsedResult.match.params || {}
|
|
66
67
|
};
|
|
68
|
+
return this.connect(resolvedConnection);
|
|
69
|
+
}
|
|
70
|
+
connect(connection) {
|
|
67
71
|
connection.client.addEventListener(
|
|
68
72
|
"message",
|
|
69
73
|
createStopPropagationListener(this)
|
|
@@ -88,7 +92,7 @@ class WebSocketHandler {
|
|
|
88
92
|
"close",
|
|
89
93
|
createStopPropagationListener(this)
|
|
90
94
|
);
|
|
91
|
-
this[kEmitter].emit("connection",
|
|
95
|
+
return this[kEmitter].emit("connection", connection);
|
|
92
96
|
}
|
|
93
97
|
}
|
|
94
98
|
function createStopPropagationListener(handler) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/handlers/WebSocketHandler.ts"],"sourcesContent":["import { Emitter } from 'strict-event-emitter'\nimport { createRequestId } from '@mswjs/interceptors'\nimport type { WebSocketConnectionData } from '@mswjs/interceptors/WebSocket'\nimport {\n type Match,\n type Path,\n type PathParams,\n matchRequestUrl,\n} from '../utils/matching/matchRequestUrl'\nimport { getCallFrame } from '../utils/internal/getCallFrame'\nimport type { HandlerKind } from './common'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [args: WebSocketHandlerConnection]\n}\n\nexport interface WebSocketHandlerConnection extends WebSocketConnectionData {\n params: PathParams\n}\n\nexport const kEmitter = Symbol('kEmitter')\nexport const
|
|
1
|
+
{"version":3,"sources":["../../../src/core/handlers/WebSocketHandler.ts"],"sourcesContent":["import { Emitter } from 'strict-event-emitter'\nimport { createRequestId } from '@mswjs/interceptors'\nimport type { WebSocketConnectionData } from '@mswjs/interceptors/WebSocket'\nimport {\n type Match,\n type Path,\n type PathParams,\n matchRequestUrl,\n} from '../utils/matching/matchRequestUrl'\nimport { getCallFrame } from '../utils/internal/getCallFrame'\nimport type { HandlerKind } from './common'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [args: WebSocketHandlerConnection]\n}\n\nexport interface WebSocketHandlerConnection extends WebSocketConnectionData {\n params: PathParams\n}\n\nexport const kEmitter = Symbol('kEmitter')\nexport const kSender = Symbol('kSender')\nconst kStopPropagationPatched = Symbol('kStopPropagationPatched')\nconst KOnStopPropagation = Symbol('KOnStopPropagation')\n\nexport class WebSocketHandler {\n private readonly __kind: HandlerKind\n\n public id: string\n public callFrame?: string\n\n protected [kEmitter]: Emitter<WebSocketHandlerEventMap>\n\n constructor(private readonly url: Path) {\n this.id = createRequestId()\n\n this[kEmitter] = new Emitter()\n this.callFrame = getCallFrame(new Error())\n this.__kind = 'EventHandler'\n }\n\n public parse(args: { url: URL }): WebSocketHandlerParsedResult {\n const clientUrl = new URL(args.url)\n\n /**\n * @note Remove the Socket.IO path prefix from the WebSocket\n * client URL. This is an exception to keep the users from\n * including the implementation details in their handlers.\n */\n clientUrl.pathname = clientUrl.pathname.replace(/^\\/socket.io\\//, '/')\n\n const match = matchRequestUrl(clientUrl, this.url)\n\n return {\n match,\n }\n }\n\n public predicate(args: {\n url: URL\n parsedResult: WebSocketHandlerParsedResult\n }): boolean {\n return args.parsedResult.match.matches\n }\n\n public async run(connection: WebSocketConnectionData): Promise<boolean> {\n const parsedResult = this.parse({\n url: connection.client.url,\n })\n\n if (!this.predicate({ url: connection.client.url, parsedResult })) {\n return false\n }\n\n const resolvedConnection: WebSocketHandlerConnection = {\n ...connection,\n params: parsedResult.match.params || {},\n }\n\n return this.connect(resolvedConnection)\n }\n\n protected connect(connection: WebSocketHandlerConnection): boolean {\n // Support `event.stopPropagation()` for various client/server events.\n connection.client.addEventListener(\n 'message',\n createStopPropagationListener(this),\n )\n connection.client.addEventListener(\n 'close',\n createStopPropagationListener(this),\n )\n\n connection.server.addEventListener(\n 'open',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'message',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'error',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'close',\n createStopPropagationListener(this),\n )\n\n // Emit the connection event on the handler.\n // This is what the developer adds listeners for.\n return this[kEmitter].emit('connection', connection)\n }\n}\n\nfunction createStopPropagationListener(handler: WebSocketHandler) {\n return function stopPropagationListener(event: Event) {\n const propagationStoppedAt = Reflect.get(event, 'kPropagationStoppedAt') as\n | string\n | undefined\n\n if (propagationStoppedAt && handler.id !== propagationStoppedAt) {\n event.stopImmediatePropagation()\n return\n }\n\n Object.defineProperty(event, KOnStopPropagation, {\n value(this: WebSocketHandler) {\n Object.defineProperty(event, 'kPropagationStoppedAt', {\n value: handler.id,\n })\n },\n configurable: true,\n })\n\n // Since the same event instance is shared between all client/server objects,\n // make sure to patch its `stopPropagation` method only once.\n if (!Reflect.get(event, kStopPropagationPatched)) {\n event.stopPropagation = new Proxy(event.stopPropagation, {\n apply: (target, thisArg, args) => {\n Reflect.get(event, KOnStopPropagation)?.call(handler)\n return Reflect.apply(target, thisArg, args)\n },\n })\n\n Object.defineProperty(event, kStopPropagationPatched, {\n value: true,\n // If something else attempts to redefine this, throw.\n configurable: false,\n })\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAAwB;AACxB,0BAAgC;AAEhC,6BAKO;AACP,0BAA6B;AAetB,MAAM,WAAW,OAAO,UAAU;AAClC,MAAM,UAAU,OAAO,SAAS;AACvC,MAAM,0BAA0B,OAAO,yBAAyB;AAChE,MAAM,qBAAqB,OAAO,oBAAoB;AAE/C,MAAM,iBAAiB;AAAA,EAQ5B,YAA6B,KAAW;AAAX;AAC3B,SAAK,SAAK,qCAAgB;AAE1B,SAAK,QAAQ,IAAI,IAAI,oCAAQ;AAC7B,SAAK,gBAAY,kCAAa,IAAI,MAAM,CAAC;AACzC,SAAK,SAAS;AAAA,EAChB;AAAA,EAbiB;AAAA,EAEV;AAAA,EACA;AAAA,EAEP,CAAW,QAAQ;AAAA,EAUZ,MAAM,MAAkD;AAC7D,UAAM,YAAY,IAAI,IAAI,KAAK,GAAG;AAOlC,cAAU,WAAW,UAAU,SAAS,QAAQ,kBAAkB,GAAG;AAErE,UAAM,YAAQ,wCAAgB,WAAW,KAAK,GAAG;AAEjD,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EAEO,UAAU,MAGL;AACV,WAAO,KAAK,aAAa,MAAM;AAAA,EACjC;AAAA,EAEA,MAAa,IAAI,YAAuD;AACtE,UAAM,eAAe,KAAK,MAAM;AAAA,MAC9B,KAAK,WAAW,OAAO;AAAA,IACzB,CAAC;AAED,QAAI,CAAC,KAAK,UAAU,EAAE,KAAK,WAAW,OAAO,KAAK,aAAa,CAAC,GAAG;AACjE,aAAO;AAAA,IACT;AAEA,UAAM,qBAAiD;AAAA,MACrD,GAAG;AAAA,MACH,QAAQ,aAAa,MAAM,UAAU,CAAC;AAAA,IACxC;AAEA,WAAO,KAAK,QAAQ,kBAAkB;AAAA,EACxC;AAAA,EAEU,QAAQ,YAAiD;AAEjE,eAAW,OAAO;AAAA,MAChB;AAAA,MACA,8BAA8B,IAAI;AAAA,IACpC;AACA,eAAW,OAAO;AAAA,MAChB;AAAA,MACA,8BAA8B,IAAI;AAAA,IACpC;AAEA,eAAW,OAAO;AAAA,MAChB;AAAA,MACA,8BAA8B,IAAI;AAAA,IACpC;AACA,eAAW,OAAO;AAAA,MAChB;AAAA,MACA,8BAA8B,IAAI;AAAA,IACpC;AACA,eAAW,OAAO;AAAA,MAChB;AAAA,MACA,8BAA8B,IAAI;AAAA,IACpC;AACA,eAAW,OAAO;AAAA,MAChB;AAAA,MACA,8BAA8B,IAAI;AAAA,IACpC;AAIA,WAAO,KAAK,QAAQ,EAAE,KAAK,cAAc,UAAU;AAAA,EACrD;AACF;AAEA,SAAS,8BAA8B,SAA2B;AAChE,SAAO,SAAS,wBAAwB,OAAc;AACpD,UAAM,uBAAuB,QAAQ,IAAI,OAAO,uBAAuB;AAIvE,QAAI,wBAAwB,QAAQ,OAAO,sBAAsB;AAC/D,YAAM,yBAAyB;AAC/B;AAAA,IACF;AAEA,WAAO,eAAe,OAAO,oBAAoB;AAAA,MAC/C,QAA8B;AAC5B,eAAO,eAAe,OAAO,yBAAyB;AAAA,UACpD,OAAO,QAAQ;AAAA,QACjB,CAAC;AAAA,MACH;AAAA,MACA,cAAc;AAAA,IAChB,CAAC;AAID,QAAI,CAAC,QAAQ,IAAI,OAAO,uBAAuB,GAAG;AAChD,YAAM,kBAAkB,IAAI,MAAM,MAAM,iBAAiB;AAAA,QACvD,OAAO,CAAC,QAAQ,SAAS,SAAS;AAChC,kBAAQ,IAAI,OAAO,kBAAkB,GAAG,KAAK,OAAO;AACpD,iBAAO,QAAQ,MAAM,QAAQ,SAAS,IAAI;AAAA,QAC5C;AAAA,MACF,CAAC;AAED,aAAO,eAAe,OAAO,yBAAyB;AAAA,QACpD,OAAO;AAAA;AAAA,QAEP,cAAc;AAAA,MAChB,CAAC;AAAA,IACH;AAAA,EACF;AACF;","names":[]}
|
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
} from '../utils/matching/matchRequestUrl.mjs';
|
|
6
6
|
import { getCallFrame } from '../utils/internal/getCallFrame.mjs';
|
|
7
7
|
const kEmitter = Symbol("kEmitter");
|
|
8
|
-
const kDispatchEvent = Symbol("kDispatchEvent");
|
|
9
8
|
const kSender = Symbol("kSender");
|
|
10
9
|
const kStopPropagationPatched = Symbol("kStopPropagationPatched");
|
|
11
10
|
const KOnStopPropagation = Symbol("KOnStopPropagation");
|
|
@@ -22,8 +21,7 @@ class WebSocketHandler {
|
|
|
22
21
|
callFrame;
|
|
23
22
|
[kEmitter];
|
|
24
23
|
parse(args) {
|
|
25
|
-
const
|
|
26
|
-
const { url: clientUrl } = connection.client;
|
|
24
|
+
const clientUrl = new URL(args.url);
|
|
27
25
|
clientUrl.pathname = clientUrl.pathname.replace(/^\/socket.io\//, "/");
|
|
28
26
|
const match = matchRequestUrl(clientUrl, this.url);
|
|
29
27
|
return {
|
|
@@ -33,13 +31,20 @@ class WebSocketHandler {
|
|
|
33
31
|
predicate(args) {
|
|
34
32
|
return args.parsedResult.match.matches;
|
|
35
33
|
}
|
|
36
|
-
async
|
|
37
|
-
const parsedResult = this.parse({
|
|
38
|
-
|
|
34
|
+
async run(connection) {
|
|
35
|
+
const parsedResult = this.parse({
|
|
36
|
+
url: connection.client.url
|
|
37
|
+
});
|
|
38
|
+
if (!this.predicate({ url: connection.client.url, parsedResult })) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
39
41
|
const resolvedConnection = {
|
|
40
42
|
...connection,
|
|
41
43
|
params: parsedResult.match.params || {}
|
|
42
44
|
};
|
|
45
|
+
return this.connect(resolvedConnection);
|
|
46
|
+
}
|
|
47
|
+
connect(connection) {
|
|
43
48
|
connection.client.addEventListener(
|
|
44
49
|
"message",
|
|
45
50
|
createStopPropagationListener(this)
|
|
@@ -64,7 +69,7 @@ class WebSocketHandler {
|
|
|
64
69
|
"close",
|
|
65
70
|
createStopPropagationListener(this)
|
|
66
71
|
);
|
|
67
|
-
this[kEmitter].emit("connection",
|
|
72
|
+
return this[kEmitter].emit("connection", connection);
|
|
68
73
|
}
|
|
69
74
|
}
|
|
70
75
|
function createStopPropagationListener(handler) {
|
|
@@ -99,7 +104,6 @@ function createStopPropagationListener(handler) {
|
|
|
99
104
|
}
|
|
100
105
|
export {
|
|
101
106
|
WebSocketHandler,
|
|
102
|
-
kDispatchEvent,
|
|
103
107
|
kEmitter,
|
|
104
108
|
kSender
|
|
105
109
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/handlers/WebSocketHandler.ts"],"sourcesContent":["import { Emitter } from 'strict-event-emitter'\nimport { createRequestId } from '@mswjs/interceptors'\nimport type { WebSocketConnectionData } from '@mswjs/interceptors/WebSocket'\nimport {\n type Match,\n type Path,\n type PathParams,\n matchRequestUrl,\n} from '../utils/matching/matchRequestUrl'\nimport { getCallFrame } from '../utils/internal/getCallFrame'\nimport type { HandlerKind } from './common'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [args: WebSocketHandlerConnection]\n}\n\nexport interface WebSocketHandlerConnection extends WebSocketConnectionData {\n params: PathParams\n}\n\nexport const kEmitter = Symbol('kEmitter')\nexport const
|
|
1
|
+
{"version":3,"sources":["../../../src/core/handlers/WebSocketHandler.ts"],"sourcesContent":["import { Emitter } from 'strict-event-emitter'\nimport { createRequestId } from '@mswjs/interceptors'\nimport type { WebSocketConnectionData } from '@mswjs/interceptors/WebSocket'\nimport {\n type Match,\n type Path,\n type PathParams,\n matchRequestUrl,\n} from '../utils/matching/matchRequestUrl'\nimport { getCallFrame } from '../utils/internal/getCallFrame'\nimport type { HandlerKind } from './common'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [args: WebSocketHandlerConnection]\n}\n\nexport interface WebSocketHandlerConnection extends WebSocketConnectionData {\n params: PathParams\n}\n\nexport const kEmitter = Symbol('kEmitter')\nexport const kSender = Symbol('kSender')\nconst kStopPropagationPatched = Symbol('kStopPropagationPatched')\nconst KOnStopPropagation = Symbol('KOnStopPropagation')\n\nexport class WebSocketHandler {\n private readonly __kind: HandlerKind\n\n public id: string\n public callFrame?: string\n\n protected [kEmitter]: Emitter<WebSocketHandlerEventMap>\n\n constructor(private readonly url: Path) {\n this.id = createRequestId()\n\n this[kEmitter] = new Emitter()\n this.callFrame = getCallFrame(new Error())\n this.__kind = 'EventHandler'\n }\n\n public parse(args: { url: URL }): WebSocketHandlerParsedResult {\n const clientUrl = new URL(args.url)\n\n /**\n * @note Remove the Socket.IO path prefix from the WebSocket\n * client URL. This is an exception to keep the users from\n * including the implementation details in their handlers.\n */\n clientUrl.pathname = clientUrl.pathname.replace(/^\\/socket.io\\//, '/')\n\n const match = matchRequestUrl(clientUrl, this.url)\n\n return {\n match,\n }\n }\n\n public predicate(args: {\n url: URL\n parsedResult: WebSocketHandlerParsedResult\n }): boolean {\n return args.parsedResult.match.matches\n }\n\n public async run(connection: WebSocketConnectionData): Promise<boolean> {\n const parsedResult = this.parse({\n url: connection.client.url,\n })\n\n if (!this.predicate({ url: connection.client.url, parsedResult })) {\n return false\n }\n\n const resolvedConnection: WebSocketHandlerConnection = {\n ...connection,\n params: parsedResult.match.params || {},\n }\n\n return this.connect(resolvedConnection)\n }\n\n protected connect(connection: WebSocketHandlerConnection): boolean {\n // Support `event.stopPropagation()` for various client/server events.\n connection.client.addEventListener(\n 'message',\n createStopPropagationListener(this),\n )\n connection.client.addEventListener(\n 'close',\n createStopPropagationListener(this),\n )\n\n connection.server.addEventListener(\n 'open',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'message',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'error',\n createStopPropagationListener(this),\n )\n connection.server.addEventListener(\n 'close',\n createStopPropagationListener(this),\n )\n\n // Emit the connection event on the handler.\n // This is what the developer adds listeners for.\n return this[kEmitter].emit('connection', connection)\n }\n}\n\nfunction createStopPropagationListener(handler: WebSocketHandler) {\n return function stopPropagationListener(event: Event) {\n const propagationStoppedAt = Reflect.get(event, 'kPropagationStoppedAt') as\n | string\n | undefined\n\n if (propagationStoppedAt && handler.id !== propagationStoppedAt) {\n event.stopImmediatePropagation()\n return\n }\n\n Object.defineProperty(event, KOnStopPropagation, {\n value(this: WebSocketHandler) {\n Object.defineProperty(event, 'kPropagationStoppedAt', {\n value: handler.id,\n })\n },\n configurable: true,\n })\n\n // Since the same event instance is shared between all client/server objects,\n // make sure to patch its `stopPropagation` method only once.\n if (!Reflect.get(event, kStopPropagationPatched)) {\n event.stopPropagation = new Proxy(event.stopPropagation, {\n apply: (target, thisArg, args) => {\n Reflect.get(event, KOnStopPropagation)?.call(handler)\n return Reflect.apply(target, thisArg, args)\n },\n })\n\n Object.defineProperty(event, kStopPropagationPatched, {\n value: true,\n // If something else attempts to redefine this, throw.\n configurable: false,\n })\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -21,54 +21,41 @@ __export(handleWebSocketEvent_exports, {
|
|
|
21
21
|
handleWebSocketEvent: () => handleWebSocketEvent
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(handleWebSocketEvent_exports);
|
|
24
|
-
var import_WebSocketHandler = require("../handlers/WebSocketHandler");
|
|
25
24
|
var import_webSocketInterceptor = require("./webSocketInterceptor");
|
|
26
25
|
var import_onUnhandledRequest = require("../utils/request/onUnhandledRequest");
|
|
27
26
|
var import_isHandlerKind = require("../utils/internal/isHandlerKind");
|
|
28
27
|
function handleWebSocketEvent(options) {
|
|
29
28
|
import_webSocketInterceptor.webSocketInterceptor.on("connection", async (connection) => {
|
|
30
|
-
const handlers = options.getHandlers();
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if ((0, import_isHandlerKind.isHandlerKind)("EventHandler")(handler) && handler.predicate({
|
|
37
|
-
event: connectionEvent,
|
|
38
|
-
parsedResult: handler.parse({
|
|
39
|
-
event: connectionEvent
|
|
29
|
+
const handlers = options.getHandlers().filter((0, import_isHandlerKind.isHandlerKind)("EventHandler"));
|
|
30
|
+
if (handlers.length > 0) {
|
|
31
|
+
options?.onMockedConnection(connection);
|
|
32
|
+
await Promise.all(
|
|
33
|
+
handlers.map((handler) => {
|
|
34
|
+
return handler.run(connection);
|
|
40
35
|
})
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
36
|
+
);
|
|
37
|
+
return;
|
|
44
38
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
39
|
+
const request = new Request(connection.client.url, {
|
|
40
|
+
headers: {
|
|
41
|
+
upgrade: "websocket",
|
|
42
|
+
connection: "upgrade"
|
|
49
43
|
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
).catch((error) => {
|
|
61
|
-
const errorEvent = new Event("error");
|
|
62
|
-
Object.defineProperty(errorEvent, "cause", {
|
|
63
|
-
enumerable: true,
|
|
64
|
-
configurable: false,
|
|
65
|
-
value: error
|
|
66
|
-
});
|
|
67
|
-
connection.client.socket.dispatchEvent(errorEvent);
|
|
44
|
+
});
|
|
45
|
+
await (0, import_onUnhandledRequest.onUnhandledRequest)(
|
|
46
|
+
request,
|
|
47
|
+
options.getUnhandledRequestStrategy()
|
|
48
|
+
).catch((error) => {
|
|
49
|
+
const errorEvent = new Event("error");
|
|
50
|
+
Object.defineProperty(errorEvent, "cause", {
|
|
51
|
+
enumerable: true,
|
|
52
|
+
configurable: false,
|
|
53
|
+
value: error
|
|
68
54
|
});
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
55
|
+
connection.client.socket.dispatchEvent(errorEvent);
|
|
56
|
+
});
|
|
57
|
+
options?.onPassthroughConnection(connection);
|
|
58
|
+
connection.server.connect();
|
|
72
59
|
});
|
|
73
60
|
}
|
|
74
61
|
//# sourceMappingURL=handleWebSocketEvent.js.map
|
|
@@ -1 +1 @@
|
|
|
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
|
|
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 } from '../handlers/WebSocketHandler'\nimport { webSocketInterceptor } from './webSocketInterceptor'\nimport {\n onUnhandledRequest,\n UnhandledRequestStrategy,\n} from '../utils/request/onUnhandledRequest'\nimport { isHandlerKind } from '../utils/internal/isHandlerKind'\n\ninterface HandleWebSocketEventOptions {\n getUnhandledRequestStrategy: () => UnhandledRequestStrategy\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', async (connection) => {\n const handlers = options.getHandlers().filter(isHandlerKind('EventHandler'))\n\n // Ignore this connection if the user hasn't defined any handlers.\n if (handlers.length > 0) {\n options?.onMockedConnection(connection)\n\n await Promise.all(\n handlers.map((handler) => {\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 return handler.run(connection)\n }),\n )\n\n return\n }\n\n // Construct a request representing this WebSocket connection.\n const request = new Request(connection.client.url, {\n headers: {\n upgrade: 'websocket',\n connection: 'upgrade',\n },\n })\n await onUnhandledRequest(\n request,\n options.getUnhandledRequestStrategy(),\n ).catch((error) => {\n const errorEvent = new Event('error')\n Object.defineProperty(errorEvent, 'cause', {\n enumerable: true,\n configurable: false,\n value: error,\n })\n connection.client.socket.dispatchEvent(errorEvent)\n })\n\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"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kCAAqC;AACrC,gCAGO;AACP,2BAA8B;AASvB,SAAS,qBAAqB,SAAsC;AACzE,mDAAqB,GAAG,cAAc,OAAO,eAAe;AAC1D,UAAM,WAAW,QAAQ,YAAY,EAAE,WAAO,oCAAc,cAAc,CAAC;AAG3E,QAAI,SAAS,SAAS,GAAG;AACvB,eAAS,mBAAmB,UAAU;AAEtC,YAAM,QAAQ;AAAA,QACZ,SAAS,IAAI,CAAC,YAAY;AAIxB,iBAAO,QAAQ,IAAI,UAAU;AAAA,QAC/B,CAAC;AAAA,MACH;AAEA;AAAA,IACF;AAGA,UAAM,UAAU,IAAI,QAAQ,WAAW,OAAO,KAAK;AAAA,MACjD,SAAS;AAAA,QACP,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF,CAAC;AACD,cAAM;AAAA,MACJ;AAAA,MACA,QAAQ,4BAA4B;AAAA,IACtC,EAAE,MAAM,CAAC,UAAU;AACjB,YAAM,aAAa,IAAI,MAAM,OAAO;AACpC,aAAO,eAAe,YAAY,SAAS;AAAA,QACzC,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,OAAO;AAAA,MACT,CAAC;AACD,iBAAW,OAAO,OAAO,cAAc,UAAU;AAAA,IACnD,CAAC;AAED,aAAS,wBAAwB,UAAU;AAI3C,eAAW,OAAO,QAAQ;AAAA,EAC5B,CAAC;AACH;","names":[]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { kDispatchEvent } from '../handlers/WebSocketHandler.mjs';
|
|
2
1
|
import { webSocketInterceptor } from './webSocketInterceptor.mjs';
|
|
3
2
|
import {
|
|
4
3
|
onUnhandledRequest
|
|
@@ -6,48 +5,36 @@ import {
|
|
|
6
5
|
import { isHandlerKind } from '../utils/internal/isHandlerKind.mjs';
|
|
7
6
|
function handleWebSocketEvent(options) {
|
|
8
7
|
webSocketInterceptor.on("connection", async (connection) => {
|
|
9
|
-
const handlers = options.getHandlers();
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
if (isHandlerKind("EventHandler")(handler) && handler.predicate({
|
|
16
|
-
event: connectionEvent,
|
|
17
|
-
parsedResult: handler.parse({
|
|
18
|
-
event: connectionEvent
|
|
8
|
+
const handlers = options.getHandlers().filter(isHandlerKind("EventHandler"));
|
|
9
|
+
if (handlers.length > 0) {
|
|
10
|
+
options?.onMockedConnection(connection);
|
|
11
|
+
await Promise.all(
|
|
12
|
+
handlers.map((handler) => {
|
|
13
|
+
return handler.run(connection);
|
|
19
14
|
})
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
15
|
+
);
|
|
16
|
+
return;
|
|
23
17
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
18
|
+
const request = new Request(connection.client.url, {
|
|
19
|
+
headers: {
|
|
20
|
+
upgrade: "websocket",
|
|
21
|
+
connection: "upgrade"
|
|
28
22
|
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
).catch((error) => {
|
|
40
|
-
const errorEvent = new Event("error");
|
|
41
|
-
Object.defineProperty(errorEvent, "cause", {
|
|
42
|
-
enumerable: true,
|
|
43
|
-
configurable: false,
|
|
44
|
-
value: error
|
|
45
|
-
});
|
|
46
|
-
connection.client.socket.dispatchEvent(errorEvent);
|
|
23
|
+
});
|
|
24
|
+
await onUnhandledRequest(
|
|
25
|
+
request,
|
|
26
|
+
options.getUnhandledRequestStrategy()
|
|
27
|
+
).catch((error) => {
|
|
28
|
+
const errorEvent = new Event("error");
|
|
29
|
+
Object.defineProperty(errorEvent, "cause", {
|
|
30
|
+
enumerable: true,
|
|
31
|
+
configurable: false,
|
|
32
|
+
value: error
|
|
47
33
|
});
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
34
|
+
connection.client.socket.dispatchEvent(errorEvent);
|
|
35
|
+
});
|
|
36
|
+
options?.onPassthroughConnection(connection);
|
|
37
|
+
connection.server.connect();
|
|
51
38
|
});
|
|
52
39
|
}
|
|
53
40
|
export {
|
|
@@ -1 +1 @@
|
|
|
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
|
|
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 } from '../handlers/WebSocketHandler'\nimport { webSocketInterceptor } from './webSocketInterceptor'\nimport {\n onUnhandledRequest,\n UnhandledRequestStrategy,\n} from '../utils/request/onUnhandledRequest'\nimport { isHandlerKind } from '../utils/internal/isHandlerKind'\n\ninterface HandleWebSocketEventOptions {\n getUnhandledRequestStrategy: () => UnhandledRequestStrategy\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', async (connection) => {\n const handlers = options.getHandlers().filter(isHandlerKind('EventHandler'))\n\n // Ignore this connection if the user hasn't defined any handlers.\n if (handlers.length > 0) {\n options?.onMockedConnection(connection)\n\n await Promise.all(\n handlers.map((handler) => {\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 return handler.run(connection)\n }),\n )\n\n return\n }\n\n // Construct a request representing this WebSocket connection.\n const request = new Request(connection.client.url, {\n headers: {\n upgrade: 'websocket',\n connection: 'upgrade',\n },\n })\n await onUnhandledRequest(\n request,\n options.getUnhandledRequestStrategy(),\n ).catch((error) => {\n const errorEvent = new Event('error')\n Object.defineProperty(errorEvent, 'cause', {\n enumerable: true,\n configurable: false,\n value: error,\n })\n connection.client.socket.dispatchEvent(errorEvent)\n })\n\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"],"mappings":"AAGA,SAAS,4BAA4B;AACrC;AAAA,EACE;AAAA,OAEK;AACP,SAAS,qBAAqB;AASvB,SAAS,qBAAqB,SAAsC;AACzE,uBAAqB,GAAG,cAAc,OAAO,eAAe;AAC1D,UAAM,WAAW,QAAQ,YAAY,EAAE,OAAO,cAAc,cAAc,CAAC;AAG3E,QAAI,SAAS,SAAS,GAAG;AACvB,eAAS,mBAAmB,UAAU;AAEtC,YAAM,QAAQ;AAAA,QACZ,SAAS,IAAI,CAAC,YAAY;AAIxB,iBAAO,QAAQ,IAAI,UAAU;AAAA,QAC/B,CAAC;AAAA,MACH;AAEA;AAAA,IACF;AAGA,UAAM,UAAU,IAAI,QAAQ,WAAW,OAAO,KAAK;AAAA,MACjD,SAAS;AAAA,QACP,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,IACF,CAAC;AACD,UAAM;AAAA,MACJ;AAAA,MACA,QAAQ,4BAA4B;AAAA,IACtC,EAAE,MAAM,CAAC,UAAU;AACjB,YAAM,aAAa,IAAI,MAAM,OAAO;AACpC,aAAO,eAAe,YAAY,SAAS;AAAA,QACzC,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,OAAO;AAAA,MACT,CAAC;AACD,iBAAW,OAAO,OAAO,cAAc,UAAU;AAAA,IACnD,CAAC;AAED,aAAS,wBAAwB,UAAU;AAI3C,eAAW,OAAO,QAAQ;AAAA,EAC5B,CAAC;AACH;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/ws/utils/getMessageLength.ts"],"sourcesContent":["import type { WebSocketData } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket'\n\n/**\n * Returns the byte length of the given WebSocket message.\n * @example\n * getMessageLength('hello') // 5\n * getMessageLength(new Blob(['hello'])) // 5\n */\nexport function getMessageLength(data: WebSocketData): number {\n if (data instanceof Blob) {\n return data.size\n }\n\n if (data instanceof ArrayBuffer) {\n return data.byteLength\n }\n\n return new Blob([data]).size\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQO,SAAS,iBAAiB,MAA6B;AAC5D,MAAI,gBAAgB,MAAM;AACxB,WAAO,KAAK;AAAA,EACd;AAEA,MAAI,gBAAgB,aAAa;AAC/B,WAAO,KAAK;AAAA,EACd;AAEA,SAAO,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/ws/utils/getMessageLength.ts"],"sourcesContent":["import type { WebSocketData } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket'\n\n/**\n * Returns the byte length of the given WebSocket message.\n * @example\n * getMessageLength('hello') // 5\n * getMessageLength(new Blob(['hello'])) // 5\n */\nexport function getMessageLength(data: WebSocketData): number {\n if (data instanceof Blob) {\n return data.size\n }\n\n if (data instanceof ArrayBuffer) {\n return data.byteLength\n }\n\n return new Blob([data as any]).size\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQO,SAAS,iBAAiB,MAA6B;AAC5D,MAAI,gBAAgB,MAAM;AACxB,WAAO,KAAK;AAAA,EACd;AAEA,MAAI,gBAAgB,aAAa;AAC/B,WAAO,KAAK;AAAA,EACd;AAEA,SAAO,IAAI,KAAK,CAAC,IAAW,CAAC,EAAE;AACjC;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/ws/utils/getMessageLength.ts"],"sourcesContent":["import type { WebSocketData } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket'\n\n/**\n * Returns the byte length of the given WebSocket message.\n * @example\n * getMessageLength('hello') // 5\n * getMessageLength(new Blob(['hello'])) // 5\n */\nexport function getMessageLength(data: WebSocketData): number {\n if (data instanceof Blob) {\n return data.size\n }\n\n if (data instanceof ArrayBuffer) {\n return data.byteLength\n }\n\n return new Blob([data]).size\n}\n"],"mappings":"AAQO,SAAS,iBAAiB,MAA6B;AAC5D,MAAI,gBAAgB,MAAM;AACxB,WAAO,KAAK;AAAA,EACd;AAEA,MAAI,gBAAgB,aAAa;AAC/B,WAAO,KAAK;AAAA,EACd;AAEA,SAAO,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/ws/utils/getMessageLength.ts"],"sourcesContent":["import type { WebSocketData } from '@mswjs/interceptors/lib/browser/interceptors/WebSocket'\n\n/**\n * Returns the byte length of the given WebSocket message.\n * @example\n * getMessageLength('hello') // 5\n * getMessageLength(new Blob(['hello'])) // 5\n */\nexport function getMessageLength(data: WebSocketData): number {\n if (data instanceof Blob) {\n return data.size\n }\n\n if (data instanceof ArrayBuffer) {\n return data.byteLength\n }\n\n return new Blob([data as any]).size\n}\n"],"mappings":"AAQO,SAAS,iBAAiB,MAA6B;AAC5D,MAAI,gBAAgB,MAAM;AACxB,WAAO,KAAK;AAAA,EACd;AAEA,MAAI,gBAAgB,aAAa;AAC/B,WAAO,KAAK;AAAA,EACd;AAEA,SAAO,IAAI,KAAK,CAAC,IAAW,CAAC,EAAE;AACjC;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/ws/utils/getPublicData.ts"],"sourcesContent":["import { WebSocketData } from '@mswjs/interceptors/WebSocket'\nimport { truncateMessage } from './truncateMessage'\n\nexport async function getPublicData(data: WebSocketData): Promise<string> {\n if (data instanceof Blob) {\n const text = await data.text()\n return `Blob(${truncateMessage(text)})`\n }\n\n // Handle all ArrayBuffer-like objects.\n if (typeof data === 'object' && 'byteLength' in data) {\n const text = new TextDecoder().decode(data)\n return `ArrayBuffer(${truncateMessage(text)})`\n }\n\n return truncateMessage(data)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,6BAAgC;AAEhC,eAAsB,cAAc,MAAsC;AACxE,MAAI,gBAAgB,MAAM;AACxB,UAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,WAAO,YAAQ,wCAAgB,IAAI,CAAC;AAAA,EACtC;AAGA,MAAI,OAAO,SAAS,YAAY,gBAAgB,MAAM;AACpD,UAAM,OAAO,IAAI,YAAY,EAAE,OAAO,
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/ws/utils/getPublicData.ts"],"sourcesContent":["import { WebSocketData } from '@mswjs/interceptors/WebSocket'\nimport { truncateMessage } from './truncateMessage'\n\nexport async function getPublicData(data: WebSocketData): Promise<string> {\n if (data instanceof Blob) {\n const text = await data.text()\n return `Blob(${truncateMessage(text)})`\n }\n\n // Handle all ArrayBuffer-like objects.\n if (typeof data === 'object' && 'byteLength' in data) {\n const text = new TextDecoder().decode(data as ArrayBuffer)\n return `ArrayBuffer(${truncateMessage(text)})`\n }\n\n return truncateMessage(data)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,6BAAgC;AAEhC,eAAsB,cAAc,MAAsC;AACxE,MAAI,gBAAgB,MAAM;AACxB,UAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,WAAO,YAAQ,wCAAgB,IAAI,CAAC;AAAA,EACtC;AAGA,MAAI,OAAO,SAAS,YAAY,gBAAgB,MAAM;AACpD,UAAM,OAAO,IAAI,YAAY,EAAE,OAAO,IAAmB;AACzD,WAAO,mBAAe,wCAAgB,IAAI,CAAC;AAAA,EAC7C;AAEA,aAAO,wCAAgB,IAAI;AAC7B;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/ws/utils/getPublicData.ts"],"sourcesContent":["import { WebSocketData } from '@mswjs/interceptors/WebSocket'\nimport { truncateMessage } from './truncateMessage'\n\nexport async function getPublicData(data: WebSocketData): Promise<string> {\n if (data instanceof Blob) {\n const text = await data.text()\n return `Blob(${truncateMessage(text)})`\n }\n\n // Handle all ArrayBuffer-like objects.\n if (typeof data === 'object' && 'byteLength' in data) {\n const text = new TextDecoder().decode(data)\n return `ArrayBuffer(${truncateMessage(text)})`\n }\n\n return truncateMessage(data)\n}\n"],"mappings":"AACA,SAAS,uBAAuB;AAEhC,eAAsB,cAAc,MAAsC;AACxE,MAAI,gBAAgB,MAAM;AACxB,UAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,WAAO,QAAQ,gBAAgB,IAAI,CAAC;AAAA,EACtC;AAGA,MAAI,OAAO,SAAS,YAAY,gBAAgB,MAAM;AACpD,UAAM,OAAO,IAAI,YAAY,EAAE,OAAO,
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/ws/utils/getPublicData.ts"],"sourcesContent":["import { WebSocketData } from '@mswjs/interceptors/WebSocket'\nimport { truncateMessage } from './truncateMessage'\n\nexport async function getPublicData(data: WebSocketData): Promise<string> {\n if (data instanceof Blob) {\n const text = await data.text()\n return `Blob(${truncateMessage(text)})`\n }\n\n // Handle all ArrayBuffer-like objects.\n if (typeof data === 'object' && 'byteLength' in data) {\n const text = new TextDecoder().decode(data as ArrayBuffer)\n return `ArrayBuffer(${truncateMessage(text)})`\n }\n\n return truncateMessage(data)\n}\n"],"mappings":"AACA,SAAS,uBAAuB;AAEhC,eAAsB,cAAc,MAAsC;AACxE,MAAI,gBAAgB,MAAM;AACxB,UAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,WAAO,QAAQ,gBAAgB,IAAI,CAAC;AAAA,EACtC;AAGA,MAAI,OAAO,SAAS,YAAY,gBAAgB,MAAM;AACpD,UAAM,OAAO,IAAI,YAAY,EAAE,OAAO,IAAmB;AACzD,WAAO,eAAe,gBAAgB,IAAI,CAAC;AAAA,EAC7C;AAEA,SAAO,gBAAgB,IAAI;AAC7B;","names":[]}
|
package/lib/iife/index.js
CHANGED
|
@@ -28038,7 +28038,6 @@ Consider naming this operation or using "graphql.operation()" request handler to
|
|
|
28038
28038
|
|
|
28039
28039
|
// src/core/handlers/WebSocketHandler.ts
|
|
28040
28040
|
var kEmitter = Symbol("kEmitter");
|
|
28041
|
-
var kDispatchEvent = Symbol("kDispatchEvent");
|
|
28042
28041
|
var kSender = Symbol("kSender");
|
|
28043
28042
|
var kStopPropagationPatched = Symbol("kStopPropagationPatched");
|
|
28044
28043
|
var KOnStopPropagation = Symbol("KOnStopPropagation");
|
|
@@ -28055,8 +28054,7 @@ Consider naming this operation or using "graphql.operation()" request handler to
|
|
|
28055
28054
|
callFrame;
|
|
28056
28055
|
[kEmitter];
|
|
28057
28056
|
parse(args) {
|
|
28058
|
-
const
|
|
28059
|
-
const { url: clientUrl } = connection.client;
|
|
28057
|
+
const clientUrl = new URL(args.url);
|
|
28060
28058
|
clientUrl.pathname = clientUrl.pathname.replace(/^\/socket.io\//, "/");
|
|
28061
28059
|
const match2 = matchRequestUrl(clientUrl, this.url);
|
|
28062
28060
|
return {
|
|
@@ -28066,13 +28064,20 @@ Consider naming this operation or using "graphql.operation()" request handler to
|
|
|
28066
28064
|
predicate(args) {
|
|
28067
28065
|
return args.parsedResult.match.matches;
|
|
28068
28066
|
}
|
|
28069
|
-
async
|
|
28070
|
-
const parsedResult = this.parse({
|
|
28071
|
-
|
|
28067
|
+
async run(connection) {
|
|
28068
|
+
const parsedResult = this.parse({
|
|
28069
|
+
url: connection.client.url
|
|
28070
|
+
});
|
|
28071
|
+
if (!this.predicate({ url: connection.client.url, parsedResult })) {
|
|
28072
|
+
return false;
|
|
28073
|
+
}
|
|
28072
28074
|
const resolvedConnection = {
|
|
28073
28075
|
...connection,
|
|
28074
28076
|
params: parsedResult.match.params || {}
|
|
28075
28077
|
};
|
|
28078
|
+
return this.connect(resolvedConnection);
|
|
28079
|
+
}
|
|
28080
|
+
connect(connection) {
|
|
28076
28081
|
connection.client.addEventListener(
|
|
28077
28082
|
"message",
|
|
28078
28083
|
createStopPropagationListener(this)
|
|
@@ -28097,7 +28102,7 @@ Consider naming this operation or using "graphql.operation()" request handler to
|
|
|
28097
28102
|
"close",
|
|
28098
28103
|
createStopPropagationListener(this)
|
|
28099
28104
|
);
|
|
28100
|
-
this[kEmitter].emit("connection",
|
|
28105
|
+
return this[kEmitter].emit("connection", connection);
|
|
28101
28106
|
}
|
|
28102
28107
|
};
|
|
28103
28108
|
function createStopPropagationListener(handler) {
|
|
@@ -31406,48 +31411,36 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
|
|
|
31406
31411
|
// src/core/ws/handleWebSocketEvent.ts
|
|
31407
31412
|
function handleWebSocketEvent(options) {
|
|
31408
31413
|
webSocketInterceptor.on("connection", async (connection) => {
|
|
31409
|
-
const handlers = options.getHandlers();
|
|
31410
|
-
|
|
31411
|
-
|
|
31412
|
-
|
|
31413
|
-
|
|
31414
|
-
|
|
31415
|
-
if (isHandlerKind("EventHandler")(handler) && handler.predicate({
|
|
31416
|
-
event: connectionEvent,
|
|
31417
|
-
parsedResult: handler.parse({
|
|
31418
|
-
event: connectionEvent
|
|
31414
|
+
const handlers = options.getHandlers().filter(isHandlerKind("EventHandler"));
|
|
31415
|
+
if (handlers.length > 0) {
|
|
31416
|
+
options?.onMockedConnection(connection);
|
|
31417
|
+
await Promise.all(
|
|
31418
|
+
handlers.map((handler) => {
|
|
31419
|
+
return handler.run(connection);
|
|
31419
31420
|
})
|
|
31420
|
-
|
|
31421
|
-
|
|
31422
|
-
}
|
|
31421
|
+
);
|
|
31422
|
+
return;
|
|
31423
31423
|
}
|
|
31424
|
-
|
|
31425
|
-
|
|
31426
|
-
|
|
31427
|
-
|
|
31424
|
+
const request = new Request(connection.client.url, {
|
|
31425
|
+
headers: {
|
|
31426
|
+
upgrade: "websocket",
|
|
31427
|
+
connection: "upgrade"
|
|
31428
31428
|
}
|
|
31429
|
-
}
|
|
31430
|
-
|
|
31431
|
-
|
|
31432
|
-
|
|
31433
|
-
|
|
31434
|
-
|
|
31435
|
-
|
|
31436
|
-
|
|
31437
|
-
|
|
31438
|
-
|
|
31439
|
-
).catch((error3) => {
|
|
31440
|
-
const errorEvent = new Event("error");
|
|
31441
|
-
Object.defineProperty(errorEvent, "cause", {
|
|
31442
|
-
enumerable: true,
|
|
31443
|
-
configurable: false,
|
|
31444
|
-
value: error3
|
|
31445
|
-
});
|
|
31446
|
-
connection.client.socket.dispatchEvent(errorEvent);
|
|
31429
|
+
});
|
|
31430
|
+
await onUnhandledRequest(
|
|
31431
|
+
request,
|
|
31432
|
+
options.getUnhandledRequestStrategy()
|
|
31433
|
+
).catch((error3) => {
|
|
31434
|
+
const errorEvent = new Event("error");
|
|
31435
|
+
Object.defineProperty(errorEvent, "cause", {
|
|
31436
|
+
enumerable: true,
|
|
31437
|
+
configurable: false,
|
|
31438
|
+
value: error3
|
|
31447
31439
|
});
|
|
31448
|
-
|
|
31449
|
-
|
|
31450
|
-
|
|
31440
|
+
connection.client.socket.dispatchEvent(errorEvent);
|
|
31441
|
+
});
|
|
31442
|
+
options?.onPassthroughConnection(connection);
|
|
31443
|
+
connection.server.connect();
|
|
31451
31444
|
});
|
|
31452
31445
|
}
|
|
31453
31446
|
|