Makes your code tell you what the intermediate results are when executing a script.
JavaScript CSS
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
assets
bin
examples
info
lib
test
.gitignore
.npmignore
.travis.yml
README.md
index.js
package.json

README.md

scriptie-talkie build status

Makes your code tell you what the intermediate results are when executing a script.

try it in the browser

var a = 3;

a = a + 1;
a++;

var b = 2;
b = b + a;

changing-var

Installation

npm install scriptie-talkie

(Add -g to install as global command line tool)

Command Line Tool

scriptie-talkie a file

scriptie-talkie path/to/script.js

Prints the highlighted code of script.js with intermediate results.

piping into scriptie-talkie

curl https://raw.github.com/thlorenz/ansicolors/master/ansicolors.js | scriptie-talkie

Prints the highlighted code of ansicolors.js with intermediate results.

Note that in this case require statements cannot be resolved.

API

scriptie-talkie(script, scriptPath, opts)

/**
 * Evaluates all snippets in the given script and calls opts.write with the result.
 * 
 * @name exports
 * @function
 * @param script {String} The String to evaluate.
 * @param scriptPath {String} The path to the script (important to resolve require statements)
 * @param opts {Object} { 
 *    toLines: function(code:String) -> [String] - to split script into lines -- uses cardinal syntax highlighter by default
 *    write  : function(result:String) - to be called to write the result -- default console.log
 *    diff   : { joinLinesAt: at what point is diff compacted to one line               -- default 20
 *             , maxLineLength: at which length is a diff line cut of with an ellipsis  -- default 380
 *             }
 */
var talk    =  require('scriptie-talkie')
  , fs      =  require('fs');
  ,  script =  fs.readFileSync(scriptPath, 'utf-8');

talk(script, scriptPath, { write: console.error, { diff: { joinLinesAt: 80 } });

browser support

scriptie-talkie does work in the browser as long as a vm and Buffer module is available. Additionally the presence of a process with process.browser = true is essential.

The easiest way to build an application that uses sciptie-talkie via browserify as I did in this example. The above mentioned live sample was built like that.

Roadmap

More Examples

var o = { a: 1 };

o.a = 2;

objects-simple

var a = 3;

a + b;

var b = 2;

console.log(b.hello());

error

var a = 1;
foo();

function foo () {
  return a++;
}
foo() + 1;

function-call-before-declaration.png