From 5eea8b6b60a7a6a650736e55a23f583a095ec07b Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 10 Mar 2025 17:43:06 +0000 Subject: [PATCH] Improve debug display of error objects --- .../editor-client/src/js/ui/utils.js | 1 - .../node_modules/@node-red/util/lib/util.js | 44 ++++++++++++++----- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/utils.js b/packages/node_modules/@node-red/editor-client/src/js/ui/utils.js index 2de4b1131..4529a6923 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/utils.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/utils.js @@ -1285,7 +1285,6 @@ RED.utils = (function() { payload = JSON.parse(payload); } else if (/error/i.test(format)) { payload = JSON.parse(payload); - payload = (payload.name?payload.name+": ":"")+payload.message; } else if (format === 'null') { payload = null; } else if (format === 'undefined') { diff --git a/packages/node_modules/@node-red/util/lib/util.js b/packages/node_modules/@node-red/util/lib/util.js index 9ebb46bc0..7bfe41d7b 100644 --- a/packages/node_modules/@node-red/util/lib/util.js +++ b/packages/node_modules/@node-red/util/lib/util.js @@ -828,18 +828,25 @@ function encodeObject(msg,opts) { debuglength = opts.maxLength; } var msgType = typeof msg.msg; - if (msg.msg instanceof Error) { + if (msg.msg instanceof Error || /Error/.test(msg.msg?.__proto__?.name)) { msg.format = "error"; - var errorMsg = {}; - if (msg.msg.name) { - errorMsg.name = msg.msg.name; + + const cause = msg.msg.cause + const value = { + __enc__: true, + type: 'error', + data: { + name: msg.msg.name, + message: msg.msg.message, + cause: cause + "", + stack: msg.msg.stack, + } } - if (hasOwnProperty.call(msg.msg, 'message')) { - errorMsg.message = msg.msg.message; - } else { - errorMsg.message = msg.msg.toString(); + // Remove cause if not defined + if (!cause) { + delete value.data.cause } - msg.msg = JSON.stringify(errorMsg); + msg.msg = JSON.stringify(value); } else if (msg.msg instanceof Buffer) { msg.format = "buffer["+msg.msg.length+"]"; msg.msg = msg.msg.toString('hex'); @@ -857,6 +864,7 @@ function encodeObject(msg,opts) { msg.format = "Object"; } if (/error/i.test(msg.format)) { + // TODO: check if this is needed msg.msg = JSON.stringify({ name: msg.msg.name, message: msg.msg.message @@ -904,8 +912,22 @@ function encodeObject(msg,opts) { __enc__: true, type: "internal" } - } else if (value instanceof Error) { - value = value.toString() + } else if (value instanceof Error || /Error/.test(value?.__proto__?.name)) { + const cause = value.cause + value = { + __enc__: true, + type: 'error', + data: { + name: value.name, + message: value.message, + cause: cause + "", + stack: value.stack, + } + } + // Remove cause if not defined + if (!cause) { + delete value.data.cause + } } else if (Array.isArray(value) && value.length > debuglength) { value = { __enc__: true,