@@ -10,7 +10,11 @@ The `node:repl` module provides a Read-Eval-Print-Loop (REPL) implementation
1010that is available both as a standalone program or includible in other
1111applications. It can be accessed using:
1212
13- ```js
13+ ```mjs
14+ import repl from 'node:repl';
15+ ```
16+
17+ ```cjs
1418const repl = require('node:repl');
1519```
1620
@@ -106,7 +110,14 @@ The default evaluator provides access to any variables that exist in the global
106110scope. It is possible to expose a variable to the REPL explicitly by assigning
107111it to the `context` object associated with each `REPLServer`:
108112
109- ```js
113+ ```mjs
114+ import repl from 'node:repl';
115+ const msg = 'message';
116+
117+ repl.start('> ').context.m = msg;
118+ ```
119+
120+ ```cjs
110121const repl = require('node:repl');
111122const msg = 'message';
112123
@@ -124,7 +135,19 @@ $ node repl_test.js
124135Context properties are not read-only by default. To specify read-only globals,
125136context properties must be defined using `Object.defineProperty()`:
126137
127- ```js
138+ ```mjs
139+ import repl from 'node:repl';
140+ const msg = 'message';
141+
142+ const r = repl.start('> ');
143+ Object.defineProperty(r.context, 'm', {
144+ configurable: false,
145+ enumerable: true,
146+ value: msg,
147+ });
148+ ```
149+
150+ ```cjs
128151const repl = require('node:repl');
129152const msg = 'message';
130153
@@ -280,20 +303,34 @@ When a new [`repl.REPLServer`][] is created, a custom evaluation function may be
280303provided. This can be used, for instance, to implement fully customized REPL
281304applications.
282305
283- The following illustrates a hypothetical example of a REPL that performs
284- translation of text from one language to another:
306+ The following illustrates an example of a REPL that squares a given number:
285307
286- ```js
308+ ```mjs
309+ import repl from 'node:repl';
310+
311+ function byThePowerOfTwo(number) {
312+ return number * number;
313+ }
314+
315+ function myEval(cmd, context, filename, callback) {
316+ callback(null, byThePowerOfTwo(cmd));
317+ }
318+
319+ repl.start({ prompt: 'Enter a number: ', eval: myEval });
320+ ```
321+
322+ ```cjs
287323const repl = require('node:repl');
288- const { Translator } = require('translator');
289324
290- const myTranslator = new Translator('en', 'fr');
325+ function byThePowerOfTwo(number) {
326+ return number * number;
327+ }
291328
292329function myEval(cmd, context, filename, callback) {
293- callback(null, myTranslator.translate (cmd));
330+ callback(null, byThePowerOfTwo (cmd));
294331}
295332
296- repl.start({ prompt: '> ', eval: myEval });
333+ repl.start({ prompt: 'Enter a number: ', eval: myEval });
297334```
298335
299336#### Recoverable errors
@@ -354,7 +391,21 @@ To fully customize the output of a [`repl.REPLServer`][] instance pass in a new
354391function for the `writer` option on construction. The following example, for
355392instance, simply converts any input text to upper case:
356393
357- ```js
394+ ```mjs
395+ import repl from 'node:repl';
396+
397+ const r = repl.start({ prompt: '> ', eval: myEval, writer: myWriter });
398+
399+ function myEval(cmd, context, filename, callback) {
400+ callback(null, cmd);
401+ }
402+
403+ function myWriter(output) {
404+ return output.toUpperCase();
405+ }
406+ ```
407+
408+ ```cjs
358409const repl = require('node:repl');
359410
360411const r = repl.start({ prompt: '> ', eval: myEval, writer: myWriter });
@@ -380,7 +431,16 @@ added: v0.1.91
380431Instances of `repl.REPLServer` are created using the [`repl.start()`][] method
381432or directly using the JavaScript `new` keyword.
382433
383- ```js
434+ ```mjs
435+ import repl from 'node:repl';
436+
437+ const options = { useColors: true };
438+
439+ const firstInstance = repl.start(options);
440+ const secondInstance = new repl.REPLServer(options);
441+ ```
442+
443+ ```cjs
384444const repl = require('node:repl');
385445
386446const options = { useColors: true };
@@ -424,7 +484,20 @@ reference to the `context` object as the only argument.
424484This can be used primarily to re-initialize REPL context to some pre-defined
425485state:
426486
427- ```js
487+ ```mjs
488+ import repl from 'node:repl';
489+
490+ function initializeContext(context) {
491+ context.m = 'test';
492+ }
493+
494+ const r = repl.start({ prompt: '> ' });
495+ initializeContext(r.context);
496+
497+ r.on('reset', initializeContext);
498+ ```
499+
500+ ```cjs
428501const repl = require('node:repl');
429502
430503function initializeContext(context) {
@@ -475,7 +548,25 @@ properties:
475548
476549The following example shows two new commands added to the REPL instance:
477550
478- ```js
551+ ```mjs
552+ import repl from 'node:repl';
553+
554+ const replServer = repl.start({ prompt: '> ' });
555+ replServer.defineCommand('sayhello', {
556+ help: 'Say hello',
557+ action(name) {
558+ this.clearBufferedCommand();
559+ console.log(`Hello, ${name}!`);
560+ this.displayPrompt();
561+ },
562+ });
563+ replServer.defineCommand('saybye', function saybye() {
564+ console.log('Goodbye!');
565+ this.close();
566+ });
567+ ```
568+
569+ ```cjs
479570const repl = require('node:repl');
480571
481572const replServer = repl.start({ prompt: '> ' });
@@ -637,7 +728,14 @@ The `repl.start()` method creates and starts a [`repl.REPLServer`][] instance.
637728
638729If `options` is a string, then it specifies the input prompt:
639730
640- ```js
731+ ```mjs
732+ import repl from 'node:repl';
733+
734+ // a Unix style prompt
735+ repl.start('$ ');
736+ ```
737+
738+ ```cjs
641739const repl = require('node:repl');
642740
643741// a Unix style prompt
@@ -709,7 +807,43 @@ separate I/O interfaces.
709807The following example, for instance, provides separate REPLs on `stdin`, a Unix
710808socket, and a TCP socket:
711809
712- ```js
810+ ```mjs
811+ import net from 'node:net';
812+ import repl from 'node:repl';
813+ import process from 'node:process';
814+
815+ let connections = 0;
816+
817+ repl.start({
818+ prompt: 'Node.js via stdin> ',
819+ input: process.stdin,
820+ output: process.stdout,
821+ });
822+
823+ net.createServer((socket) => {
824+ connections += 1;
825+ repl.start({
826+ prompt: 'Node.js via Unix socket> ',
827+ input: socket,
828+ output: socket,
829+ }).on('exit', () => {
830+ socket.end();
831+ });
832+ }).listen('/tmp/node-repl-sock');
833+
834+ net.createServer((socket) => {
835+ connections += 1;
836+ repl.start({
837+ prompt: 'Node.js via TCP socket> ',
838+ input: socket,
839+ output: socket,
840+ }).on('exit', () => {
841+ socket.end();
842+ });
843+ }).listen(5001);
844+ ```
845+
846+ ```cjs
713847const net = require('node:net');
714848const repl = require('node:repl');
715849let connections = 0;
0 commit comments