UNPKG

@rudderstack/workflow-engine

Version:
61 lines 2.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.chainExecutor = exports.DefaultWorkflowExecutor = void 0; const common_1 = require("../common"); const errors_1 = require("../errors"); class DefaultWorkflowExecutor { constructor(options) { this.options = options ?? {}; } static handleError(error, workflowName, stepName) { throw new errors_1.WorkflowExecutionError(error.message, errors_1.ErrorUtils.getErrorStatus(error), workflowName, { stepName, childStepName: error.childStepName, error: error.error, }); } async execute(engine, input, bindings) { const context = {}; const executionBindings = { ...engine.getBindings(), ...bindings, outputs: {}, context, setContext: (key, value) => { context[key] = value; }, originalInput: input, }; let prevStepOutput; let currStepInput = input; const stepExecutors = engine.getStepExecutors(); for (const stepExecutor of stepExecutors) { const step = stepExecutor.getStep(); try { // eslint-disable-next-line no-await-in-loop const { skipped, output } = await stepExecutor.execute(currStepInput, executionBindings); if (!skipped) { prevStepOutput = output; executionBindings.outputs[step.name] = output; if (this.options.chainOutputs) { currStepInput = prevStepOutput; } if (step.onComplete === common_1.StepExitAction.Return) { break; } } } catch (error) { common_1.logger.error(`step: ${step.name} failed with error:`, error); if (step.onError !== common_1.StepExitAction.Continue) { DefaultWorkflowExecutor.handleError(error, engine.getName(), step.name); } } } return { output: prevStepOutput, outputs: executionBindings.outputs }; } } exports.DefaultWorkflowExecutor = DefaultWorkflowExecutor; DefaultWorkflowExecutor.INSTANCE = new DefaultWorkflowExecutor(); exports.chainExecutor = new DefaultWorkflowExecutor({ chainOutputs: true }); //# sourceMappingURL=default_executor.js.map