@@ -175,9 +175,10 @@ const aggregateErrors = hideStackFrames((errors, message, code) => {
175175  return  err ; 
176176} ) ; 
177177
178+ const  assert  =  require ( 'internal/assert' ) ; 
179+ 
178180// Lazily loaded 
179181let  util ; 
180- let  assert ; 
181182
182183let  internalUtil  =  null ; 
183184function  lazyInternalUtil ( )  { 
@@ -371,42 +372,103 @@ function makeSystemErrorWithCode(key) {
371372} 
372373
373374function  makeNodeErrorWithCode ( Base ,  key )  { 
374-   return  function  NodeError ( ...args )  { 
375-     const  limit  =  Error . stackTraceLimit ; 
376-     if  ( isErrorStackTraceLimitWritable ( ) )  Error . stackTraceLimit  =  0 ; 
377-     const  error  =  new  Base ( ) ; 
378-     // Reset the limit and setting the name property. 
379-     if  ( isErrorStackTraceLimitWritable ( ) )  Error . stackTraceLimit  =  limit ; 
380-     const  message  =  getMessage ( key ,  args ,  error ) ; 
381-     ObjectDefineProperties ( error ,  { 
382-       [ kIsNodeError ] : { 
383-         __proto__ : null , 
384-         value : true , 
385-         enumerable : false , 
386-         writable : false , 
387-         configurable : true , 
388-       } , 
389-       message : { 
390-         __proto__ : null , 
391-         value : message , 
392-         enumerable : false , 
393-         writable : true , 
394-         configurable : true , 
395-       } , 
396-       toString : { 
397-         __proto__ : null , 
398-         value ( )  { 
375+   const  msg  =  messages . get ( key ) ; 
376+   const  expectedLength  =  typeof  msg  !==  'string'  ? - 1  : getExpectedArgumentLength ( msg ) ; 
377+ 
378+   switch  ( expectedLength )  { 
379+     case  0 : { 
380+       class  NodeError  extends  Base  { 
381+         code  =  key ; 
382+ 
383+         constructor ( ...args )  { 
384+           assert ( 
385+             args . length  ===  0 , 
386+             `Code: ${ key }  ; The provided arguments length (${ args . length }  ) does not `  + 
387+               `match the required ones (${ expectedLength }  ).` , 
388+           ) ; 
389+           super ( msg ) ; 
390+         } 
391+ 
392+         // This is a workaround for wpt tests that expect that the error 
393+         // constructor has a `name` property of the base class. 
394+         get  [ 'constructor' ] ( )  { 
395+           return  Base ; 
396+         } 
397+ 
398+         get  [ kIsNodeError ] ( )  { 
399+           return  true ; 
400+         } 
401+ 
402+         toString ( )  { 
399403          return  `${ this . name }   [${ key }  ]: ${ this . message }  ` ; 
400-         } , 
401-         enumerable : false , 
402-         writable : true , 
403-         configurable : true , 
404-       } , 
405-     } ) ; 
406-     captureLargerStackTrace ( error ) ; 
407-     error . code  =  key ; 
408-     return  error ; 
409-   } ; 
404+         } 
405+       } 
406+       return  NodeError ; 
407+     } 
408+     case  - 1 : { 
409+       class  NodeError  extends  Base  { 
410+         code  =  key ; 
411+ 
412+         constructor ( ...args )  { 
413+           super ( ) ; 
414+           ObjectDefineProperty ( this ,  'message' ,  { 
415+             __proto__ : null , 
416+             value : getMessage ( key ,  args ,  this ) , 
417+             enumerable : false , 
418+             writable : true , 
419+             configurable : true , 
420+           } ) ; 
421+         } 
422+ 
423+         // This is a workaround for wpt tests that expect that the error 
424+         // constructor has a `name` property of the base class. 
425+         get  [ 'constructor' ] ( )  { 
426+           return  Base ; 
427+         } 
428+ 
429+         get  [ kIsNodeError ] ( )  { 
430+           return  true ; 
431+         } 
432+ 
433+         toString ( )  { 
434+           return  `${ this . name }   [${ key }  ]: ${ this . message }  ` ; 
435+         } 
436+       } 
437+       return  NodeError ; 
438+     } 
439+     default : { 
440+ 
441+       class  NodeError  extends  Base  { 
442+         code  =  key ; 
443+ 
444+         constructor ( ...args )  { 
445+           assert ( 
446+             args . length  ===  expectedLength , 
447+             `Code: ${ key }  ; The provided arguments length (${ args . length }  ) does not `  + 
448+               `match the required ones (${ expectedLength }  ).` , 
449+           ) ; 
450+ 
451+           ArrayPrototypeUnshift ( args ,  msg ) ; 
452+           super ( ReflectApply ( lazyInternalUtilInspect ( ) . format ,  null ,  args ) ) ; 
453+         } 
454+ 
455+         // This is a workaround for wpt tests that expect that the error 
456+         // constructor has a `name` property of the base class. 
457+         get  [ 'constructor' ] ( )  { 
458+           return  Base ; 
459+         } 
460+ 
461+         get  [ kIsNodeError ] ( )  { 
462+           return  true ; 
463+         } 
464+ 
465+         toString ( )  { 
466+           return  `${ this . name }   [${ key }  ]: ${ this . message }  ` ; 
467+         } 
468+       } 
469+       return  NodeError ; 
470+     } 
471+   } 
410472} 
411473
412474/** 
@@ -443,11 +505,16 @@ function E(sym, val, def, ...otherClasses) {
443505  codes [ sym ]  =  def ; 
444506} 
445507
508+ function  getExpectedArgumentLength ( msg )  { 
509+   let  expectedLength  =  0 ; 
510+   const  regex  =  / % [ d f i j o O s ] / g; 
511+   while  ( RegExpPrototypeExec ( regex ,  msg )  !==  null )  expectedLength ++ ; 
512+   return  expectedLength ; 
513+ } 
514+ 
446515function  getMessage ( key ,  args ,  self )  { 
447516  const  msg  =  messages . get ( key ) ; 
448517
449-   assert  ??=  require ( 'internal/assert' ) ; 
450- 
451518  if  ( typeof  msg  ===  'function' )  { 
452519    assert ( 
453520      msg . length  <=  args . length ,  // Default options do not count. 
@@ -457,9 +524,7 @@ function getMessage(key, args, self) {
457524    return  ReflectApply ( msg ,  self ,  args ) ; 
458525  } 
459526
460-   const  regex  =  / % [ d f i j o O s ] / g; 
461-   let  expectedLength  =  0 ; 
462-   while  ( RegExpPrototypeExec ( regex ,  msg )  !==  null )  expectedLength ++ ; 
527+   const  expectedLength  =  getExpectedArgumentLength ( msg ) ; 
463528  assert ( 
464529    expectedLength  ===  args . length , 
465530    `Code: ${ key }  ; The provided arguments length (${ args . length }  ) does not `  + 
@@ -1476,8 +1541,7 @@ E('ERR_NETWORK_IMPORT_DISALLOWED',
14761541  "import of '%s' by %s is not supported: %s" ,  Error ) ; 
14771542E ( 'ERR_NOT_BUILDING_SNAPSHOT' , 
14781543  'Operation cannot be invoked when not building startup snapshot' ,  Error ) ; 
1479- E ( 'ERR_NOT_SUPPORTED_IN_SNAPSHOT' , 
1480-   '%s is not supported in startup snapshot' ,  Error ) ; 
1544+ E ( 'ERR_NOT_SUPPORTED_IN_SNAPSHOT' ,  '%s is not supported in startup snapshot' ,  Error ) ; 
14811545E ( 'ERR_NO_CRYPTO' , 
14821546  'Node.js is not compiled with OpenSSL crypto support' ,  Error ) ; 
14831547E ( 'ERR_NO_ICU' , 
0 commit comments