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,