From adf35952fc5b25b8133399b89c4878549fe91b27 Mon Sep 17 00:00:00 2001 From: Andrey Lushnikov Date: Sat, 29 Jul 2017 13:02:56 -0700 Subject: [PATCH] [DEBUG] More descriptive event reporting This patch improves DEBUG reporting so that circular event arguments are shown with some information. --- lib/helper.js | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/lib/helper.js b/lib/helper.js index 8e49885e711..1fcb9dbf272 100644 --- a/lib/helper.js +++ b/lib/helper.js @@ -158,18 +158,23 @@ class Helper { * @return {string} */ function stringifyArgument(arg) { - if (typeof arg !== 'function') { - try { - return JSON.stringify(arg); - } catch (e) { - // The object was recursive - return arg.toString(); - } + if (Helper.isString(arg) || Helper.isNumber(arg) || !arg) + return JSON.stringify(arg); + if (typeof arg === 'function') { + let text = arg.toString().split('\n').map(line => line.trim()).join(''); + if (text.length > 20) + text = text.substring(0, 20) + '…'; + return `"${text}"`; } - let text = arg.toString().split('\n').map(line => line.trim()).join(''); - if (text.length > 20) - text = text.substring(0, 20) + '…'; - return `"${text}"`; + const state = {}; + const keys = Object.keys(arg); + for (let key of keys) { + const value = arg[key]; + if (Helper.isString(value) || Helper.isNumber(value)) + state[key] = JSON.stringify(value); + } + const name = arg.constructor.name === 'Object' ? '' : arg.constructor.name; + return name + JSON.stringify(state); } }