UNPKG

@alu0101265704/addlogging

Version:

[![npm version](https://badge.fury.io/js/%40alu0101265704%2Faddlogging.svg)](https://badge.fury.io/js/%40alu0101265704%2Faddlogging)

48 lines (44 loc) 1.82 kB
#!/usr/bin/env node const fs = require('fs'); const program = require('commander'); const { version, description } = require('../package.json'); let escodegen = require('escodegen'); let esprima = require('espree'); const espree = require('espree/lib/espree'); let estraverse = require('estraverse'); /** * Changes the initial code into other code with extra lines * @param {String} code Code from which more code will be generated * @param {String} patternName Specified pattern name to be compared with the function in * case it has an id * @returns {String} generated code with modifications */ let addLogging = function(code, patternName = '') { let ast = esprima.parse(code, { ecmaVersion: 6, loc: true}); estraverse.traverse(ast, { enter: function(node, parent) { if (node.type === 'FunctionDeclaration' || node.type === 'FunctionExpression' || node.type === 'ArrowFunctionExpression') { if (!patternName || node.id && node.id.name.match(patternName) || (node.id === null && parent.id.name.match(patternName))) { addBeforeCode(node); } } } }); return escodegen.generate(ast); } /** * Receives a node with associated code, for it to be verified and add an * additional line straightaway once entered into the function * @param {} node */ let addBeforeCode = function(node) { const functionName = node.id ? node.id.name : '<anonymous function>'; const parameters = node.params.map(param => `\$\{${param.name}\}`); let beforeCode = `console.log(\`Entering ${functionName} (${parameters})) at line ${node.loc.start.line}\`);`; let beforeNodes = esprima.parse(beforeCode, { ecmaVersion: 6}).body; // Is an Array of ASTs node.body.body = beforeNodes.concat(node.body.body); } module.exports.addLogging = addLogging;