programmatic-repl
programmatic-repl
is a Node.js module that allows one to simulate a repl programmatically. This is very useful for embedded application where you'd like to simulate a repl. If you have plans to use this for a CLI application, I would suggest the official repl module instead.
Initializing
The module exports the REPL
class. The parameters to this class are options, context
.
Options
All of the options are optional.
Parameter | Type | Description | Default |
---|---|---|---|
options.includeNative |
Boolean | This property will include native Node.js functions and properties in the REPL context. Specifically require , Buffer , __dirname , setImmediate , clearImmediate , clearInterval , clearTimeout and process . |
false |
options.includeBuiltinLibs |
Boolean | This property will include all of the native Node.js modules and libraries in the REPL context (e.g. child_process and fs ). A full list of these modules can be found here. |
false |
options.indentation |
Number | This is the amount of spaces of indentation the REPL will show intermediate outputs with. | 2 |
options.name |
String | The "name" of the repl - shows up as the filename in stack traces / errors | 'programmatic-repl' |
Context
The Context parameter is an object of values you want to include in the REPL.
Example
const ProgrammaticREPL = ; const REPL = includeNative: true includeBuiltinLibs: true indentation: 2 foo: 'bar' baz: 'qux';
Usage
Once you've initiated your REPL, you can use the execute
method. The execute
method takes 1 parameter (in the form of a String): the input. The method always returns a Promise. The result will either be the computed value or an intermediate output.
The input is ofcourse your JavaScript, but the following commands / variables are available:
Name | Description |
---|---|
.clear |
This command deletes any variables you've made and resets the context fully. |
_ |
In the form of a variable, this is the output of the last ran command. |
Examples
The examples assume the REPL has already been initiated.
await REPL;// returns 5
await REPL;// returns undefined await REPL;// returns { foo: 'bar' } await REPL;// returns [ 'foo' ] await REPL;// returns 'Successfully cleared variables.' await REPL;// throws a ReferenceError: myObject is not defined
The module also lets you leave brackets open and view intermediate results.
await REPL;// returns (String):`if (true) { ...` await REPL;// returns (String):`if (true) { if (false || true) { ...` await REPL;// returns (String):`if (true) { if (false || true) { Promise.resolve(42); ...` await REPL;// returns (String):`if (true) { if (false || true) { Promise.resolve(42); } ...` await REPL;// returns (Number, resolved Promise): 42
And lastly, some examples for REPL parameters:
const REPL = includeNative: true includeBuiltinLibs: true indentation: 2 foo: 'bar' baz: 'qux'; // Node.js-specific variables are included, because we specified it:await REPL;await REPL // Builtin libs too, because we specified it:await REPL;await REPL; // And, our own passed context:await REPL// returns true
Contributing
it's late i'll do this tomorrow