react-realtime-hooks 1.3.3 → 1.3.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/dist/index.js CHANGED
@@ -1220,47 +1220,62 @@ var useWebSocket = (options) => {
1220
1220
  if (socketRef.current !== null) {
1221
1221
  return;
1222
1222
  }
1223
- const socket2 = new WebSocket(resolvedUrl, protocols);
1224
- const socketEpoch = nextSocketEpochRef.current + 1;
1225
- socketRef.current = socket2;
1226
- socketKeyRef.current = nextSocketKey;
1227
- activeSocketEpochRef.current = socketEpoch;
1228
- closingSocketEpochRef.current = null;
1229
- nextSocketEpochRef.current = socketEpoch;
1230
- socket2.binaryType = options.binaryType ?? "blob";
1231
1223
  commitState((current) => ({
1232
1224
  ...current,
1233
- bufferedAmount: socket2.bufferedAmount,
1225
+ bufferedAmount: 0,
1234
1226
  lastChangedAt: Date.now(),
1235
1227
  status: reconnect.status === "running" || reconnect.status === "scheduled" ? "reconnecting" : "connecting"
1236
1228
  }));
1237
- const handleSocketOpen = (event) => {
1238
- if (!isActiveSocketEvent(socketEpoch)) {
1239
- return;
1240
- }
1241
- handleOpen(event, socket2);
1242
- };
1243
- const handleSocketMessage = (event) => {
1244
- if (!isActiveSocketEvent(socketEpoch)) {
1229
+ let cancelled = false;
1230
+ let detachListeners = null;
1231
+ queueMicrotask(() => {
1232
+ if (cancelled) {
1245
1233
  return;
1246
1234
  }
1247
- handleMessage(event);
1248
- };
1249
- const handleSocketError = (event) => {
1250
- handleError(event, socketEpoch);
1251
- };
1252
- const handleSocketClose = (event) => {
1253
- handleClose(event, socketEpoch);
1254
- };
1255
- socket2.addEventListener("open", handleSocketOpen);
1256
- socket2.addEventListener("message", handleSocketMessage);
1257
- socket2.addEventListener("error", handleSocketError);
1258
- socket2.addEventListener("close", handleSocketClose);
1235
+ const socket2 = new WebSocket(resolvedUrl, protocols);
1236
+ const socketEpoch = nextSocketEpochRef.current + 1;
1237
+ socketRef.current = socket2;
1238
+ socketKeyRef.current = nextSocketKey;
1239
+ activeSocketEpochRef.current = socketEpoch;
1240
+ closingSocketEpochRef.current = null;
1241
+ nextSocketEpochRef.current = socketEpoch;
1242
+ socket2.binaryType = options.binaryType ?? "blob";
1243
+ commitState((current) => ({
1244
+ ...current,
1245
+ bufferedAmount: socket2.bufferedAmount
1246
+ }));
1247
+ const handleSocketOpen = (event) => {
1248
+ if (!isActiveSocketEvent(socketEpoch)) {
1249
+ return;
1250
+ }
1251
+ handleOpen(event, socket2);
1252
+ };
1253
+ const handleSocketMessage = (event) => {
1254
+ if (!isActiveSocketEvent(socketEpoch)) {
1255
+ return;
1256
+ }
1257
+ handleMessage(event);
1258
+ };
1259
+ const handleSocketError = (event) => {
1260
+ handleError(event, socketEpoch);
1261
+ };
1262
+ const handleSocketClose = (event) => {
1263
+ handleClose(event, socketEpoch);
1264
+ };
1265
+ socket2.addEventListener("open", handleSocketOpen);
1266
+ socket2.addEventListener("message", handleSocketMessage);
1267
+ socket2.addEventListener("error", handleSocketError);
1268
+ socket2.addEventListener("close", handleSocketClose);
1269
+ detachListeners = () => {
1270
+ socket2.removeEventListener("open", handleSocketOpen);
1271
+ socket2.removeEventListener("message", handleSocketMessage);
1272
+ socket2.removeEventListener("error", handleSocketError);
1273
+ socket2.removeEventListener("close", handleSocketClose);
1274
+ };
1275
+ });
1259
1276
  return () => {
1260
- socket2.removeEventListener("open", handleSocketOpen);
1261
- socket2.removeEventListener("message", handleSocketMessage);
1262
- socket2.removeEventListener("error", handleSocketError);
1263
- socket2.removeEventListener("close", handleSocketClose);
1277
+ cancelled = true;
1278
+ detachListeners?.();
1264
1279
  };
1265
1280
  }, [
1266
1281
  closeSocket,
@@ -1571,55 +1586,66 @@ var useEventSource = (options) => {
1571
1586
  if (eventSourceRef.current !== null) {
1572
1587
  return;
1573
1588
  }
1574
- const source = new EventSource(resolvedUrl, {
1575
- withCredentials: options.withCredentials ?? false
1576
- });
1577
- const sourceEpoch = nextEventSourceEpochRef.current + 1;
1578
- eventSourceRef.current = source;
1579
- eventSourceKeyRef.current = nextEventSourceKey;
1580
- activeEventSourceEpochRef.current = sourceEpoch;
1581
- nextEventSourceEpochRef.current = sourceEpoch;
1582
1589
  commitState((current) => ({
1583
1590
  ...current,
1584
1591
  lastChangedAt: Date.now(),
1585
1592
  status: reconnect.status === "running" || reconnect.status === "scheduled" ? "reconnecting" : "connecting"
1586
1593
  }));
1587
- const handleSourceOpen = (event) => {
1588
- if (!isActiveEventSourceEvent(sourceEpoch)) {
1589
- return;
1590
- }
1591
- handleOpen(event, source);
1592
- };
1593
- const handleSourceMessage = (event) => {
1594
- if (!isActiveEventSourceEvent(sourceEpoch)) {
1594
+ let cancelled = false;
1595
+ let detachListeners = null;
1596
+ queueMicrotask(() => {
1597
+ if (cancelled) {
1595
1598
  return;
1596
1599
  }
1597
- commitParsedMessage("message", event, false);
1598
- };
1599
- const namedEventHandlers = /* @__PURE__ */ new Map();
1600
- const handleSourceError = (event) => {
1601
- handleError(event, source, sourceEpoch);
1602
- };
1603
- source.addEventListener("open", handleSourceOpen);
1604
- source.addEventListener("message", handleSourceMessage);
1605
- for (const eventName of namedEvents) {
1606
- const handler = (event) => {
1600
+ const source = new EventSource(resolvedUrl, {
1601
+ withCredentials: options.withCredentials ?? false
1602
+ });
1603
+ const sourceEpoch = nextEventSourceEpochRef.current + 1;
1604
+ eventSourceRef.current = source;
1605
+ eventSourceKeyRef.current = nextEventSourceKey;
1606
+ activeEventSourceEpochRef.current = sourceEpoch;
1607
+ nextEventSourceEpochRef.current = sourceEpoch;
1608
+ const handleSourceOpen = (event) => {
1607
1609
  if (!isActiveEventSourceEvent(sourceEpoch)) {
1608
1610
  return;
1609
1611
  }
1610
- commitParsedMessage(eventName, event, true);
1612
+ handleOpen(event, source);
1611
1613
  };
1612
- namedEventHandlers.set(eventName, handler);
1613
- source.addEventListener(eventName, handler);
1614
- }
1615
- source.addEventListener("error", handleSourceError);
1616
- return () => {
1617
- source.removeEventListener("open", handleSourceOpen);
1618
- source.removeEventListener("message", handleSourceMessage);
1619
- for (const [eventName, handler] of namedEventHandlers) {
1620
- source.removeEventListener(eventName, handler);
1614
+ const handleSourceMessage = (event) => {
1615
+ if (!isActiveEventSourceEvent(sourceEpoch)) {
1616
+ return;
1617
+ }
1618
+ commitParsedMessage("message", event, false);
1619
+ };
1620
+ const namedEventHandlers = /* @__PURE__ */ new Map();
1621
+ const handleSourceError = (event) => {
1622
+ handleError(event, source, sourceEpoch);
1623
+ };
1624
+ source.addEventListener("open", handleSourceOpen);
1625
+ source.addEventListener("message", handleSourceMessage);
1626
+ for (const eventName of namedEvents) {
1627
+ const handler = (event) => {
1628
+ if (!isActiveEventSourceEvent(sourceEpoch)) {
1629
+ return;
1630
+ }
1631
+ commitParsedMessage(eventName, event, true);
1632
+ };
1633
+ namedEventHandlers.set(eventName, handler);
1634
+ source.addEventListener(eventName, handler);
1621
1635
  }
1622
- source.removeEventListener("error", handleSourceError);
1636
+ source.addEventListener("error", handleSourceError);
1637
+ detachListeners = () => {
1638
+ source.removeEventListener("open", handleSourceOpen);
1639
+ source.removeEventListener("message", handleSourceMessage);
1640
+ for (const [eventName, handler] of namedEventHandlers) {
1641
+ source.removeEventListener(eventName, handler);
1642
+ }
1643
+ source.removeEventListener("error", handleSourceError);
1644
+ };
1645
+ });
1646
+ return () => {
1647
+ cancelled = true;
1648
+ detachListeners?.();
1623
1649
  };
1624
1650
  }, [
1625
1651
  closeEventSource,