@sidequest/engine
Version:
@sidequest/engine is the core engine of SideQuest, a distributed background job processing system for Node.js and TypeScript.
68 lines (63 loc) • 2.97 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var core = require('@sidequest/core');
var _import = require('../utils/import.cjs');
/**
* Runs a job by dynamically importing its script and executing the specified class.
* @param jobData The job data containing script and class information
* @param config The non-nullable engine configuration.
* @returns A promise resolving to the job result.
*/
async function run({ jobData, config }) {
await injectSidequestConfig(config);
let script = {};
try {
core.logger("Runner").debug(`Importing job script "${jobData.script}"`);
script = (await import(jobData.script));
core.logger("Runner").debug(`Successfully imported job script "${jobData.script}"`);
}
catch (error) {
const errorMessage = `Failed to import job script "${jobData.script}": ${error instanceof Error ? error.message : String(error)}`;
core.logger("Runner").error(errorMessage);
const errorData = core.toErrorData(error);
return { __is_job_transition__: true, type: "failed", error: errorData };
}
const JobClass = script[jobData.class] ?? script.default;
if (!JobClass || typeof JobClass !== "function") {
const error = `Invalid job class: ${jobData.class}`;
core.logger("Runner").error(error);
const errorData = core.toErrorData(new Error(error));
return { __is_job_transition__: true, type: "failed", error: errorData };
}
const job = new JobClass(jobData.constructor_args);
job.injectJobData(jobData);
core.logger("Runner").debug(`Executing job class "${jobData.class}" with args:`, jobData.args);
return job.perform(...jobData.args);
}
/**
* Injects the provided Sidequest engine configuration into the job script.
*
* Dynamically imports the `Sidequest` module and applies the configuration,
* ensuring migrations are skipped. Logs the process and handles errors gracefully,
* allowing execution to proceed even if configuration injection fails.
*
* @param config - The engine configuration object to inject into Sidequest.
* @returns A promise that resolves to `true` if the configuration was injected successfully,
* or `false` if an error occurred.
*/
async function injectSidequestConfig(config) {
try {
core.logger("Runner").debug("Injecting Sidequest config into job script");
const { Sidequest } = await _import.importSidequest();
await Sidequest.configure({ ...config, skipMigration: true });
core.logger("Runner").debug("Successfully injected Sidequest config");
return true;
}
catch (error) {
core.logger("Runner").warn(`Failed to inject Sidequest config: ${error instanceof Error ? error.message : String(error)}. Proceeding anyway.`);
return false;
}
}
exports.default = run;
exports.injectSidequestConfig = injectSidequestConfig;
//# sourceMappingURL=runner.cjs.map