From 476016cbcc08840f0b444bd378b225734e4ec00e Mon Sep 17 00:00:00 2001 From: GogoVega <92022724+GogoVega@users.noreply.github.com> Date: Wed, 5 Jun 2024 12:22:22 +0200 Subject: [PATCH 1/6] Fix `node_map` does not contain as key the new id of a copied node --- .../node_modules/@node-red/editor-client/src/js/nodes.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 54c89157a..c9f78cb25 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 @@ -2406,8 +2406,9 @@ RED.nodes = (function() { // get added if (activeSubflow && /^link /.test(n.type) && n.links) { n.links = n.links.filter(function(id) { - const otherNode = node_map[id] || RED.nodes.node(id); - return (otherNode && otherNode.z === activeWorkspace) + const otherNodeInMap = Object.values(node_map).filter(function(n) { return n.id === id; }); + const otherNode = (otherNodeInMap.length ? otherNodeInMap[0] : null) || RED.nodes.node(id); + return (otherNode && otherNode.z === activeWorkspace); }); } } From 1d342a778d1c95cb115459c43eda9cc6c19a1f64 Mon Sep 17 00:00:00 2001 From: GogoVega <92022724+GogoVega@users.noreply.github.com> Date: Wed, 5 Jun 2024 14:12:35 +0200 Subject: [PATCH 2/6] Fix `new_nodes` should be used instead of `node_map` --- packages/node_modules/@node-red/editor-client/src/js/nodes.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 c9f78cb25..adc852068 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 @@ -2406,8 +2406,8 @@ RED.nodes = (function() { // get added if (activeSubflow && /^link /.test(n.type) && n.links) { n.links = n.links.filter(function(id) { - const otherNodeInMap = Object.values(node_map).filter(function(n) { return n.id === id; }); - const otherNode = (otherNodeInMap.length ? otherNodeInMap[0] : null) || RED.nodes.node(id); + const nodeImported = new_nodes.filter(function(n) { return n.id === id; }); + const otherNode = (nodeImported.length ? nodeImported[0] : null) || RED.nodes.node(id); return (otherNode && otherNode.z === activeWorkspace); }); } From d70b7ea9245cb361549dcf181a51666cf80fa2e1 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 10 Jun 2024 16:15:06 +0100 Subject: [PATCH 3/6] Fix clone of group env var properties Closes #4751 --- .../@node-red/runtime/lib/flows/Group.js | 1 + .../@node-red/runtime/lib/flows/Group_spec.js | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/packages/node_modules/@node-red/runtime/lib/flows/Group.js b/packages/node_modules/@node-red/runtime/lib/flows/Group.js index 90d93cf45..589cdf115 100644 --- a/packages/node_modules/@node-red/runtime/lib/flows/Group.js +++ b/packages/node_modules/@node-red/runtime/lib/flows/Group.js @@ -1,5 +1,6 @@ const flowUtil = require("./util"); const credentials = require("../nodes/credentials"); +const clone = require("clone"); /** * This class represents a group within the runtime. diff --git a/test/unit/@node-red/runtime/lib/flows/Group_spec.js b/test/unit/@node-red/runtime/lib/flows/Group_spec.js index b547b1c77..1b22b962d 100644 --- a/test/unit/@node-red/runtime/lib/flows/Group_spec.js +++ b/test/unit/@node-red/runtime/lib/flows/Group_spec.js @@ -16,6 +16,31 @@ describe('Group', function () { group.getSetting("NR_GROUP_NAME").should.equal("g1") group.getSetting("NR_GROUP_ID").should.equal("group1") }) + it("returns cloned env var property", async function () { + const group = new Group({ + getSetting: v => v+v + }, { + name: "g1", + id: "group1", + env: [ + { + name: 'jsonEnvVar', + type: 'json', + value: '{"a":1}' + } + ] + }) + await group.start() + const result = group.getSetting('jsonEnvVar') + result.should.have.property('a', 1) + result.a = 2 + result.b = 'hello' + + const result2 = group.getSetting('jsonEnvVar') + result2.should.have.property('a', 1) + result2.should.not.have.property('b') + + }) it("delegates to parent if not found", async function () { const group = new Group({ getSetting: v => v+v From 526b3fda9106ea86e7ba73f77dd1d0f48d7a6557 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 10 Jun 2024 16:56:49 +0100 Subject: [PATCH 4/6] Include rewired nodes when calculating Modified Flows stop list --- packages/node_modules/@node-red/runtime/lib/flows/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/node_modules/@node-red/runtime/lib/flows/index.js b/packages/node_modules/@node-red/runtime/lib/flows/index.js index c955dfe1c..6dba5b926 100644 --- a/packages/node_modules/@node-red/runtime/lib/flows/index.js +++ b/packages/node_modules/@node-red/runtime/lib/flows/index.js @@ -462,9 +462,8 @@ function stop(type,diff,muteLog,isDeploy) { if (type === 'nodes') { stopList = diff.changed.concat(diff.removed); } else if (type === 'flows') { - stopList = diff.changed.concat(diff.removed).concat(diff.linked); + stopList = diff.changed.concat(diff.removed).concat(diff.linked).concat(diff.rewired); } - events.emit("flows:stopping",{config: activeConfig, type: type, diff: diff}) // Stop the global flow object last From bb91a0893900782caf1b8dad488d7555a3f6c016 Mon Sep 17 00:00:00 2001 From: GogoVega <92022724+GogoVega@users.noreply.github.com> Date: Mon, 10 Jun 2024 18:28:30 +0200 Subject: [PATCH 5/6] Just move the block before the Id is updated --- .../@node-red/editor-client/src/js/nodes.js | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) 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 adc852068..3783c804b 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 @@ -2379,6 +2379,13 @@ RED.nodes = (function() { } else { delete n.g } + // If importing into a subflow, ensure an outbound-link doesn't get added + if (activeSubflow && /^link /.test(n.type) && n.links) { + n.links = n.links.filter(function(id) { + const otherNode = node_map[id] || RED.nodes.node(id); + return (otherNode && otherNode.z === activeWorkspace); + }); + } for (var d3 in n._def.defaults) { if (n._def.defaults.hasOwnProperty(d3)) { if (n._def.defaults[d3].type) { @@ -2402,15 +2409,6 @@ RED.nodes = (function() { } } } - // If importing into a subflow, ensure an outbound-link doesn't - // get added - if (activeSubflow && /^link /.test(n.type) && n.links) { - n.links = n.links.filter(function(id) { - const nodeImported = new_nodes.filter(function(n) { return n.id === id; }); - const otherNode = (nodeImported.length ? nodeImported[0] : null) || RED.nodes.node(id); - return (otherNode && otherNode.z === activeWorkspace); - }); - } } for (i=0;i Date: Mon, 10 Jun 2024 21:14:20 +0100 Subject: [PATCH 6/6] Bump for 3.1.10 release --- CHANGELOG.md | 23 +++++++++++++++++++ package.json | 2 +- .../@node-red/editor-api/package.json | 6 ++--- .../@node-red/editor-client/package.json | 2 +- .../node_modules/@node-red/nodes/package.json | 2 +- .../@node-red/registry/package.json | 4 ++-- .../@node-red/runtime/package.json | 6 ++--- .../node_modules/@node-red/util/package.json | 2 +- packages/node_modules/node-red/package.json | 10 ++++---- 9 files changed, 40 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 59e951261..6593ff736 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,26 @@ +#### 3.1.10: Maintenance Release + + - Include rewired nodes when calculating Modified Flows stop list (#4754) @knolleary + - Fix clone of group env var properties (#4753) @knolleary + - Fix losing links when importing a copy of links into a subflow (#4750) @GogoVega + - Ensure all CSS variables are in the output file (#3743) @bonanitech + - Fix the Sidebar Config is not refreshed after a deploy (#4734) @GogoVega + - Fix checkboxes are not updated when calling `typedInput("value", "")` (#4729) @GogoVega + - Fix panning with middle mouse button on windows 10/11 (#4716) @corentin-sodebo-voile + - Add Japanese translation for sidebar tooltip (#4727) @kazuhitoyokoi + - Translate the number of items selected in the options list (#4730) @GogoVega + - Fix a checkbox should return a Boolean value and not the string `on` (#4715) @GogoVega + - Deleting a grouped node should update the group (#4714) @GogoVega + - Change the Config Node cursor to `pointer` (#4711) @GogoVega + - Add missing tooltips to Sidebar (#4713) @GogoVega + - Allow nodes to return additional history entries in onEditSave (#4710) @knolleary + - Pass full error object in Function node and copy over cause property (#4685) @knolleary + - Replacing vm.createScript in favour of vm.Script (#4534) @patlux + - Avoid login loops when autoLogin enabled but login fails (#4684) @knolleary + - Fix undo of subflow env property edits (#4667) @knolleary + - Fix three error typos in monaco.js (#4660) @JoshuaCWebDeveloper + - docs: Add closing paragraph tag (#4664) @ZJvandeWeg + #### 3.1.9: Maintenance Release - Prevent subflow being added to itself (#4654) @knolleary diff --git a/package.json b/package.json index 26482b620..2d223b712 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-red", - "version": "3.1.9", + "version": "3.1.10", "description": "Low-code programming for event-driven applications", "homepage": "https://nodered.org", "license": "Apache-2.0", diff --git a/packages/node_modules/@node-red/editor-api/package.json b/packages/node_modules/@node-red/editor-api/package.json index 61c36c924..5a6e67d76 100644 --- a/packages/node_modules/@node-red/editor-api/package.json +++ b/packages/node_modules/@node-red/editor-api/package.json @@ -1,6 +1,6 @@ { "name": "@node-red/editor-api", - "version": "3.1.9", + "version": "3.1.10", "license": "Apache-2.0", "main": "./lib/index.js", "repository": { @@ -16,8 +16,8 @@ } ], "dependencies": { - "@node-red/util": "3.1.9", - "@node-red/editor-client": "3.1.9", + "@node-red/util": "3.1.10", + "@node-red/editor-client": "3.1.10", "bcryptjs": "2.4.3", "body-parser": "1.20.2", "clone": "2.1.2", diff --git a/packages/node_modules/@node-red/editor-client/package.json b/packages/node_modules/@node-red/editor-client/package.json index dbdb68e0d..9b73de3e7 100644 --- a/packages/node_modules/@node-red/editor-client/package.json +++ b/packages/node_modules/@node-red/editor-client/package.json @@ -1,6 +1,6 @@ { "name": "@node-red/editor-client", - "version": "3.1.9", + "version": "3.1.10", "license": "Apache-2.0", "repository": { "type": "git", diff --git a/packages/node_modules/@node-red/nodes/package.json b/packages/node_modules/@node-red/nodes/package.json index 190f5cb73..b938c794a 100644 --- a/packages/node_modules/@node-red/nodes/package.json +++ b/packages/node_modules/@node-red/nodes/package.json @@ -1,6 +1,6 @@ { "name": "@node-red/nodes", - "version": "3.1.9", + "version": "3.1.10", "license": "Apache-2.0", "repository": { "type": "git", diff --git a/packages/node_modules/@node-red/registry/package.json b/packages/node_modules/@node-red/registry/package.json index a85bc5d1a..88c4054d2 100644 --- a/packages/node_modules/@node-red/registry/package.json +++ b/packages/node_modules/@node-red/registry/package.json @@ -1,6 +1,6 @@ { "name": "@node-red/registry", - "version": "3.1.9", + "version": "3.1.10", "license": "Apache-2.0", "main": "./lib/index.js", "repository": { @@ -16,7 +16,7 @@ } ], "dependencies": { - "@node-red/util": "3.1.9", + "@node-red/util": "3.1.10", "clone": "2.1.2", "fs-extra": "11.1.1", "semver": "7.5.4", diff --git a/packages/node_modules/@node-red/runtime/package.json b/packages/node_modules/@node-red/runtime/package.json index ca38553dd..45aa9ca52 100644 --- a/packages/node_modules/@node-red/runtime/package.json +++ b/packages/node_modules/@node-red/runtime/package.json @@ -1,6 +1,6 @@ { "name": "@node-red/runtime", - "version": "3.1.9", + "version": "3.1.10", "license": "Apache-2.0", "main": "./lib/index.js", "repository": { @@ -16,8 +16,8 @@ } ], "dependencies": { - "@node-red/registry": "3.1.9", - "@node-red/util": "3.1.9", + "@node-red/registry": "3.1.10", + "@node-red/util": "3.1.10", "async-mutex": "0.4.0", "clone": "2.1.2", "express": "4.19.2", diff --git a/packages/node_modules/@node-red/util/package.json b/packages/node_modules/@node-red/util/package.json index 04316d5cc..57b9e9fed 100644 --- a/packages/node_modules/@node-red/util/package.json +++ b/packages/node_modules/@node-red/util/package.json @@ -1,6 +1,6 @@ { "name": "@node-red/util", - "version": "3.1.9", + "version": "3.1.10", "license": "Apache-2.0", "repository": { "type": "git", diff --git a/packages/node_modules/node-red/package.json b/packages/node_modules/node-red/package.json index 1d722b32a..72720f47f 100644 --- a/packages/node_modules/node-red/package.json +++ b/packages/node_modules/node-red/package.json @@ -1,6 +1,6 @@ { "name": "node-red", - "version": "3.1.9", + "version": "3.1.10", "description": "Low-code programming for event-driven applications", "homepage": "https://nodered.org", "license": "Apache-2.0", @@ -31,10 +31,10 @@ "flow" ], "dependencies": { - "@node-red/editor-api": "3.1.9", - "@node-red/runtime": "3.1.9", - "@node-red/util": "3.1.9", - "@node-red/nodes": "3.1.9", + "@node-red/editor-api": "3.1.10", + "@node-red/runtime": "3.1.10", + "@node-red/util": "3.1.10", + "@node-red/nodes": "3.1.10", "basic-auth": "2.0.1", "bcryptjs": "2.4.3", "express": "4.19.2",