@@ -408,6 +408,17 @@ function wrapCallSite(frame, state) {
408
408
return frame ;
409
409
}
410
410
411
+ let kIsNodeError = undefined ;
412
+ try {
413
+ // Get a deliberate ERR_INVALID_ARG_TYPE
414
+ // TODO is there a better way to reliably get an instance of NodeError?
415
+ new Buffer ( ) ;
416
+ } catch ( e ) {
417
+ const symbols = Object . getOwnPropertySymbols ( e ) ;
418
+ const symbol = symbols . find ( s => s . toString ( ) . indexOf ( 'kIsNodeError' ) >= 0 ) ;
419
+ if ( symbol ) kIsNodeError = symbol ;
420
+ }
421
+
411
422
// This function is part of the V8 stack trace API, for more info see:
412
423
// https://v8.dev/docs/stack-trace-api
413
424
function prepareStackTrace ( error , stack ) {
@@ -416,9 +427,21 @@ function prepareStackTrace(error, stack) {
416
427
sourceMapCache = { } ;
417
428
}
418
429
419
- var name = error . name || 'Error' ;
420
- var message = error . message || '' ;
421
- var errorString = name + ": " + message ;
430
+ // node gives its own errors special treatment. Mimic that behavior
431
+ // https://github.com/nodejs/node/blob/3cbaabc4622df1b4009b9d026a1a970bdbae6e89/lib/internal/errors.js#L118-L128
432
+ // https://github.com/nodejs/node/pull/39182
433
+ var errorString ;
434
+ if ( kIsNodeError ) {
435
+ if ( kIsNodeError in error ) {
436
+ errorString = `${ error . name } [${ error . code } ]: ${ error . message } ` ;
437
+ } else {
438
+ errorString = ErrorPrototypeToString ( error ) ;
439
+ }
440
+ } else {
441
+ var name = error . name || 'Error' ;
442
+ var message = error . message || '' ;
443
+ errorString = name + ": " + message ;
444
+ }
422
445
423
446
var state = { nextPosition : null , curPosition : null } ;
424
447
var processedStack = [ ] ;
@@ -471,11 +494,10 @@ function printErrorAndExit (error) {
471
494
}
472
495
473
496
if ( source ) {
474
- console . error ( ) ;
475
497
console . error ( source ) ;
476
498
}
477
499
478
- console . error ( error . stack ) ;
500
+ console . error ( error ) ;
479
501
process . exit ( 1 ) ;
480
502
}
481
503
0 commit comments