UNPKG

@jsonjoy.com/reactive-rpc

Version:

Reactive-RPC is a library for building reactive APIs over WebSocket, HTTP, and other RPCs.

44 lines 1.49 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PubsubService = void 0; const rxjs_1 = require("rxjs"); class PubsubService { constructor() { this.observers = new Map(); } listen$(channel) { return new rxjs_1.Observable((observer) => { if (!this.observers.has(channel)) this.observers.set(channel, []); const observers = this.observers.get(channel); observers.push(observer); return () => { const observers = this.observers.get(channel); if (!observers) return; const index = observers.findIndex((o) => o === observer); if (index > -1) observers.splice(index, 1); if (!observers.length) { this.observers.delete(channel); } }; }); } async publish(channel, message) { await new Promise((resolve) => setImmediate(resolve)); const observers = this.observers.get(channel); if (!observers) return; for (const observer of observers) observer.next(message); } stats() { return { channels: this.observers.size, observers: [...this.observers.values()].reduce((acc, v) => acc + v.length, 0), }; } } exports.PubsubService = PubsubService; //# sourceMappingURL=PubSubService.js.map