import BaseModule from "./BaseModule"; import Job from "./Job"; import JobQueue from "./JobQueue"; import { Log } from "./LogBook"; import { JobOptions } from "./types/JobOptions"; import { Jobs, Modules } from "./types/Modules"; export default class JobContext { public readonly job: Job; public readonly jobQueue: JobQueue; public constructor(job: Job) { this.job = job; this.jobQueue = JobQueue.getPrimaryInstance(); } /** * Log a message in the context of the current job, which automatically sets the category and data * * @param log - Log message or object */ public log(log: string | Omit) { return this.job.log(log); } /** * executeJob - Execute a job * * @param moduleName - Module name * @param jobName - Job name * @param params - Params */ public async executeJob< ModuleNameType extends keyof Jobs & keyof Modules, JobNameType extends keyof Jobs[ModuleNameType] & keyof Omit, PayloadType extends "payload" extends keyof Jobs[ModuleNameType][JobNameType] ? Jobs[ModuleNameType][JobNameType]["payload"] extends undefined ? Record : Jobs[ModuleNameType][JobNameType]["payload"] : Record, ReturnType = "returns" extends keyof Jobs[ModuleNameType][JobNameType] ? Jobs[ModuleNameType][JobNameType]["returns"] : never >( moduleName: ModuleNameType, jobName: JobNameType, payload: PayloadType, options?: JobOptions ): Promise { return new Job( jobName.toString(), moduleName, payload, options ).execute(); } }