mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Add test cases for setMessageProperty with non-object properties
This commit is contained in:
@@ -216,7 +216,7 @@ module.exports = function(RED) {
|
||||
RED.util.setMessageProperty(msg,property,undefined);
|
||||
} else if (rule.t === 'set') {
|
||||
if (!RED.util.setMessageProperty(msg,property,value)) {
|
||||
node.warn(RED._("change.errors.no-override",{prop:property}));
|
||||
node.warn(RED._("change.errors.no-override",{property:property}));
|
||||
}
|
||||
} else if (rule.t === 'change') {
|
||||
current = RED.util.getMessageProperty(msg,property);
|
||||
|
@@ -672,7 +672,7 @@
|
||||
"invalid-from": "Invalid 'from' property: __error__",
|
||||
"invalid-json": "Invalid 'to' JSON property",
|
||||
"invalid-expr": "Invalid JSONata expression: __error__",
|
||||
"no-override": "Can't overwrite primitive type with object __prop__."
|
||||
"no-override": "Cannot set property of non-object type: __property__"
|
||||
}
|
||||
},
|
||||
"range": {
|
||||
|
18
packages/node_modules/@node-red/util/lib/util.js
vendored
18
packages/node_modules/@node-red/util/lib/util.js
vendored
@@ -371,14 +371,14 @@ function setObjectProperty(msg,prop,value,createMissing) {
|
||||
var length = msgPropParts.length;
|
||||
var obj = msg;
|
||||
var key;
|
||||
var flag = true;
|
||||
for (var i=0;i<length-1;i++) {
|
||||
key = msgPropParts[i];
|
||||
if (typeof key === 'string' || (typeof key === 'number' && !Array.isArray(obj))) {
|
||||
if (obj.hasOwnProperty(key)) {
|
||||
if (length > 1 && ((typeof obj[key] !== "object" && typeof obj[key] !== "function") || obj[key] === null)) {
|
||||
//console.log("Can't override primitive type with object.");
|
||||
flag = false;
|
||||
// Break out early as we cannot create a property beneath
|
||||
// this type of value
|
||||
return false;
|
||||
}
|
||||
obj = obj[key];
|
||||
} else if (createMissing) {
|
||||
@@ -389,7 +389,7 @@ function setObjectProperty(msg,prop,value,createMissing) {
|
||||
}
|
||||
obj = obj[key];
|
||||
} else {
|
||||
return null;
|
||||
return false;
|
||||
}
|
||||
} else if (typeof key === 'number') {
|
||||
// obj is an array
|
||||
@@ -402,7 +402,7 @@ function setObjectProperty(msg,prop,value,createMissing) {
|
||||
}
|
||||
obj = obj[key];
|
||||
} else {
|
||||
return null;
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
obj = obj[key];
|
||||
@@ -420,11 +420,11 @@ function setObjectProperty(msg,prop,value,createMissing) {
|
||||
if (typeof obj === "object" && obj !== null) {
|
||||
obj[key] = value;
|
||||
} else {
|
||||
//console.log("Can't override primitive type with object.");
|
||||
flag = false;
|
||||
}
|
||||
// Cannot set a property of a non-object/array
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return flag;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*!
|
||||
|
Reference in New Issue
Block a user