journaly
Version:
A simple pub-sub library project
47 lines • 1.66 kB
JavaScript
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
;