@@ -42,7 +42,11 @@ proxyObj = new Proxy(target, handler);
4242util . inspect ( proxyObj , opts ) ;
4343
4444// Make sure inspecting object does not trigger any proxy traps.
45- util . format ( '%s' , proxyObj ) ;
45+ // %i%f%d use Symbol.toPrimitive to convert the value to a string.
46+ // %j uses JSON.stringify, accessing the value's toJSON and toString method.
47+ util . format ( '%s%o%O%c' , proxyObj , proxyObj , proxyObj , proxyObj ) ;
48+ const nestedProxy = new Proxy ( new Proxy ( { } , handler ) , { } ) ;
49+ util . format ( '%s%o%O%c' , nestedProxy , nestedProxy , nestedProxy , nestedProxy ) ;
4650
4751// getProxyDetails is an internal method, not intended for public use.
4852// This is here to test that the internals are working correctly.
@@ -135,6 +139,10 @@ const expected6 = 'Proxy [\n' +
135139 ' Proxy [ Proxy [Array], Proxy [Array] ]\n' +
136140 ' ]\n' +
137141 ']' ;
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({})))))' ;
138146assert . strictEqual (
139147 util . inspect ( proxy1 , { showProxy : 1 , depth : null } ) ,
140148 expected1 ) ;
@@ -144,11 +152,11 @@ assert.strictEqual(util.inspect(proxy4, opts), expected4);
144152assert . strictEqual ( util . inspect ( proxy5 , opts ) , expected5 ) ;
145153assert . strictEqual ( util . inspect ( proxy6 , opts ) , expected6 ) ;
146154assert . strictEqual ( util . inspect ( proxy1 ) , expected0 ) ;
147- assert . strictEqual ( util . inspect ( proxy2 ) , expected0 ) ;
148- assert . strictEqual ( util . inspect ( proxy3 ) , expected0 ) ;
149- assert . strictEqual ( util . inspect ( proxy4 ) , expected0 ) ;
150- assert . strictEqual ( util . inspect ( proxy5 ) , expected0 ) ;
151- 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 ) ;
152160
153161// Just for fun, let's create a Proxy using Arrays.
154162const proxy7 = new Proxy ( [ ] , [ ] ) ;
@@ -188,3 +196,24 @@ assert.strictEqual(
188196 ')\x1B[39m'
189197) ;
190198assert . strictEqual ( util . format ( '%s' , proxy12 ) , 'Proxy([ 1, 2, 3 ])' ) ;
199+
200+ {
201+ // Nested proxies should not trigger any proxy handlers.
202+ const nestedProxy = new Proxy ( new Proxy ( new Proxy ( { } , handler ) , { } ) , { } ) ;
203+
204+ assert . strictEqual (
205+ util . inspect ( nestedProxy , { showProxy : true } ) ,
206+ 'Proxy [ Proxy [ Proxy [ {}, [Object] ], {} ], {} ]'
207+ ) ;
208+ assert . strictEqual ( util . inspect ( nestedProxy , { showProxy : false } ) , expected3NoShowProxy ) ;
209+ }
210+
211+ {
212+ // Nested revoked proxies should work as expected as well as custom inspection functions.
213+ const revocable = Proxy . revocable ( { } , handler ) ;
214+ revocable . revoke ( ) ;
215+ const nestedProxy = new Proxy ( revocable . proxy , { } ) ;
216+
217+ assert . strictEqual ( util . inspect ( nestedProxy , { showProxy : true } ) , 'Proxy [ <Revoked Proxy>, {} ]' ) ;
218+ assert . strictEqual ( util . inspect ( nestedProxy , { showProxy : false } ) , 'Proxy(<Revoked Proxy>)' ) ;
219+ }
0 commit comments