@pulsecron/nestjs-pulse
Version:
The modern MongoDB-powered scheduling library pulse for NestJS
76 lines • 3.53 kB
JavaScript
"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