File tree Expand file tree Collapse file tree 2 files changed +15
-1
lines changed
Expand file tree Collapse file tree 2 files changed +15
-1
lines changed Original file line number Diff line number Diff line change @@ -134,6 +134,9 @@ const builtInObjects = new Set(
134134 ObjectGetOwnPropertyNames ( global ) . filter ( ( e ) => / ^ [ A - Z ] [ a - z A - Z 0 - 9 ] + $ / . test ( e ) )
135135) ;
136136
137+ // https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot
138+ const isUndetectableObject = ( v ) => typeof v === 'undefined' && v !== undefined ;
139+
137140// These options must stay in sync with `getUserOptions`. So if any option will
138141// be added or removed, `getUserOptions` must also be updated accordingly.
139142const inspectDefaultOptions = ObjectSeal ( {
@@ -680,7 +683,9 @@ function findTypedConstructor(value) {
680683// value afterwards again.
681684function formatValue ( ctx , value , recurseTimes , typedArray ) {
682685 // Primitive types cannot have properties.
683- if ( typeof value !== 'object' && typeof value !== 'function' ) {
686+ if ( typeof value !== 'object' &&
687+ typeof value !== 'function' &&
688+ ! isUndetectableObject ( value ) ) {
684689 return formatPrimitive ( ctx . stylize , value , ctx ) ;
685690 }
686691 if ( value === null ) {
Original file line number Diff line number Diff line change @@ -26,6 +26,7 @@ const { internalBinding } = require('internal/test/binding');
2626const JSStream = internalBinding ( 'js_stream' ) . JSStream ;
2727const util = require ( 'util' ) ;
2828const vm = require ( 'vm' ) ;
29+ const v8 = require ( 'v8' ) ;
2930const { previewEntries } = internalBinding ( 'util' ) ;
3031const { inspect } = util ;
3132const { MessageChannel } = require ( 'worker_threads' ) ;
@@ -2748,3 +2749,11 @@ assert.strictEqual(
27482749 assert . deepStrictEqual ( colors . gray , originalValue ) ;
27492750 assert . strictEqual ( colors . grey , colors . gray ) ;
27502751}
2752+
2753+ // https://github.com/nodejs/node/issues/31889
2754+ {
2755+ v8 . setFlagsFromString ( '--allow-natives-syntax' ) ;
2756+ const undetectable = vm . runInThisContext ( '%GetUndetectable()' ) ;
2757+ v8 . setFlagsFromString ( '--no-allow-natives-syntax' ) ;
2758+ assert . strictEqual ( inspect ( undetectable ) , '{}' ) ;
2759+ }
You can’t perform that action at this time.
0 commit comments