From d5d9ac5c76dec56ccf3286e8b5e7f2d1407f8fee Mon Sep 17 00:00:00 2001 From: Dave Conway-Jones Date: Sun, 26 Jan 2020 18:20:25 +0000 Subject: [PATCH] let setMessageProperty return success flag so calling node can warn if operation tries to overwrite primitive type --- .../@node-red/nodes/core/function/15-change.js | 4 +++- .../@node-red/nodes/locales/en-US/messages.json | 3 ++- packages/node_modules/@node-red/util/lib/util.js | 13 ++++++++++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/function/15-change.js b/packages/node_modules/@node-red/nodes/core/function/15-change.js index 5c9093bb6..b1bc881a5 100644 --- a/packages/node_modules/@node-red/nodes/core/function/15-change.js +++ b/packages/node_modules/@node-red/nodes/core/function/15-change.js @@ -215,7 +215,9 @@ module.exports = function(RED) { if (rule.t === 'delete') { RED.util.setMessageProperty(msg,property,undefined); } else if (rule.t === 'set') { - RED.util.setMessageProperty(msg,property,value); + if (!RED.util.setMessageProperty(msg,property,value)) { + node.warn(RED._("change.errors.no-override",{prop:property})); + } } else if (rule.t === 'change') { current = RED.util.getMessageProperty(msg,property); if (typeof current === 'string') { 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 e1d7c6368..47d50b9fb 100755 --- a/packages/node_modules/@node-red/nodes/locales/en-US/messages.json +++ b/packages/node_modules/@node-red/nodes/locales/en-US/messages.json @@ -657,7 +657,8 @@ "errors": { "invalid-from": "Invalid 'from' property: __error__", "invalid-json": "Invalid 'to' JSON property", - "invalid-expr": "Invalid JSONata expression: __error__" + "invalid-expr": "Invalid JSONata expression: __error__", + "no-override": "Can't overwrite primitive type with object __prop__." } }, "range": { diff --git a/packages/node_modules/@node-red/util/lib/util.js b/packages/node_modules/@node-red/util/lib/util.js index ef43739e6..9cdf2e0bb 100644 --- a/packages/node_modules/@node-red/util/lib/util.js +++ b/packages/node_modules/@node-red/util/lib/util.js @@ -368,10 +368,15 @@ function setObjectProperty(msg,prop,value,createMissing) { var length = msgPropParts.length; var obj = msg; var key; + var flag = true; for (var i=0;i 1 && ((typeof obj[key] !== "object" && typeof obj[key] !== "function") || obj[key] === null)) { + //console.log("Can't override primitive type with object."); + flag = false; + } obj = obj[key]; } else if (createMissing) { if (typeof msgPropParts[i+1] === 'string') { @@ -409,8 +414,14 @@ function setObjectProperty(msg,prop,value,createMissing) { delete obj[key] } } else { - obj[key] = value; + if (typeof obj === "object" && obj !== null) { + obj[key] = value; + } else { + //console.log("Can't override primitive type with object."); + flag = false; + } } + return flag; } /*!