diff --git a/packages/node_modules/@node-red/editor-client/src/js/nodes.js b/packages/node_modules/@node-red/editor-client/src/js/nodes.js index 71ec8c1a5..4a114560b 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/nodes.js +++ b/packages/node_modules/@node-red/editor-client/src/js/nodes.js @@ -1627,7 +1627,9 @@ RED.nodes = (function() { if (node.type === "group") { nns = nns.concat(createExportableNodeSet(node.nodes, { exportedIds, exportedSubflows, exportedConfigNodes })); } - } else { + } else if (!node.direction) { + // node.direction indicates its a virtual subflow node (input/output/status) that cannot be + // exported so should be skipped over. var convertedSubflow = convertSubflow(node, { credentials: false }); nns.push(convertedSubflow); } diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js index 00989c01d..6f934eb8e 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js @@ -1418,7 +1418,12 @@ RED.view = (function() { if (quickAddLink?.virtualLink) { context.virtualLink = true; } - context.flow = RED.nodes.createExportableNodeSet(RED.nodes.getAllFlowNodes(quickAddLink.node)) + if (quickAddLink.node?.type === 'subflow') { + // This is a subflow 'virtual' port node. + context.flow = [] + } else { + context.flow = RED.nodes.createExportableNodeSet(RED.nodes.getAllFlowNodes(quickAddLink.node)) + } } // console.log(context) diff --git a/packages/node_modules/@node-red/nodes/core/common/20-inject.js b/packages/node_modules/@node-red/nodes/core/common/20-inject.js index 6973ebf1b..da1469494 100644 --- a/packages/node_modules/@node-red/nodes/core/common/20-inject.js +++ b/packages/node_modules/@node-red/nodes/core/common/20-inject.js @@ -118,7 +118,7 @@ module.exports = function(RED) { var exp = RED.util.prepareJSONataExpression(p.v, node); RED.util.evaluateJSONataExpression(exp, msg, (err, newValue) => { if (err) { - errors.push(err.toString()) + errors.push(RED._("inject.errors.invalid-expr",{error:err.message})) } else { RED.util.setMessageProperty(msg,property,newValue,true); } diff --git a/packages/node_modules/@node-red/registry/lib/externalModules.js b/packages/node_modules/@node-red/registry/lib/externalModules.js index b3877c75c..bec93491c 100644 --- a/packages/node_modules/@node-red/registry/lib/externalModules.js +++ b/packages/node_modules/@node-red/registry/lib/externalModules.js @@ -171,6 +171,10 @@ async function checkFlowDependencies(flowConfig) { const checkedSubflows = {}; while (nodes.length > 0) { let n = nodes.shift(); + if (n.d) { + // Ignore disabled nodes + continue + } if (subflowTypes[n.type] && !checkedSubflows[n.type]) { checkedSubflows[n.type] = true; nodes = nodes.concat(subflowTypes[n.type].flow)