@alu0101240374/addlogging
Version:
70 lines (61 loc) • 2.36 kB
JavaScript
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}`);
}