Skip to main content
REPLServer - repl - Node documentation
class REPLServer
extends Interface

Usage in Deno

import { REPLServer } from "node:repl";
<div class="alert alert-warning"><div><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none" /> <path d="M12 9v4" /> <path d="M10.363 3.591l-8.106 13.534a1.914 1.914 0 0 0 1.636 2.871h16.214a1.914 1.914 0 0 0 1.636 -2.87l-8.106 -13.536a1.914 1.914 0 0 0 -3.274 0z" /> <path d="M12 16h.01" /> </svg> Deno compatibility</div><div><p> This symbol is not supported.</p> </div></div>

Instances of repl.REPLServer are created using the start method or directly using the JavaScript new keyword.

import repl from 'node:repl';

const options = { useColors: true };

const firstInstance = repl.start(options);
const secondInstance = new repl.REPLServer(options);

Constructors

new
REPLServer()

NOTE: According to the documentation:

Instances of repl.REPLServer are created using the repl.start() method and should not be created directly using the JavaScript new keyword.

REPLServer cannot be subclassed due to implementation specifics in NodeJS.

Properties

readonly
commands: ReadOnlyDict<REPLCommand>

The commands registered via replServer.defineCommand().

Specified in the REPL options, this is the function to use for custom Tab auto-completion.

readonly
context: Context

The vm.Context provided to the eval function to be used for JavaScript evaluation.

readonly
editorMode: boolean

A value indicating whether the REPL is currently in "editor mode".

readonly
eval: REPLEval

Specified in the REPL options, this is the function to be used when evaluating each given line of input. If not specified in the REPL options, this is an async wrapper for the JavaScript eval() function.

readonly
ignoreUndefined: boolean

Specified in the REPL options, this is a value indicating whether the default writer function should output the result of a command if it evaluates to undefined.

readonly
input: ReadableStream

The Readable stream from which REPL input will be read.

deprecated
readonly
inputStream: ReadableStream
readonly
last: any

The last evaluation result from the REPL (assigned to the _ variable inside of the REPL).

readonly
lastError: any

The last error raised inside the REPL (assigned to the _error variable inside of the REPL).

readonly
output: WritableStream

The Writable stream to which REPL output will be written.

deprecated
readonly
outputStream: WritableStream

Specified in the REPL options, this is a flag that specifies whether the default eval function should execute all JavaScript commands in strict mode or default (sloppy) mode. Possible values are:

  • repl.REPL_MODE_SLOPPY - evaluates expressions in sloppy mode.
  • repl.REPL_MODE_STRICT - evaluates expressions in strict mode. This is equivalent to prefacing every repl statement with 'use strict'.
readonly
underscoreAssigned: boolean

A value indicating whether the _ variable has been assigned.

readonly
underscoreErrAssigned: boolean

A value indicating whether the _error variable has been assigned.

readonly
useColors: boolean

Specified in the REPL options, this is a value indicating whether the default writer function should include ANSI color styling to REPL output.

readonly
useGlobal: boolean

Specified in the REPL options, this is a value indicating whether the default eval function will use the JavaScript global as the context as opposed to creating a new separate context for the REPL instance.

Specified in the REPL options, this is the function to invoke to format the output of each command before writing to outputStream. If not specified in the REPL options, this will be a wrapper for util.inspect.

Methods

addListener(
event: string,
listener: (...args: any[]) => void,
): this

events.EventEmitter

  1. close - inherited from readline.Interface
  2. line - inherited from readline.Interface
  3. pause - inherited from readline.Interface
  4. resume - inherited from readline.Interface
  5. SIGCONT - inherited from readline.Interface
  6. SIGINT - inherited from readline.Interface
  7. SIGTSTP - inherited from readline.Interface
  8. exit
  9. reset
addListener(
event: "close",
listener: () => void,
): this
addListener(
event: "line",
listener: (input: string) => void,
): this
addListener(
event: "pause",
listener: () => void,
): this
addListener(
event: "resume",
listener: () => void,
): this
addListener(
event: "SIGCONT",
listener: () => void,
): this
addListener(
event: "SIGINT",
listener: () => void,
): this
addListener(
event: "SIGTSTP",
listener: () => void,
): this
addListener(
event: "exit",
listener: () => void,
): this
addListener(
event: "reset",
listener: (context: Context) => void,
): this

The replServer.clearBufferedCommand() method clears any command that has been buffered but not yet executed. This method is primarily intended to be called from within the action function for commands registered using the replServer.defineCommand() method.

defineCommand(
keyword: string,
): void

