Skip to content

Commit 2ac85bd

Browse files
committed
util: show all nested proxies when inspecting
1 parent 75a8076 commit 2ac85bd

File tree

2 files changed

+20
-11
lines changed

2 files changed

+20
-11
lines changed

lib/internal/util/inspect.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1119,6 +1119,7 @@ function formatValue(ctx, value, recurseTimes, typedArray) {
11191119

11201120
// Memorize the context for custom inspection on proxies.
11211121
const context = value;
1122+
let proxies = 0;
11221123
// Always check for proxies to prevent side effects and to prevent triggering
11231124
// any proxy handlers.
11241125
let proxy = getProxyDetails(value, !!ctx.showProxy);
@@ -1135,6 +1136,7 @@ function formatValue(ctx, value, recurseTimes, typedArray) {
11351136
}
11361137
value = proxy;
11371138
proxy = getProxyDetails(value, false);
1139+
proxies += 1;
11381140
} while (proxy !== undefined);
11391141
}
11401142

@@ -1151,7 +1153,7 @@ function formatValue(ctx, value, recurseTimes, typedArray) {
11511153
// a counter internally.
11521154
const depth = ctx.depth === null ? null : ctx.depth - recurseTimes;
11531155
const isCrossContext =
1154-
context !== value || !FunctionPrototypeSymbolHasInstance(Object, context);
1156+
proxies !== 0 || !FunctionPrototypeSymbolHasInstance(Object, context);
11551157
const ret = FunctionPrototypeCall(
11561158
maybeCustom,
11571159
context,
@@ -1187,10 +1189,13 @@ function formatValue(ctx, value, recurseTimes, typedArray) {
11871189
return ctx.stylize(`[Circular *${index}]`, 'special');
11881190
}
11891191

1190-
const formatted = formatRaw(ctx, value, recurseTimes, typedArray);
1192+
let formatted = formatRaw(ctx, value, recurseTimes, typedArray);
11911193

1192-
if (proxy !== undefined) {
1193-
return `${ctx.stylize('Proxy(', 'special')}${formatted}${ctx.stylize(')', 'special')}`;
1194+
if (proxies !== 0) {
1195+
for (let i = 0; i < proxies; i++) {
1196+
formatted = `${ctx.stylize('Proxy(', 'special')}${formatted}${ctx.stylize(')', 'special')}`;
1197+
}
1198+
return formatted;
11941199
}
11951200

11961201
return formatted;

test/parallel/test-util-inspect-proxy.js

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,10 @@ const expected6 = 'Proxy [\n' +
139139
' Proxy [ Proxy [Array], Proxy [Array] ]\n' +
140140
' ]\n' +
141141
']';
142+
const expected2NoShowProxy = 'Proxy(Proxy({}))';
143+
const expected3NoShowProxy = 'Proxy(Proxy(Proxy({})))';
144+
const expected4NoShowProxy = 'Proxy(Proxy(Proxy(Proxy({}))))';
145+
const expected5NoShowProxy = 'Proxy(Proxy(Proxy(Proxy(Proxy({})))))';
142146
assert.strictEqual(
143147
util.inspect(proxy1, { showProxy: 1, depth: null }),
144148
expected1);
@@ -148,11 +152,11 @@ assert.strictEqual(util.inspect(proxy4, opts), expected4);
148152
assert.strictEqual(util.inspect(proxy5, opts), expected5);
149153
assert.strictEqual(util.inspect(proxy6, opts), expected6);
150154
assert.strictEqual(util.inspect(proxy1), expected0);
151-
assert.strictEqual(util.inspect(proxy2), expected0);
152-
assert.strictEqual(util.inspect(proxy3), expected0);
153-
assert.strictEqual(util.inspect(proxy4), expected0);
154-
assert.strictEqual(util.inspect(proxy5), expected0);
155-
assert.strictEqual(util.inspect(proxy6), expected0);
155+
assert.strictEqual(util.inspect(proxy2), expected2NoShowProxy);
156+
assert.strictEqual(util.inspect(proxy3), expected3NoShowProxy);
157+
assert.strictEqual(util.inspect(proxy4), expected2NoShowProxy);
158+
assert.strictEqual(util.inspect(proxy5), expected4NoShowProxy);
159+
assert.strictEqual(util.inspect(proxy6), expected5NoShowProxy);
156160

157161
// Just for fun, let's create a Proxy using Arrays.
158162
const proxy7 = new Proxy([], []);
@@ -197,8 +201,8 @@ assert.strictEqual(util.format('%s', proxy12), 'Proxy([ 1, 2, 3 ])');
197201
// Nested proxies should not trigger any proxy handlers.
198202
const nestedProxy = new Proxy(new Proxy(new Proxy({}, handler), {}), {});
199203

200-
util.inspect(nestedProxy, { showProxy: true });
201-
util.inspect(nestedProxy, { showProxy: false });
204+
assert.strictEqual(util.inspect(nestedProxy, { showProxy: true }), 'Proxy [ Proxy [ Proxy [ {}, [Object] ], {} ], {} ]');
205+
assert.strictEqual(util.inspect(nestedProxy, { showProxy: false }), expected3NoShowProxy);
202206
}
203207

204208
{

0 commit comments

Comments
 (0)