UNPKG

@alu0101240374/addlogging

Version:
70 lines (61 loc) 2.36 kB
#!/usr/bin/env node const util = require('util'); const fs = require('fs'); var escodegen = require('escodegen'); var espree = require('espree'); var estraverse = require('estraverse'); const program = require('commander'); const { version, description } = require('./package.json'); function addLogging(code, pattern) { var ast = espree.parse(code, {ecmaVersion: 6, loc: true}); let patternRegex = new RegExp(pattern); estraverse.traverse(ast, { enter: function(node, parent) { if ((node.type === 'FunctionDeclaration' || node.type === 'FunctionExpression' || node.type === 'ArrowFunctionExpression') && (pattern == undefined || node.id == undefined || patternRegex.test(node.id.name))) { addBeforeCode(node); } } }); return escodegen.generate(ast); } function addBeforeCode(node) { var name = node.id ? node.id.name : '<anonymous function>'; let parameters = node.params.map(param => `\$\{${param.name}\}`); var beforeCode = `console.log(\`Entering ${name}(${parameters}) at line ${node.loc.start.line}\`);`; var beforeNodes = espree.parse(beforeCode, { ecmaVersion: 6 }).body; node.body.body = beforeNodes.concat(node.body.body); } program .version(version) .description(description) .usage('[opciones] <nombreFicheroEntrada>') .option('-o, --output <filename>', 'asigna un fichero donde se guardara la salida') .option('-p --pattern <patttern>', 'añadira los mensajes a las funcionas que tengan ese pattern'); program.parse(process.argv); const options = program.opts(); let inputFilename = program.args.shift(); try { if (inputFilename) { fs.readFile(inputFilename, 'utf8', (err,input) => { if (err) throw `Error reading '${inputFilename}': ${err}`; const output = (options.pattern) ? addLogging(input, options.pattern) : addLogging(input); console.error(`\ninput:\n${input}\n---`); if (options.output) { fs.writeFile(options.output, output, err => { if (err) throw `Cant write to '${options.output}': ${err}`; console.log(`Output in file '${options.output}'`); }) } else { console.error(`output:\n`); console.log(output); } }) } } catch (e) { console.error(`Hubieron errores: ${e}`); }