The replServer.defineCommand() method is used to add new .-prefixed commands to the REPL instance. Such commands are invoked by typing a . followed by the keyword. The cmd is either a Function or an Object with the following properties:

The following example shows two new commands added to the REPL instance:

import repl from 'node:repl';

const replServer = repl.start({ prompt: '> ' });
replServer.defineCommand('sayhello', {
  help: 'Say hello',
  action(name) {
    this.clearBufferedCommand();
    console.log(`Hello, ${name}!`);
    this.displayPrompt();
  },
});
replServer.defineCommand('saybye', function saybye() {
  console.log('Goodbye!');
  this.close();
});

The new commands can then be used from within the REPL instance:

> .sayhello Node.js User
Hello, Node.js User!
> .saybye
Goodbye!
displayPrompt(preserveCursor?: boolean): void

The replServer.displayPrompt() method readies the REPL instance for input from the user, printing the configured prompt to a new line in the output and resuming the input to accept new input.

When multi-line input is being entered, an ellipsis is printed rather than the 'prompt'.

When preserveCursor is true, the cursor placement will not be reset to 0.

The replServer.displayPrompt method is primarily intended to be called from within the action function for commands registered using the replServer.defineCommand() method.

emit(
event: string | symbol,
...args: any[],
): boolean
emit(event: "close"): boolean
emit(
event: "line",
input: string,
): boolean
emit(event: "pause"): boolean
emit(event: "resume"): boolean
emit(event: "SIGCONT"): boolean
emit(event: "SIGINT"): boolean
emit(event: "SIGTSTP"): boolean
emit(event: "exit"): boolean
emit(
event: "reset",
context: Context,
): boolean
on(
event: string,
listener: (...args: any[]) => void,
): this
on(
event: "close",
listener: () => void,
): this
on(
event: "line",
listener: (input: string) => void,
): this
on(
event: "pause",
listener: () => void,
): this
on(
event: "resume",
listener: () => void,
): this
on(
event: "SIGCONT",
listener: () => void,
): this
on(
event: "SIGINT",
listener: () => void,
): this
on(
event: "SIGTSTP",
listener: () => void,
): this
on(
event: "exit",
listener: () => void,
): this
on(
event: "reset",
listener: (context: Context) => void,
): this
once(
event: string,
listener: (...args: any[]) => void,
): this
once(
event: "close",
listener: () => void,
): this
once(
event: "line",
listener: (input: string) => void,
): this
once(
event: "pause",
listener: () => void,
): this
once(
event: "resume",
listener: () => void,
): this
once(
event: "SIGCONT",
listener: () => void,
): this
once(
event: "SIGINT",
listener: () => void,
): this
once(
event: "SIGTSTP",
listener: () => void,
): this
once(
event: "exit",
listener: () => void,
): this
once(
event: "reset",
listener: (context: Context) => void,
): this
prependListener(
event: string,
listener: (...args: any[]) => void,
): this
prependListener(
event: "close",
listener: () => void,
): this
prependListener(
event: "line",
listener: (input: string) => void,
): this
prependListener(
event: "pause",
listener: () => void,
): this
prependListener(
event: "resume",
listener: () => void,
): this
prependListener(
event: "SIGCONT",
listener: () => void,
): this
prependListener(
event: "SIGINT",
listener: () => void,
): this
prependListener(
event: "SIGTSTP",
listener: () => void,
): this
prependListener(
event: "exit",
listener: () => void,
): this
prependListener(
event: "reset",
listener: (context: Context) => void,
): this
prependOnceListener(
event: string,
listener: (...args: any[]) => void,
): this
prependOnceListener(
event: "close",
listener: () => void,
): this
prependOnceListener(
event: "line",
listener: (input: string) => void,
): this
prependOnceListener(
event: "pause",
listener: () => void,
): this
prependOnceListener(
event: "resume",
listener: () => void,
): this
prependOnceListener(
event: "SIGCONT",
listener: () => void,
): this
prependOnceListener(
event: "SIGINT",
listener: () => void,
): this
prependOnceListener(
event: "SIGTSTP",
listener: () => void,
): this
prependOnceListener(
event: "exit",
listener: () => void,
): this
prependOnceListener(
event: "reset",
listener: (context: Context) => void,
): this
setupHistory(
path: string,
callback: (
err: Error | null,
repl: this,
) => void
,
): void

Initializes a history log file for the REPL instance. When executing the Node.js binary and using the command-line REPL, a history file is initialized by default. However, this is not the case when creating a REPL programmatically. Use this method to initialize a history log file when working with REPL instances programmatically.