UNPKG

peepee

Version:

Visual Programming Language Where You Connect Ports Of One EventEmitter to Ports Of Another EventEmitter

53 lines (41 loc) 1.52 kB
import { EventEmitter } from "events"; export default class ConnectionAgent extends EventEmitter { constructor({ id, fromEmitter, toEmitter, mapping }) { super(); this.id = id; this.fromEmitter = fromEmitter; this.toEmitter = toEmitter; this.mapping = mapping; // [ { fromEvent, toEvent, transformer } ] this.connections = new Map(); } async start() { for (const { fromEvent, toEvent, transformer } of this.mapping) { this.#connect(fromEvent, toEvent, transformer); } console.log('AGENT START', this.constructor.name, this.mapping, this.fromEmitter, this.toEmitter,) } async stop() { for (const { fromEvent, toEvent, transformer } of this.mapping) { this.#disconnect(fromEvent, toEvent); } } // Private Helpers #connect(fromEvent, toEvent, transformer = (data) => data) { const handler = (data) => { const transformedData = transformer(data); console.log(`${this.constructor.name} sending transformedData`, {fromEvent, toEvent, transformedData}) this.toEmitter.emit(toEvent, transformedData); }; console.log('transformedData', this.fromEmitter, fromEvent ) this.fromEmitter.on(fromEvent, handler); this.connections.set(`${fromEvent}->${toEvent}`, handler); } #disconnect(fromEvent, toEvent) { const key = `${fromEvent}->${toEvent}`; const handler = this.connections.get(key); if (handler) { this.fromEmitter.off(fromEvent, handler); this.connections.delete(key); } } }