UNPKG

@pulsecron/nestjs-pulse

Version:

The modern MongoDB-powered scheduling library pulse for NestJS

76 lines 3.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PulseExplorer = void 0; const tslib_1 = require("tslib"); const common_1 = require("@nestjs/common"); const core_1 = require("@nestjs/core"); const utils_1 = require("../utils"); const pulse_metadata_accessor_1 = require("./pulse-metadata.accessor"); const pulse_orchestrator_1 = require("./pulse.orchestrator"); let PulseExplorer = class PulseExplorer { discoveryService; metadataAccessor; metadataScanner; orchestrator; logger = new common_1.Logger('Pulse'); constructor(discoveryService, metadataAccessor, metadataScanner, orchestrator) { this.discoveryService = discoveryService; this.metadataAccessor = metadataAccessor; this.metadataScanner = metadataScanner; this.orchestrator = orchestrator; } onModuleInit() { this.explore(); } explore() { this.discoveryService .getProviders() .filter((wrapper) => { return this.metadataAccessor.isQueue(!wrapper.metatype || wrapper.inject ? wrapper?.constructor : wrapper.metatype); }) .forEach((wrapper) => { const { instance, metatype } = wrapper; const { queueName } = this.metadataAccessor.getQueueMetadata(instance.constructor || metatype); const queueToken = (0, utils_1.getQueueToken)(queueName); const queueConfigToken = (0, utils_1.getQueueConfigToken)(queueName); this.orchestrator.addQueue(queueName, queueToken, queueConfigToken); this.metadataScanner.scanFromPrototype(instance, Object.getPrototypeOf(instance), (key) => { const methodRef = instance[key]; if (this.metadataAccessor.isJobProcessor(methodRef)) { const jobProcessorType = this.metadataAccessor.getJobProcessorType(methodRef); const jobOptions = this.metadataAccessor.getJobProcessorMetadata(methodRef); const jobProcessor = this.wrapFunctionInTryCatchBlocks(methodRef, instance); this.orchestrator.addJobProcessor(queueToken, jobProcessor, jobOptions, jobProcessorType, methodRef.length === 2); } else if (this.metadataAccessor.isEventListener(methodRef)) { const listener = this.wrapFunctionInTryCatchBlocks(methodRef, instance); const eventName = this.metadataAccessor.getListenerMetadata(methodRef); const jobName = this.metadataAccessor.getJobName(methodRef); return this.orchestrator.addEventListener(queueToken, listener, eventName, jobName); } }); }); } wrapFunctionInTryCatchBlocks(methodRef, instance) { const handler = (...args) => { try { return methodRef.call(instance, ...args); } catch (error) { this.logger.error(error); throw error; } }; handler._name = methodRef.name; return handler; } }; exports.PulseExplorer = PulseExplorer; exports.PulseExplorer = PulseExplorer = tslib_1.__decorate([ (0, common_1.Injectable)(), tslib_1.__metadata("design:paramtypes", [core_1.DiscoveryService, pulse_metadata_accessor_1.PulseMetadataAccessor, core_1.MetadataScanner, pulse_orchestrator_1.PulseOrchestrator]) ], PulseExplorer); //# sourceMappingURL=pulse.explorer.js.map