@@ -150,68 +150,156 @@ ObjectDefineProperty(Console, SymbolHasInstance, {
150
150
}
151
151
} ) ;
152
152
153
- // Eager version for the Console constructor
154
- Console . prototype [ kBindStreamsEager ] = function ( stdout , stderr ) {
155
- ObjectDefineProperties ( this , {
156
- '_stdout' : { ...consolePropAttributes , value : stdout } ,
157
- '_stderr' : { ...consolePropAttributes , value : stderr }
158
- } ) ;
159
- } ;
153
+ const kColorInspectOptions = { colors : true } ;
154
+ const kNoColorInspectOptions = { } ;
160
155
161
- // Lazily load the stdout and stderr from an object so we don't
162
- // create the stdio streams when they are not even accessed
163
- Console . prototype [ kBindStreamsLazy ] = function ( object ) {
164
- let stdout ;
165
- let stderr ;
166
- ObjectDefineProperties ( this , {
167
- '_stdout' : {
168
- enumerable : false ,
169
- configurable : true ,
170
- get ( ) {
171
- if ( ! stdout ) stdout = object . stdout ;
172
- return stdout ;
173
- } ,
174
- set ( value ) { stdout = value ; }
175
- } ,
176
- '_stderr' : {
177
- enumerable : false ,
178
- configurable : true ,
179
- get ( ) {
180
- if ( ! stderr ) { stderr = object . stderr ; }
181
- return stderr ;
182
- } ,
183
- set ( value ) { stderr = value ; }
156
+ ObjectDefineProperties ( Console . prototype , {
157
+ [ kBindStreamsEager ] : {
158
+ ...consolePropAttributes ,
159
+ // Eager version for the Console constructor
160
+ value : function ( stdout , stderr ) {
161
+ ObjectDefineProperties ( this , {
162
+ '_stdout' : { ...consolePropAttributes , value : stdout } ,
163
+ '_stderr' : { ...consolePropAttributes , value : stderr }
164
+ } ) ;
184
165
}
185
- } ) ;
186
- } ;
166
+ } ,
167
+ [ kBindStreamsLazy ] : {
168
+ ...consolePropAttributes ,
169
+ // Lazily load the stdout and stderr from an object so we don't
170
+ // create the stdio streams when they are not even accessed
171
+ value : function ( object ) {
172
+ let stdout ;
173
+ let stderr ;
174
+ ObjectDefineProperties ( this , {
175
+ '_stdout' : {
176
+ enumerable : false ,
177
+ configurable : true ,
178
+ get ( ) {
179
+ if ( ! stdout ) stdout = object . stdout ;
180
+ return stdout ;
181
+ } ,
182
+ set ( value ) { stdout = value ; }
183
+ } ,
184
+ '_stderr' : {
185
+ enumerable : false ,
186
+ configurable : true ,
187
+ get ( ) {
188
+ if ( ! stderr ) { stderr = object . stderr ; }
189
+ return stderr ;
190
+ } ,
191
+ set ( value ) { stderr = value ; }
192
+ }
193
+ } ) ;
194
+ }
195
+ } ,
196
+ [ kBindProperties ] : {
197
+ ...consolePropAttributes ,
198
+ value : function ( ignoreErrors , colorMode , groupIndentation = 2 ) {
199
+ ObjectDefineProperties ( this , {
200
+ '_stdoutErrorHandler' : {
201
+ ...consolePropAttributes ,
202
+ value : createWriteErrorHandler ( this , kUseStdout )
203
+ } ,
204
+ '_stderrErrorHandler' : {
205
+ ...consolePropAttributes ,
206
+ value : createWriteErrorHandler ( this , kUseStderr )
207
+ } ,
208
+ '_ignoreErrors' : {
209
+ ...consolePropAttributes ,
210
+ value : Boolean ( ignoreErrors )
211
+ } ,
212
+ '_times' : { ...consolePropAttributes , value : new Map ( ) } ,
213
+ // Corresponds to https://console.spec.whatwg.org/#count-map
214
+ [ kCounts ] : { ...consolePropAttributes , value : new Map ( ) } ,
215
+ [ kColorMode ] : { ...consolePropAttributes , value : colorMode } ,
216
+ [ kIsConsole ] : { ...consolePropAttributes , value : true } ,
217
+ [ kGroupIndent ] : { ...consolePropAttributes , value : '' } ,
218
+ [ kGroupIndentationWidth ] : {
219
+ ...consolePropAttributes ,
220
+ value : groupIndentation
221
+ } ,
222
+ } ) ;
223
+ }
224
+ } ,
225
+ [ kWriteToConsole ] : {
226
+ ...consolePropAttributes ,
227
+ value : function ( streamSymbol , string ) {
228
+ const ignoreErrors = this . _ignoreErrors ;
229
+ const groupIndent = this [ kGroupIndent ] ;
230
+
231
+ const useStdout = streamSymbol === kUseStdout ;
232
+ const stream = useStdout ? this . _stdout : this . _stderr ;
233
+ const errorHandler = useStdout ?
234
+ this . _stdoutErrorHandler : this . _stderrErrorHandler ;
235
+
236
+ if ( groupIndent . length !== 0 ) {
237
+ if ( string . includes ( '\n' ) ) {
238
+ string = string . replace ( / \n / g, `\n${ groupIndent } ` ) ;
239
+ }
240
+ string = groupIndent + string ;
241
+ }
242
+ string += '\n' ;
243
+
244
+ if ( ignoreErrors === false ) return stream . write ( string ) ;
245
+
246
+ // There may be an error occurring synchronously (e.g. for files or TTYs
247
+ // on POSIX systems) or asynchronously (e.g. pipes on POSIX systems), so
248
+ // handle both situations.
249
+ try {
250
+ // Add and later remove a noop error handler to catch synchronous
251
+ // errors.
252
+ if ( stream . listenerCount ( 'error' ) === 0 )
253
+ stream . once ( 'error' , noop ) ;
254
+
255
+ stream . write ( string , errorHandler ) ;
256
+ } catch ( e ) {
257
+ // Console is a debugging utility, so it swallowing errors is not
258
+ // desirable even in edge cases such as low stack space.
259
+ if ( isStackOverflowError ( e ) )
260
+ throw e ;
261
+ // Sorry, there's no proper way to pass along the error here.
262
+ } finally {
263
+ stream . removeListener ( 'error' , noop ) ;
264
+ }
265
+ }
266
+ } ,
267
+ [ kGetInspectOptions ] : {
268
+ ...consolePropAttributes ,
269
+ value : function ( stream ) {
270
+ let color = this [ kColorMode ] ;
271
+ if ( color === 'auto' ) {
272
+ color = stream . isTTY && (
273
+ typeof stream . getColorDepth === 'function' ?
274
+ stream . getColorDepth ( ) > 2 : true ) ;
275
+ }
187
276
188
- Console . prototype [ kBindProperties ] = function ( ignoreErrors , colorMode ,
189
- groupIndentation = 2 ) {
190
- ObjectDefineProperties ( this , {
191
- '_stdoutErrorHandler' : {
192
- ...consolePropAttributes ,
193
- value : createWriteErrorHandler ( this , kUseStdout )
194
- } ,
195
- '_stderrErrorHandler' : {
196
- ...consolePropAttributes ,
197
- value : createWriteErrorHandler ( this , kUseStderr )
198
- } ,
199
- '_ignoreErrors' : {
200
- ...consolePropAttributes ,
201
- value : Boolean ( ignoreErrors )
202
- } ,
203
- '_times' : { ...consolePropAttributes , value : new Map ( ) } ,
204
- // Corresponds to https://console.spec.whatwg.org/#count-map
205
- [ kCounts ] : { ...consolePropAttributes , value : new Map ( ) } ,
206
- [ kColorMode ] : { ...consolePropAttributes , value : colorMode } ,
207
- [ kIsConsole ] : { ...consolePropAttributes , value : true } ,
208
- [ kGroupIndent ] : { ...consolePropAttributes , value : '' } ,
209
- [ kGroupIndentationWidth ] : {
210
- ...consolePropAttributes ,
211
- value : groupIndentation
212
- } ,
213
- } ) ;
214
- } ;
277
+ const options = optionsMap . get ( this ) ;
278
+ if ( options ) {
279
+ if ( options . colors === undefined ) {
280
+ options . colors = color ;
281
+ }
282
+ return options ;
283
+ }
284
+
285
+ return color ? kColorInspectOptions : kNoColorInspectOptions ;
286
+ }
287
+ } ,
288
+ [ kFormatForStdout ] : {
289
+ ...consolePropAttributes ,
290
+ value : function ( args ) {
291
+ const opts = this [ kGetInspectOptions ] ( this . _stdout ) ;
292
+ return formatWithOptions ( opts , ...args ) ;
293
+ }
294
+ } ,
295
+ [ kFormatForStderr ] : {
296
+ ...consolePropAttributes ,
297
+ value : function ( args ) {
298
+ const opts = this [ kGetInspectOptions ] ( this . _stderr ) ;
299
+ return formatWithOptions ( opts , ...args ) ;
300
+ }
301
+ } ,
302
+ } ) ;
215
303
216
304
// Make a function that can serve as the callback passed to `stream.write()`.
217
305
function createWriteErrorHandler ( instance , streamSymbol ) {
@@ -234,76 +322,6 @@ function createWriteErrorHandler(instance, streamSymbol) {
234
322
} ;
235
323
}
236
324
237
- Console . prototype [ kWriteToConsole ] = function ( streamSymbol , string ) {
238
- const ignoreErrors = this . _ignoreErrors ;
239
- const groupIndent = this [ kGroupIndent ] ;
240
-
241
- const useStdout = streamSymbol === kUseStdout ;
242
- const stream = useStdout ? this . _stdout : this . _stderr ;
243
- const errorHandler = useStdout ?
244
- this . _stdoutErrorHandler : this . _stderrErrorHandler ;
245
-
246
- if ( groupIndent . length !== 0 ) {
247
- if ( string . includes ( '\n' ) ) {
248
- string = string . replace ( / \n / g, `\n${ groupIndent } ` ) ;
249
- }
250
- string = groupIndent + string ;
251
- }
252
- string += '\n' ;
253
-
254
- if ( ignoreErrors === false ) return stream . write ( string ) ;
255
-
256
- // There may be an error occurring synchronously (e.g. for files or TTYs
257
- // on POSIX systems) or asynchronously (e.g. pipes on POSIX systems), so
258
- // handle both situations.
259
- try {
260
- // Add and later remove a noop error handler to catch synchronous errors.
261
- if ( stream . listenerCount ( 'error' ) === 0 )
262
- stream . once ( 'error' , noop ) ;
263
-
264
- stream . write ( string , errorHandler ) ;
265
- } catch ( e ) {
266
- // Console is a debugging utility, so it swallowing errors is not desirable
267
- // even in edge cases such as low stack space.
268
- if ( isStackOverflowError ( e ) )
269
- throw e ;
270
- // Sorry, there's no proper way to pass along the error here.
271
- } finally {
272
- stream . removeListener ( 'error' , noop ) ;
273
- }
274
- } ;
275
-
276
- const kColorInspectOptions = { colors : true } ;
277
- const kNoColorInspectOptions = { } ;
278
- Console . prototype [ kGetInspectOptions ] = function ( stream ) {
279
- let color = this [ kColorMode ] ;
280
- if ( color === 'auto' ) {
281
- color = stream . isTTY && (
282
- typeof stream . getColorDepth === 'function' ?
283
- stream . getColorDepth ( ) > 2 : true ) ;
284
- }
285
-
286
- const options = optionsMap . get ( this ) ;
287
- if ( options ) {
288
- if ( options . colors === undefined ) {
289
- options . colors = color ;
290
- }
291
- return options ;
292
- }
293
-
294
- return color ? kColorInspectOptions : kNoColorInspectOptions ;
295
- } ;
296
-
297
- Console . prototype [ kFormatForStdout ] = function ( args ) {
298
- const opts = this [ kGetInspectOptions ] ( this . _stdout ) ;
299
- return formatWithOptions ( opts , ...args ) ;
300
- } ;
301
-
302
- Console . prototype [ kFormatForStderr ] = function ( args ) {
303
- const opts = this [ kGetInspectOptions ] ( this . _stderr ) ;
304
- return formatWithOptions ( opts , ...args ) ;
305
- } ;
306
-
307
325
const consoleMethods = {
308
326
log ( ...args ) {
309
327
this [ kWriteToConsole ] ( kUseStdout , this [ kFormatForStdout ] ( args ) ) ;
0 commit comments