From 59f5c4221efd6f8733bfb5ab41a0834332e9b9e4 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: Fri, 10 Feb 2023 18:33:04 +0100 Subject: [PATCH] fix(core): Handle versioned custom nodes correctly (#5313) --- packages/core/src/DirectoryLoader.ts | 6 ++++-- packages/workflow/src/NodeHelpers.ts | 16 ++++++---------- packages/workflow/src/index.ts | 1 + 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/packages/core/src/DirectoryLoader.ts b/packages/core/src/DirectoryLoader.ts index 66ba6c832..adf6888c2 100644 --- a/packages/core/src/DirectoryLoader.ts +++ b/packages/core/src/DirectoryLoader.ts @@ -1,7 +1,7 @@ import * as path from 'path'; import { readFile } from 'fs/promises'; import glob from 'fast-glob'; -import { jsonParse, LoggerProxy as Logger } from 'n8n-workflow'; +import { jsonParse, getVersionedNodeTypeAll, LoggerProxy as Logger } from 'n8n-workflow'; import type { CodexData, DocumentationLink, @@ -133,7 +133,9 @@ export abstract class DirectoryLoader { version: nodeVersion, }); - this.types.nodes.push(tempNode.description); + getVersionedNodeTypeAll(tempNode).forEach(({ description }) => { + this.types.nodes.push(description); + }); } protected loadCredentialFromFile(credentialName: string, filePath: string): void { diff --git a/packages/workflow/src/NodeHelpers.ts b/packages/workflow/src/NodeHelpers.ts index 59c02e760..bfef53b0a 100644 --- a/packages/workflow/src/NodeHelpers.ts +++ b/packages/workflow/src/NodeHelpers.ts @@ -1395,22 +1395,18 @@ export function getVersionedNodeType( object: IVersionedNodeType | INodeType, version?: number, ): INodeType { - if (isNodeTypeVersioned(object)) { - return (object as IVersionedNodeType).getNodeType(version); + if ('nodeVersions' in object) { + return object.getNodeType(version); } - return object as INodeType; + return object; } export function getVersionedNodeTypeAll(object: IVersionedNodeType | INodeType): INodeType[] { - if (isNodeTypeVersioned(object)) { - return Object.values((object as IVersionedNodeType).nodeVersions).map((element) => { + if ('nodeVersions' in object) { + return Object.values(object.nodeVersions).map((element) => { element.description.name = object.description.name; return element; }); } - return [object as INodeType]; -} - -export function isNodeTypeVersioned(object: IVersionedNodeType | INodeType): boolean { - return !!('getNodeType' in object); + return [object]; } diff --git a/packages/workflow/src/index.ts b/packages/workflow/src/index.ts index 9e8b53d55..5e60cfb42 100644 --- a/packages/workflow/src/index.ts +++ b/packages/workflow/src/index.ts @@ -11,6 +11,7 @@ export * from './MessageEventBus'; export * from './Expression'; export * from './ExpressionError'; export * from './NodeErrors'; +export * from './NodeHelpers'; export * from './RoutingNode'; export * from './Workflow'; export * from './WorkflowActivationError';