@fellas/adonisjs-resque
Version:
Resque Queue for AdonisJS v6
54 lines (53 loc) • 1.4 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;
}
if (typeof job?.prototype?.then !== "function") {
return false;
}
return true;
};
const Jobs = Object.values(jobs).filter(isValidJob);
return Jobs.reduce((accumulator, Job) => {
const job = new 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;
}, {});
}
export {
importAllJobs
};
//# sourceMappingURL=chunk-NKW4PRQD.js.map