diff --git a/packages/workflow/src/workflow.ts b/packages/workflow/src/workflow.ts index 2bf6a70197..906c0d0997 100644 --- a/packages/workflow/src/workflow.ts +++ b/packages/workflow/src/workflow.ts @@ -900,13 +900,16 @@ export class Workflow { // Check if there are any trigger or poll nodes and then return the first one let node: INode; let nodeType: INodeType; - for (const nodeName of nodeNames) { - node = this.nodes[nodeName]; - if (nodeNames.length === 1 && !node.disabled) { + if (nodeNames.length === 1) { + node = this.nodes[nodeNames[0]]; + if (node && !node.disabled) { return node; } + } + for (const nodeName of nodeNames) { + node = this.nodes[nodeName]; nodeType = this.nodeTypes.getByNameAndVersion(node.type, node.typeVersion); // TODO: Identify later differently diff --git a/packages/workflow/test/workflow.test.ts b/packages/workflow/test/workflow.test.ts index 9c611a846c..0c37c3a02f 100644 --- a/packages/workflow/test/workflow.test.ts +++ b/packages/workflow/test/workflow.test.ts @@ -2586,6 +2586,25 @@ describe('Workflow', () => { expect(workflow.getStartNode()).toBeUndefined(); }); + + test('returns the single node when only one non-disabled node exists', () => { + const singleNode = { + name: 'SingleNode', + type: 'test.set', + typeVersion: 1, + id: 'uuid-single', + position: [0, 0], + parameters: {}, + } as INode; + const workflow = new Workflow({ + nodes: [singleNode], + connections: {}, + active: false, + nodeTypes, + }); + + expect(workflow.getStartNode()).toBe(singleNode); + }); }); describe('getNode', () => {