msw 2.0.3 → 2.0.4

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/iife/index.js CHANGED
@@ -1431,126 +1431,172 @@ var MockServiceWorker = (() => {
1431
1431
  return message3.toString();
1432
1432
  }
1433
1433
 
1434
- // node_modules/.pnpm/@mswjs+interceptors@0.25.1/node_modules/@mswjs/interceptors/lib/node/chunk-RGYCLCLK.mjs
1435
- function nextTick(callback) {
1436
- setTimeout(callback, 0);
1437
- }
1438
- var AsyncEventEmitter = class extends Emitter {
1434
+ // node_modules/.pnpm/strict-event-emitter@0.5.1/node_modules/strict-event-emitter/lib/index.mjs
1435
+ var MemoryLeakError2 = class extends Error {
1436
+ constructor(emitter, type, count) {
1437
+ super(
1438
+ `Possible EventEmitter memory leak detected. ${count} ${type.toString()} listeners added. Use emitter.setMaxListeners() to increase limit`
1439
+ );
1440
+ this.emitter = emitter;
1441
+ this.type = type;
1442
+ this.count = count;
1443
+ this.name = "MaxListenersExceededWarning";
1444
+ }
1445
+ };
1446
+ var _Emitter2 = class {
1447
+ static listenerCount(emitter, eventName) {
1448
+ return emitter.listenerCount(eventName);
1449
+ }
1439
1450
  constructor() {
1440
- super();
1441
- this.logger = new Logger("async-event-emitter");
1442
- this.queue = /* @__PURE__ */ new Map();
1443
- this.readyState = "ACTIVE";
1451
+ this.events = /* @__PURE__ */ new Map();
1452
+ this.maxListeners = _Emitter2.defaultMaxListeners;
1453
+ this.hasWarnedAboutPotentialMemoryLeak = false;
1444
1454
  }
1445
- on(eventName, listener) {
1446
- const logger = this.logger.extend("on");
1447
- logger.info('adding "%s" listener...', eventName);
1448
- if (this.readyState === "DEACTIVATED") {
1449
- logger.info("the emitter is destroyed, skipping!");
1450
- return this;
1451
- }
1452
- return super.on(eventName, (...args) => __async(this, null, function* () {
1453
- const queue = this.openListenerQueue(eventName);
1454
- logger.info('awaiting the "%s" listener...', eventName);
1455
- queue.push({
1456
- args,
1457
- done: new Promise((resolve, reject) => __async(this, null, function* () {
1458
- try {
1459
- yield listener(...args);
1460
- resolve();
1461
- logger.info('"%s" listener has resolved!', eventName);
1462
- } catch (error3) {
1463
- logger.info('"%s" listener has rejected!', error3);
1464
- reject(error3);
1465
- }
1466
- }))
1467
- });
1468
- }));
1455
+ _emitInternalEvent(internalEventName, eventName, listener) {
1456
+ this.emit(
1457
+ internalEventName,
1458
+ ...[eventName, listener]
1459
+ );
1469
1460
  }
1470
- emit(eventName, ...data) {
1471
- const logger = this.logger.extend("emit");
1472
- logger.info('emitting "%s" event...', eventName);
1473
- if (this.readyState === "DEACTIVATED") {
1474
- logger.info("the emitter is destroyed, skipping!");
1475
- return false;
1476
- }
1477
- if (this.isInternalEventName(eventName)) {
1478
- return super.emit(eventName, ...data);
1461
+ _getListeners(eventName) {
1462
+ return Array.prototype.concat.apply([], this.events.get(eventName)) || [];
1463
+ }
1464
+ _removeListener(listeners, listener) {
1465
+ const index = listeners.indexOf(listener);
1466
+ if (index > -1) {
1467
+ listeners.splice(index, 1);
1479
1468
  }
1480
- this.openListenerQueue(eventName);
1481
- logger.info('appending a one-time cleanup "%s" listener...', eventName);
1482
- this.once(eventName, () => {
1483
- nextTick(() => {
1484
- this.queue.delete(eventName);
1485
- logger.info('cleaned up "%s" listeners queue!', eventName);
1486
- });
1487
- });
1488
- return super.emit(eventName, ...data);
1469
+ return [];
1470
+ }
1471
+ _wrapOnceListener(eventName, listener) {
1472
+ const onceListener = (...data) => {
1473
+ this.removeListener(eventName, onceListener);
1474
+ return listener.apply(this, data);
1475
+ };
1476
+ Object.defineProperty(onceListener, "name", { value: listener.name });
1477
+ return onceListener;
1478
+ }
1479
+ setMaxListeners(maxListeners) {
1480
+ this.maxListeners = maxListeners;
1481
+ return this;
1489
1482
  }
1490
1483
  /**
1491
- * Returns a promise that resolves when all the listeners for the given event
1492
- * has been called. Awaits asynchronous listeners.
1493
- * If the event has no listeners, resolves immediately.
1484
+ * Returns the current max listener value for the `Emitter` which is
1485
+ * either set by `emitter.setMaxListeners(n)` or defaults to
1486
+ * `Emitter.defaultMaxListeners`.
1494
1487
  */
1495
- untilIdle(eventName, filter = () => true) {
1496
- return __async(this, null, function* () {
1497
- const listenersQueue = this.queue.get(eventName) || [];
1498
- yield Promise.all(
1499
- listenersQueue.filter(filter).map(({ done }) => done)
1500
- ).finally(() => {
1501
- this.queue.delete(eventName);
1502
- });
1488
+ getMaxListeners() {
1489
+ return this.maxListeners;
1490
+ }
1491
+ /**
1492
+ * Returns an array listing the events for which the emitter has registered listeners.
1493
+ * The values in the array will be strings or Symbols.
1494
+ */
1495
+ eventNames() {
1496
+ return Array.from(this.events.keys());
1497
+ }
1498
+ /**
1499
+ * Synchronously calls each of the listeners registered for the event named `eventName`,
1500
+ * in the order they were registered, passing the supplied arguments to each.
1501
+ * Returns `true` if the event has listeners, `false` otherwise.
1502
+ *
1503
+ * @example
1504
+ * const emitter = new Emitter<{ hello: [string] }>()
1505
+ * emitter.emit('hello', 'John')
1506
+ */
1507
+ emit(eventName, ...data) {
1508
+ const listeners = this._getListeners(eventName);
1509
+ listeners.forEach((listener) => {
1510
+ listener.apply(this, data);
1503
1511
  });
1512
+ return listeners.length > 0;
1504
1513
  }
1505
- openListenerQueue(eventName) {
1506
- const logger = this.logger.extend("openListenerQueue");
1507
- logger.info('opening "%s" listeners queue...', eventName);
1508
- const queue = this.queue.get(eventName);
1509
- if (!queue) {
1510
- logger.info("no queue found, creating one...");
1511
- this.queue.set(eventName, []);
1512
- return [];
1514
+ addListener(eventName, listener) {
1515
+ this._emitInternalEvent("newListener", eventName, listener);
1516
+ const nextListeners = this._getListeners(eventName).concat(listener);
1517
+ this.events.set(eventName, nextListeners);
1518
+ if (this.maxListeners > 0 && this.listenerCount(eventName) > this.maxListeners && !this.hasWarnedAboutPotentialMemoryLeak) {
1519
+ this.hasWarnedAboutPotentialMemoryLeak = true;
1520
+ const memoryLeakWarning = new MemoryLeakError2(
1521
+ this,
1522
+ eventName,
1523
+ this.listenerCount(eventName)
1524
+ );
1525
+ console.warn(memoryLeakWarning);
1513
1526
  }
1514
- logger.info("returning an exising queue:", queue);
1515
- return queue;
1527
+ return this;
1528
+ }
1529
+ on(eventName, listener) {
1530
+ return this.addListener(eventName, listener);
1531
+ }
1532
+ once(eventName, listener) {
1533
+ return this.addListener(
1534
+ eventName,
1535
+ this._wrapOnceListener(eventName, listener)
1536
+ );
1537
+ }
1538
+ prependListener(eventName, listener) {
1539
+ const listeners = this._getListeners(eventName);
1540
+ if (listeners.length > 0) {
1541
+ const nextListeners = [listener].concat(listeners);
1542
+ this.events.set(eventName, nextListeners);
1543
+ } else {
1544
+ this.events.set(eventName, listeners.concat(listener));
1545
+ }
1546
+ return this;
1547
+ }
1548
+ prependOnceListener(eventName, listener) {
1549
+ return this.prependListener(
1550
+ eventName,
1551
+ this._wrapOnceListener(eventName, listener)
1552
+ );
1553
+ }
1554
+ removeListener(eventName, listener) {
1555
+ const listeners = this._getListeners(eventName);
1556
+ if (listeners.length > 0) {
1557
+ this._removeListener(listeners, listener);
1558
+ this.events.set(eventName, listeners);
1559
+ this._emitInternalEvent("removeListener", eventName, listener);
1560
+ }
1561
+ return this;
1562
+ }
1563
+ /**
1564
+ * Alias for `emitter.removeListener()`.
1565
+ *
1566
+ * @example
1567
+ * emitter.off('hello', listener)
1568
+ */
1569
+ off(eventName, listener) {
1570
+ return this.removeListener(eventName, listener);
1516
1571
  }
1517
1572
  removeAllListeners(eventName) {
1518
- const logger = this.logger.extend("removeAllListeners");
1519
- logger.info("event:", eventName);
1520
1573
  if (eventName) {
1521
- this.queue.delete(eventName);
1522
- logger.info(
1523
- 'cleared the "%s" listeners queue!',
1524
- eventName,
1525
- this.queue.get(eventName)
1526
- );
1574
+ this.events.delete(eventName);
1527
1575
  } else {
1528
- this.queue.clear();
1529
- logger.info("cleared the listeners queue!", this.queue);
1576
+ this.events.clear();
1530
1577
  }
1531
- return super.removeAllListeners(eventName);
1578
+ return this;
1532
1579
  }
1533
- activate() {
1534
- const logger = this.logger.extend("activate");
1535
- this.readyState = "ACTIVE";
1536
- logger.info("set state to:", this.readyState);
1580
+ /**
1581
+ * Returns a copy of the array of listeners for the event named `eventName`.
1582
+ */
1583
+ listeners(eventName) {
1584
+ return Array.from(this._getListeners(eventName));
1537
1585
  }
1538
1586
  /**
1539
- * Deactivate this event emitter.
1540
- * Deactivated emitter can no longer emit and listen to events
1541
- * and needs to be activated again in order to do so.
1587
+ * Returns the number of listeners listening to the event named `eventName`.
1542
1588
  */
1543
- deactivate() {
1544
- const logger = this.logger.extend("deactivate");
1545
- logger.info("removing all listeners...");
1546
- this.removeAllListeners();
1547
- this.readyState = "DEACTIVATED";
1548
- logger.info("set state to:", this.readyState);
1589
+ listenerCount(eventName) {
1590
+ return this._getListeners(eventName).length;
1549
1591
  }
1550
- isInternalEventName(eventName) {
1551
- return eventName === "newListener" || eventName === "removeListener";
1592
+ rawListeners(eventName) {
1593
+ return this.listeners(eventName);
1552
1594
  }
1553
1595
  };
1596
+ var Emitter2 = _Emitter2;
1597
+ Emitter2.defaultMaxListeners = 10;
1598
+
1599
+ // node_modules/.pnpm/@mswjs+interceptors@0.25.10/node_modules/@mswjs/interceptors/lib/node/chunk-JAW6F2FR.mjs
1554
1600
  function getGlobalSymbol(symbol) {
1555
1601
  return (
1556
1602
  // @ts-ignore https://github.com/Microsoft/TypeScript/issues/24587
@@ -1567,7 +1613,7 @@ var MockServiceWorker = (() => {
1567
1613
  constructor(symbol) {
1568
1614
  this.symbol = symbol;
1569
1615
  this.readyState = "INACTIVE";
1570
- this.emitter = new AsyncEventEmitter();
1616
+ this.emitter = new Emitter2();
1571
1617
  this.subscriptions = [];
1572
1618
  this.logger = new Logger(symbol.description);
1573
1619
  this.emitter.setMaxListeners(0);
@@ -1597,8 +1643,6 @@ var MockServiceWorker = (() => {
1597
1643
  return;
1598
1644
  }
1599
1645
  this.readyState = "APPLYING";
1600
- this.emitter.activate();
1601
- logger.info("activated the emiter!", this.emitter.readyState);
1602
1646
  const runningInstance = this.getInstance();
1603
1647
  if (runningInstance) {
1604
1648
  logger.info("found a running instance, reusing...");
@@ -1609,6 +1653,7 @@ var MockServiceWorker = (() => {
1609
1653
  runningInstance.emitter.removeListener(event, listener);
1610
1654
  logger.info('removed proxied "%s" listener!', event);
1611
1655
  });
1656
+ return this;
1612
1657
  };
1613
1658
  this.readyState = "APPLIED";
1614
1659
  return;
@@ -1628,14 +1673,27 @@ var MockServiceWorker = (() => {
1628
1673
  /**
1629
1674
  * Listen to the interceptor's public events.
1630
1675
  */
1631
- on(eventName, listener) {
1676
+ on(event, listener) {
1632
1677
  const logger = this.logger.extend("on");
1633
1678
  if (this.readyState === "DISPOSING" || this.readyState === "DISPOSED") {
1634
1679
  logger.info("cannot listen to events, already disposed!");
1635
- return;
1680
+ return this;
1636
1681
  }
1637
- logger.info('adding "%s" event listener:', eventName, listener.name);
1638
- this.emitter.on(eventName, listener);
1682
+ logger.info('adding "%s" event listener:', event, listener);
1683
+ this.emitter.on(event, listener);
1684
+ return this;
1685
+ }
1686
+ once(event, listener) {
1687
+ this.emitter.once(event, listener);
1688
+ return this;
1689
+ }
1690
+ off(event, listener) {
1691
+ this.emitter.off(event, listener);
1692
+ return this;
1693
+ }
1694
+ removeAllListeners(event) {
1695
+ this.emitter.removeAllListeners(event);
1696
+ return this;
1639
1697
  }
1640
1698
  /**
1641
1699
  * Disposes of any side-effects this interceptor has introduced.
@@ -1662,7 +1720,7 @@ var MockServiceWorker = (() => {
1662
1720
  this.subscriptions = [];
1663
1721
  logger.info("disposed of all subscriptions!", this.subscriptions.length);
1664
1722
  }
1665
- this.emitter.deactivate();
1723
+ this.emitter.removeAllListeners();
1666
1724
  logger.info("destroyed the listener!");
1667
1725
  this.readyState = "DISPOSED";
1668
1726
  }
@@ -1682,7 +1740,7 @@ var MockServiceWorker = (() => {
1682
1740
  }
1683
1741
  };
1684
1742
 
1685
- // node_modules/.pnpm/@mswjs+interceptors@0.25.1/node_modules/@mswjs/interceptors/lib/node/chunk-VS3GJPUE.mjs
1743
+ // node_modules/.pnpm/@mswjs+interceptors@0.25.10/node_modules/@mswjs/interceptors/lib/node/chunk-LNYHQTKT.mjs
1686
1744
  var BatchInterceptor = class extends Interceptor {
1687
1745
  constructor(options) {
1688
1746
  BatchInterceptor.symbol = Symbol(options.name);
@@ -1700,19 +1758,38 @@ var MockServiceWorker = (() => {
1700
1758
  }
1701
1759
  }
1702
1760
  on(event, listener) {
1703
- this.interceptors.forEach((interceptor) => {
1761
+ for (const interceptor of this.interceptors) {
1704
1762
  interceptor.on(event, listener);
1705
- });
1763
+ }
1764
+ return this;
1765
+ }
1766
+ once(event, listener) {
1767
+ for (const interceptor of this.interceptors) {
1768
+ interceptor.once(event, listener);
1769
+ }
1770
+ return this;
1771
+ }
1772
+ off(event, listener) {
1773
+ for (const interceptor of this.interceptors) {
1774
+ interceptor.off(event, listener);
1775
+ }
1776
+ return this;
1777
+ }
1778
+ removeAllListeners(event) {
1779
+ for (const interceptors of this.interceptors) {
1780
+ interceptors.removeAllListeners(event);
1781
+ }
1782
+ return this;
1706
1783
  }
1707
1784
  };
1708
1785
 
1709
- // node_modules/.pnpm/@mswjs+interceptors@0.25.1/node_modules/@mswjs/interceptors/lib/node/chunk-7II4SWKS.mjs
1786
+ // node_modules/.pnpm/@mswjs+interceptors@0.25.10/node_modules/@mswjs/interceptors/lib/node/chunk-7II4SWKS.mjs
1710
1787
  var encoder = new TextEncoder();
1711
1788
 
1712
- // node_modules/.pnpm/@mswjs+interceptors@0.25.1/node_modules/@mswjs/interceptors/lib/node/chunk-GFH37L5D.mjs
1789
+ // node_modules/.pnpm/@mswjs+interceptors@0.25.10/node_modules/@mswjs/interceptors/lib/node/chunk-GFH37L5D.mjs
1713
1790
  var IS_PATCHED_MODULE = Symbol("isPatchedModule");
1714
1791
 
1715
- // node_modules/.pnpm/@mswjs+interceptors@0.25.1/node_modules/@mswjs/interceptors/lib/node/index.mjs
1792
+ // node_modules/.pnpm/@mswjs+interceptors@0.25.10/node_modules/@mswjs/interceptors/lib/node/index.mjs
1716
1793
  function getCleanUrl(url, isAbsolute = true) {
1717
1794
  return [isAbsolute && url.origin, url.pathname].filter(Boolean).join("");
1718
1795
  }
@@ -1958,7 +2035,7 @@ var MockServiceWorker = (() => {
1958
2035
  var import_cookie = __toESM2(require_cookie(), 1);
1959
2036
  var source_default2 = import_cookie.default;
1960
2037
 
1961
- // node_modules/.pnpm/@mswjs+cookies@1.0.0/node_modules/@mswjs/cookies/lib/index.mjs
2038
+ // node_modules/.pnpm/@mswjs+cookies@1.1.0/node_modules/@mswjs/cookies/lib/index.mjs
1962
2039
  var __create3 = Object.create;
1963
2040
  var __defProp5 = Object.defineProperty;
1964
2041
  var __getOwnPropDesc4 = Object.getOwnPropertyDescriptor;
@@ -1993,13 +2070,22 @@ var MockServiceWorker = (() => {
1993
2070
  }
1994
2071
  function parseString(setCookieValue, options) {
1995
2072
  var parts = setCookieValue.split(";").filter(isNonEmptyString);
1996
- var nameValue = parts.shift().split("=");
1997
- var name = nameValue.shift();
1998
- var value = nameValue.join("=");
2073
+ var nameValuePairStr = parts.shift();
2074
+ var parsed = parseNameValuePair(nameValuePairStr);
2075
+ var name = parsed.name;
2076
+ var value = parsed.value;
1999
2077
  options = options ? Object.assign({}, defaultParseOptions, options) : defaultParseOptions;
2078
+ try {
2079
+ value = options.decodeValues ? decodeURIComponent(value) : value;
2080
+ } catch (e) {
2081
+ console.error(
2082
+ "set-cookie-parser encountered an error while decoding a cookie with value '" + value + "'. Set options.decodeValues to false to disable this feature.",
2083
+ e
2084
+ );
2085
+ }
2000
2086
  var cookie = {
2001
2087
  name,
2002
- value: options.decodeValues ? decodeURIComponent(value) : value
2088
+ value
2003
2089
  };
2004
2090
  parts.forEach(function(part) {
2005
2091
  var sides = part.split("=");
@@ -2021,6 +2107,18 @@ var MockServiceWorker = (() => {
2021
2107
  });
2022
2108
  return cookie;
2023
2109
  }
2110
+ function parseNameValuePair(nameValuePairStr) {
2111
+ var name = "";
2112
+ var value = "";
2113
+ var nameValueArr = nameValuePairStr.split("=");
2114
+ if (nameValueArr.length > 1) {
2115
+ name = nameValueArr.shift();
2116
+ value = nameValueArr.join("=");
2117
+ } else {
2118
+ value = nameValuePairStr;
2119
+ }
2120
+ return { name, value };
2121
+ }
2024
2122
  function parse3(input, options) {
2025
2123
  options = options ? Object.assign({}, defaultParseOptions, options) : defaultParseOptions;
2026
2124
  if (!input) {
@@ -2030,18 +2128,22 @@ var MockServiceWorker = (() => {
2030
2128
  return {};
2031
2129
  }
2032
2130
  }
2033
- if (input.headers && input.headers["set-cookie"]) {
2034
- input = input.headers["set-cookie"];
2035
- } else if (input.headers) {
2036
- var sch = input.headers[Object.keys(input.headers).find(function(key) {
2037
- return key.toLowerCase() === "set-cookie";
2038
- })];
2039
- if (!sch && input.headers.cookie && !options.silent) {
2040
- console.warn(
2041
- "Warning: set-cookie-parser appears to have been called on a request object. It is designed to parse Set-Cookie headers from responses, not Cookie headers from requests. Set the option {silent: true} to suppress this warning."
2042
- );
2131
+ if (input.headers) {
2132
+ if (typeof input.headers.getSetCookie === "function") {
2133
+ input = input.headers.getSetCookie();
2134
+ } else if (input.headers["set-cookie"]) {
2135
+ input = input.headers["set-cookie"];
2136
+ } else {
2137
+ var sch = input.headers[Object.keys(input.headers).find(function(key) {
2138
+ return key.toLowerCase() === "set-cookie";
2139
+ })];
2140
+ if (!sch && input.headers.cookie && !options.silent) {
2141
+ console.warn(
2142
+ "Warning: set-cookie-parser appears to have been called on a request object. It is designed to parse Set-Cookie headers from responses, not Cookie headers from requests. Set the option {silent: true} to suppress this warning."
2143
+ );
2144
+ }
2145
+ input = sch;
2043
2146
  }
2044
- input = sch;
2045
2147
  }
2046
2148
  if (!Array.isArray(input)) {
2047
2149
  input = [input];
@@ -2137,12 +2239,20 @@ var MockServiceWorker = (() => {
2137
2239
  return false;
2138
2240
  }
2139
2241
  }
2242
+ function isPropertyAccessible(object, method) {
2243
+ try {
2244
+ object[method];
2245
+ return true;
2246
+ } catch (e) {
2247
+ return false;
2248
+ }
2249
+ }
2140
2250
  var CookieStore = class {
2141
2251
  constructor() {
2142
2252
  this.store = /* @__PURE__ */ new Map();
2143
2253
  }
2144
2254
  add(request, response) {
2145
- if (request.credentials === "omit") {
2255
+ if (isPropertyAccessible(request, "credentials") && request.credentials === "omit") {
2146
2256
  return;
2147
2257
  }
2148
2258
  const requestUrl = new URL(request.url);
@@ -2169,6 +2279,9 @@ var MockServiceWorker = (() => {
2169
2279
  this.deleteExpiredCookies();
2170
2280
  const requestUrl = new URL(request.url);
2171
2281
  const originCookies = this.store.get(requestUrl.origin) || /* @__PURE__ */ new Map();
2282
+ if (!isPropertyAccessible(request, "credentials")) {
2283
+ return originCookies;
2284
+ }
2172
2285
  switch (request.credentials) {
2173
2286
  case "include": {
2174
2287
  if (typeof document === "undefined") {
@@ -6046,7 +6159,9 @@ Read more: https://mswjs.io/docs/getting-started/mocks`
6046
6159
  */
6047
6160
  static text(body, init) {
6048
6161
  const responseInit = normalizeResponseInit(init);
6049
- responseInit.headers.set("Content-Type", "text/plain");
6162
+ if (!responseInit.headers.has("Content-Type")) {
6163
+ responseInit.headers.set("Content-Type", "text/plain");
6164
+ }
6050
6165
  return new HttpResponse(body, responseInit);
6051
6166
  }
6052
6167
  /**
@@ -6057,7 +6172,9 @@ Read more: https://mswjs.io/docs/getting-started/mocks`
6057
6172
  */
6058
6173
  static json(body, init) {
6059
6174
  const responseInit = normalizeResponseInit(init);
6060
- responseInit.headers.set("Content-Type", "application/json");
6175
+ if (!responseInit.headers.has("Content-Type")) {
6176
+ responseInit.headers.set("Content-Type", "application/json");
6177
+ }
6061
6178
  return new HttpResponse(
6062
6179
  JSON.stringify(body),
6063
6180
  responseInit
@@ -6071,7 +6188,9 @@ Read more: https://mswjs.io/docs/getting-started/mocks`
6071
6188
  */
6072
6189
  static xml(body, init) {
6073
6190
  const responseInit = normalizeResponseInit(init);
6074
- responseInit.headers.set("Content-Type", "text/xml");
6191
+ if (!responseInit.headers.has("Content-Type")) {
6192
+ responseInit.headers.set("Content-Type", "text/xml");
6193
+ }
6075
6194
  return new HttpResponse(body, responseInit);
6076
6195
  }
6077
6196
  /**
@@ -6646,7 +6765,74 @@ If this message still persists after updating, please report an issue: https://g
6646
6765
  }
6647
6766
  };
6648
6767
 
6649
- // node_modules/.pnpm/@mswjs+interceptors@0.25.1/node_modules/@mswjs/interceptors/lib/browser/chunk-RT3ATOJH.mjs
6768
+ // node_modules/.pnpm/@open-draft+deferred-promise@2.2.0/node_modules/@open-draft/deferred-promise/build/index.mjs
6769
+ function createDeferredExecutor() {
6770
+ const executor = (resolve, reject) => {
6771
+ executor.state = "pending";
6772
+ executor.resolve = (data) => {
6773
+ if (executor.state !== "pending") {
6774
+ return;
6775
+ }
6776
+ executor.result = data;
6777
+ const onFulfilled = (value) => {
6778
+ executor.state = "fulfilled";
6779
+ return value;
6780
+ };
6781
+ return resolve(
6782
+ data instanceof Promise ? data : Promise.resolve(data).then(onFulfilled)
6783
+ );
6784
+ };
6785
+ executor.reject = (reason) => {
6786
+ if (executor.state !== "pending") {
6787
+ return;
6788
+ }
6789
+ queueMicrotask(() => {
6790
+ executor.state = "rejected";
6791
+ });
6792
+ return reject(executor.rejectionReason = reason);
6793
+ };
6794
+ };
6795
+ return executor;
6796
+ }
6797
+ var _executor, _decorate, decorate_fn, _a2;
6798
+ var DeferredPromise = (_a2 = class extends Promise {
6799
+ constructor(executor = null) {
6800
+ const deferredExecutor = createDeferredExecutor();
6801
+ super((originalResolve, originalReject) => {
6802
+ deferredExecutor(originalResolve, originalReject);
6803
+ executor == null ? void 0 : executor(deferredExecutor.resolve, deferredExecutor.reject);
6804
+ });
6805
+ __privateAdd(this, _decorate);
6806
+ __privateAdd(this, _executor, void 0);
6807
+ __publicField(this, "resolve");
6808
+ __publicField(this, "reject");
6809
+ __privateSet(this, _executor, deferredExecutor);
6810
+ this.resolve = __privateGet(this, _executor).resolve;
6811
+ this.reject = __privateGet(this, _executor).reject;
6812
+ }
6813
+ get state() {
6814
+ return __privateGet(this, _executor).state;
6815
+ }
6816
+ get rejectionReason() {
6817
+ return __privateGet(this, _executor).rejectionReason;
6818
+ }
6819
+ then(onFulfilled, onRejected) {
6820
+ return __privateMethod(this, _decorate, decorate_fn).call(this, super.then(onFulfilled, onRejected));
6821
+ }
6822
+ catch(onRejected) {
6823
+ return __privateMethod(this, _decorate, decorate_fn).call(this, super.catch(onRejected));
6824
+ }
6825
+ finally(onfinally) {
6826
+ return __privateMethod(this, _decorate, decorate_fn).call(this, super.finally(onfinally));
6827
+ }
6828
+ }, _executor = new WeakMap(), _decorate = new WeakSet(), decorate_fn = function(promise) {
6829
+ return Object.defineProperties(promise, {
6830
+ resolve: { configurable: true, value: this.resolve },
6831
+ reject: { configurable: true, value: this.reject }
6832
+ });
6833
+ }, _a2);
6834
+
6835
+ // node_modules/.pnpm/@mswjs+interceptors@0.25.10/node_modules/@mswjs/interceptors/lib/browser/chunk-KK6APRON.mjs
6650
6836
  function uuidv4() {
6651
6837
  return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
6652
6838
  const r = Math.random() * 16 | 0;
@@ -6654,172 +6840,47 @@ If this message still persists after updating, please report an issue: https://g
6654
6840
  return v.toString(16);
6655
6841
  });
6656
6842
  }
6657
- function createLazyCallback(options = {}) {
6658
- let calledTimes = 0;
6659
- let autoResolveTimeout;
6660
- let remoteResolve;
6661
- const callPromise = new Promise((resolve) => {
6662
- remoteResolve = resolve;
6663
- }).finally(() => {
6664
- clearTimeout(autoResolveTimeout);
6665
- });
6666
- const fn = function(...args) {
6667
- var _a3;
6668
- if (options.maxCalls && calledTimes >= options.maxCalls) {
6669
- (_a3 = options.maxCallsCallback) == null ? void 0 : _a3.call(options);
6670
- }
6671
- remoteResolve(args);
6672
- calledTimes++;
6843
+ var RequestController = class {
6844
+ constructor(request) {
6845
+ this.request = request;
6846
+ this.responsePromise = new DeferredPromise();
6847
+ }
6848
+ respondWith(response) {
6849
+ invariant(
6850
+ this.responsePromise.state === "pending",
6851
+ 'Failed to respond to "%s %s" request: the "request" event has already been responded to.',
6852
+ this.request.method,
6853
+ this.request.url
6854
+ );
6855
+ this.responsePromise.resolve(response);
6856
+ }
6857
+ };
6858
+ function toInteractiveRequest(request) {
6859
+ const requestController = new RequestController(request);
6860
+ Reflect.set(
6861
+ request,
6862
+ "respondWith",
6863
+ requestController.respondWith.bind(requestController)
6864
+ );
6865
+ return {
6866
+ interactiveRequest: request,
6867
+ requestController
6673
6868
  };
6674
- fn.invoked = () => __async(this, null, function* () {
6675
- autoResolveTimeout = setTimeout(() => {
6676
- remoteResolve([]);
6677
- }, 0);
6678
- return callPromise;
6679
- });
6680
- return fn;
6681
6869
  }
6682
- function toInteractiveRequest(request) {
6683
- Object.defineProperty(request, "respondWith", {
6684
- writable: false,
6685
- enumerable: true,
6686
- value: createLazyCallback({
6687
- maxCalls: 1,
6688
- maxCallsCallback() {
6689
- throw new Error(
6690
- format(
6691
- 'Failed to respond to "%s %s" request: the "request" event has already been responded to.',
6692
- request.method,
6693
- request.url
6694
- )
6695
- );
6696
- }
6697
- })
6870
+ function emitAsync(emitter, eventName, ...data) {
6871
+ return __async(this, null, function* () {
6872
+ const listners = emitter.listeners(eventName);
6873
+ if (listners.length === 0) {
6874
+ return;
6875
+ }
6876
+ for (const listener of listners) {
6877
+ yield listener.apply(emitter, data);
6878
+ }
6698
6879
  });
6699
- return request;
6700
6880
  }
6701
6881
 
6702
- // node_modules/.pnpm/@mswjs+interceptors@0.25.1/node_modules/@mswjs/interceptors/lib/browser/chunk-GXJLJMOT.mjs
6882
+ // node_modules/.pnpm/@mswjs+interceptors@0.25.10/node_modules/@mswjs/interceptors/lib/browser/chunk-S72SKXXQ.mjs
6703
6883
  var IS_PATCHED_MODULE2 = Symbol("isPatchedModule");
6704
- function nextTick2(callback) {
6705
- setTimeout(callback, 0);
6706
- }
6707
- var AsyncEventEmitter2 = class extends Emitter {
6708
- constructor() {
6709
- super();
6710
- this.logger = new Logger("async-event-emitter");
6711
- this.queue = /* @__PURE__ */ new Map();
6712
- this.readyState = "ACTIVE";
6713
- }
6714
- on(eventName, listener) {
6715
- const logger = this.logger.extend("on");
6716
- logger.info('adding "%s" listener...', eventName);
6717
- if (this.readyState === "DEACTIVATED") {
6718
- logger.info("the emitter is destroyed, skipping!");
6719
- return this;
6720
- }
6721
- return super.on(eventName, (...args) => __async(this, null, function* () {
6722
- const queue = this.openListenerQueue(eventName);
6723
- logger.info('awaiting the "%s" listener...', eventName);
6724
- queue.push({
6725
- args,
6726
- done: new Promise((resolve, reject) => __async(this, null, function* () {
6727
- try {
6728
- yield listener(...args);
6729
- resolve();
6730
- logger.info('"%s" listener has resolved!', eventName);
6731
- } catch (error3) {
6732
- logger.info('"%s" listener has rejected!', error3);
6733
- reject(error3);
6734
- }
6735
- }))
6736
- });
6737
- }));
6738
- }
6739
- emit(eventName, ...data) {
6740
- const logger = this.logger.extend("emit");
6741
- logger.info('emitting "%s" event...', eventName);
6742
- if (this.readyState === "DEACTIVATED") {
6743
- logger.info("the emitter is destroyed, skipping!");
6744
- return false;
6745
- }
6746
- if (this.isInternalEventName(eventName)) {
6747
- return super.emit(eventName, ...data);
6748
- }
6749
- this.openListenerQueue(eventName);
6750
- logger.info('appending a one-time cleanup "%s" listener...', eventName);
6751
- this.once(eventName, () => {
6752
- nextTick2(() => {
6753
- this.queue.delete(eventName);
6754
- logger.info('cleaned up "%s" listeners queue!', eventName);
6755
- });
6756
- });
6757
- return super.emit(eventName, ...data);
6758
- }
6759
- /**
6760
- * Returns a promise that resolves when all the listeners for the given event
6761
- * has been called. Awaits asynchronous listeners.
6762
- * If the event has no listeners, resolves immediately.
6763
- */
6764
- untilIdle(eventName, filter = () => true) {
6765
- return __async(this, null, function* () {
6766
- const listenersQueue = this.queue.get(eventName) || [];
6767
- yield Promise.all(
6768
- listenersQueue.filter(filter).map(({ done }) => done)
6769
- ).finally(() => {
6770
- this.queue.delete(eventName);
6771
- });
6772
- });
6773
- }
6774
- openListenerQueue(eventName) {
6775
- const logger = this.logger.extend("openListenerQueue");
6776
- logger.info('opening "%s" listeners queue...', eventName);
6777
- const queue = this.queue.get(eventName);
6778
- if (!queue) {
6779
- logger.info("no queue found, creating one...");
6780
- this.queue.set(eventName, []);
6781
- return [];
6782
- }
6783
- logger.info("returning an exising queue:", queue);
6784
- return queue;
6785
- }
6786
- removeAllListeners(eventName) {
6787
- const logger = this.logger.extend("removeAllListeners");
6788
- logger.info("event:", eventName);
6789
- if (eventName) {
6790
- this.queue.delete(eventName);
6791
- logger.info(
6792
- 'cleared the "%s" listeners queue!',
6793
- eventName,
6794
- this.queue.get(eventName)
6795
- );
6796
- } else {
6797
- this.queue.clear();
6798
- logger.info("cleared the listeners queue!", this.queue);
6799
- }
6800
- return super.removeAllListeners(eventName);
6801
- }
6802
- activate() {
6803
- const logger = this.logger.extend("activate");
6804
- this.readyState = "ACTIVE";
6805
- logger.info("set state to:", this.readyState);
6806
- }
6807
- /**
6808
- * Deactivate this event emitter.
6809
- * Deactivated emitter can no longer emit and listen to events
6810
- * and needs to be activated again in order to do so.
6811
- */
6812
- deactivate() {
6813
- const logger = this.logger.extend("deactivate");
6814
- logger.info("removing all listeners...");
6815
- this.removeAllListeners();
6816
- this.readyState = "DEACTIVATED";
6817
- logger.info("set state to:", this.readyState);
6818
- }
6819
- isInternalEventName(eventName) {
6820
- return eventName === "newListener" || eventName === "removeListener";
6821
- }
6822
- };
6823
6884
  function getGlobalSymbol2(symbol) {
6824
6885
  return (
6825
6886
  // @ts-ignore https://github.com/Microsoft/TypeScript/issues/24587
@@ -6836,7 +6897,7 @@ If this message still persists after updating, please report an issue: https://g
6836
6897
  constructor(symbol) {
6837
6898
  this.symbol = symbol;
6838
6899
  this.readyState = "INACTIVE";
6839
- this.emitter = new AsyncEventEmitter2();
6900
+ this.emitter = new Emitter2();
6840
6901
  this.subscriptions = [];
6841
6902
  this.logger = new Logger(symbol.description);
6842
6903
  this.emitter.setMaxListeners(0);
@@ -6866,8 +6927,6 @@ If this message still persists after updating, please report an issue: https://g
6866
6927
  return;
6867
6928
  }
6868
6929
  this.readyState = "APPLYING";
6869
- this.emitter.activate();
6870
- logger.info("activated the emiter!", this.emitter.readyState);
6871
6930
  const runningInstance = this.getInstance();
6872
6931
  if (runningInstance) {
6873
6932
  logger.info("found a running instance, reusing...");
@@ -6878,6 +6937,7 @@ If this message still persists after updating, please report an issue: https://g
6878
6937
  runningInstance.emitter.removeListener(event, listener);
6879
6938
  logger.info('removed proxied "%s" listener!', event);
6880
6939
  });
6940
+ return this;
6881
6941
  };
6882
6942
  this.readyState = "APPLIED";
6883
6943
  return;
@@ -6897,14 +6957,27 @@ If this message still persists after updating, please report an issue: https://g
6897
6957
  /**
6898
6958
  * Listen to the interceptor's public events.
6899
6959
  */
6900
- on(eventName, listener) {
6960
+ on(event, listener) {
6901
6961
  const logger = this.logger.extend("on");
6902
6962
  if (this.readyState === "DISPOSING" || this.readyState === "DISPOSED") {
6903
6963
  logger.info("cannot listen to events, already disposed!");
6904
- return;
6964
+ return this;
6905
6965
  }
6906
- logger.info('adding "%s" event listener:', eventName, listener.name);
6907
- this.emitter.on(eventName, listener);
6966
+ logger.info('adding "%s" event listener:', event, listener);
6967
+ this.emitter.on(event, listener);
6968
+ return this;
6969
+ }
6970
+ once(event, listener) {
6971
+ this.emitter.once(event, listener);
6972
+ return this;
6973
+ }
6974
+ off(event, listener) {
6975
+ this.emitter.off(event, listener);
6976
+ return this;
6977
+ }
6978
+ removeAllListeners(event) {
6979
+ this.emitter.removeAllListeners(event);
6980
+ return this;
6908
6981
  }
6909
6982
  /**
6910
6983
  * Disposes of any side-effects this interceptor has introduced.
@@ -6931,7 +7004,7 @@ If this message still persists after updating, please report an issue: https://g
6931
7004
  this.subscriptions = [];
6932
7005
  logger.info("disposed of all subscriptions!", this.subscriptions.length);
6933
7006
  }
6934
- this.emitter.deactivate();
7007
+ this.emitter.removeAllListeners();
6935
7008
  logger.info("destroyed the listener!");
6936
7009
  this.readyState = "DISPOSED";
6937
7010
  }
@@ -6951,74 +7024,15 @@ If this message still persists after updating, please report an issue: https://g
6951
7024
  }
6952
7025
  };
6953
7026
 
6954
- // node_modules/.pnpm/@open-draft+deferred-promise@2.2.0/node_modules/@open-draft/deferred-promise/build/index.mjs
6955
- function createDeferredExecutor() {
6956
- const executor = (resolve, reject) => {
6957
- executor.state = "pending";
6958
- executor.resolve = (data) => {
6959
- if (executor.state !== "pending") {
6960
- return;
6961
- }
6962
- executor.result = data;
6963
- const onFulfilled = (value) => {
6964
- executor.state = "fulfilled";
6965
- return value;
6966
- };
6967
- return resolve(
6968
- data instanceof Promise ? data : Promise.resolve(data).then(onFulfilled)
6969
- );
6970
- };
6971
- executor.reject = (reason) => {
6972
- if (executor.state !== "pending") {
6973
- return;
6974
- }
6975
- queueMicrotask(() => {
6976
- executor.state = "rejected";
6977
- });
6978
- return reject(executor.rejectionReason = reason);
6979
- };
6980
- };
6981
- return executor;
6982
- }
6983
- var _executor, _decorate, decorate_fn, _a2;
6984
- var DeferredPromise = (_a2 = class extends Promise {
6985
- constructor(executor = null) {
6986
- const deferredExecutor = createDeferredExecutor();
6987
- super((originalResolve, originalReject) => {
6988
- deferredExecutor(originalResolve, originalReject);
6989
- executor == null ? void 0 : executor(deferredExecutor.resolve, deferredExecutor.reject);
6990
- });
6991
- __privateAdd(this, _decorate);
6992
- __privateAdd(this, _executor, void 0);
6993
- __publicField(this, "resolve");
6994
- __publicField(this, "reject");
6995
- __privateSet(this, _executor, deferredExecutor);
6996
- this.resolve = __privateGet(this, _executor).resolve;
6997
- this.reject = __privateGet(this, _executor).reject;
6998
- }
6999
- get state() {
7000
- return __privateGet(this, _executor).state;
7001
- }
7002
- get rejectionReason() {
7003
- return __privateGet(this, _executor).rejectionReason;
7004
- }
7005
- then(onFulfilled, onRejected) {
7006
- return __privateMethod(this, _decorate, decorate_fn).call(this, super.then(onFulfilled, onRejected));
7007
- }
7008
- catch(onRejected) {
7009
- return __privateMethod(this, _decorate, decorate_fn).call(this, super.catch(onRejected));
7010
- }
7011
- finally(onfinally) {
7012
- return __privateMethod(this, _decorate, decorate_fn).call(this, super.finally(onfinally));
7027
+ // node_modules/.pnpm/@mswjs+interceptors@0.25.10/node_modules/@mswjs/interceptors/lib/browser/chunk-KRADPSOF.mjs
7028
+ function isPropertyAccessible2(obj, key) {
7029
+ try {
7030
+ obj[key];
7031
+ return true;
7032
+ } catch (e) {
7033
+ return false;
7013
7034
  }
7014
- }, _executor = new WeakMap(), _decorate = new WeakSet(), decorate_fn = function(promise) {
7015
- return Object.defineProperties(promise, {
7016
- resolve: { configurable: true, value: this.resolve },
7017
- reject: { configurable: true, value: this.reject }
7018
- });
7019
- }, _a2);
7020
-
7021
- // node_modules/.pnpm/@mswjs+interceptors@0.25.1/node_modules/@mswjs/interceptors/lib/browser/chunk-VMXB5F2J.mjs
7035
+ }
7022
7036
  var _FetchInterceptor = class extends Interceptor2 {
7023
7037
  constructor() {
7024
7038
  super(_FetchInterceptor.symbol);
@@ -7037,14 +7051,18 @@ If this message still persists after updating, please report an issue: https://g
7037
7051
  const requestId = uuidv4();
7038
7052
  const request = new Request(input, init);
7039
7053
  this.logger.info("[%s] %s", request.method, request.url);
7040
- const interactiveRequest = toInteractiveRequest(request);
7054
+ const { interactiveRequest, requestController } = toInteractiveRequest(request);
7041
7055
  this.logger.info(
7042
7056
  'emitting the "request" event for %d listener(s)...',
7043
7057
  this.emitter.listenerCount("request")
7044
7058
  );
7045
- this.emitter.emit("request", {
7046
- request: interactiveRequest,
7047
- requestId
7059
+ this.emitter.once("request", ({ requestId: pendingRequestId }) => {
7060
+ if (pendingRequestId !== requestId) {
7061
+ return;
7062
+ }
7063
+ if (requestController.responsePromise.state === "pending") {
7064
+ requestController.responsePromise.resolve(void 0);
7065
+ }
7048
7066
  });
7049
7067
  this.logger.info("awaiting for the mocked response...");
7050
7068
  const signal = interactiveRequest.signal;
@@ -7057,15 +7075,20 @@ If this message still persists after updating, please report an issue: https://g
7057
7075
  { once: true }
7058
7076
  );
7059
7077
  const resolverResult = yield until(() => __async(this, null, function* () {
7060
- const allListenersResolved = this.emitter.untilIdle(
7061
- "request",
7062
- ({ args: [{ requestId: pendingRequestId }] }) => {
7063
- return pendingRequestId === requestId;
7064
- }
7065
- );
7066
- yield Promise.race([requestAborted, allListenersResolved]);
7078
+ const listenersFinished = emitAsync(this.emitter, "request", {
7079
+ request: interactiveRequest,
7080
+ requestId
7081
+ });
7082
+ yield Promise.race([
7083
+ requestAborted,
7084
+ // Put the listeners invocation Promise in the same race condition
7085
+ // with the request abort Promise because otherwise awaiting the listeners
7086
+ // would always yield some response (or undefined).
7087
+ listenersFinished,
7088
+ requestController.responsePromise
7089
+ ]);
7067
7090
  this.logger.info("all request listeners have been resolved!");
7068
- const [mockedResponse2] = yield interactiveRequest.respondWith.invoked();
7091
+ const mockedResponse2 = yield requestController.responsePromise;
7069
7092
  this.logger.info("event.respondWith called with:", mockedResponse2);
7070
7093
  return mockedResponse2;
7071
7094
  }));
@@ -7078,7 +7101,7 @@ If this message still persists after updating, please report an issue: https://g
7078
7101
  const mockedResponse = resolverResult.data;
7079
7102
  if (mockedResponse && !((_a3 = request.signal) == null ? void 0 : _a3.aborted)) {
7080
7103
  this.logger.info("received mocked response:", mockedResponse);
7081
- if (mockedResponse.type === "error") {
7104
+ if (isPropertyAccessible2(mockedResponse, "type") && mockedResponse.type === "error") {
7082
7105
  this.logger.info(
7083
7106
  "received a network error response, rejecting the request promise..."
7084
7107
  );
@@ -7138,7 +7161,7 @@ If this message still persists after updating, please report an issue: https://g
7138
7161
  });
7139
7162
  }
7140
7163
 
7141
- // node_modules/.pnpm/@mswjs+interceptors@0.25.1/node_modules/@mswjs/interceptors/lib/browser/chunk-7II4SWKS.mjs
7164
+ // node_modules/.pnpm/@mswjs+interceptors@0.25.10/node_modules/@mswjs/interceptors/lib/browser/chunk-7II4SWKS.mjs
7142
7165
  var encoder2 = new TextEncoder();
7143
7166
  function encodeBuffer2(text) {
7144
7167
  return encoder2.encode(text);
@@ -7154,7 +7177,7 @@ If this message still persists after updating, please report an issue: https://g
7154
7177
  );
7155
7178
  }
7156
7179
 
7157
- // node_modules/.pnpm/@mswjs+interceptors@0.25.1/node_modules/@mswjs/interceptors/lib/browser/chunk-ANLPTCZ5.mjs
7180
+ // node_modules/.pnpm/@mswjs+interceptors@0.25.10/node_modules/@mswjs/interceptors/lib/browser/chunk-NJQK65MD.mjs
7158
7181
  function concatArrayBuffer(left, right) {
7159
7182
  const result = new Uint8Array(left.byteLength + right.byteLength);
7160
7183
  result.set(left, 0);
@@ -7257,11 +7280,9 @@ If this message still persists after updating, please report an issue: https://g
7257
7280
  return constructorCall.call(newTarget, args, next);
7258
7281
  };
7259
7282
  }
7260
- handler.set = function(target, propertyName, nextValue, receiver) {
7283
+ handler.set = function(target, propertyName, nextValue) {
7261
7284
  const next = () => {
7262
- const propertySource = findPropertySource(target, propertyName);
7263
- if (propertySource === null)
7264
- return false;
7285
+ const propertySource = findPropertySource(target, propertyName) || target;
7265
7286
  const ownDescriptors = Reflect.getOwnPropertyDescriptor(
7266
7287
  propertySource,
7267
7288
  propertyName
@@ -7318,9 +7339,11 @@ If this message still persists after updating, please report an issue: https://g
7318
7339
  return null;
7319
7340
  }
7320
7341
  }
7321
- var statusCodesWithoutBody = [204, 205, 304];
7342
+ var responseStatusCodesWithoutBody = [204, 205, 304];
7322
7343
  function createResponse(request, body) {
7323
- const responseBodyOrNull = statusCodesWithoutBody.includes(request.status) ? null : body;
7344
+ const responseBodyOrNull = responseStatusCodesWithoutBody.includes(
7345
+ request.status
7346
+ ) ? null : body;
7324
7347
  return new Response(responseBodyOrNull, {
7325
7348
  status: request.status,
7326
7349
  statusText: request.statusText,
@@ -7388,7 +7411,7 @@ If this message still persists after updating, please report an issue: https://g
7388
7411
  case "addEventListener": {
7389
7412
  const [eventName, listener] = args;
7390
7413
  this.registerEvent(eventName, listener);
7391
- this.logger.info("addEventListener", eventName, listener.name);
7414
+ this.logger.info("addEventListener", eventName, listener);
7392
7415
  return invoke();
7393
7416
  }
7394
7417
  case "setRequestHeader": {
@@ -7451,7 +7474,7 @@ If this message still persists after updating, please report an issue: https://g
7451
7474
  const prevEvents = this.events.get(eventName) || [];
7452
7475
  const nextEvents = prevEvents.concat(listener);
7453
7476
  this.events.set(eventName, nextEvents);
7454
- this.logger.info('registered event "%s"', eventName, listener.name);
7477
+ this.logger.info('registered event "%s"', eventName, listener);
7455
7478
  }
7456
7479
  /**
7457
7480
  * Responds to the current request with the given
@@ -7764,31 +7787,33 @@ If this message still persists after updating, please report an issue: https://g
7764
7787
  prototypeDescriptors[propertyName]
7765
7788
  );
7766
7789
  }
7767
- const requestController = new XMLHttpRequestController(
7790
+ const xhrRequestController = new XMLHttpRequestController(
7768
7791
  originalRequest,
7769
7792
  logger
7770
7793
  );
7771
- requestController.onRequest = function(_0) {
7794
+ xhrRequestController.onRequest = function(_0) {
7772
7795
  return __async(this, arguments, function* ({ request, requestId }) {
7773
- const interactiveRequest = toInteractiveRequest(request);
7774
- this.logger.info(
7775
- 'emitting the "request" event for %s listener(s)...',
7776
- emitter.listenerCount("request")
7777
- );
7778
- emitter.emit("request", {
7779
- request: interactiveRequest,
7780
- requestId
7781
- });
7796
+ const { interactiveRequest, requestController } = toInteractiveRequest(request);
7782
7797
  this.logger.info("awaiting mocked response...");
7798
+ emitter.once("request", ({ requestId: pendingRequestId }) => {
7799
+ if (pendingRequestId !== requestId) {
7800
+ return;
7801
+ }
7802
+ if (requestController.responsePromise.state === "pending") {
7803
+ requestController.respondWith(void 0);
7804
+ }
7805
+ });
7783
7806
  const resolverResult = yield until(() => __async(this, null, function* () {
7784
- yield emitter.untilIdle(
7785
- "request",
7786
- ({ args: [{ requestId: pendingRequestId }] }) => {
7787
- return pendingRequestId === requestId;
7788
- }
7807
+ this.logger.info(
7808
+ 'emitting the "request" event for %s listener(s)...',
7809
+ emitter.listenerCount("request")
7789
7810
  );
7811
+ yield emitAsync(emitter, "request", {
7812
+ request: interactiveRequest,
7813
+ requestId
7814
+ });
7790
7815
  this.logger.info('all "request" listeners settled!');
7791
- const [mockedResponse2] = yield interactiveRequest.respondWith.invoked();
7816
+ const mockedResponse2 = yield requestController.responsePromise;
7792
7817
  this.logger.info("event.respondWith called with:", mockedResponse2);
7793
7818
  return mockedResponse2;
7794
7819
  }));
@@ -7797,7 +7822,7 @@ If this message still persists after updating, please report an issue: https://g
7797
7822
  "request listener threw an exception, aborting request...",
7798
7823
  resolverResult.error
7799
7824
  );
7800
- requestController.errorWith(resolverResult.error);
7825
+ xhrRequestController.errorWith(resolverResult.error);
7801
7826
  return;
7802
7827
  }
7803
7828
  const mockedResponse = resolverResult.data;
@@ -7811,17 +7836,17 @@ If this message still persists after updating, please report an issue: https://g
7811
7836
  this.logger.info(
7812
7837
  "received a network error response, rejecting the request promise..."
7813
7838
  );
7814
- requestController.errorWith(new TypeError("Network error"));
7839
+ xhrRequestController.errorWith(new TypeError("Network error"));
7815
7840
  return;
7816
7841
  }
7817
- return requestController.respondWith(mockedResponse);
7842
+ return xhrRequestController.respondWith(mockedResponse);
7818
7843
  }
7819
7844
  this.logger.info(
7820
7845
  "no mocked response received, performing request as-is..."
7821
7846
  );
7822
7847
  });
7823
7848
  };
7824
- requestController.onResponse = function(_0) {
7849
+ xhrRequestController.onResponse = function(_0) {
7825
7850
  return __async(this, arguments, function* ({
7826
7851
  response,
7827
7852
  isMockedResponse,
@@ -7840,7 +7865,7 @@ If this message still persists after updating, please report an issue: https://g
7840
7865
  });
7841
7866
  });
7842
7867
  };
7843
- return requestController.request;
7868
+ return xhrRequestController.request;
7844
7869
  }
7845
7870
  });
7846
7871
  return XMLHttpRequestProxy;