fastify-cron
Version:
Run cron jobs alongside your Fastify server
50 lines (49 loc) • 1.77 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const cron_1 = require("cron");
const fastify_plugin_1 = __importDefault(require("fastify-plugin"));
const plugin = async function fastifyCronPlugin(server, opts) {
const decorator = {
jobs: [],
createJob: function createJob(params) {
const innerParams = {
...params,
onTick: () => params.onTick(server),
onComplete: () => typeof params.onComplete === 'function'
? () => params.onComplete(server)
: undefined
};
const job = Object.assign(new cron_1.CronJob(innerParams), {
name: params.name
});
if (params.startWhenReady === true) {
server.ready(() => job.start());
}
decorator.jobs.push(job);
return job;
},
getJobByName: function getJobByName(name) {
return decorator.jobs.find(j => j.name === name);
},
startAllJobs: function startAllJobs() {
decorator.jobs.forEach(job => job.start());
},
stopAllJobs: function stopAllJobs() {
decorator.jobs.forEach(job => job.stop());
}
};
for (const params of opts.jobs || []) {
if (params) {
decorator.createJob(params);
}
}
server.decorate('cron', decorator);
server.addHook('onClose', () => decorator.stopAllJobs());
};
exports.default = (0, fastify_plugin_1.default)(plugin, {
name: 'fastify-cron',
fastify: '4.x || 5.x'
});