diff --git a/packages/node_modules/@node-red/nodes/core/storage/10-file.html b/packages/node_modules/@node-red/nodes/core/storage/10-file.html index fa3fdccc9..ec694471d 100755 --- a/packages/node_modules/@node-red/nodes/core/storage/10-file.html +++ b/packages/node_modules/@node-red/nodes/core/storage/10-file.html @@ -211,7 +211,8 @@ icon: "file-out.svg", label: function() { var fn = this.filename; - if(this.filenameType != "str") { fn = ""; } + if(this.filenameType != "str" && this.filenameType != "env" ) { fn = ""; } + if(this.filenameType === "env") { fn = "env."+fn; } if (this.overwriteFile === "delete") { return this.name||this._("file.label.deletelabel",{file:fn}); } else { @@ -239,11 +240,25 @@ types:[{ value: "str", label:"", icon:"red/images/typedInput/az.svg"}, "msg", "jsonata", "env"], typeField: $("#node-input-filenameType") }); - if(!node.filename && !node.filenameType) { - node.filename = "filename" - node.filenameType = "msg" - $("#node-input-filename").typedInput("type", node.filenameType); - $("#node-input-filename").typedInput("value", node.filename); + 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 + node.filename = "filename"; + node.filenameType = "msg"; + $("#node-input-filename").typedInput("type", node.filenameType); + $("#node-input-filename").typedInput("value", node.filename); + } else if(/^\${[^}]+}$/.test(node.filename)) { //was using an ${ENV_VAR} + node.filenameType = "env"; + node.filename = node.filename.replace(/\${([^}]+)}/g, function(match, name) { + return (name === undefined)?"":name; + }); + $("#node-input-filename").typedInput("type", node.filenameType); + $("#node-input-filename").typedInput("value", node.filename); + } else { //was using a static filename - set typedInput type to str + node.filenameType = "str"; + $("#node-input-filename").typedInput("type", node.filenameType); + $("#node-input-filename").typedInput("value", node.filename); + } } encodings.forEach(function(item) { if(Array.isArray(item)) { @@ -309,7 +324,8 @@ icon: "file-in.svg", label: function() { var fn = this.filename; - if(this.filenameType != "str") { fn = ""; } + if(this.filenameType != "str" && this.filenameType != "env" ) { fn = ""; } + if(this.filenameType === "env") { fn = "env."+fn; } return this.name||fn||this._("file.label.read"); }, paletteLabel: RED._("node-red:file.label.read"), @@ -329,11 +345,25 @@ types:[{ value: "str", label:"", icon:"red/images/typedInput/az.svg"}, "msg", "jsonata", "env"], typeField: $("#node-input-filenameType") }); - if(!node.filename && !node.filenameType) { - node.filename = "filename" - node.filenameType = "msg" - $("#node-input-filename").typedInput("type", node.filenameType); - $("#node-input-filename").typedInput("value", node.filename); + 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 + node.filename = "filename"; + node.filenameType = "msg"; + $("#node-input-filename").typedInput("type", node.filenameType); + $("#node-input-filename").typedInput("value", node.filename); + } else if(/^\${[^}]+}$/.test(node.filename)) { //was using an ${ENV_VAR} + node.filenameType = "env"; + node.filename = node.filename.replace(/\${([^}]+)}/g, function(match, name) { + return (name === undefined)?"":name; + }); + $("#node-input-filename").typedInput("type", node.filenameType); + $("#node-input-filename").typedInput("value", node.filename); + } else { //was using a static filename - set typedInput type to str + node.filenameType = "str"; + $("#node-input-filename").typedInput("type", node.filenameType); + $("#node-input-filename").typedInput("value", node.filename); + } } encodings.forEach(function(item) { if(Array.isArray(item)) { 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 309de1abf..b6531a3a6 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 @@ -52,10 +52,20 @@ module.exports = function(RED) { function processMsg(msg,nodeSend, done) { var filename = node.filename || ""; - //Pre V3 compatibility - if filename and filenameType are empty, check msg.filename - if(!node.filenameType && !node.filename) { - msg.filename = "filename"; - node.filenameType = "msg"; + //Pre V3 compatibility - if filenameType is empty, do in place upgrade + if(typeof node.filenameType == 'undefined' || node.filenameType == "") { + //existing node AND filenameType is not set - inplace (compatible) upgrade + if(filename == "") { //was using empty value to denote msg.filename + node.filename = "filename"; + node.filenameType = "msg"; + } else if(/^\${[^}]+}$/.test(filename)) { //was using an ${ENV_VAR} + node.filenameType = "env"; + node.filename = filename.replace(/\${([^}]+)}/g, function(match, name) { + return (name === undefined)?"":name; + }); + } else { //was using a static filename - set typedInput type to str + node.filenameType = "str"; + } } RED.util.evaluateNodeProperty(node.filename,node.filenameType,node,msg,(err,value) => { @@ -174,7 +184,7 @@ module.exports = function(RED) { done(); }); } - if (node.filenameType === "str") { + if (node.filenameType === "str" || node.filenameType === "env") { // Static filename - write and reuse the stream next time node.wstream.write(buf, function() { nodeSend(msg); @@ -288,12 +298,21 @@ module.exports = function(RED) { this.on("input",function(msg, nodeSend, nodeDone) { var filename = node.filename || ""; - //Pre V3 compatibility - if filename and filenameType are empty, check msg.filename - if(!node.filenameType && !node.filename) { - msg.filename = "filename"; - node.filenameType = "msg"; + //Pre V3 compatibility - if filenameType is empty, do in place upgrade + if(typeof node.filenameType == 'undefined' || node.filenameType == "") { + //existing node AND filenameType is not set - inplace (compatible) upgrade + if(filename == "") { //was using empty value to denote msg.filename + node.filename = "filename"; + node.filenameType = "msg"; + } else if(/^\${[^}]+}$/.test(filename)) { //was using an ${ENV_VAR} + node.filenameType = "env"; + node.filename = filename.replace(/\${([^}]+)}/g, function(match, name) { + return (name === undefined)?"":name; + }); + } else { //was using a static filename - set typedInput type to str + node.filenameType = "str"; + } } - RED.util.evaluateNodeProperty(node.filename,node.filenameType,node,msg,(err,value) => { if (err) { node.error(err,msg); diff --git a/packages/node_modules/@node-red/nodes/locales/en-US/storage/10-file.html b/packages/node_modules/@node-red/nodes/locales/en-US/storage/10-file.html index 70400f676..1e8e7e3c2 100644 --- a/packages/node_modules/@node-red/nodes/locales/en-US/storage/10-file.html +++ b/packages/node_modules/@node-red/nodes/locales/en-US/storage/10-file.html @@ -19,8 +19,6 @@ Alternatively, it can delete the file.