From e45d14f3f4d2b356f53cfc6e6a019859ff9e039c Mon Sep 17 00:00:00 2001 From: Steve-Mcl Date: Thu, 25 Apr 2024 18:14:08 +0100 Subject: [PATCH] dont error is `property in` does not exist --- .../@node-red/nodes/core/function/16-range.js | 3 ++- .../nodes/core/network/21-httprequest.js | 5 ++--- .../@node-red/nodes/core/parsers/70-CSV.js | 14 +++++++------ .../@node-red/nodes/core/parsers/70-JSON.js | 3 ++- .../@node-red/nodes/core/parsers/70-XML.js | 3 ++- .../@node-red/nodes/core/parsers/70-YAML.js | 3 ++- .../@node-red/nodes/core/utils.js | 21 +++++++++++++++++++ 7 files changed, 39 insertions(+), 13 deletions(-) create mode 100644 packages/node_modules/@node-red/nodes/core/utils.js 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 efd72db9d..a0df9cadb 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 @@ -16,6 +16,7 @@ module.exports = function(RED) { "use strict"; + const { getMessagePropertySafe } = require('../utils.js')(RED) function RangeNode(n) { RED.nodes.createNode(this, n); this.action = n.action; @@ -29,7 +30,7 @@ module.exports = function(RED) { var node = this; this.on('input', function (msg, send, done) { - var value = RED.util.getMessageProperty(msg,node.property); + var value = getMessagePropertySafe(msg, node.property); if (value !== undefined) { var n = Number(value); if (!isNaN(n)) { diff --git a/packages/node_modules/@node-red/nodes/core/network/21-httprequest.js b/packages/node_modules/@node-red/nodes/core/network/21-httprequest.js index fbde6acb0..0ee54b929 100644 --- a/packages/node_modules/@node-red/nodes/core/network/21-httprequest.js +++ b/packages/node_modules/@node-red/nodes/core/network/21-httprequest.js @@ -29,7 +29,7 @@ module.exports = async function(RED) { var querystring = require("querystring"); var cookie = require("cookie"); var hashSum = require("hash-sum"); - + const { getMessagePropertySafe } = require('../utils.js')(RED) // Cache a reference to the existing https.request function // so we can compare later to see if an old agent-base instance @@ -433,8 +433,7 @@ in your Node-RED user directory (${RED.settings.userDir}). } } var payload = null; - const value = RED.util.getMessageProperty(msg, node.property) - + const value = getMessagePropertySafe(msg, node.property) if (method !== 'GET' && method !== 'HEAD' && typeof value !== "undefined") { if (opts.headers['content-type'] == 'multipart/form-data' && typeof value === "object") { diff --git a/packages/node_modules/@node-red/nodes/core/parsers/70-CSV.js b/packages/node_modules/@node-red/nodes/core/parsers/70-CSV.js index a90d4d620..3e371c94a 100644 --- a/packages/node_modules/@node-red/nodes/core/parsers/70-CSV.js +++ b/packages/node_modules/@node-red/nodes/core/parsers/70-CSV.js @@ -15,9 +15,11 @@ **/ module.exports = function(RED) { - const csv = require('./lib/csv') - "use strict"; + + const csv = require('./lib/csv') + const { getMessagePropertySafe } = require('../utils.js')(RED) + function CSVNode(n) { RED.nodes.createNode(this,n) const node = this @@ -69,8 +71,8 @@ module.exports = function(RED) { if (msg.hasOwnProperty("reset")) { node.hdrSent = false; } - if (msg.hasOwnProperty(node.property)) { - let inputData = RED.util.getMessageProperty(msg, node.property) + let inputData = getMessagePropertySafe(msg, node.property) + if (typeof inputData !== "undefined") { if (typeof inputData == "object") { // convert object to CSV string try { if (!(notemplate && (msg.hasOwnProperty("parts") && msg.parts.hasOwnProperty("index") && msg.parts.index > 0))) { @@ -416,8 +418,8 @@ module.exports = function(RED) { if (msg.hasOwnProperty("reset")) { node.hdrSent = false } - if (msg.hasOwnProperty(node.property)) { - let inputData = RED.util.getMessageProperty(msg, node.property) + let inputData = getMessagePropertySafe(msg, node.property) + if (typeof inputData !== "undefined") { if (typeof inputData == "object") { // convert object to CSV string try { // first determine the payload kind. Array or objects? Array of primitives? Array of arrays? Just an object? diff --git a/packages/node_modules/@node-red/nodes/core/parsers/70-JSON.js b/packages/node_modules/@node-red/nodes/core/parsers/70-JSON.js index 76c0f8c92..d0df51090 100644 --- a/packages/node_modules/@node-red/nodes/core/parsers/70-JSON.js +++ b/packages/node_modules/@node-red/nodes/core/parsers/70-JSON.js @@ -19,6 +19,7 @@ module.exports = function(RED) { const Ajv = require('ajv'); const ajv = new Ajv({allErrors: true}); ajv.addMetaSchema(require('ajv/lib/refs/json-schema-draft-06.json')); + const { getMessagePropertySafe } = require('../utils.js')(RED) function JSONNode(n) { RED.nodes.createNode(this,n); @@ -48,7 +49,7 @@ module.exports = function(RED) { } validate = true; } - var value = RED.util.getMessageProperty(msg,node.property); + var value = getMessagePropertySafe(msg,node.property); if (value !== undefined) { if (typeof value === "string" || Buffer.isBuffer(value)) { // if (Buffer.isBuffer(value) && node.action !== "obj") { 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 d55634c89..8a47f9a48 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 @@ -3,6 +3,7 @@ module.exports = function(RED) { "use strict"; var xml2js = require('xml2js'); var parseString = xml2js.parseString; + const { getMessagePropertySafe } = require('../utils.js')(RED) function XMLNode(n) { RED.nodes.createNode(this,n); @@ -12,7 +13,7 @@ module.exports = function(RED) { this.propertyOut = n.propertyOut||this.property; var node = this; this.on("input", function(msg,send,done) { - var value = RED.util.getMessageProperty(msg,node.property); + var value = getMessagePropertySafe(msg,node.property); if (value !== undefined) { var options; if (typeof value === "object") { 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 bd5ab09e4..c3f27f42b 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 @@ -2,13 +2,14 @@ module.exports = function(RED) { "use strict"; var yaml = require('js-yaml'); + const { getMessagePropertySafe } = require('../utils.js')(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); + var value = getMessagePropertySafe(msg,node.property); if (value !== undefined) { if (typeof value === "string") { try { diff --git a/packages/node_modules/@node-red/nodes/core/utils.js b/packages/node_modules/@node-red/nodes/core/utils.js new file mode 100644 index 000000000..da9bfa9e4 --- /dev/null +++ b/packages/node_modules/@node-red/nodes/core/utils.js @@ -0,0 +1,21 @@ +function utils(RED) { + + /** + * Returns the value of a property in a message object using a path. If not found, returns undefined. + * @param {Object} msg - The message object. + * @param {string} path - The path to the property. + */ + function getMessagePropertySafe (msg, path) { + try { + return RED.util.getMessageProperty(msg, path) + } catch (_e) { + return undefined + } + } + + return { + getMessagePropertySafe + } +} + +module.exports = utils