/**
* @name node.repl
* @namespace
* A Read-Eval-Print-Loop (REPL) is available both as a standalone program and easily
* includable in other programs. REPL provides a way to interactively run
* JavaScript and see the results. It can be used for debugging, testing, or
* just trying things out.
*
* By executing <code>node</code> without any arguments from the command-line you will be
* dropped into the REPL. It has simplistic emacs line-editing.
* <pre>
* mjr:~$ node
* Type '.help' for options.
* > a = [ 1, 2, 3];
* [ 1, 2, 3 ]
* > a.forEach(function (v) {
* ... console.log(v);
* ... });
* 1
* 2
* 3
* </pre>
* For advanced line-editors, start node with the environmental variable <code>NODE<em>NO</em>READLINE=1</code>.
* This will start the REPL in canonical terminal settings which will allow you to use with <code>rlwrap</code>.
*
* For example, you could add this to your bashrc file:
* <pre>
* alias node="env NODE<em>NO</em>READLINE=1 rlwrap node"
* </pre>
*/
goog.provide("node.repl");
/**
* @param {Object} obj
* @param {string} showHidden
* @param {number} depth
* @param {string} colors
*/
node.repl.writer = function(obj, showHidden, depth, colors) {
return node.repl.core_.writer(obj, showHidden, depth, colors);
};
/**
* Starts a REPL with <code>prompt</code> as the prompt and <code>stream</code> for all I/O. <code>prompt</code>
* is optional and defaults to <code>> </code>. <code>stream</code> is optional and defaults to
* <code>process.stdin</code>.
*
* Multiple REPLs may be started against the same running instance of node. Each
* will share the same global object but will have unique I/O.
*
* Here is an example that starts a REPL on stdin, a Unix socket, and a TCP socket:
* <pre>
* var net = require("net"),
* repl = require("repl");
*
* connections = 0;
*
* repl.start("node via stdin> ");
*
* net.createServer(function (socket) {
* connections += 1;
* repl.start("node via Unix socket> ", socket);
* }).listen("/tmp/node-repl-sock");
*
* net.createServer(function (socket) {
* connections += 1;
* repl.start("node via TCP socket> ", socket);
* }).listen(5001);
* </pre>
* Running this program from the command line will start a REPL on stdin. Other
* REPL clients may connect through the Unix socket or TCP socket. <code>telnet</code> is useful
* for connecting to TCP sockets, and <code>socat</code> can be used to connect to both Unix and
* TCP sockets.
*
* By starting a REPL from a Unix socket-based server instead of stdin, you can
* connect to a long-running node process without restarting it.
* @param {string} prompt
* @param {string} source
*/
node.repl.start = function(prompt, source) {
return node.repl.core_.start(prompt, source);
};
/**
* @private
* @type {*}
*/
node.repl.core_ = require("repl");