journaly
Version:
A simple pub-sub library project
51 lines • 1.71 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.PublisherSubscriberWithMemory = void 0;
const publisherSubscriber_1 = require("./publisherSubscriber");
class PublisherSubscriberWithMemory extends publisherSubscriber_1.PublisherSubscriber {
constructor() {
super();
this.oldData = {};
}
getTopics() {
const topics = [];
let newProps = Object.getOwnPropertyNames(this.oldData);
for (const prop of newProps) {
if (!topics.includes(prop))
topics.push(prop);
}
newProps = Object.getOwnPropertyNames(this.subscribers);
for (const prop of newProps) {
if (!topics.includes(prop))
topics.push(prop);
}
return topics;
}
async subscribe(subscriber, topic) {
try {
await super.subscribe(subscriber, topic);
return Promise.all(this.oldData[topic].map((params) => subscriber(...params)));
}
catch (error) {
return new Promise((resolve) => {
resolve([]);
});
}
}
async publish(topic, ...params) {
this.checkTopic(topic);
const promises = Promise.all(this.subscribers[topic].map((subscriber) => {
return subscriber(...params);
}));
this.oldData[topic].push(params);
return promises;
}
checkTopic(topic) {
if (!this.subscribers[topic]) {
this.subscribers[topic] = [];
this.oldData[topic] = [];
}
}
}
exports.PublisherSubscriberWithMemory = PublisherSubscriberWithMemory;
//# sourceMappingURL=publisherSubscriberWithMemory.js.map
;