@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
JavaScript
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
;