chore(orchestration): prevent throwing on already defined workflow (#5337)

**What**
At the moment, when importing something from medusa entry point, if two medusa packages are installed because of a plugin, the evaluation of the import can end up throwing that a workflow is already defined. To prevent that from happening, we can just not throw if it is already defined and just return prematurely and make it idempotent.
This commit is contained in:
Adrien de Peretti
2023-10-18 11:47:22 +02:00
committed by GitHub
parent a1807aea83
commit e47461d95c
6 changed files with 120 additions and 4 deletions

View File

@@ -75,12 +75,18 @@ export class WorkflowManager {
requiredModules?: Set<string>,
optionalModules?: Set<string>
) {
if (WorkflowManager.workflows.has(workflowId)) {
throw new Error(`Workflow with id "${workflowId}" is already defined.`)
}
const finalFlow = flow instanceof OrchestratorBuilder ? flow.build() : flow
if (WorkflowManager.workflows.has(workflowId)) {
const areStepsEqual =
JSON.stringify(finalFlow) ===
JSON.stringify(WorkflowManager.workflows.get(workflowId)!.flow_)
if (!areStepsEqual) {
throw new Error(`Workflow with id "${workflowId}" and step definition already exists.`)
}
}
WorkflowManager.workflows.set(workflowId, {
id: workflowId,
flow_: finalFlow,