diff --git a/lib/repl.js b/lib/repl.js index d4b95bf3a67f45..114de97e97de7c 100644 --- a/lib/repl.js +++ b/lib/repl.js @@ -100,7 +100,9 @@ function hasOwnProperty(obj, prop) { // Can overridden with custom print functions, such as `probe` or `eyes.js`. // This is the default "writer" value if none is passed in the REPL options. -exports.writer = util.inspect; +const writer = exports.writer = (obj) => util.inspect(obj, writer.options); +writer.options = + Object.assign(util.inspect.defaultOptions, { showProxy: true }); exports._builtinLibs = internalModule.builtinLibs; @@ -370,11 +372,10 @@ function REPLServer(prompt, } self.useColors = !!options.useColors; - if (self.useColors && self.writer === util.inspect) { + if (self.useColors && self.writer === writer) { // Turn on ANSI coloring. - self.writer = function(obj, showHidden, depth) { - return util.inspect(obj, showHidden, depth, true); - }; + self.writer = (obj) => util.inspect(obj, self.writer.options); + self.writer.options = Object.assign(writer.options, { colors: true }); } function filterInternalStackFrames(error, structuredStack) { diff --git a/test/parallel/test-repl.js b/test/parallel/test-repl.js index 54ad848b5b3927..d605b0f4d1ad3b 100644 --- a/test/parallel/test-repl.js +++ b/test/parallel/test-repl.js @@ -412,6 +412,17 @@ function error_test() { expect: `${prompt_multiline}${prompt_multiline}undefined\n${prompt_unix}` }, + // https://github.com/nodejs/node/issues/16483 + { + client: client_unix, send: 'new Proxy({x:42}, {get(){throw null}});', + expect: `Proxy [ { x: 42 }, { get: [Function: get] } ]\n${prompt_unix}` + }, + { + client: client_unix, + send: 'repl.writer.options.showProxy = false, new Proxy({x:42}, {});', + expect: `{ x: 42 }\n${prompt_unix}` + }, + // Newline within template string maintains whitespace. { client: client_unix, send: '`foo \n`', expect: `${prompt_multiline}'foo \\n'\n${prompt_unix}` },