From a0778a97e19fb6e661a4277f18f758443d20470c Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Thu, 28 Feb 2019 11:03:37 +0100 Subject: repl: use object writer for thrown errors This makes us use the defaults that were set for the REPL, i.e. aligns with the printing of expression completion values, and in particular enables color support. PR-URL: https://github.com/nodejs/node/pull/26361 Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Anto Aravinth Reviewed-By: James M Snell --- lib/repl.js | 4 ++-- test/parallel/test-repl-pretty-stack.js | 17 +++++++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/lib/repl.js b/lib/repl.js index 76f2aca665..d3363d4bbc 100644 --- a/lib/repl.js +++ b/lib/repl.js @@ -422,7 +422,7 @@ function REPLServer(prompt, (_, pre, line) => pre + (line - 1)); } } - errStack = util.inspect(e); + errStack = self.writer(e); // Remove one line error braces to keep the old style in place. if (errStack[errStack.length - 1] === ']') { @@ -432,7 +432,7 @@ function REPLServer(prompt, } if (errStack === '') { - errStack = `Thrown: ${util.inspect(e)}\n`; + errStack = `Thrown: ${self.writer(e)}\n`; } else { const ln = errStack.endsWith('\n') ? '' : '\n'; errStack = `Thrown:\n${errStack}${ln}`; diff --git a/test/parallel/test-repl-pretty-stack.js b/test/parallel/test-repl-pretty-stack.js index e4137b84a4..4bf18fa1c2 100644 --- a/test/parallel/test-repl-pretty-stack.js +++ b/test/parallel/test-repl-pretty-stack.js @@ -6,7 +6,7 @@ const assert = require('assert'); const repl = require('repl'); -function run({ command, expected }) { +function run({ command, expected, ...extraREPLOptions }) { let accum = ''; const inputStream = new ArrayStream(); @@ -19,7 +19,8 @@ function run({ command, expected }) { input: inputStream, output: outputStream, terminal: false, - useColors: false + useColors: false, + ...extraREPLOptions }); r.write(`${command}\n`); @@ -44,6 +45,18 @@ const tests = [ command: 'throw new Error(\'Whoops!\')', expected: 'Thrown:\nError: Whoops!\n' }, + { + command: '(() => { const err = Error(\'Whoops!\'); ' + + 'err.foo = \'bar\'; throw err; })()', + expected: 'Thrown:\n{ Error: Whoops!\n at repl:1:22 foo: \'bar\' }\n', + }, + { + command: '(() => { const err = Error(\'Whoops!\'); ' + + 'err.foo = \'bar\'; throw err; })()', + expected: 'Thrown:\n{ Error: Whoops!\n at repl:1:22 foo: ' + + "\u001b[32m'bar'\u001b[39m }\n", + useColors: true + }, { command: 'foo = bar;', expected: 'Thrown:\nReferenceError: bar is not defined\n' -- cgit v1.2.3