@penkov/tasks_queue
Version:
A lightweight PostgreSQL-backed task queue system with scheduling, retries, backoff strategies, and priority handling. Designed for efficiency and observability in modern Node.js applications.
55 lines (54 loc) • 2.28 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Injectable } from "@nestjs/common";
import { DiscoveryService, MetadataScanner } from "@nestjs/core";
import { TasksPoolsService } from "./tasks-pools.service.js";
import { TASKS_QUEUE_WORKER_METADATA, } from "./worker.decorator.js";
import { DecoratedMethodWorker } from "./decorated-method-worker.js";
let WorkersDiscoveryRegistrar = class WorkersDiscoveryRegistrar {
discoveryService;
metadataScanner;
tasksPoolsService;
constructor(discoveryService, metadataScanner, tasksPoolsService) {
this.discoveryService = discoveryService;
this.metadataScanner = metadataScanner;
this.tasksPoolsService = tasksPoolsService;
}
onModuleInit() {
this.discoveryService.getProviders().forEach((wrapper) => {
const instance = wrapper.instance;
if (instance === undefined ||
instance === null ||
typeof instance !== "object") {
return;
}
const prototype = Object.getPrototypeOf(instance);
if (prototype === undefined || prototype === null) {
return;
}
this.metadataScanner.scanFromPrototype(instance, prototype, (methodName) => {
const method = prototype[methodName];
if (typeof method !== "function") {
return;
}
const options = Reflect.getMetadata(TASKS_QUEUE_WORKER_METADATA, method);
if (options === undefined) {
return;
}
const decoratedWorker = new DecoratedMethodWorker(instance, methodName);
if (options.pool === undefined) {
this.tasksPoolsService.registerWorker(options.queue, decoratedWorker);
}
else {
this.tasksPoolsService.registerWorker(options.queue, decoratedWorker, options.pool);
}
});
});
}
};
WorkersDiscoveryRegistrar = __decorate([
Injectable(),
__metadata("design:paramtypes", [DiscoveryService,
MetadataScanner,
TasksPoolsService])
], WorkersDiscoveryRegistrar);
export { WorkersDiscoveryRegistrar };