UNPKG

@vpriem/kafka-broker

Version:

Easily compose and manage your kafka resources in one place

47 lines 1.99 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SubscriptionContainer = void 0; const events_1 = __importDefault(require("events")); const Subscription_1 = require("./Subscription"); const BrokerError_1 = require("./BrokerError"); class SubscriptionContainer extends events_1.default { kafka; publisher; config; registry; subscriptions = {}; constructor(kafka, publisher, config, registry) { super({ captureRejections: true }); this.kafka = kafka; this.publisher = publisher; this.config = config; this.registry = registry; } create(name) { if (typeof this.subscriptions[name] === 'undefined') { const subscriptionConfig = this.config[name]; if (typeof subscriptionConfig === 'undefined') { throw new BrokerError_1.BrokerError(`Unknown subscription "${name}"`); } const { kafka: kafkaName, consumer: consumerConfig } = subscriptionConfig; const consumer = this.kafka.consumer(kafkaName, consumerConfig); this.subscriptions[name] = new Subscription_1.Subscription(consumer, this.publisher, subscriptionConfig, this.registry).on('error', (error) => { this.emit('error', error); }); Object.values(consumer.events).forEach((eventName) => { consumer.on(eventName, (event) => this.emit(eventName, event)); }); } return this.subscriptions[name]; } async disconnect() { const { subscriptions } = this; this.subscriptions = {}; await Promise.all(Object.values(subscriptions).map((subscription) => subscription.disconnect())); } } exports.SubscriptionContainer = SubscriptionContainer; //# sourceMappingURL=SubscriptionContainer.js.map