Permalink
Browse files

repl: show proxies as Proxy objects

Before this commit they transparently invoked their magic methods but
that sometimes throws confusing exceptions with misbehaving proxies.

This change is not wholly uncontroversial but we can always change the
default if necessary.  Let's see how it goes.

Fixes: #16483
PR-URL: #16485
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information...
bnoordhuis committed Oct 25, 2017
1 parent 6563e56 commit 90a43906ab5ca8bdf154fb7644d70da9e3acdf00
Showing with 17 additions and 5 deletions.
  1. +6 −5 lib/repl.js
  2. +11 −0 test/parallel/test-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;
@@ -373,11 +375,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) {
@@ -413,6 +413,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}` },

0 comments on commit 90a4390

Please sign in to comment.