UNPKG

journaly

Version:

A simple pub-sub library project

47 lines 1.66 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PublisherSubscriber = void 0; const invalidTopic_1 = __importDefault(require("./invalidTopic")); const subject_1 = require("./subject"); class PublisherSubscriber extends subject_1.Subject { constructor() { super(); this.subscribers = {}; } subscribe(subscriber, topic) { this.checkTopic(topic); if (this.checkSubscriber(subscriber, topic) !== -1) return new Promise((_resolve, reject) => { reject(new invalidTopic_1.default(topic)); }); this.subscribers[topic].push(subscriber); return new Promise((resolve) => { resolve([]); }); } unsubscribe(subscriber, topic) { this.checkTopic(topic); const index = this.checkSubscriber(subscriber, topic); if (index === -1) { return false; } this.subscribers[topic].splice(index, 1); return true; } // eslint-disable-next-line @typescript-eslint/no-explicit-any async publish(topic, ...params) { this.checkTopic(topic); return Promise.all(this.subscribers[topic].map((subscriber) => { return subscriber(...params); })); } checkSubscriber(subscriber, topic) { const index = this.subscribers[topic].indexOf(subscriber); return index; } } exports.PublisherSubscriber = PublisherSubscriber; //# sourceMappingURL=publisherSubscriber.js.map