class MessagePort { constructor() { this._otherPort = null; this._listeners = new Set(); this.onmessage = null; } _link(port) { this._otherPort = port; } _dispatchMessage(data) { const event = { data }; queueMicrotask(() => { if (typeof this.onmessage === 'function') { this.onmessage(event); } for (const listener of this._listeners) { listener(event); } }); } postMessage(data) { if (!this._otherPort) { throw new Error("Port is not connected."); } const clonedData = JSON.parse(JSON.stringify(data)); this._otherPort._dispatchMessage(clonedData); } addEventListener(eventName, listener) { if (eventName === 'message' && typeof listener === 'function') { this._listeners.add(listener); } } removeEventListener(eventName, listener) { if (eventName === 'message') { this._listeners.delete(listener); } } start() { } close() { } } class MessageChannel { constructor() { this.port1 = new MessagePort(); this.port2 = new MessagePort(); this.port1._link(this.port2); this.port2._link(this.port1); } } module.exports = { MessageChannel, };