diff --git a/packages/cli/config/index.ts b/packages/cli/config/index.ts index e654b50d0a..5cbacddf85 100644 --- a/packages/cli/config/index.ts +++ b/packages/cli/config/index.ts @@ -413,6 +413,30 @@ const config = convict({ }, nodes: { + include: { + doc: 'Nodes to load', + format: function check(rawValue) { + if (rawValue === '') { + return; + } + try { + const values = JSON.parse(rawValue); + if (!Array.isArray(values)) { + throw new Error(); + } + + for (const value of values) { + if (typeof value !== 'string') { + throw new Error(); + } + } + } catch (error) { + throw new TypeError(`The Nodes to include is not a valid Array of strings.`); + } + }, + default: undefined, + env: 'NODES_INCLUDE', + }, exclude: { doc: 'Nodes not to load', format: function check(rawValue) { diff --git a/packages/cli/src/LoadNodesAndCredentials.ts b/packages/cli/src/LoadNodesAndCredentials.ts index 6e268b70fc..5399b24932 100644 --- a/packages/cli/src/LoadNodesAndCredentials.ts +++ b/packages/cli/src/LoadNodesAndCredentials.ts @@ -33,6 +33,7 @@ class LoadNodesAndCredentialsClass { } = {}; excludeNodes: string[] | undefined = undefined; + includeNodes: string[] | undefined = undefined; nodeModulesPath = ''; @@ -63,6 +64,7 @@ class LoadNodesAndCredentialsClass { } this.excludeNodes = config.get('nodes.exclude'); + this.includeNodes = config.get('nodes.include'); // Get all the installed packages which contain n8n nodes const packages = await this.getN8nNodePackages(); @@ -175,6 +177,10 @@ class LoadNodesAndCredentialsClass { tempNode.description.icon = 'file:' + path.join(path.dirname(filePath), tempNode.description.icon.substr(5)); } + if (this.includeNodes !== undefined && !this.includeNodes.includes(fullNodeName)) { + return; + } + // Check if the node should be skiped if (this.excludeNodes !== undefined && this.excludeNodes.includes(fullNodeName)) { return;