durabull
Version:
A durable workflow engine built on top of BullMQ and Redis
59 lines (58 loc) • 1.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Durabull = void 0;
let activeInstance = null;
class Durabull {
constructor(config) {
this.workflowRegistry = new Map();
this.activityRegistry = new Map();
this.config = {
...config,
queues: {
workflow: config.queues?.workflow || 'durabull:workflow',
activity: config.queues?.activity || 'durabull:activity',
},
serializer: config.serializer || 'json',
pruneAge: config.pruneAge || '30 days',
logger: config.logger,
lifecycleHooks: config.lifecycleHooks,
queueRouter: config.queueRouter,
};
}
getConfig() {
return this.config;
}
registerWorkflow(name, WorkflowClass) {
this.workflowRegistry.set(name, WorkflowClass);
}
resolveWorkflow(name) {
return this.workflowRegistry.get(name) || null;
}
registerActivity(name, ActivityClass) {
this.activityRegistry.set(name, ActivityClass);
}
resolveActivity(name) {
return this.activityRegistry.get(name) || null;
}
getQueues(workflowName, context) {
if (this.config.queueRouter && workflowName) {
const routed = this.config.queueRouter(workflowName, context);
return {
workflow: routed.workflow || this.config.queues.workflow,
activity: routed.activity || this.config.queues.activity,
};
}
return {
workflow: this.config.queues.workflow,
activity: this.config.queues.activity,
};
}
setActive() {
// eslint-disable-next-line @typescript-eslint/no-this-alias
activeInstance = this;
}
static getActive() {
return activeInstance;
}
}
exports.Durabull = Durabull;