@rljson/io 0.0.63 → 0.0.65
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/README.architecture.md +465 -0
- package/README.public.md +635 -3
- package/dist/README.architecture.md +465 -0
- package/dist/README.public.md +635 -3
- package/dist/directional-socket-mock.d.ts +44 -0
- package/dist/example.d.ts +15 -0
- package/dist/index.d.ts +1 -0
- package/dist/io.js +147 -0
- package/dist/io.js.map +1 -1
- package/dist/socket.d.ts +1 -1
- package/dist/src/example.ts +246 -1
- package/package.json +14 -14
package/dist/io.js
CHANGED
|
@@ -1671,6 +1671,151 @@ class SocketMock {
|
|
|
1671
1671
|
return new Map(this._onceListeners);
|
|
1672
1672
|
}
|
|
1673
1673
|
}
|
|
1674
|
+
function createSocketPair() {
|
|
1675
|
+
const socketA = new DirectionalSocketMock();
|
|
1676
|
+
const socketB = new DirectionalSocketMock();
|
|
1677
|
+
socketA._setPeer(socketB);
|
|
1678
|
+
socketB._setPeer(socketA);
|
|
1679
|
+
return [socketA, socketB];
|
|
1680
|
+
}
|
|
1681
|
+
class DirectionalSocketMock {
|
|
1682
|
+
connected = false;
|
|
1683
|
+
disconnected = true;
|
|
1684
|
+
_peer;
|
|
1685
|
+
_listeners = /* @__PURE__ */ new Map();
|
|
1686
|
+
_onceListeners = /* @__PURE__ */ new Map();
|
|
1687
|
+
_setPeer(peer) {
|
|
1688
|
+
this._peer = peer;
|
|
1689
|
+
}
|
|
1690
|
+
connect() {
|
|
1691
|
+
if (!this.connected) {
|
|
1692
|
+
this.connected = true;
|
|
1693
|
+
this.disconnected = false;
|
|
1694
|
+
this._triggerLocal("connect");
|
|
1695
|
+
if (this._peer) {
|
|
1696
|
+
this._peer._triggerLocal("connect");
|
|
1697
|
+
}
|
|
1698
|
+
}
|
|
1699
|
+
}
|
|
1700
|
+
disconnect() {
|
|
1701
|
+
if (this.connected) {
|
|
1702
|
+
this.connected = false;
|
|
1703
|
+
this.disconnected = true;
|
|
1704
|
+
this._triggerLocal("disconnect");
|
|
1705
|
+
if (this._peer) {
|
|
1706
|
+
this._peer._triggerLocal("disconnect");
|
|
1707
|
+
}
|
|
1708
|
+
}
|
|
1709
|
+
}
|
|
1710
|
+
on(eventName, listener) {
|
|
1711
|
+
if (!this._listeners.has(eventName)) {
|
|
1712
|
+
this._listeners.set(eventName, []);
|
|
1713
|
+
}
|
|
1714
|
+
this._listeners.get(eventName).push(listener);
|
|
1715
|
+
return this;
|
|
1716
|
+
}
|
|
1717
|
+
once(eventName, listener) {
|
|
1718
|
+
if (!this._onceListeners.has(eventName)) {
|
|
1719
|
+
this._onceListeners.set(eventName, []);
|
|
1720
|
+
}
|
|
1721
|
+
this._onceListeners.get(eventName).push(listener);
|
|
1722
|
+
return this;
|
|
1723
|
+
}
|
|
1724
|
+
off(eventName, listener) {
|
|
1725
|
+
if (listener) {
|
|
1726
|
+
const regularListeners = this._listeners.get(eventName);
|
|
1727
|
+
if (regularListeners) {
|
|
1728
|
+
const index = regularListeners.indexOf(listener);
|
|
1729
|
+
if (index > -1) regularListeners.splice(index, 1);
|
|
1730
|
+
}
|
|
1731
|
+
const onceListeners = this._onceListeners.get(eventName);
|
|
1732
|
+
if (onceListeners) {
|
|
1733
|
+
const index = onceListeners.indexOf(listener);
|
|
1734
|
+
if (index > -1) onceListeners.splice(index, 1);
|
|
1735
|
+
}
|
|
1736
|
+
} else {
|
|
1737
|
+
this._listeners.delete(eventName);
|
|
1738
|
+
this._onceListeners.delete(eventName);
|
|
1739
|
+
}
|
|
1740
|
+
return this;
|
|
1741
|
+
}
|
|
1742
|
+
/**
|
|
1743
|
+
* Emits an event to the PEER socket (cross-socket emission).
|
|
1744
|
+
* This is the key difference from SocketMock - emit() sends to the other side,
|
|
1745
|
+
* not to local listeners.
|
|
1746
|
+
*
|
|
1747
|
+
* Implements Socket.IO acknowledgement pattern: the last argument can be a callback
|
|
1748
|
+
* that the peer will invoke to send a response back.
|
|
1749
|
+
*/
|
|
1750
|
+
emit(eventName, ...args) {
|
|
1751
|
+
if (!this._peer) {
|
|
1752
|
+
console.warn(
|
|
1753
|
+
`DirectionalSocketMock.emit: No peer connected for event ${String(eventName)}`
|
|
1754
|
+
);
|
|
1755
|
+
return false;
|
|
1756
|
+
}
|
|
1757
|
+
this._peer._triggerLocal(eventName, ...args);
|
|
1758
|
+
return true;
|
|
1759
|
+
}
|
|
1760
|
+
/**
|
|
1761
|
+
* Triggers listeners on THIS socket (local emission).
|
|
1762
|
+
* Used internally when receiving events from peer.
|
|
1763
|
+
*/
|
|
1764
|
+
_triggerLocal(eventName, ...args) {
|
|
1765
|
+
const regularListeners = this._listeners.get(eventName);
|
|
1766
|
+
if (regularListeners) {
|
|
1767
|
+
[...regularListeners].forEach((listener) => {
|
|
1768
|
+
try {
|
|
1769
|
+
listener(...args);
|
|
1770
|
+
} catch (error) {
|
|
1771
|
+
console.error(`Error in listener for ${String(eventName)}:`, error);
|
|
1772
|
+
}
|
|
1773
|
+
});
|
|
1774
|
+
}
|
|
1775
|
+
const onceListeners = this._onceListeners.get(eventName);
|
|
1776
|
+
if (onceListeners) {
|
|
1777
|
+
const listenersToCall = [...onceListeners];
|
|
1778
|
+
this._onceListeners.delete(eventName);
|
|
1779
|
+
listenersToCall.forEach((listener) => {
|
|
1780
|
+
try {
|
|
1781
|
+
listener(...args);
|
|
1782
|
+
} catch (error) {
|
|
1783
|
+
console.error(
|
|
1784
|
+
`Error in once listener for ${String(eventName)}:`,
|
|
1785
|
+
error
|
|
1786
|
+
);
|
|
1787
|
+
}
|
|
1788
|
+
});
|
|
1789
|
+
}
|
|
1790
|
+
}
|
|
1791
|
+
removeAllListeners(eventName) {
|
|
1792
|
+
if (eventName !== void 0) {
|
|
1793
|
+
this._listeners.delete(eventName);
|
|
1794
|
+
this._onceListeners.delete(eventName);
|
|
1795
|
+
} else {
|
|
1796
|
+
this._listeners.clear();
|
|
1797
|
+
this._onceListeners.clear();
|
|
1798
|
+
}
|
|
1799
|
+
return this;
|
|
1800
|
+
}
|
|
1801
|
+
listenerCount(eventName) {
|
|
1802
|
+
const regularCount = this._listeners.get(eventName)?.length || 0;
|
|
1803
|
+
const onceCount = this._onceListeners.get(eventName)?.length || 0;
|
|
1804
|
+
return regularCount + onceCount;
|
|
1805
|
+
}
|
|
1806
|
+
listeners(eventName) {
|
|
1807
|
+
const regularListeners = this._listeners.get(eventName) || [];
|
|
1808
|
+
const onceListeners = this._onceListeners.get(eventName) || [];
|
|
1809
|
+
return [...regularListeners, ...onceListeners];
|
|
1810
|
+
}
|
|
1811
|
+
eventNames() {
|
|
1812
|
+
const allEvents = /* @__PURE__ */ new Set([
|
|
1813
|
+
...this._listeners.keys(),
|
|
1814
|
+
...this._onceListeners.keys()
|
|
1815
|
+
]);
|
|
1816
|
+
return Array.from(allEvents);
|
|
1817
|
+
}
|
|
1818
|
+
}
|
|
1674
1819
|
const socketExample = () => ({
|
|
1675
1820
|
connected: false,
|
|
1676
1821
|
disconnected: true,
|
|
@@ -1702,6 +1847,7 @@ const socketExample = () => ({
|
|
|
1702
1847
|
}
|
|
1703
1848
|
});
|
|
1704
1849
|
export {
|
|
1850
|
+
DirectionalSocketMock,
|
|
1705
1851
|
IoDbNameMapping,
|
|
1706
1852
|
IoMem,
|
|
1707
1853
|
IoMulti,
|
|
@@ -1712,6 +1858,7 @@ export {
|
|
|
1712
1858
|
PeerSocketMock,
|
|
1713
1859
|
SocketMock,
|
|
1714
1860
|
calcReverseRefs,
|
|
1861
|
+
createSocketPair,
|
|
1715
1862
|
exampleIo,
|
|
1716
1863
|
exampleTestSetup,
|
|
1717
1864
|
socketExample
|