msw 2.3.0-ws.rc-11 → 2.3.0-ws.rc-12

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.
@@ -16,6 +16,7 @@ declare const kDispatchEvent: unique symbol;
16
16
  declare const kSender: unique symbol;
17
17
  declare class WebSocketHandler {
18
18
  private readonly url;
19
+ id: string;
19
20
  callFrame?: string;
20
21
  protected [kEmitter]: Emitter<WebSocketHandlerEventMap>;
21
22
  constructor(url: Path);
@@ -16,6 +16,7 @@ declare const kDispatchEvent: unique symbol;
16
16
  declare const kSender: unique symbol;
17
17
  declare class WebSocketHandler {
18
18
  private readonly url;
19
+ id: string;
19
20
  callFrame?: string;
20
21
  protected [kEmitter]: Emitter<WebSocketHandlerEventMap>;
21
22
  constructor(url: Path);
@@ -25,17 +25,22 @@ __export(WebSocketHandler_exports, {
25
25
  });
26
26
  module.exports = __toCommonJS(WebSocketHandler_exports);
27
27
  var import_strict_event_emitter = require("strict-event-emitter");
28
+ var import_interceptors = require("@mswjs/interceptors");
28
29
  var import_matchRequestUrl = require("../utils/matching/matchRequestUrl.js");
29
30
  var import_getCallFrame = require("../utils/internal/getCallFrame.js");
30
31
  const kEmitter = Symbol("kEmitter");
31
32
  const kDispatchEvent = Symbol("kDispatchEvent");
32
33
  const kSender = Symbol("kSender");
34
+ const kStopPropagationPatched = Symbol("kStopPropagationPatched");
35
+ const KOnStopPropagation = Symbol("KOnStopPropagation");
33
36
  class WebSocketHandler {
34
37
  constructor(url) {
35
38
  this.url = url;
39
+ this.id = (0, import_interceptors.createRequestId)();
36
40
  this[kEmitter] = new import_strict_event_emitter.Emitter();
37
41
  this.callFrame = (0, import_getCallFrame.getCallFrame)(new Error());
38
42
  }
43
+ id;
39
44
  callFrame;
40
45
  [kEmitter];
41
46
  parse(args) {
@@ -55,7 +60,61 @@ class WebSocketHandler {
55
60
  ...connection,
56
61
  params: parsedResult.match.params || {}
57
62
  };
63
+ connection.client.addEventListener(
64
+ "message",
65
+ createStopPropagationListener(this)
66
+ );
67
+ connection.client.addEventListener(
68
+ "close",
69
+ createStopPropagationListener(this)
70
+ );
71
+ connection.server.addEventListener(
72
+ "open",
73
+ createStopPropagationListener(this)
74
+ );
75
+ connection.server.addEventListener(
76
+ "message",
77
+ createStopPropagationListener(this)
78
+ );
79
+ connection.server.addEventListener(
80
+ "error",
81
+ createStopPropagationListener(this)
82
+ );
83
+ connection.server.addEventListener(
84
+ "close",
85
+ createStopPropagationListener(this)
86
+ );
58
87
  this[kEmitter].emit("connection", resolvedConnection);
59
88
  }
60
89
  }
90
+ function createStopPropagationListener(handler) {
91
+ return function stopPropagationListener(event) {
92
+ const propagationStoppedAt = Reflect.get(event, "kPropagationStoppedAt");
93
+ if (propagationStoppedAt && handler.id !== propagationStoppedAt) {
94
+ event.stopImmediatePropagation();
95
+ return;
96
+ }
97
+ Object.defineProperty(event, KOnStopPropagation, {
98
+ value() {
99
+ Object.defineProperty(event, "kPropagationStoppedAt", {
100
+ value: handler.id
101
+ });
102
+ },
103
+ configurable: true
104
+ });
105
+ if (!Reflect.get(event, kStopPropagationPatched)) {
106
+ event.stopPropagation = new Proxy(event.stopPropagation, {
107
+ apply: (target, thisArg, args) => {
108
+ Reflect.get(event, KOnStopPropagation)?.call(handler);
109
+ return Reflect.apply(target, thisArg, args);
110
+ }
111
+ });
112
+ Object.defineProperty(event, kStopPropagationPatched, {
113
+ value: true,
114
+ // If something else attempts to redefine this, throw.
115
+ configurable: false
116
+ });
117
+ }
118
+ };
119
+ }
61
120
  //# sourceMappingURL=WebSocketHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/handlers/WebSocketHandler.ts"],"sourcesContent":["import { Emitter } from 'strict-event-emitter'\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'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [args: WebSocketHandlerConnection]\n}\n\ninterface WebSocketHandlerConnection extends WebSocketConnectionData {\n params: PathParams\n}\n\nexport const kEmitter = Symbol('kEmitter')\nexport const kDispatchEvent = Symbol('kDispatchEvent')\nexport const kSender = Symbol('kSender')\n\nexport class WebSocketHandler {\n public callFrame?: string\n\n protected [kEmitter]: Emitter<WebSocketHandlerEventMap>\n\n constructor(private readonly url: Path) {\n this[kEmitter] = new Emitter()\n this.callFrame = getCallFrame(new Error())\n }\n\n public parse(args: {\n event: MessageEvent<WebSocketConnectionData>\n }): WebSocketHandlerParsedResult {\n const connection = args.event.data\n const match = matchRequestUrl(connection.client.url, this.url)\n\n return {\n match,\n }\n }\n\n public predicate(args: {\n event: MessageEvent<WebSocketConnectionData>\n parsedResult: WebSocketHandlerParsedResult\n }): boolean {\n return args.parsedResult.match.matches\n }\n\n async [kDispatchEvent](\n event: MessageEvent<WebSocketConnectionData>,\n ): Promise<void> {\n const parsedResult = this.parse({ event })\n const connection = event.data\n\n const resolvedConnection: WebSocketHandlerConnection = {\n ...connection,\n params: parsedResult.match.params || {},\n }\n\n // Emit the connection event on the handler.\n // This is what the developer adds listeners for.\n this[kEmitter].emit('connection', resolvedConnection)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAAwB;AAExB,6BAKO;AACP,0BAA6B;AActB,MAAM,WAAW,OAAO,UAAU;AAClC,MAAM,iBAAiB,OAAO,gBAAgB;AAC9C,MAAM,UAAU,OAAO,SAAS;AAEhC,MAAM,iBAAiB;AAAA,EAK5B,YAA6B,KAAW;AAAX;AAC3B,SAAK,QAAQ,IAAI,IAAI,oCAAQ;AAC7B,SAAK,gBAAY,kCAAa,IAAI,MAAM,CAAC;AAAA,EAC3C;AAAA,EAPO;AAAA,EAEP,CAAW,QAAQ;AAAA,EAOZ,MAAM,MAEoB;AAC/B,UAAM,aAAa,KAAK,MAAM;AAC9B,UAAM,YAAQ,wCAAgB,WAAW,OAAO,KAAK,KAAK,GAAG;AAE7D,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EAEO,UAAU,MAGL;AACV,WAAO,KAAK,aAAa,MAAM;AAAA,EACjC;AAAA,EAEA,OAAO,cAAc,EACnB,OACe;AACf,UAAM,eAAe,KAAK,MAAM,EAAE,MAAM,CAAC;AACzC,UAAM,aAAa,MAAM;AAEzB,UAAM,qBAAiD;AAAA,MACrD,GAAG;AAAA,MACH,QAAQ,aAAa,MAAM,UAAU,CAAC;AAAA,IACxC;AAIA,SAAK,QAAQ,EAAE,KAAK,cAAc,kBAAkB;AAAA,EACtD;AACF;","names":[]}
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'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [args: WebSocketHandlerConnection]\n}\n\ninterface WebSocketHandlerConnection extends WebSocketConnectionData {\n params: PathParams\n}\n\nexport const kEmitter = Symbol('kEmitter')\nexport const kDispatchEvent = Symbol('kDispatchEvent')\nexport const kSender = Symbol('kSender')\nconst kStopPropagationPatched = Symbol('kStopPropagationPatched')\nconst KOnStopPropagation = Symbol('KOnStopPropagation')\n\nexport class WebSocketHandler {\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 }\n\n public parse(args: {\n event: MessageEvent<WebSocketConnectionData>\n }): WebSocketHandlerParsedResult {\n const connection = args.event.data\n const match = matchRequestUrl(connection.client.url, this.url)\n\n return {\n match,\n }\n }\n\n public predicate(args: {\n event: MessageEvent<WebSocketConnectionData>\n parsedResult: WebSocketHandlerParsedResult\n }): boolean {\n return args.parsedResult.match.matches\n }\n\n async [kDispatchEvent](\n event: MessageEvent<WebSocketConnectionData>,\n ): Promise<void> {\n const parsedResult = this.parse({ event })\n const connection = event.data\n\n const resolvedConnection: WebSocketHandlerConnection = {\n ...connection,\n params: parsedResult.match.params || {},\n }\n\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 this[kEmitter].emit('connection', resolvedConnection)\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;AAAA,kCAAwB;AACxB,0BAAgC;AAEhC,6BAKO;AACP,0BAA6B;AActB,MAAM,WAAW,OAAO,UAAU;AAClC,MAAM,iBAAiB,OAAO,gBAAgB;AAC9C,MAAM,UAAU,OAAO,SAAS;AACvC,MAAM,0BAA0B,OAAO,yBAAyB;AAChE,MAAM,qBAAqB,OAAO,oBAAoB;AAE/C,MAAM,iBAAiB;AAAA,EAM5B,YAA6B,KAAW;AAAX;AAC3B,SAAK,SAAK,qCAAgB;AAE1B,SAAK,QAAQ,IAAI,IAAI,oCAAQ;AAC7B,SAAK,gBAAY,kCAAa,IAAI,MAAM,CAAC;AAAA,EAC3C;AAAA,EAVO;AAAA,EACA;AAAA,EAEP,CAAW,QAAQ;AAAA,EASZ,MAAM,MAEoB;AAC/B,UAAM,aAAa,KAAK,MAAM;AAC9B,UAAM,YAAQ,wCAAgB,WAAW,OAAO,KAAK,KAAK,GAAG;AAE7D,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EAEO,UAAU,MAGL;AACV,WAAO,KAAK,aAAa,MAAM;AAAA,EACjC;AAAA,EAEA,OAAO,cAAc,EACnB,OACe;AACf,UAAM,eAAe,KAAK,MAAM,EAAE,MAAM,CAAC;AACzC,UAAM,aAAa,MAAM;AAEzB,UAAM,qBAAiD;AAAA,MACrD,GAAG;AAAA,MACH,QAAQ,aAAa,MAAM,UAAU,CAAC;AAAA,IACxC;AAGA,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,SAAK,QAAQ,EAAE,KAAK,cAAc,kBAAkB;AAAA,EACtD;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":[]}
@@ -1,4 +1,5 @@
1
1
  import { Emitter } from "strict-event-emitter";
2
+ import { createRequestId } from "@mswjs/interceptors";
2
3
  import {
3
4
  matchRequestUrl
4
5
  } from '../utils/matching/matchRequestUrl.mjs';
@@ -6,12 +7,16 @@ import { getCallFrame } from '../utils/internal/getCallFrame.mjs';
6
7
  const kEmitter = Symbol("kEmitter");
7
8
  const kDispatchEvent = Symbol("kDispatchEvent");
8
9
  const kSender = Symbol("kSender");
10
+ const kStopPropagationPatched = Symbol("kStopPropagationPatched");
11
+ const KOnStopPropagation = Symbol("KOnStopPropagation");
9
12
  class WebSocketHandler {
10
13
  constructor(url) {
11
14
  this.url = url;
15
+ this.id = createRequestId();
12
16
  this[kEmitter] = new Emitter();
13
17
  this.callFrame = getCallFrame(new Error());
14
18
  }
19
+ id;
15
20
  callFrame;
16
21
  [kEmitter];
17
22
  parse(args) {
@@ -31,9 +36,63 @@ class WebSocketHandler {
31
36
  ...connection,
32
37
  params: parsedResult.match.params || {}
33
38
  };
39
+ connection.client.addEventListener(
40
+ "message",
41
+ createStopPropagationListener(this)
42
+ );
43
+ connection.client.addEventListener(
44
+ "close",
45
+ createStopPropagationListener(this)
46
+ );
47
+ connection.server.addEventListener(
48
+ "open",
49
+ createStopPropagationListener(this)
50
+ );
51
+ connection.server.addEventListener(
52
+ "message",
53
+ createStopPropagationListener(this)
54
+ );
55
+ connection.server.addEventListener(
56
+ "error",
57
+ createStopPropagationListener(this)
58
+ );
59
+ connection.server.addEventListener(
60
+ "close",
61
+ createStopPropagationListener(this)
62
+ );
34
63
  this[kEmitter].emit("connection", resolvedConnection);
35
64
  }
36
65
  }
66
+ function createStopPropagationListener(handler) {
67
+ return function stopPropagationListener(event) {
68
+ const propagationStoppedAt = Reflect.get(event, "kPropagationStoppedAt");
69
+ if (propagationStoppedAt && handler.id !== propagationStoppedAt) {
70
+ event.stopImmediatePropagation();
71
+ return;
72
+ }
73
+ Object.defineProperty(event, KOnStopPropagation, {
74
+ value() {
75
+ Object.defineProperty(event, "kPropagationStoppedAt", {
76
+ value: handler.id
77
+ });
78
+ },
79
+ configurable: true
80
+ });
81
+ if (!Reflect.get(event, kStopPropagationPatched)) {
82
+ event.stopPropagation = new Proxy(event.stopPropagation, {
83
+ apply: (target, thisArg, args) => {
84
+ Reflect.get(event, KOnStopPropagation)?.call(handler);
85
+ return Reflect.apply(target, thisArg, args);
86
+ }
87
+ });
88
+ Object.defineProperty(event, kStopPropagationPatched, {
89
+ value: true,
90
+ // If something else attempts to redefine this, throw.
91
+ configurable: false
92
+ });
93
+ }
94
+ };
95
+ }
37
96
  export {
38
97
  WebSocketHandler,
39
98
  kDispatchEvent,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/handlers/WebSocketHandler.ts"],"sourcesContent":["import { Emitter } from 'strict-event-emitter'\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'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [args: WebSocketHandlerConnection]\n}\n\ninterface WebSocketHandlerConnection extends WebSocketConnectionData {\n params: PathParams\n}\n\nexport const kEmitter = Symbol('kEmitter')\nexport const kDispatchEvent = Symbol('kDispatchEvent')\nexport const kSender = Symbol('kSender')\n\nexport class WebSocketHandler {\n public callFrame?: string\n\n protected [kEmitter]: Emitter<WebSocketHandlerEventMap>\n\n constructor(private readonly url: Path) {\n this[kEmitter] = new Emitter()\n this.callFrame = getCallFrame(new Error())\n }\n\n public parse(args: {\n event: MessageEvent<WebSocketConnectionData>\n }): WebSocketHandlerParsedResult {\n const connection = args.event.data\n const match = matchRequestUrl(connection.client.url, this.url)\n\n return {\n match,\n }\n }\n\n public predicate(args: {\n event: MessageEvent<WebSocketConnectionData>\n parsedResult: WebSocketHandlerParsedResult\n }): boolean {\n return args.parsedResult.match.matches\n }\n\n async [kDispatchEvent](\n event: MessageEvent<WebSocketConnectionData>,\n ): Promise<void> {\n const parsedResult = this.parse({ event })\n const connection = event.data\n\n const resolvedConnection: WebSocketHandlerConnection = {\n ...connection,\n params: parsedResult.match.params || {},\n }\n\n // Emit the connection event on the handler.\n // This is what the developer adds listeners for.\n this[kEmitter].emit('connection', resolvedConnection)\n }\n}\n"],"mappings":"AAAA,SAAS,eAAe;AAExB;AAAA,EAIE;AAAA,OACK;AACP,SAAS,oBAAoB;AActB,MAAM,WAAW,OAAO,UAAU;AAClC,MAAM,iBAAiB,OAAO,gBAAgB;AAC9C,MAAM,UAAU,OAAO,SAAS;AAEhC,MAAM,iBAAiB;AAAA,EAK5B,YAA6B,KAAW;AAAX;AAC3B,SAAK,QAAQ,IAAI,IAAI,QAAQ;AAC7B,SAAK,YAAY,aAAa,IAAI,MAAM,CAAC;AAAA,EAC3C;AAAA,EAPO;AAAA,EAEP,CAAW,QAAQ;AAAA,EAOZ,MAAM,MAEoB;AAC/B,UAAM,aAAa,KAAK,MAAM;AAC9B,UAAM,QAAQ,gBAAgB,WAAW,OAAO,KAAK,KAAK,GAAG;AAE7D,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EAEO,UAAU,MAGL;AACV,WAAO,KAAK,aAAa,MAAM;AAAA,EACjC;AAAA,EAEA,OAAO,cAAc,EACnB,OACe;AACf,UAAM,eAAe,KAAK,MAAM,EAAE,MAAM,CAAC;AACzC,UAAM,aAAa,MAAM;AAEzB,UAAM,qBAAiD;AAAA,MACrD,GAAG;AAAA,MACH,QAAQ,aAAa,MAAM,UAAU,CAAC;AAAA,IACxC;AAIA,SAAK,QAAQ,EAAE,KAAK,cAAc,kBAAkB;AAAA,EACtD;AACF;","names":[]}
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'\n\ntype WebSocketHandlerParsedResult = {\n match: Match\n}\n\nexport type WebSocketHandlerEventMap = {\n connection: [args: WebSocketHandlerConnection]\n}\n\ninterface WebSocketHandlerConnection extends WebSocketConnectionData {\n params: PathParams\n}\n\nexport const kEmitter = Symbol('kEmitter')\nexport const kDispatchEvent = Symbol('kDispatchEvent')\nexport const kSender = Symbol('kSender')\nconst kStopPropagationPatched = Symbol('kStopPropagationPatched')\nconst KOnStopPropagation = Symbol('KOnStopPropagation')\n\nexport class WebSocketHandler {\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 }\n\n public parse(args: {\n event: MessageEvent<WebSocketConnectionData>\n }): WebSocketHandlerParsedResult {\n const connection = args.event.data\n const match = matchRequestUrl(connection.client.url, this.url)\n\n return {\n match,\n }\n }\n\n public predicate(args: {\n event: MessageEvent<WebSocketConnectionData>\n parsedResult: WebSocketHandlerParsedResult\n }): boolean {\n return args.parsedResult.match.matches\n }\n\n async [kDispatchEvent](\n event: MessageEvent<WebSocketConnectionData>,\n ): Promise<void> {\n const parsedResult = this.parse({ event })\n const connection = event.data\n\n const resolvedConnection: WebSocketHandlerConnection = {\n ...connection,\n params: parsedResult.match.params || {},\n }\n\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 this[kEmitter].emit('connection', resolvedConnection)\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,SAAS,eAAe;AACxB,SAAS,uBAAuB;AAEhC;AAAA,EAIE;AAAA,OACK;AACP,SAAS,oBAAoB;AActB,MAAM,WAAW,OAAO,UAAU;AAClC,MAAM,iBAAiB,OAAO,gBAAgB;AAC9C,MAAM,UAAU,OAAO,SAAS;AACvC,MAAM,0BAA0B,OAAO,yBAAyB;AAChE,MAAM,qBAAqB,OAAO,oBAAoB;AAE/C,MAAM,iBAAiB;AAAA,EAM5B,YAA6B,KAAW;AAAX;AAC3B,SAAK,KAAK,gBAAgB;AAE1B,SAAK,QAAQ,IAAI,IAAI,QAAQ;AAC7B,SAAK,YAAY,aAAa,IAAI,MAAM,CAAC;AAAA,EAC3C;AAAA,EAVO;AAAA,EACA;AAAA,EAEP,CAAW,QAAQ;AAAA,EASZ,MAAM,MAEoB;AAC/B,UAAM,aAAa,KAAK,MAAM;AAC9B,UAAM,QAAQ,gBAAgB,WAAW,OAAO,KAAK,KAAK,GAAG;AAE7D,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EAEO,UAAU,MAGL;AACV,WAAO,KAAK,aAAa,MAAM;AAAA,EACjC;AAAA,EAEA,OAAO,cAAc,EACnB,OACe;AACf,UAAM,eAAe,KAAK,MAAM,EAAE,MAAM,CAAC;AACzC,UAAM,aAAa,MAAM;AAEzB,UAAM,qBAAiD;AAAA,MACrD,GAAG;AAAA,MACH,QAAQ,aAAa,MAAM,UAAU,CAAC;AAAA,IACxC;AAGA,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,SAAK,QAAQ,EAAE,KAAK,cAAc,kBAAkB;AAAA,EACtD;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":[]}
package/lib/iife/index.js CHANGED
@@ -14412,7 +14412,7 @@ ${operationTypes.join("\n")}
14412
14412
  return stringToRegexp(path, keys, options);
14413
14413
  }
14414
14414
 
14415
- // node_modules/.pnpm/@mswjs+interceptors@0.36.1/node_modules/@mswjs/interceptors/lib/browser/chunk-6HYIRFX2.mjs
14415
+ // node_modules/.pnpm/@mswjs+interceptors@0.36.4/node_modules/@mswjs/interceptors/lib/browser/chunk-6HYIRFX2.mjs
14416
14416
  var encoder = new TextEncoder();
14417
14417
  function encodeBuffer(text) {
14418
14418
  return encoder.encode(text);
@@ -14428,7 +14428,7 @@ ${operationTypes.join("\n")}
14428
14428
  );
14429
14429
  }
14430
14430
 
14431
- // node_modules/.pnpm/@mswjs+interceptors@0.36.1/node_modules/@mswjs/interceptors/lib/browser/chunk-XVPRNJO7.mjs
14431
+ // node_modules/.pnpm/@mswjs+interceptors@0.36.4/node_modules/@mswjs/interceptors/lib/browser/chunk-XVPRNJO7.mjs
14432
14432
  var IS_PATCHED_MODULE = Symbol("isPatchedModule");
14433
14433
  function isPropertyAccessible(obj, key) {
14434
14434
  try {
@@ -14848,7 +14848,7 @@ ${operationTypes.join("\n")}
14848
14848
  return message3.toString();
14849
14849
  }
14850
14850
 
14851
- // node_modules/.pnpm/@mswjs+interceptors@0.36.1/node_modules/@mswjs/interceptors/lib/browser/chunk-QED3Q6Z2.mjs
14851
+ // node_modules/.pnpm/@mswjs+interceptors@0.36.4/node_modules/@mswjs/interceptors/lib/browser/chunk-QED3Q6Z2.mjs
14852
14852
  var INTERNAL_REQUEST_ID_HEADER_NAME = "x-interceptors-internal-request-id";
14853
14853
  function getGlobalSymbol(symbol) {
14854
14854
  return (
@@ -14996,7 +14996,7 @@ ${operationTypes.join("\n")}
14996
14996
  return Math.random().toString(16).slice(2);
14997
14997
  }
14998
14998
 
14999
- // node_modules/.pnpm/@mswjs+interceptors@0.36.1/node_modules/@mswjs/interceptors/lib/browser/index.mjs
14999
+ // node_modules/.pnpm/@mswjs+interceptors@0.36.4/node_modules/@mswjs/interceptors/lib/browser/index.mjs
15000
15000
  var BatchInterceptor = class extends Interceptor {
15001
15001
  constructor(options) {
15002
15002
  BatchInterceptor.symbol = Symbol(options.name);
@@ -28241,12 +28241,16 @@ Consider naming this operation or using "graphql.operation()" request handler to
28241
28241
  var kEmitter = Symbol("kEmitter");
28242
28242
  var kDispatchEvent = Symbol("kDispatchEvent");
28243
28243
  var kSender = Symbol("kSender");
28244
+ var kStopPropagationPatched = Symbol("kStopPropagationPatched");
28245
+ var KOnStopPropagation = Symbol("KOnStopPropagation");
28244
28246
  var WebSocketHandler = class {
28245
28247
  constructor(url) {
28246
28248
  this.url = url;
28249
+ this.id = createRequestId();
28247
28250
  this[kEmitter] = new Emitter();
28248
28251
  this.callFrame = getCallFrame(new Error());
28249
28252
  }
28253
+ id;
28250
28254
  callFrame;
28251
28255
  [kEmitter];
28252
28256
  parse(args) {
@@ -28266,9 +28270,63 @@ Consider naming this operation or using "graphql.operation()" request handler to
28266
28270
  ...connection,
28267
28271
  params: parsedResult.match.params || {}
28268
28272
  };
28273
+ connection.client.addEventListener(
28274
+ "message",
28275
+ createStopPropagationListener(this)
28276
+ );
28277
+ connection.client.addEventListener(
28278
+ "close",
28279
+ createStopPropagationListener(this)
28280
+ );
28281
+ connection.server.addEventListener(
28282
+ "open",
28283
+ createStopPropagationListener(this)
28284
+ );
28285
+ connection.server.addEventListener(
28286
+ "message",
28287
+ createStopPropagationListener(this)
28288
+ );
28289
+ connection.server.addEventListener(
28290
+ "error",
28291
+ createStopPropagationListener(this)
28292
+ );
28293
+ connection.server.addEventListener(
28294
+ "close",
28295
+ createStopPropagationListener(this)
28296
+ );
28269
28297
  this[kEmitter].emit("connection", resolvedConnection);
28270
28298
  }
28271
28299
  };
28300
+ function createStopPropagationListener(handler) {
28301
+ return function stopPropagationListener(event) {
28302
+ const propagationStoppedAt = Reflect.get(event, "kPropagationStoppedAt");
28303
+ if (propagationStoppedAt && handler.id !== propagationStoppedAt) {
28304
+ event.stopImmediatePropagation();
28305
+ return;
28306
+ }
28307
+ Object.defineProperty(event, KOnStopPropagation, {
28308
+ value() {
28309
+ Object.defineProperty(event, "kPropagationStoppedAt", {
28310
+ value: handler.id
28311
+ });
28312
+ },
28313
+ configurable: true
28314
+ });
28315
+ if (!Reflect.get(event, kStopPropagationPatched)) {
28316
+ event.stopPropagation = new Proxy(event.stopPropagation, {
28317
+ apply: (target, thisArg, args) => {
28318
+ Reflect.get(event, KOnStopPropagation)?.call(handler);
28319
+ return Reflect.apply(target, thisArg, args);
28320
+ }
28321
+ });
28322
+ Object.defineProperty(event, kStopPropagationPatched, {
28323
+ value: true,
28324
+ // If something else attempts to redefine this, throw.
28325
+ configurable: false
28326
+ });
28327
+ }
28328
+ };
28329
+ }
28272
28330
 
28273
28331
  // src/core/ws/WebSocketMemoryClientStore.ts
28274
28332
  var WebSocketMemoryClientStore = class {
@@ -29475,7 +29533,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
29475
29533
  }
29476
29534
  };
29477
29535
 
29478
- // node_modules/.pnpm/@mswjs+interceptors@0.36.1/node_modules/@mswjs/interceptors/lib/browser/chunk-THPGBWJQ.mjs
29536
+ // node_modules/.pnpm/@mswjs+interceptors@0.36.4/node_modules/@mswjs/interceptors/lib/browser/chunk-THPGBWJQ.mjs
29479
29537
  var InterceptorError = class extends Error {
29480
29538
  constructor(message3) {
29481
29539
  super(message3);
@@ -29643,7 +29701,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
29643
29701
  return false;
29644
29702
  }
29645
29703
 
29646
- // node_modules/.pnpm/@mswjs+interceptors@0.36.1/node_modules/@mswjs/interceptors/lib/browser/chunk-G5SOR3ND.mjs
29704
+ // node_modules/.pnpm/@mswjs+interceptors@0.36.4/node_modules/@mswjs/interceptors/lib/browser/chunk-GHRPKS6J.mjs
29647
29705
  function canParseUrl(url) {
29648
29706
  try {
29649
29707
  new URL(url);
@@ -29805,12 +29863,12 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
29805
29863
  this.logger.info(
29806
29864
  "no mocked response received, performing request as-is..."
29807
29865
  );
29808
- return pureFetch(request).then((response) => {
29866
+ return pureFetch(request).then(async (response) => {
29809
29867
  this.logger.info("original fetch performed", response);
29810
29868
  if (this.emitter.listenerCount("response") > 0) {
29811
29869
  this.logger.info('emitting the "response" event...');
29812
29870
  const responseClone = response.clone();
29813
- this.emitter.emit("response", {
29871
+ await emitAsync(this.emitter, "response", {
29814
29872
  response: responseClone,
29815
29873
  isMockedResponse: false,
29816
29874
  request,
@@ -29840,7 +29898,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
29840
29898
  var FetchInterceptor = _FetchInterceptor;
29841
29899
  FetchInterceptor.symbol = Symbol("fetch");
29842
29900
 
29843
- // node_modules/.pnpm/@mswjs+interceptors@0.36.1/node_modules/@mswjs/interceptors/lib/browser/chunk-SUQ32ZQK.mjs
29901
+ // node_modules/.pnpm/@mswjs+interceptors@0.36.4/node_modules/@mswjs/interceptors/lib/browser/chunk-SUQ32ZQK.mjs
29844
29902
  function concatArrayBuffer(left, right) {
29845
29903
  const result = new Uint8Array(left.byteLength + right.byteLength);
29846
29904
  result.set(left, 0);
@@ -30711,7 +30769,7 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
30711
30769
  }
30712
30770
  }
30713
30771
 
30714
- // node_modules/.pnpm/@mswjs+interceptors@0.36.1/node_modules/@mswjs/interceptors/lib/browser/interceptors/WebSocket/index.mjs
30772
+ // node_modules/.pnpm/@mswjs+interceptors@0.36.4/node_modules/@mswjs/interceptors/lib/browser/interceptors/WebSocket/index.mjs
30715
30773
  function bindEvent(target, event) {
30716
30774
  Object.defineProperties(event, {
30717
30775
  target: {
@@ -30818,14 +30876,17 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
30818
30876
  * Listen for the outgoing events from the connected WebSocket client.
30819
30877
  */
30820
30878
  addEventListener(type, listener, options) {
30821
- const boundListener = listener.bind(this.socket);
30822
- Object.defineProperty(listener, kBoundListener, {
30823
- value: boundListener,
30824
- enumerable: false
30825
- });
30879
+ if (!Reflect.has(listener, kBoundListener)) {
30880
+ const boundListener = listener.bind(this.socket);
30881
+ Object.defineProperty(listener, kBoundListener, {
30882
+ value: boundListener,
30883
+ enumerable: false,
30884
+ configurable: false
30885
+ });
30886
+ }
30826
30887
  this[kEmitter2].addEventListener(
30827
30888
  type,
30828
- boundListener,
30889
+ Reflect.get(listener, kBoundListener),
30829
30890
  options
30830
30891
  );
30831
30892
  }
@@ -30880,9 +30941,11 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
30880
30941
  if (await this[kPassthroughPromise]) {
30881
30942
  return;
30882
30943
  }
30883
- this.readyState = this.OPEN;
30884
30944
  this.protocol = typeof protocols === "string" ? protocols : Array.isArray(protocols) && protocols.length > 0 ? protocols[0] : "";
30885
- this.dispatchEvent(bindEvent(this, new Event("open")));
30945
+ if (this.readyState === this.CONNECTING) {
30946
+ this.readyState = this.OPEN;
30947
+ this.dispatchEvent(bindEvent(this, new Event("open")));
30948
+ }
30886
30949
  });
30887
30950
  }
30888
30951
  set onopen(listener) {
@@ -31068,15 +31131,33 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
31068
31131
  )
31069
31132
  );
31070
31133
  });
31071
- this.client.addEventListener("close", this.handleMockClose.bind(this), {
31072
- signal: this.mockCloseController.signal
31073
- });
31074
- realWebSocket.addEventListener("close", this.handleRealClose.bind(this), {
31075
- signal: this.realCloseController.signal
31076
- });
31134
+ this.client.addEventListener(
31135
+ "close",
31136
+ (event) => {
31137
+ this.handleMockClose(event);
31138
+ },
31139
+ {
31140
+ signal: this.mockCloseController.signal
31141
+ }
31142
+ );
31143
+ realWebSocket.addEventListener(
31144
+ "close",
31145
+ (event) => {
31146
+ this.handleRealClose(event);
31147
+ },
31148
+ {
31149
+ signal: this.realCloseController.signal
31150
+ }
31151
+ );
31077
31152
  realWebSocket.addEventListener("error", () => {
31078
- this[kEmitter22].dispatchEvent(bindEvent(realWebSocket, new Event("error")));
31079
- this.client.dispatchEvent(bindEvent(this.client, new Event("error")));
31153
+ const errorEvent = bindEvent(
31154
+ realWebSocket,
31155
+ new Event("error", { cancelable: true })
31156
+ );
31157
+ this[kEmitter22].dispatchEvent(errorEvent);
31158
+ if (!errorEvent.defaultPrevented) {
31159
+ this.client.dispatchEvent(bindEvent(this.client, new Event("error")));
31160
+ }
31080
31161
  });
31081
31162
  this.realWebSocket = realWebSocket;
31082
31163
  }
@@ -31084,14 +31165,16 @@ Please consider using a custom "serviceWorker.url" option to point to the actual
31084
31165
  * Listen for the incoming events from the original WebSocket server.
31085
31166
  */
31086
31167
  addEventListener(event, listener, options) {
31087
- const boundListener = listener.bind(this.client);
31088
- Object.defineProperty(listener, kBoundListener2, {
31089
- value: boundListener,
31090
- enumerable: false
31091
- });
31168
+ if (!Reflect.has(listener, kBoundListener2)) {
31169
+ const boundListener = listener.bind(this.client);
31170
+ Object.defineProperty(listener, kBoundListener2, {
31171
+ value: boundListener,
31172
+ enumerable: false
31173
+ });
31174
+ }
31092
31175
  this[kEmitter22].addEventListener(
31093
31176
  event,
31094
- boundListener,
31177
+ Reflect.get(listener, kBoundListener2),
31095
31178
  options
31096
31179
  );
31097
31180
  }