Skip to content

Instantly share code, notes, and snippets.

@kumabook
Last active August 23, 2016 21:19
Show Gist options
  • Save kumabook/bc06c60288a840fa7246 to your computer and use it in GitHub Desktop.
Save kumabook/bc06c60288a840fa7246 to your computer and use it in GitHub Desktop.
Inject log code to JavaScript function
esprima = require 'esprima'
escodegen = require 'escodegen'
fs = require 'fs'
estraverse = require('estraverse')
source = process.argv[2]
fs.readFile source, (err, origCode) ->
logger = esprima.parse(
'console.log("trace: " + arguments.callee.name, arguments);'
).body
ast = esprima.parse(origCode.toString())
estraverse.traverse ast,
enter: (node, parent) ->
if (node.type == 'FunctionExpression' || node.type == 'FunctionDeclaration')
node.body.body = logger.concat(node.body.body)
leave: (node, parent) ->
if node.type == 'VariableDeclarator'
console.log(node.id.name);
newCode = escodegen.generate ast
console.log(newCode)
eval(newCode)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment