In [6]:
var fondue = require('fondue')


Out[6]:
undefined

In [12]:
console.log(fondue.instrument("for(var i = 0; i < 100; i++){console.log(i)}", {include_prefix: false}).toString())


/*
The following code has been modified by fondue to collect information about its
execution.

https://github.com/adobe-research/fondue
*/

if (typeof __tracer === 'undefined') {
	__tracer = {};
	var methods = ["add", "addSourceMap", "traceFileEntry", "traceFileExit", "setGlobal", "traceFunCreate", "traceEnter", "traceExit", "traceReturnValue", "traceExceptionThrown", "bailThisTick", "pushEpoch", "popEpoch", "augmentjQuery", "version", "connect", "nodes", "trackNodes", "untrackNodes", "newNodes", "trackHits", "trackExceptions", "trackLogs", "trackEpochs", "untrackEpochs", "trackFileCallGraph", "untrackFileCallGraph", "fileCallGraphDelta", "hitCountDeltas", "newExceptions", "epochDelta", "logCount", "logDelta", "backtrace"];
	for (var i = 0; i < methods.length; i++) {
		__tracer[methods[i]] = function () { return arguments[0] };
	}

	__tracer.traceFunCall = function (info) {
		var customThis = false, fthis, func;

		if ('func' in info) {
			func = info.func;
		} else {
			customThis = true;
			fthis = info.this;
			func = fthis[info.property];
		}

		return function () {
			return func.apply(customThis ? fthis : this, arguments);
		};
	};

	__tracer.Array = Array;
}
__tracer.add("<anonymous>", {"nodes":[{"path":"<anonymous>","start":{"line":1,"column":29},"end":{"line":1,"column":43},"id":"<anonymous>-callsite-1-29-1-43","type":"callsite","name":"console.log","nameStart":{"line":1,"column":37},"nameEnd":{"line":1,"column":40}},{"path":"<anonymous>","start":{"line":1,"column":0},"end":{"line":1,"column":44},"id":"<anonymous>-toplevel-1-0-1-44","type":"toplevel","name":"(<anonymous> toplevel)"}]});

__tracer.traceFileEntry({"nodeId":"<anonymous>-toplevel-1-0-1-44"});
try {
for(var i = 0; i < 100; i++){ __tracer.traceFunCall({ this: console, property: "log", nodeId: "<anonymous>-callsite-1-29-1-43", vars: {} })(i);}
} finally {
__tracer.traceFileExit({"nodeId":"<anonymous>-toplevel-1-0-1-44"});
}
Out[12]:
undefined

In [13]:
var eselector = require('esprima-selector');


Out[13]:
undefined

In [14]:
var falafel = require('falafel')


Out[14]:
undefined

In [62]:
var falafel = require('falafel');
 
var src = '(' + function () {
    var xs = [ 1, 2, [ 3, 4 ] ];
    var ys = [ 5, 6 ];
    console.dir([ xs, ys ]);
    for(var i = 0; i < 100; i++){
        console.log(i)
    }
    ;[1,2,3,4,5,6,7].forEach(function(derp, flerp){
        console.log(derp)
        function blah(){
            
        }
    }).map(function(asdf){
    })
} + ')()';
 
var output = falafel(src, function (node) {
    if (node.type === 'ArrayExpression') {
//         node.update('fn(' + node.source() + ')');
    }else if(node.type === 'ForStatement'){
//         console.log(node)
//         node.update()
//         console.log(node.update)
        node.update.update(node.update.source() + ', merp()')
    }else if(node.type === 'MemberExpression' && node.property.name == 'forEach'){ // TODO: support map
//         console.dir(node.parent.arguments[0].body)
        falafel(node.parent.source(), function(nodeception){
//             console.log(nodeception)
            if(nodeception.type == 'BlockStatement'){
                console.log(nodeception.source())
            }
        })
    }
});
// console.log(output);


{
            
        }
{
        console.log(derp)
        function blah(){
            
        }
    }
Out[62]:
undefined

In [ ]: