From 90c2758624504f5415ddb4488f39f636ea7a1296 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Thu, 13 Mar 2025 10:49:15 +0000 Subject: [PATCH] Add code to error object sent by Catch node --- .../@node-red/runtime/lib/flows/Flow.js | 3 +++ .../node_modules/@node-red/util/lib/util.js | 21 +++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js index 0b6045326..4fe42d839 100644 --- a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js +++ b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js @@ -675,6 +675,9 @@ class Flow { count: count } }; + if (logMessage.hasOwnProperty('code')) { + errorMessage.error.code = logMessage.code; + } if (logMessage.hasOwnProperty('stack')) { errorMessage.error.stack = logMessage.stack; } diff --git a/packages/node_modules/@node-red/util/lib/util.js b/packages/node_modules/@node-red/util/lib/util.js index d205700a5..e966d53a7 100644 --- a/packages/node_modules/@node-red/util/lib/util.js +++ b/packages/node_modules/@node-red/util/lib/util.js @@ -838,14 +838,20 @@ function encodeObject(msg,opts) { data: { name: msg.msg.name, message: hasOwnProperty.call(msg.msg, 'message') ? msg.msg.message : msg.msg.toString(), + code: msg.msg.code, cause: cause + "", stack: msg.msg.stack, } } - // Remove cause if not defined - if (!cause) { + // We optimistically added these properties to the object + // to ensure they are shown above 'stack'. But we don't want + // to include them if they are undefined + if (cause === undefined) { delete value.data.cause } + if (msg.msg.code === undefined) { + delete value.data.code + } msg.msg = JSON.stringify(value); } else if (msg.msg instanceof Buffer) { msg.format = "buffer["+msg.msg.length+"]"; @@ -914,20 +920,27 @@ function encodeObject(msg,opts) { } } else if (value instanceof Error || /Error/.test(value?.__proto__?.name)) { const cause = value.cause + const code = value.code value = { __enc__: true, type: 'error', data: { name: value.name, message: hasOwnProperty.call(value, 'message') ? value.message : value.toString(), + code, cause: cause + "", stack: value.stack, } } - // Remove cause if not defined - if (!cause) { + // We optimistically added these properties to the object + // to ensure they are shown above 'stack'. But we don't want + // to include them if they are undefined + if (cause === undefined) { delete value.data.cause } + if (code === undefined) { + delete value.data.code + } } else if (Array.isArray(value) && value.length > debuglength) { value = { __enc__: true,