@@ -303,7 +303,19 @@ When a new [`repl.REPLServer`][] is created, a custom evaluation function may be
303303provided. This can be used, for instance, to implement fully customized REPL
304304applications.
305305
306- The following illustrates an example of a REPL that squares a given number:
306+ An evaluation function accepts the following four arguments:
307+ 
308+ *  ` code `  {string} The code to be executed (e.g. ` 1 + 1 ` ).
309+ *  ` context `  {Object} The context in which the code is executed. This can either be the JavaScript ` global ` 
310+  context or a context specific to the REPL instance, depending on the ` useGlobal `  option.
311+ *  ` replResourceName `  {string} An identifier for the REPL resource associated with the current code
312+  evaluation. This can be useful for debugging purposes.
313+ *  ` callback `  {Function} A function to invoke once the code evaluation is complete. The callback takes two parameters:
314+  *  An error object to provide if an error occurred during evaluation, or ` null ` /` undefined `  if no error occurred.
315+  *  The result of the code evaluation (this is not relevant if an error is provided).
316+ 
317+ The following illustrates an example of a REPL that squares a given number, an error is instead printed
318+ if the provided input is not actually a number:
307319
308320``` mjs 
309321import  repl  from  ' node:repl'  ;
@@ -312,8 +324,12 @@ function byThePowerOfTwo(number) {
312324 return  number *  number;
313325}
314326
315- function  myEval (cmd , context , filename , callback ) {
316-  callback (null , byThePowerOfTwo (cmd));
327+ function  myEval (code , context , replResourceName , callback ) {
328+  if  (Number .isNaN (code)) {
329+  callback (new  Error (` ${ code .trim ()}   is not a number`  ));
330+  } else  {
331+  callback (null , byThePowerOfTwo (code));
332+  }
317333}
318334
319335repl .start ({ prompt:  ' Enter a number: '  , eval:  myEval });
@@ -326,8 +342,12 @@ function byThePowerOfTwo(number) {
326342 return  number *  number;
327343}
328344
329- function  myEval (cmd , context , filename , callback ) {
330-  callback (null , byThePowerOfTwo (cmd));
345+ function  myEval (code , context , replResourceName , callback ) {
346+  if  (Number .isNaN (code)) {
347+  callback (new  Error (` ${ code .trim ()}   is not a number`  ));
348+  } else  {
349+  callback (null , byThePowerOfTwo (code));
350+  }
331351}
332352
333353repl .start ({ prompt:  ' Enter a number: '  , eval:  myEval });
@@ -691,7 +711,8 @@ changes:
691711 *  ` eval `  {Function} The function to be used when evaluating each given line
692712 of input. ** Default:**  an async wrapper for the JavaScript ` eval() ` 
693713 function. An ` eval `  function can error with ` repl.Recoverable `  to indicate
694-  the input was incomplete and prompt for additional lines.
714+  the input was incomplete and prompt for additional lines. See the
715+  [ custom evaluation functions] [ ]  section for more details.
695716 *  ` useColors `  {boolean} If ` true ` , specifies that the default ` writer ` 
696717 function should include ANSI color styling to REPL output. If a custom
697718 ` writer `  function is provided then this has no effect. ** Default:**  checking
@@ -914,4 +935,5 @@ avoiding open network interfaces.
914935[ `repl.start()` ] : #replstartoptions 
915936[ `reverse-i-search` ] : #reverse-i-search 
916937[ `util.inspect()` ] : util.md#utilinspectobject-options 
938+ [ custom evaluation functions ] : #custom-evaluation-functions 
917939[ stream ] : stream.md 
0 commit comments