diff --git a/packages/node_modules/@node-red/util/lib/util.js b/packages/node_modules/@node-red/util/lib/util.js index 69ed930bb..d40a4de05 100644 --- a/packages/node_modules/@node-red/util/lib/util.js +++ b/packages/node_modules/@node-red/util/lib/util.js @@ -652,130 +652,145 @@ function normaliseNodeTypeName(name) { * @memberof @node-red/util_util */ function encodeObject(msg,opts) { - var debuglength = 1000; - if (opts && opts.hasOwnProperty('maxLength')) { - debuglength = opts.maxLength; - } - var msgType = typeof msg.msg; - if (msg.msg instanceof Error) { - msg.format = "error"; - var errorMsg = {}; - if (msg.msg.name) { - errorMsg.name = msg.msg.name; + try { + var debuglength = 1000; + if (opts && opts.hasOwnProperty('maxLength')) { + debuglength = opts.maxLength; } - if (msg.msg.hasOwnProperty('message')) { - errorMsg.message = msg.msg.message; - } else { - errorMsg.message = msg.msg.toString(); - } - msg.msg = JSON.stringify(errorMsg); - } else if (msg.msg instanceof Buffer) { - msg.format = "buffer["+msg.msg.length+"]"; - msg.msg = msg.msg.toString('hex'); - if (msg.msg.length > debuglength) { - msg.msg = msg.msg.substring(0,debuglength); - } - } else if (msg.msg && msgType === 'object') { - try { - msg.format = msg.msg.constructor.name || "Object"; - // Handle special case of msg.req/res objects from HTTP In node - if (msg.format === "IncomingMessage" || msg.format === "ServerResponse") { + var msgType = typeof msg.msg; + if (msg.msg instanceof Error) { + msg.format = "error"; + var errorMsg = {}; + if (msg.msg.name) { + errorMsg.name = msg.msg.name; + } + if (msg.msg.hasOwnProperty('message')) { + errorMsg.message = msg.msg.message; + } else { + errorMsg.message = msg.msg.toString(); + } + msg.msg = JSON.stringify(errorMsg); + } else if (msg.msg instanceof Buffer) { + msg.format = "buffer["+msg.msg.length+"]"; + msg.msg = msg.msg.toString('hex'); + if (msg.msg.length > debuglength) { + msg.msg = msg.msg.substring(0,debuglength); + } + } else if (msg.msg && msgType === 'object') { + try { + msg.format = msg.msg.constructor.name || "Object"; + // Handle special case of msg.req/res objects from HTTP In node + if (msg.format === "IncomingMessage" || msg.format === "ServerResponse") { + msg.format = "Object"; + } + } catch(err) { msg.format = "Object"; } - } catch(err) { - msg.format = "Object"; - } - if (/error/i.test(msg.format)) { - msg.msg = JSON.stringify({ - name: msg.msg.name, - message: msg.msg.message - }); - } else { - var isArray = util.isArray(msg.msg); - if (isArray) { - msg.format = "array["+msg.msg.length+"]"; - if (msg.msg.length > debuglength) { - // msg.msg = msg.msg.slice(0,debuglength); - msg.msg = { - __enc__: true, - type: "array", - data: msg.msg.slice(0,debuglength), - length: msg.msg.length - } - } - } - if (isArray || (msg.format === "Object")) { - msg.msg = safeJSONStringify(msg.msg, function(key, value) { - if (key === '_req' || key === '_res') { - value = { - __enc__: true, - type: "internal" - } - } else if (value instanceof Error) { - value = value.toString() - } else if (util.isArray(value) && value.length > debuglength) { - value = { + if (/error/i.test(msg.format)) { + msg.msg = JSON.stringify({ + name: msg.msg.name, + message: msg.msg.message + }); + } else { + var isArray = util.isArray(msg.msg); + if (isArray) { + msg.format = "array["+msg.msg.length+"]"; + if (msg.msg.length > debuglength) { + // msg.msg = msg.msg.slice(0,debuglength); + msg.msg = { __enc__: true, type: "array", - data: value.slice(0,debuglength), - length: value.length - } - } else if (typeof value === 'string') { - if (value.length > debuglength) { - value = value.substring(0,debuglength)+"..."; - } - } else if (typeof value === 'function') { - value = { - __enc__: true, - type: "function" - } - } else if (typeof value === 'number') { - if (isNaN(value) || value === Infinity || value === -Infinity) { - value = { - __enc__: true, - type: "number", - data: value.toString() - } - } - } else if (value && value.constructor) { - if (value.type === "Buffer") { - value.__enc__ = true; - value.length = value.data.length; - if (value.length > debuglength) { - value.data = value.data.slice(0,debuglength); - } - } else if (value.constructor.name === "ServerResponse") { - value = "[internal]" - } else if (value.constructor.name === "Socket") { - value = "[internal]" + data: msg.msg.slice(0,debuglength), + length: msg.msg.length } } - return value; - }," "); - } else { - try { msg.msg = msg.msg.toString(); } - catch(e) { msg.msg = "[Type not printable]"; } + } + if (isArray || (msg.format === "Object")) { + msg.msg = safeJSONStringify(msg.msg, function(key, value) { + if (key === '_req' || key === '_res') { + value = { + __enc__: true, + type: "internal" + } + } else if (value instanceof Error) { + value = value.toString() + } else if (util.isArray(value) && value.length > debuglength) { + value = { + __enc__: true, + type: "array", + data: value.slice(0,debuglength), + length: value.length + } + } else if (typeof value === 'string') { + if (value.length > debuglength) { + value = value.substring(0,debuglength)+"..."; + } + } else if (typeof value === 'function') { + value = { + __enc__: true, + type: "function" + } + } else if (typeof value === 'number') { + if (isNaN(value) || value === Infinity || value === -Infinity) { + value = { + __enc__: true, + type: "number", + data: value.toString() + } + } + } else if (value && value.constructor) { + if (value.type === "Buffer") { + value.__enc__ = true; + value.length = value.data.length; + if (value.length > debuglength) { + value.data = value.data.slice(0,debuglength); + } + } else if (value.constructor.name === "ServerResponse") { + value = "[internal]" + } else if (value.constructor.name === "Socket") { + value = "[internal]" + } + } + return value; + }," "); + } else { + try { msg.msg = msg.msg.toString(); } + catch(e) { msg.msg = "[Type not printable]"; } + } + } + } else if (msgType === "function") { + msg.format = "function"; + msg.msg = "[function]" + } else if (msgType === "boolean") { + msg.format = "boolean"; + msg.msg = msg.msg.toString(); + } else if (msgType === "number") { + msg.format = "number"; + msg.msg = msg.msg.toString(); + } else if (msg.msg === null || msgType === "undefined") { + msg.format = (msg.msg === null)?"null":"undefined"; + msg.msg = "(undefined)"; + } else { + msg.format = "string["+msg.msg.length+"]"; + if (msg.msg.length > debuglength) { + msg.msg = msg.msg.substring(0,debuglength)+"..."; } } - } else if (msgType === "function") { - msg.format = "function"; - msg.msg = "[function]" - } else if (msgType === "boolean") { - msg.format = "boolean"; - msg.msg = msg.msg.toString(); - } else if (msgType === "number") { - msg.format = "number"; - msg.msg = msg.msg.toString(); - } else if (msg.msg === null || msgType === "undefined") { - msg.format = (msg.msg === null)?"null":"undefined"; - msg.msg = "(undefined)"; - } else { - msg.format = "string["+msg.msg.length+"]"; - if (msg.msg.length > debuglength) { - msg.msg = msg.msg.substring(0,debuglength)+"..."; + return msg; + } catch(e) { + msg.format = "error"; + var errorMsg = {}; + if (e.name) { + errorMsg.name = e.name; } + if (e.hasOwnProperty('message')) { + errorMsg.message = e.message; + } else { + errorMsg.message = e.toString(); + } + msg.msg = JSON.stringify(errorMsg); + return msg; } - return msg; } module.exports = {