UNPKG

@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
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 };