From 1e5feb195d50054939f85c9e1b5a32885c579901 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=A4=95=E0=A4=BE=E0=A4=B0=E0=A4=A4=E0=A5=8B=E0=A4=AB?= =?UTF-8?q?=E0=A5=8D=E0=A4=AB=E0=A5=87=E0=A4=B2=E0=A4=B8=E0=A5=8D=E0=A4=95?= =?UTF-8?q?=E0=A5=8D=E0=A4=B0=E0=A4=BF=E0=A4=AA=E0=A5=8D=E0=A4=9F=E2=84=A2?= Date: Wed, 19 Feb 2025 16:56:44 +0100 Subject: [PATCH] fix(core): Handle connections for missing nodes in a workflow (#13362) --- packages/workflow/src/Workflow.ts | 3 +++ packages/workflow/test/Workflow.test.ts | 27 ++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/workflow/src/Workflow.ts b/packages/workflow/src/Workflow.ts index 10e0de094d..f9b70bb29b 100644 --- a/packages/workflow/src/Workflow.ts +++ b/packages/workflow/src/Workflow.ts @@ -508,6 +508,9 @@ export class Workflow { return; } + // Ignore connections for nodes that don't exist in this workflow + if (!(connection.node in this.nodes)) return; + addNodes = this.getHighestNode(connection.node, undefined, checkedNodes); if (addNodes.length === 0) { diff --git a/packages/workflow/test/Workflow.test.ts b/packages/workflow/test/Workflow.test.ts index f7d72cfa66..a87d3479ae 100644 --- a/packages/workflow/test/Workflow.test.ts +++ b/packages/workflow/test/Workflow.test.ts @@ -2201,7 +2201,7 @@ describe('Workflow', () => { expect(result).toEqual([targetNode.name]); }); - test('should handle connections to nodes not defined in workflow', () => { + test('should handle connections to nodes that are not defined in the workflow', () => { const node1 = createNode('Node1'); const targetNode = createNode('TargetNode'); @@ -2226,6 +2226,31 @@ describe('Workflow', () => { expect(result).toEqual([targetNode.name]); }); + + test('should handle connections from nodes that are not defined in the workflow', () => { + const node1 = createNode('Node1'); + const targetNode = createNode('TargetNode'); + + const connections = { + Node1: { + main: [[{ node: 'TargetNode', type: NodeConnectionType.Main, index: 0 }]], + }, + NonExistentNode: { + main: [[{ node: 'TargetNode', type: NodeConnectionType.Main, index: 0 }]], + }, + }; + + const workflow = new Workflow({ + id: 'test', + nodes: [node1, targetNode], + connections, + active: false, + nodeTypes, + }); + + const result = workflow.getHighestNode(targetNode.name); + expect(result).toEqual([node1.name]); + }); }); describe('getParentMainInputNode', () => {