UNPKG

@alu0100901214/espree-logging-module

Version:
50 lines (43 loc) 1.69 kB
const escodegen = require('escodegen'); const espree = require('espree'); const estraverse = require('estraverse'); const {version, description} = require('../package.json'); const fs = require('fs'); module.exports = { addLogging }; check = false; /** * Add console.log in every Function. * @param {string} code String with the code. * @returns {string} Return the string with the console.log inserted. */ function addLogging(code, regexPattern) { var ast = espree.parse(code,{ecmaVersion: espree.latestEcmaVersion, loc: true}); estraverse.traverse(ast, { enter: function(node, parent) { if (node.type === 'FunctionDeclaration' || node.type === 'FunctionExpression' || node.type === 'ArrowFunctionExpression') { if (regexPattern != null){ if(node.id != null){ if(regexPattern.test(node.id.name)) addBeforeCode(node); } }else{ addBeforeCode(node); } } } }); return escodegen.generate(ast); } /** * Add logs to an AST node. * @param {object} node An AST node with the function, the console.log will be added inside. */ function addBeforeCode(node) { const name = node.id ? node.id.name : '<anonymous function>'; const parameters = node.params.map(param => `\$\{${param.name}\}`); const beforeCode = `console.log(\`Entering ${name}(${parameters}) at line ${node.loc.start.line}\`);`; const beforeNodes = espree.parse(beforeCode, {ecmaVersion:6} ).body; node.body.body = beforeNodes.concat(node.body.body); }