From ef726e6a5fe93a92c05bc0fb7ddd3060193bac4f Mon Sep 17 00:00:00 2001 From: Steve-Mcl Date: Thu, 11 Apr 2024 14:54:51 +0100 Subject: [PATCH 01/16] add message catalog entries for "Property In" and "Property Out" --- .../node_modules/@node-red/nodes/locales/en-US/messages.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/node_modules/@node-red/nodes/locales/en-US/messages.json b/packages/node_modules/@node-red/nodes/locales/en-US/messages.json index 560d192c1..3703d34b3 100644 --- a/packages/node_modules/@node-red/nodes/locales/en-US/messages.json +++ b/packages/node_modules/@node-red/nodes/locales/en-US/messages.json @@ -7,6 +7,8 @@ "username": "Username", "password": "Password", "property": "Property", + "propertyIn": "Property In", + "propertyOut": "Property Out", "selectNodes": "Select nodes...", "expand": "Expand" }, From 219b232cadf7fe6687cc8d0e03c4ee90039b3cba Mon Sep 17 00:00:00 2001 From: Steve-Mcl Date: Fri, 12 Apr 2024 11:01:26 +0100 Subject: [PATCH 02/16] Support Property In/Out on the JSON Node --- .../@node-red/nodes/core/parsers/70-JSON.html | 25 +++++++++++++------ .../@node-red/nodes/core/parsers/70-JSON.js | 7 +++--- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/parsers/70-JSON.html b/packages/node_modules/@node-red/nodes/core/parsers/70-JSON.html index 8c210f4ef..a3b111bee 100644 --- a/packages/node_modules/@node-red/nodes/core/parsers/70-JSON.html +++ b/packages/node_modules/@node-red/nodes/core/parsers/70-JSON.html @@ -1,5 +1,13 @@ diff --git a/packages/node_modules/@node-red/nodes/core/parsers/70-XML.js b/packages/node_modules/@node-red/nodes/core/parsers/70-XML.js index 66fa42cdc..d55634c89 100644 --- a/packages/node_modules/@node-red/nodes/core/parsers/70-XML.js +++ b/packages/node_modules/@node-red/nodes/core/parsers/70-XML.js @@ -9,6 +9,7 @@ module.exports = function(RED) { this.attrkey = n.attr; this.charkey = n.chr; this.property = n.property||"payload"; + this.propertyOut = n.propertyOut||this.property; var node = this; this.on("input", function(msg,send,done) { var value = RED.util.getMessageProperty(msg,node.property); @@ -20,7 +21,7 @@ module.exports = function(RED) { options.async = false; var builder = new xml2js.Builder(options); value = builder.buildObject(value, options); - RED.util.setMessageProperty(msg,node.property,value); + RED.util.setMessageProperty(msg,node.propertyOut,value); send(msg); done(); } @@ -33,7 +34,7 @@ module.exports = function(RED) { parseString(value, options, function (err, result) { if (err) { done(err); } else { - RED.util.setMessageProperty(msg,node.property,result); + RED.util.setMessageProperty(msg,node.propertyOut,result); send(msg); done(); } From 2621a3a628bbe7f9dd82459605d0a1ac9e7d36e3 Mon Sep 17 00:00:00 2001 From: Steve-Mcl Date: Fri, 12 Apr 2024 11:01:56 +0100 Subject: [PATCH 04/16] Update YAML node to support Property In/Out --- .../@node-red/nodes/core/parsers/70-YAML.html | 19 +++++++++++++++---- .../@node-red/nodes/core/parsers/70-YAML.js | 5 +++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/parsers/70-YAML.html b/packages/node_modules/@node-red/nodes/core/parsers/70-YAML.html index a4c0d4de9..08443a32f 100644 --- a/packages/node_modules/@node-red/nodes/core/parsers/70-YAML.html +++ b/packages/node_modules/@node-red/nodes/core/parsers/70-YAML.html @@ -1,12 +1,16 @@ @@ -17,7 +21,10 @@ defaults: { property: {value:"payload",required:true, validate: RED.validators.typedInput({ type: 'msg', allowUndefined: true }), - label:RED._("node-red:common.label.property")}, + label:RED._("node-red:common.label.propertyIn")}, + propertyOut: {value:"payload",required:true, + validate: RED.validators.typedInput({ type: 'msg', allowUndefined: true}), + label:RED._("node-red:common.label.propertyOut")}, name: {value:""} }, inputs:1, @@ -34,6 +41,10 @@ $("#node-input-property").val("payload"); } $("#node-input-property").typedInput({default:'msg',types:['msg']}); + if (this.propertyOut === undefined) { + $("#node-input-propertyOut").val("payload"); + } + $("#node-input-propertyOut").typedInput({default:'msg',types:['msg']}); } }); diff --git a/packages/node_modules/@node-red/nodes/core/parsers/70-YAML.js b/packages/node_modules/@node-red/nodes/core/parsers/70-YAML.js index 69a6bf444..bd5ab09e4 100644 --- a/packages/node_modules/@node-red/nodes/core/parsers/70-YAML.js +++ b/packages/node_modules/@node-red/nodes/core/parsers/70-YAML.js @@ -5,6 +5,7 @@ module.exports = function(RED) { function YAMLNode(n) { RED.nodes.createNode(this,n); this.property = n.property||"payload"; + this.propertyOut = n.propertyOut||this.property; var node = this; this.on("input", function(msg,send,done) { var value = RED.util.getMessageProperty(msg,node.property); @@ -12,7 +13,7 @@ module.exports = function(RED) { if (typeof value === "string") { try { value = yaml.load(value); - RED.util.setMessageProperty(msg,node.property,value); + RED.util.setMessageProperty(msg,node.propertyOut,value); send(msg); done(); } @@ -22,7 +23,7 @@ module.exports = function(RED) { if (!Buffer.isBuffer(value)) { try { value = yaml.dump(value); - RED.util.setMessageProperty(msg,node.property,value); + RED.util.setMessageProperty(msg,node.propertyOut,value); send(msg); done(); } From 4874e64387c876bb06c6a3b2e53b13112014721c Mon Sep 17 00:00:00 2001 From: Steve-Mcl Date: Fri, 12 Apr 2024 11:02:06 +0100 Subject: [PATCH 05/16] Update CSV node to support Property In/Out --- .../@node-red/nodes/core/parsers/70-CSV.html | 20 ++++- .../@node-red/nodes/core/parsers/70-CSV.js | 82 ++++++++++--------- 2 files changed, 61 insertions(+), 41 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/parsers/70-CSV.html b/packages/node_modules/@node-red/nodes/core/parsers/70-CSV.html index ddf306ba8..a4c8b6c96 100644 --- a/packages/node_modules/@node-red/nodes/core/parsers/70-CSV.html +++ b/packages/node_modules/@node-red/nodes/core/parsers/70-CSV.html @@ -1,5 +1,13 @@ @@ -57,9 +61,13 @@ action: {value:"scale"}, round: {value:false}, property: {value:"payload",required:true, - label:RED._("node-red:common.label.property"), + label:RED._("node-red:common.label.propertyIn"), validate: RED.validators.typedInput({ type: 'msg', allowBlank: true }) }, + propertyOut: {value:"payload",required:true, + validate: RED.validators.typedInput({ type: 'msg', allowUndefined: true}), + label:RED._("node-red:common.label.propertyOut")}, + name: {value:""} }, inputs: 1, @@ -77,6 +85,10 @@ $("#node-input-property").val("payload"); } $("#node-input-property").typedInput({default:'msg',types:['msg']}); + if (this.propertyOut === undefined) { + $("#node-input-propertyOut").val("payload"); + } + $("#node-input-propertyOut").typedInput({default:'msg',types:['msg']}); } }); diff --git a/packages/node_modules/@node-red/nodes/core/function/16-range.js b/packages/node_modules/@node-red/nodes/core/function/16-range.js index 61ffd53fb..efd72db9d 100644 --- a/packages/node_modules/@node-red/nodes/core/function/16-range.js +++ b/packages/node_modules/@node-red/nodes/core/function/16-range.js @@ -25,6 +25,7 @@ module.exports = function(RED) { this.minout = Number(n.minout); this.maxout = Number(n.maxout); this.property = n.property||"payload"; + this.propertyOut = n.propertyOut||this.property; var node = this; this.on('input', function (msg, send, done) { @@ -46,7 +47,7 @@ module.exports = function(RED) { } value = ((n - node.minin) / (node.maxin - node.minin) * (node.maxout - node.minout)) + node.minout; if (node.round) { value = Math.round(value); } - RED.util.setMessageProperty(msg,node.property,value); + RED.util.setMessageProperty(msg,node.propertyOut,value); send(msg); } else { node.log(RED._("range.errors.notnumber")+": "+value); } From f1e54c959b868428da469f1a88c40be56c838583 Mon Sep 17 00:00:00 2001 From: Steve-Mcl Date: Fri, 12 Apr 2024 11:02:26 +0100 Subject: [PATCH 07/16] Update http request node to support Property In/Out --- .../nodes/core/network/21-httprequest.html | 39 +++++++++--- .../nodes/core/network/21-httprequest.js | 59 ++++++++++--------- 2 files changed, 64 insertions(+), 34 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/network/21-httprequest.html b/packages/node_modules/@node-red/nodes/core/network/21-httprequest.html index 7cce956bb..5889d6aa1 100644 --- a/packages/node_modules/@node-red/nodes/core/network/21-httprequest.html +++ b/packages/node_modules/@node-red/nodes/core/network/21-httprequest.html @@ -15,6 +15,16 @@ --> @@ -299,6 +303,9 @@ name: {value:""}, filename: {value:"", validate: RED.validators.typedInput({ typeField: 'filenameType' }) }, filenameType: {value:"str"}, + propertyOut: {value:"payload",required:true, + validate: RED.validators.typedInput({ type: 'msg', allowUndefined: true}), + label:RED._("node-red:common.label.propertyOut")}, format: {value:"utf8"}, chunk: {value:false}, sendError: {value: false}, @@ -345,6 +352,10 @@ types: [{label:RED._("node-red:file.label.path"), value:"str", icon:""}, "msg", "jsonata", "env"], typeField: $("#node-input-filenameType") }); + if (this.propertyOut === undefined) { + $("#node-input-propertyOut").val("payload"); + } + $("#node-input-propertyOut").typedInput({default:'msg',types:['msg']}); if(typeof node.filenameType == 'undefined') { //existing node AND filenameType is not set - inplace (compatible) upgrade to new typedInput if(node.filename == "") { //was using empty value to denote msg.filename - set typedInput to match diff --git a/packages/node_modules/@node-red/nodes/core/storage/10-file.js b/packages/node_modules/@node-red/nodes/core/storage/10-file.js index fea8c490e..aa3976626 100644 --- a/packages/node_modules/@node-red/nodes/core/storage/10-file.js +++ b/packages/node_modules/@node-red/nodes/core/storage/10-file.js @@ -286,6 +286,7 @@ module.exports = function(RED) { RED.nodes.createNode(this,n); this.filename = n.filename; this.filenameType = n.filenameType; + this.propertyOut = n.propertyOut || "payload"; this.format = n.format; this.chunk = false; this.encoding = n.encoding || "none"; @@ -370,7 +371,7 @@ module.exports = function(RED) { m.topic = msg.topic; m.filename = msg.filename; } - m.payload = bits[i]; + RED.util.setMessageProperty(m,node.propertyOut,bits[i]); m.parts= {index:count, ch:ch, type:type, id:msg._msgid} count += 1; nodeSend(m); @@ -386,7 +387,7 @@ module.exports = function(RED) { m.topic = msg.topic; m.filename = msg.filename; } - m.payload = chunk; + RED.util.setMessageProperty(m,node.propertyOut,chunk); m.parts = {index:count, ch:ch, type:type, id:msg._msgid} count += 1; if (chunk.length < hwm) { // last chunk is smaller that high water mark = eof @@ -405,7 +406,7 @@ module.exports = function(RED) { node.error(err, msg); if (node.sendError) { var sendMessage = RED.util.cloneMessage(msg); - delete sendMessage.payload; + delete sendMessage[node.propertyOut]; sendMessage.error = err; nodeSend(sendMessage); } @@ -414,9 +415,10 @@ module.exports = function(RED) { .on('end', function() { if (node.chunk === false) { if (node.format === "utf8") { - msg.payload = decode(lines, node.encoding); + RED.util.setMessageProperty(m,node.propertyOut,decode(lines, node.encoding)); + } else { + RED.util.setMessageProperty(m,node.propertyOut,lines); } - else { msg.payload = lines; } nodeSend(msg); } else if (node.format === "lines") { @@ -428,7 +430,7 @@ module.exports = function(RED) { m.topic = msg.topic; m.filename = msg.filename; } - m.payload = spare; + RED.util.setMessageProperty(m,node.propertyOut,spare); m.parts = { index: count, count: count + 1, From ab483781a2c0853b0be253c01bc8f63cd9231a54 Mon Sep 17 00:00:00 2001 From: Steve-Mcl Date: Fri, 12 Apr 2024 11:03:19 +0100 Subject: [PATCH 09/16] update property out filed --- .../@node-red/nodes/core/function/80-template.html | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/function/80-template.html b/packages/node_modules/@node-red/nodes/core/function/80-template.html index d44199e7f..ea3fe74a8 100644 --- a/packages/node_modules/@node-red/nodes/core/function/80-template.html +++ b/packages/node_modules/@node-red/nodes/core/function/80-template.html @@ -4,11 +4,6 @@
-
- - - -
@@ -41,14 +36,18 @@
- +
- +
+ + + +