UNPKG

@dexare/cron

Version:

A Dexare module that manages cron jobs

70 lines (69 loc) 2.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const dexare_1 = require("dexare"); const path_1 = require("path"); const cron_1 = require("cron"); class CronModule extends dexare_1.DexareModule { constructor(client) { super(client, { name: 'cron', description: 'Cron job manager' }); this.crons = new Map(); this.filePath = __filename; } load() { if (this.client.config.cron?.loadFolder) this.registerFromFolder(this.client.config.cron.loadFolder); } unload() { for (const name in this.crons) { const job = this.crons.get(name); job.stop(); this.crons.delete(name); } } /** * Registers cron jobs from a folder. * @param path The path to register from. */ registerFromFolder(path) { return dexare_1.Util.iterateFolder(path, async (file) => this.register(require(path_1.join(process.cwd(), file))), '.cron.js'); } /** * Registers a cron job. * @param opts The options for the new cron job */ register(opts) { const jobOpts = { cronTime: opts.cronTime, onTick: this._wrapFn(opts.onTick), onComplete: opts.onComplete ? this._wrapFn(opts.onComplete) : opts.onComplete, start: opts.start, timeZone: opts.timeZone, runOnInit: opts.runOnInit, utcOffset: opts.utcOffset, unrefTimeout: opts.unrefTimeout }; const job = new cron_1.CronJob(jobOpts); this.crons.set(opts.name, job); this.logger.log(`Registered cron job ${opts.name}.`); return job; } /** * Unregisters a cron job. * @param job The job name to unregister */ unregister(job) { this.crons.delete(job); this.logger.log(`Unregistered cron job ${job}.`); } _wrapFn(fn) { const _this = this; return function () { // @ts-ignore return fn(_this.client, this); }; } } exports.default = CronModule;