EventEmitterPubSub.js 5.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.EventEmitterPubSub = void 0;
  6. var _events = _interopRequireDefault(require("events"));
  7. function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
  8. const emitter = new _events.default.EventEmitter();
  9. class Publisher {
  10. constructor(emitter) {
  11. this.emitter = emitter;
  12. }
  13. publish(channel, message) {
  14. this.emitter.emit(channel, message);
  15. }
  16. }
  17. class Subscriber extends _events.default.EventEmitter {
  18. constructor(emitter) {
  19. super();
  20. this.emitter = emitter;
  21. this.subscriptions = new Map();
  22. }
  23. subscribe(channel) {
  24. const handler = message => {
  25. this.emit('message', channel, message);
  26. };
  27. this.subscriptions.set(channel, handler);
  28. this.emitter.on(channel, handler);
  29. }
  30. unsubscribe(channel) {
  31. if (!this.subscriptions.has(channel)) {
  32. return;
  33. }
  34. this.emitter.removeListener(channel, this.subscriptions.get(channel));
  35. this.subscriptions.delete(channel);
  36. }
  37. }
  38. function createPublisher() {
  39. return new Publisher(emitter);
  40. }
  41. function createSubscriber() {
  42. // createSubscriber is called once at live query server start
  43. // to avoid max listeners warning, we should clean up the event emitter
  44. // each time this function is called
  45. emitter.removeAllListeners();
  46. return new Subscriber(emitter);
  47. }
  48. const EventEmitterPubSub = exports.EventEmitterPubSub = {
  49. createPublisher,
  50. createSubscriber
  51. };
  52. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJlbWl0dGVyIiwiZXZlbnRzIiwiRXZlbnRFbWl0dGVyIiwiUHVibGlzaGVyIiwiY29uc3RydWN0b3IiLCJwdWJsaXNoIiwiY2hhbm5lbCIsIm1lc3NhZ2UiLCJlbWl0IiwiU3Vic2NyaWJlciIsInN1YnNjcmlwdGlvbnMiLCJNYXAiLCJzdWJzY3JpYmUiLCJoYW5kbGVyIiwic2V0Iiwib24iLCJ1bnN1YnNjcmliZSIsImhhcyIsInJlbW92ZUxpc3RlbmVyIiwiZ2V0IiwiZGVsZXRlIiwiY3JlYXRlUHVibGlzaGVyIiwiY3JlYXRlU3Vic2NyaWJlciIsInJlbW92ZUFsbExpc3RlbmVycyIsIkV2ZW50RW1pdHRlclB1YlN1YiIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQWRhcHRlcnMvUHViU3ViL0V2ZW50RW1pdHRlclB1YlN1Yi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXZlbnRzIGZyb20gJ2V2ZW50cyc7XG5cbmNvbnN0IGVtaXR0ZXIgPSBuZXcgZXZlbnRzLkV2ZW50RW1pdHRlcigpO1xuXG5jbGFzcyBQdWJsaXNoZXIge1xuICBlbWl0dGVyOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoZW1pdHRlcjogYW55KSB7XG4gICAgdGhpcy5lbWl0dGVyID0gZW1pdHRlcjtcbiAgfVxuXG4gIHB1Ymxpc2goY2hhbm5lbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmVtaXR0ZXIuZW1pdChjaGFubmVsLCBtZXNzYWdlKTtcbiAgfVxufVxuXG5jbGFzcyBTdWJzY3JpYmVyIGV4dGVuZHMgZXZlbnRzLkV2ZW50RW1pdHRlciB7XG4gIGVtaXR0ZXI6IGFueTtcbiAgc3Vic2NyaXB0aW9uczogYW55O1xuXG4gIGNvbnN0cnVjdG9yKGVtaXR0ZXI6IGFueSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5lbWl0dGVyID0gZW1pdHRlcjtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBuZXcgTWFwKCk7XG4gIH1cblxuICBzdWJzY3JpYmUoY2hhbm5lbDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaGFuZGxlciA9IG1lc3NhZ2UgPT4ge1xuICAgICAgdGhpcy5lbWl0KCdtZXNzYWdlJywgY2hhbm5lbCwgbWVzc2FnZSk7XG4gICAgfTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuc2V0KGNoYW5uZWwsIGhhbmRsZXIpO1xuICAgIHRoaXMuZW1pdHRlci5vbihjaGFubmVsLCBoYW5kbGVyKTtcbiAgfVxuXG4gIHVuc3Vic2NyaWJlKGNoYW5uZWw6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zLmhhcyhjaGFubmVsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoY2hhbm5lbCwgdGhpcy5zdWJzY3JpcHRpb25zLmdldChjaGFubmVsKSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmRlbGV0ZShjaGFubmVsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVQdWJsaXNoZXIoKTogYW55IHtcbiAgcmV0dXJuIG5ldyBQdWJsaXNoZXIoZW1pdHRlcik7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN1YnNjcmliZXIoKTogYW55IHtcbiAgLy8gY3JlYXRlU3Vic2NyaWJlciBpcyBjYWxsZWQgb25jZSBhdCBsaXZlIHF1ZXJ5IHNlcnZlciBzdGFydFxuICAvLyB0byBhdm9pZCBtYXggbGlzdGVuZXJzIHdhcm5pbmcsIHdlIHNob3VsZCBjbGVhbiB1cCB0aGUgZXZlbnQgZW1pdHRlclxuICAvLyBlYWNoIHRpbWUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWRcbiAgZW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgcmV0dXJuIG5ldyBTdWJzY3JpYmVyKGVtaXR0ZXIpO1xufVxuXG5jb25zdCBFdmVudEVtaXR0ZXJQdWJTdWIgPSB7XG4gIGNyZWF0ZVB1Ymxpc2hlcixcbiAgY3JlYXRlU3Vic2NyaWJlcixcbn07XG5cbmV4cG9ydCB7IEV2ZW50RW1pdHRlclB1YlN1YiB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBNEIsU0FBQUQsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFNUIsTUFBTUcsT0FBTyxHQUFHLElBQUlDLGVBQU0sQ0FBQ0MsWUFBWSxDQUFDLENBQUM7QUFFekMsTUFBTUMsU0FBUyxDQUFDO0VBR2RDLFdBQVdBLENBQUNKLE9BQVksRUFBRTtJQUN4QixJQUFJLENBQUNBLE9BQU8sR0FBR0EsT0FBTztFQUN4QjtFQUVBSyxPQUFPQSxDQUFDQyxPQUFlLEVBQUVDLE9BQWUsRUFBUTtJQUM5QyxJQUFJLENBQUNQLE9BQU8sQ0FBQ1EsSUFBSSxDQUFDRixPQUFPLEVBQUVDLE9BQU8sQ0FBQztFQUNyQztBQUNGO0FBRUEsTUFBTUUsVUFBVSxTQUFTUixlQUFNLENBQUNDLFlBQVksQ0FBQztFQUkzQ0UsV0FBV0EsQ0FBQ0osT0FBWSxFQUFFO0lBQ3hCLEtBQUssQ0FBQyxDQUFDO0lBQ1AsSUFBSSxDQUFDQSxPQUFPLEdBQUdBLE9BQU87SUFDdEIsSUFBSSxDQUFDVSxhQUFhLEdBQUcsSUFBSUMsR0FBRyxDQUFDLENBQUM7RUFDaEM7RUFFQUMsU0FBU0EsQ0FBQ04sT0FBZSxFQUFRO0lBQy9CLE1BQU1PLE9BQU8sR0FBR04sT0FBTyxJQUFJO01BQ3pCLElBQUksQ0FBQ0MsSUFBSSxDQUFDLFNBQVMsRUFBRUYsT0FBTyxFQUFFQyxPQUFPLENBQUM7SUFDeEMsQ0FBQztJQUNELElBQUksQ0FBQ0csYUFBYSxDQUFDSSxHQUFHLENBQUNSLE9BQU8sRUFBRU8sT0FBTyxDQUFDO0lBQ3hDLElBQUksQ0FBQ2IsT0FBTyxDQUFDZSxFQUFFLENBQUNULE9BQU8sRUFBRU8sT0FBTyxDQUFDO0VBQ25DO0VBRUFHLFdBQVdBLENBQUNWLE9BQWUsRUFBUTtJQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDSSxhQUFhLENBQUNPLEdBQUcsQ0FBQ1gsT0FBTyxDQUFDLEVBQUU7TUFDcEM7SUFDRjtJQUNBLElBQUksQ0FBQ04sT0FBTyxDQUFDa0IsY0FBYyxDQUFDWixPQUFPLEVBQUUsSUFBSSxDQUFDSSxhQUFhLENBQUNTLEdBQUcsQ0FBQ2IsT0FBTyxDQUFDLENBQUM7SUFDckUsSUFBSSxDQUFDSSxhQUFhLENBQUNVLE1BQU0sQ0FBQ2QsT0FBTyxDQUFDO0VBQ3BDO0FBQ0Y7QUFFQSxTQUFTZSxlQUFlQSxDQUFBLEVBQVE7RUFDOUIsT0FBTyxJQUFJbEIsU0FBUyxDQUFDSCxPQUFPLENBQUM7QUFDL0I7QUFFQSxTQUFTc0IsZ0JBQWdCQSxDQUFBLEVBQVE7RUFDL0I7RUFDQTtFQUNBO0VBQ0F0QixPQUFPLENBQUN1QixrQkFBa0IsQ0FBQyxDQUFDO0VBQzVCLE9BQU8sSUFBSWQsVUFBVSxDQUFDVCxPQUFPLENBQUM7QUFDaEM7QUFFQSxNQUFNd0Isa0JBQWtCLEdBQUFDLE9BQUEsQ0FBQUQsa0JBQUEsR0FBRztFQUN6QkgsZUFBZTtFQUNmQztBQUNGLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=