-
-
Notifications
You must be signed in to change notification settings - Fork 31.4k
doc: add esm examples to node:repl
#55432
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -10,7 +10,11 @@ The `node:repl` module provides a Read-Eval-Print-Loop (REPL) implementation | |
that is available both as a standalone program or includible in other | ||
applications. It can be accessed using: | ||
|
||
```js | ||
```mjs | ||
import repl from 'node:repl'; | ||
``` | ||
|
||
```cjs | ||
const repl = require('node:repl'); | ||
``` | ||
|
||
|
@@ -106,7 +110,14 @@ The default evaluator provides access to any variables that exist in the global | |
scope. It is possible to expose a variable to the REPL explicitly by assigning | ||
it to the `context` object associated with each `REPLServer`: | ||
|
||
```js | ||
```mjs | ||
import repl from 'node:repl'; | ||
const msg = 'message'; | ||
|
||
repl.start('> ').context.m = msg; | ||
``` | ||
|
||
```cjs | ||
const repl = require('node:repl'); | ||
const msg = 'message'; | ||
|
||
|
@@ -124,7 +135,19 @@ $ node repl_test.js | |
Context properties are not read-only by default. To specify read-only globals, | ||
context properties must be defined using `Object.defineProperty()`: | ||
|
||
```js | ||
```mjs | ||
import repl from 'node:repl'; | ||
const msg = 'message'; | ||
|
||
const r = repl.start('> '); | ||
Object.defineProperty(r.context, 'm', { | ||
configurable: false, | ||
enumerable: true, | ||
value: msg, | ||
}); | ||
``` | ||
|
||
```cjs | ||
const repl = require('node:repl'); | ||
const msg = 'message'; | ||
|
||
|
@@ -283,7 +306,20 @@ applications. | |
The following illustrates a hypothetical example of a REPL that performs | ||
translation of text from one language to another: | ||
|
||
```js | ||
```mjs | ||
import repl from 'node:repl'; | ||
import { Translator } from 'translator'; | ||
|
||
const myTranslator = new Translator('en', 'fr'); | ||
|
||
function myEval(cmd, context, filename, callback) { | ||
callback(null, myTranslator.translate(cmd)); | ||
} | ||
|
||
repl.start({ prompt: '> ', eval: myEval }); | ||
``` | ||
|
||
```cjs | ||
const repl = require('node:repl'); | ||
const { Translator } = require('translator'); | ||
|
||
|
@@ -354,7 +390,21 @@ To fully customize the output of a [`repl.REPLServer`][] instance pass in a new | |
function for the `writer` option on construction. The following example, for | ||
instance, simply converts any input text to upper case: | ||
|
||
```js | ||
```mjs | ||
import repl from 'node:repl'; | ||
|
||
const r = repl.start({ prompt: '> ', eval: myEval, writer: myWriter }); | ||
|
||
function myEval(cmd, context, filename, callback) { | ||
callback(null, cmd); | ||
} | ||
|
||
function myWriter(output) { | ||
return output.toUpperCase(); | ||
} | ||
``` | ||
|
||
```cjs | ||
const repl = require('node:repl'); | ||
|
||
const r = repl.start({ prompt: '> ', eval: myEval, writer: myWriter }); | ||
|
@@ -380,7 +430,16 @@ added: v0.1.91 | |
Instances of `repl.REPLServer` are created using the [`repl.start()`][] method | ||
or directly using the JavaScript `new` keyword. | ||
|
||
```js | ||
```mjs | ||
import repl from 'node:repl'; | ||
|
||
const options = { useColors: true }; | ||
|
||
const firstInstance = repl.start(options); | ||
const secondInstance = new repl.REPLServer(options); | ||
``` | ||
|
||
```cjs | ||
const repl = require('node:repl'); | ||
|
||
const options = { useColors: true }; | ||
|
@@ -424,7 +483,20 @@ reference to the `context` object as the only argument. | |
This can be used primarily to re-initialize REPL context to some pre-defined | ||
state: | ||
|
||
```js | ||
```mjs | ||
import repl from 'node:repl'; | ||
|
||
function initializeContext(context) { | ||
context.m = 'test'; | ||
} | ||
|
||
const r = repl.start({ prompt: '> ' }); | ||
initializeContext(r.context); | ||
|
||
r.on('reset', initializeContext); | ||
``` | ||
Comment on lines
+487
to
+498
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It resets the context, full example: $ ./node index.js
> m
'test'
> m = 1
1
> m
1
> .clear
Clearing context...
> m
'test'
> |
||
|
||
```cjs | ||
const repl = require('node:repl'); | ||
|
||
function initializeContext(context) { | ||
|
@@ -475,7 +547,25 @@ properties: | |
|
||
The following example shows two new commands added to the REPL instance: | ||
|
||
```js | ||
```mjs | ||
import repl from 'node:repl'; | ||
|
||
const replServer = repl.start({ prompt: '> ' }); | ||
replServer.defineCommand('sayhello', { | ||
help: 'Say hello', | ||
action(name) { | ||
this.clearBufferedCommand(); | ||
console.log(`Hello, ${name}!`); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this output doesn't quite make sense - where would There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. it's passed when you execute the > .sayhello bnb
Hello, bnb! |
||
this.displayPrompt(); | ||
}, | ||
}); | ||
replServer.defineCommand('saybye', function saybye() { | ||
console.log('Goodbye!'); | ||
this.close(); | ||
}); | ||
``` | ||
|
||
```cjs | ||
const repl = require('node:repl'); | ||
|
||
const replServer = repl.start({ prompt: '> ' }); | ||
|
@@ -637,7 +727,14 @@ The `repl.start()` method creates and starts a [`repl.REPLServer`][] instance. | |
|
||
If `options` is a string, then it specifies the input prompt: | ||
|
||
```js | ||
```mjs | ||
import repl from 'node:repl'; | ||
|
||
// a Unix style prompt | ||
repl.start('$ '); | ||
``` | ||
|
||
```cjs | ||
const repl = require('node:repl'); | ||
|
||
// a Unix style prompt | ||
|
@@ -709,7 +806,43 @@ separate I/O interfaces. | |
The following example, for instance, provides separate REPLs on `stdin`, a Unix | ||
socket, and a TCP socket: | ||
|
||
```js | ||
```mjs | ||
import net from 'node:net'; | ||
import repl from 'node:repl'; | ||
import process from 'node:process'; | ||
|
||
let connections = 0; | ||
|
||
repl.start({ | ||
prompt: 'Node.js via stdin> ', | ||
input: process.stdin, | ||
output: process.stdout, | ||
}); | ||
|
||
net.createServer((socket) => { | ||
connections += 1; | ||
repl.start({ | ||
prompt: 'Node.js via Unix socket> ', | ||
input: socket, | ||
output: socket, | ||
}).on('exit', () => { | ||
socket.end(); | ||
}); | ||
}).listen('/tmp/node-repl-sock'); | ||
|
||
net.createServer((socket) => { | ||
connections += 1; | ||
repl.start({ | ||
prompt: 'Node.js via TCP socket> ', | ||
input: socket, | ||
output: socket, | ||
}).on('exit', () => { | ||
socket.end(); | ||
}); | ||
}).listen(5001); | ||
``` | ||
|
||
```cjs | ||
const net = require('node:net'); | ||
const repl = require('node:repl'); | ||
let connections = 0; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this code block adds a mock dependency to a module that actually exists and is very dormant (
translator
). IMO we should try to avoid that and the alternative of using a module that doesn't exist.While this is also true of the previously existing example, since it's being updated now with a totally new example I think it's a good time to adjust it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agreed! I also thought about that example since it throws an error when you try to execute it as is and new users can be frustrated by that, I'll come up with a good alternative and update as soon as I can! Thanks for the feedback! 🙌
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've updated the example, tell me what you think! 😊 And again, thank you for taking the time to provide feedback! 🙏