adonis-resque
Version:
Resque Queue for AdonisJS v6
52 lines (51 loc) • 1.42 kB
JavaScript
// jobs.ts
import app from "@adonisjs/core/services/app";
import { fsImportAll } from "@poppinss/utils";
async function importAllJobs() {
const jobs = await fsImportAll(app.makePath("app/jobs"), {
ignoreMissingRoot: true
});
const isValidJob = (job) => {
if (!job) {
return false;
}
if (typeof job?.prototype?.perform !== "function") {
return false;
}
if (typeof job?.prototype?.enqueue !== "function") {
return false;
}
return true;
};
const Jobs = Object.values(jobs).filter(isValidJob);
return Jobs.reduce(async (initlizedAccumulator, Job) => {
let accumulator = await initlizedAccumulator;
const job = await app.container.make(Job);
if (!Array.isArray(job.plugins)) {
job.plugins = [];
}
const plugins = job.plugins.map(([plugin]) => plugin);
const pluginOptions = job.plugins.reduce((acc, [plugin, options]) => {
acc[plugin.name] = options;
return acc;
}, {});
accumulator[Job.name] = {
perform: async (...args) => {
try {
const jobResult = await job.perform.call(job, ...args);
return jobResult;
} catch (error) {
return job.handleError.call(job, error);
}
},
job,
plugins,
pluginOptions
};
return accumulator;
}, Promise.resolve({}));
}
export {
importAllJobs
};
//# sourceMappingURL=chunk-TOHLWYYX.js.map