( originalContent: string, newSteps: FlowNodeData[], )
| 7 | * name / goal / parameters / config and other top-level fields. |
| 8 | */ |
| 9 | export function updateModuleWorkflowYaml( |
| 10 | originalContent: string, |
| 11 | newSteps: FlowNodeData[], |
| 12 | ): { yaml: string; workflow: Workflow | null } { |
| 13 | let parsed: Workflow | null = null; |
| 14 | try { |
| 15 | parsed = yaml.load(originalContent) as Workflow | null; |
| 16 | } catch { |
| 17 | parsed = null; |
| 18 | } |
| 19 | |
| 20 | if (!parsed || typeof parsed !== 'object') { |
| 21 | parsed = { |
| 22 | name: 'module', |
| 23 | workflow: [], |
| 24 | }; |
| 25 | } |
| 26 | |
| 27 | const workflow: WorkflowStep[] = newSteps.map((s) => flowNodeDataToWorkflowStep(s)); |
| 28 | |
| 29 | const nextPlan: Workflow = { |
| 30 | ...parsed, |
| 31 | workflow, |
| 32 | }; |
| 33 | |
| 34 | const yamlText = yaml.dump(nextPlan, { |
| 35 | indent: 2, |
| 36 | lineWidth: 120, |
| 37 | noRefs: true, |
| 38 | sortKeys: false, |
| 39 | }); |
| 40 | |
| 41 | return { yaml: yamlText, workflow: nextPlan }; |
| 42 | } |
| 43 |
no test coverage detected