@rewaa/event-broker
Version:
A broker for all the events that Rewaa will ever produce or consume
133 lines • 4.76 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Emitter = void 0;
const emitter_sqns_1 = require("./emitter.sqns");
const utils_1 = require("../utils/utils");
const eventemitter2_1 = require("eventemitter2");
class Emitter {
constructor(options) {
var _a;
this.localEmitter = new eventemitter2_1.EventEmitter2();
this.options = options;
this.logger = (_a = options.logger) !== null && _a !== void 0 ? _a : new utils_1.Logger(!!this.options.log);
this.emitter = new emitter_sqns_1.SqnsEmitter(this.logger, this.options);
}
async bootstrap(topics) {
if (this.options.useExternalBroker) {
await this.emitter.bootstrap(topics);
}
}
async localEmitAsync(eventName, options, payload) {
var _a;
try {
await this.localEmitter.emitAsync(eventName, payload);
}
catch (error) {
this.logger.error({
msg: `Error emitting event ${eventName} with Emitter2`,
eventName,
options,
payload,
error,
});
if ((_a = this.options.mockEmitter) === null || _a === void 0 ? void 0 : _a.throwErrors) {
throw error;
}
}
}
async localEmitAsyncBatch(eventName, options, payloads) {
var _a;
try {
const emitPromises = (payloads === null || payloads === void 0 ? void 0 : payloads.map((payload) => this.localEmitter.emitAsync(eventName, payload))) || [];
await Promise.all(emitPromises);
}
catch (error) {
this.logger.error({
msg: `Error emitting event ${eventName} with Emitter2`,
eventName,
options,
payloads,
error,
});
if ((_a = this.options.mockEmitter) === null || _a === void 0 ? void 0 : _a.throwErrors) {
throw error;
}
}
}
async emit(eventName, options, payload) {
if (this.options.useExternalBroker) {
return await this.emitter.emit(eventName, options, payload);
}
else if (this.options.mockEmitter) {
await this.localEmitAsync(eventName, options, payload);
}
}
async emitBatch(eventName, messages, options) {
if (this.options.useExternalBroker) {
return await this.emitter.emitBatch(eventName, messages, options);
}
else if (this.options.mockEmitter) {
await this.localEmitAsyncBatch(eventName, options, messages);
}
return [];
}
emitLocal(eventName, ...args) {
return this.localEmitter.emit(eventName, ...args);
}
on(eventName, listener, options) {
if (this.options.useExternalBroker && !(options === null || options === void 0 ? void 0 : options.useLocal)) {
this.emitter.on(eventName, listener, options);
return;
}
this.localEmitter.on(eventName, listener);
}
removeListener(eventName, listener) {
if (this.options.useExternalBroker) {
this.emitter.removeListener(eventName, listener);
return;
}
this.localEmitter.removeListener(eventName, listener);
}
removeAllListener() {
if (this.options.useExternalBroker) {
this.emitter.removeAllListener();
return;
}
this.localEmitter.removeAllListeners();
}
async processMessage(message, options) {
return await this.emitter.processMessage(message, options);
}
async processMessages(messages, options) {
return await this.emitter.processMessages(messages, options);
}
async startConsumers() {
await this.emitter.startConsumers();
}
getTopicReference(topic) {
return this.emitter.getTopicReference(topic);
}
getInternalTopicName(topic) {
return this.emitter.getInternalTopicName(topic);
}
getQueues() {
return this.emitter.getQueues();
}
getQueueReference(topic) {
return this.emitter.getQueueReference(topic);
}
getInternalQueueName(topic) {
return this.emitter.getInternalQueueName(topic);
}
getEmitPayload(eventName, options, ...args) {
return this.emitter.getEmitPayload(eventName, options, ...args);
}
getBatchEmitPayload(eventName, messages, options) {
return this.emitter.getBatchEmitPayload(eventName, messages, options);
}
parseDataFromMessage(receivedMessage) {
return this.emitter.parseDataFromMessage(receivedMessage);
}
}
exports.Emitter = Emitter;
//# sourceMappingURL=emitter.js.map