UNPKG

@21jumpclick/service-messenger

Version:

Amqp lib to send and receive messages from different applications

90 lines 3.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MetadataManager = void 0; const event_1 = require("../event"); const helpers_1 = require("./helpers"); class MetadataManager { constructor() { this.metadata = new Map(); this.paramMetadata = new Map(); } serializeParamMetadata(target, listener) { return `${target.name}->${listener}`; } static instance() { return metadataManager; } static registerEvent(event, target, listener) { MetadataManager.instance().registerEvent(event, target, listener); } static registerParam(target, listener, index, param, options) { MetadataManager.instance().registerParam(target, listener, index, param, options); } static trigger(eventName, args, options) { MetadataManager.instance().trigger(eventName, args, options); } registerParam(target, listener, index, param, options) { var _a; const key = this.serializeParamMetadata(target, listener); if (!this.paramMetadata.has(key)) { this.paramMetadata.set(key, []); } (_a = this.paramMetadata.get(key)) === null || _a === void 0 ? void 0 : _a.push({ index, param, options }); } registerEvent(event, target, listener) { var _a; if (!this.metadata.has(event)) { this.metadata.set(event, []); } (_a = this.metadata.get(event)) === null || _a === void 0 ? void 0 : _a.push({ target, listener }); } async trigger(eventName, args, options) { const eventMetadata = this.metadata.get(eventName); if (!eventMetadata) { return; } const instances = eventMetadata.map(({ target, listener }) => { var _a; const instance = event_1.Messenger.getInstance().config.di.get(target); const paramsOptions = this.paramMetadata.get(this.serializeParamMetadata(target, listener)); const params = []; if (typeof paramsOptions === 'undefined') { params.push(args); } else { for (let o of paramsOptions.sort((a, b) => a.index - b.index)) { switch (o.param) { case 'message': params.push((0, helpers_1.valueFromPath)(args, (_a = o.options) === null || _a === void 0 ? void 0 : _a.path)); break; case 'origin': params.push(options.origin); break; } } } return { instance, listener, params }; }); const events = instances .filter((meta) => !!meta.instance) .map(async ({ instance, listener, params }) => await instance[listener].bind(instance, ...params).call()); try { return await Promise.any(events); } catch (error) { if (error instanceof AggregateError) { throw error.errors.length === 1 ? error.errors[0] : error.errors; } else { throw error; } } } } exports.MetadataManager = MetadataManager; const metadataManager = new MetadataManager(); //# sourceMappingURL=metadata.js.map