{"_id":"@adriangrassin/espree-logging-solution","name":"@adriangrassin/espree-logging-solution","dist-tags":{"latest":"0.5.0"},"versions":{"0.5.0":{"name":"@adriangrassin/espree-logging-solution","author":{"name":"Adrian Grassin Luis","email":"alu0101349480@ull.edu.es"},"description":"Adds logs to javascript code","type":"module","bin":{"funlog":"bin/log.js"},"scripts":{"test":"mocha ./test/test.mjs","doc":"c8 npm test","exec1":"node bin/log.js ./test/data/test1.js","exec2":"node bin/log.js ./test/data/test2.js","exec3":"node bin/log.js ./test/data/test3.js","exec-out":"node bin/log.js ./test/data/test3.js -o ./bin/output.js","cov":"c8 npm run test","cov_report":"c8 --reporter=html --reporter=text --report-dir=docs mocha","jsdoc":"jsdoc2md --files src/*.js > jsdoc/README.md"},"dependencies":{"acorn":"^8.8.2","commander":"^10.0.0","escodegen":"^2.0.0","espree":"^9.4.1","estraverse":"^5.2.0","underscore":"^1.12.0"},"version":"0.5.0","devDependencies":{"mocha":"^10.2.0"},"publishConfig":{"access":"public"},"gitHead":"d1cdaea590b01c246c424908b611101e2b7164a7","_id":"@adriangrassin/espree-logging-solution@0.5.0","_nodeVersion":"19.6.0","_npmVersion":"9.4.2","dist":{"integrity":"sha512-8W2S6xEyglrqMYkB3VcIgx+EauvKPmDBhFZ+BLqBUJ29IGJPg0l6zVHVNMY5kLQuuxsJRzZWQwi4q2YWnWLWeQ==","shasum":"7f321675686d1285848ee7d40aa56d9c13a49950","tarball":"https://registry.npmjs.org/@adriangrassin/espree-logging-solution/-/espree-logging-solution-0.5.0.tgz","fileCount":19,"unpackedSize":46650,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQYI/zPf8vHZlT34WcbYV+i0fNMA/+RT5ilACFQC2LxQIgVJl3RyWd4D53doJv4M3qHdHXcIAx+hbFoQf92qqHqcQ="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkAam+ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrMEQ/9EBuhkZGDu4deGROLQ1QQHJAmO3/JWveqIf2+5B52hYzdNfJn\r\nPrm3dnVySFsZ8IFiNBBEoSxMmjromBM+2UAzIh/10Qha4vX4Aj2Zy0iLuB/L\r\noRMCyr+qHOkjrIRbecVM9Z66pX6Fv7KdGSmobkn++pK5KWAKnhdW9kjO8NLA\r\nWT0U1UnbPrjbqMaP4RPD/KnJuNFh9lB/oNK8EKNT/l/QYyov5zuy6jq9bhge\r\nJeTeDCj8s9g6O8v+f2XwkKNaHghOwiypSJ121NjMWlyHnliuim5ZU++3VY8S\r\n7W2xbPZf6Ww28Y2Cr7dG1yHBFcrrMaSrbHqy89c9oeL+K/5GS+y/K9VP3Q7z\r\nPpMmEYsG60Xtt1Ext38iatsFNyvlDhCrDO16eLGqE/hiJKIh+iUyBCAur5g8\r\ny6U2rU5eKSrqw37gfVsq8iCa0jx8vvSPwcVuhk8QIvnIcgqelZFeqxP300wb\r\nFg5dW1Xjf5tR+jsZe8ywv1pHVEN6C83jt9VDoz0UoKt8jRK/1KPuZiCv7sXQ\r\ntvAesLWSSttcV4guASjbId1XZFsBYKp74XnNSZaDEZ+NFcQLgDtPRBleSAHC\r\nnAUCQkChS4jhx3JIKYzFaeZ33/dJcCTVIAs96GYEAKj9+zBrL9ZSaeXNqB5b\r\nznxZ0DSzPGA87BfQhN7PhHlHtAbuK2W4pww=\r\n=3o4y\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"adriangrassin","email":"alu0101349480@ull.edu.es"},"directories":{},"maintainers":[{"name":"adriangrassin","email":"alu0101349480@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/espree-logging-solution_0.5.0_1677830590683_0.27039932507615205"},"_hasShrinkwrap":false}},"time":{"created":"2023-03-03T08:03:10.631Z","0.5.0":"2023-03-03T08:03:10.865Z","modified":"2023-03-03T08:03:11.009Z"},"maintainers":[{"name":"adriangrassin","email":"alu0101349480@ull.edu.es"}],"description":"Adds logs to javascript code","author":{"name":"Adrian Grassin Luis","email":"alu0101349480@ull.edu.es"},"readme":"[![Open in Codespaces](https://classroom.github.com/assets/launch-codespace-f4981d0f882b2a3f0472912d15f9806d57e124e0fc890972558857b51b24a6f9.svg)](https://classroom.github.com/open-in-codespaces?assignment_repo_id=10358004)\n# Práctica Espree logging\n\n## Resumen de lo aprendido\n\nEn esta práctica hemos empleado conceptos nuevos como integración continua, que facilitaría el desarrollo del proyecto en caso de que se quisiese escalar mediante GitHub Actions.\n\n\n-------------------------\n\n## Indicar los valores de los argumentos\n\nSe ha modificado el código de `logging-espree.js` para que el log también indique los valores de los argumentos que se pasaron a la función. \n<br> \n\n*Ejemplo:* <br>\n\n```javascript\nfunction foo(a, b) {\n  var x = 'blah';\n  var y = (function (z) {\n    return z+3;\n  })(2);\n}\nfoo(1, 'wut', 3);\n```\n\n```javascript\nfunction foo(a, b) {\n    console.log(`Entering foo(${ a }, ${ b })`);\n    var x = 'blah';\n    var y = function (z) {\n        console.log(`Entering <anonymous function>(${ z })`);\n        return z + 3;\n    }(2);\n}\nfoo(1, 'wut', 3);\n```\n<br>\n\n-------------------------\n\n## CLI con [Commander.js](https://www.npmjs.com/package/commander)\n\nSe han añadido opciones -h y -V, que vienen reconocidas automáticamente con Commander, y una opción que permite especificar el fichero de salida.<br><br>\n\n*Por ejemplo con -h:*<br>\n![help](/docs/imgs/help.png) \n\n<br>\n\n*Con -V simplemente nos saldría el número de versión especificado en el package.json*\n\n<br>\n\n-------------------------\n\n## Reto 1: Soportar funciones flecha\n\nPara lograr que se puedan soportar este tipo de funciones ha sido necesario modificar la función *addLogging(code)*, incluyendo en el traverse los nodos de tipo *'ArrowFunctionExpression'*. Es importante mencionar que se le tiene que pasar una versión de *ecma* que soporte este tipo de funciones. (En este caso usaremos la versión 12 del estandar).\n\n```javascript\nexport function addLogging(code) {\n  var ast = espree.parse(code, {ecmaVersion: 12, loc: true});\n  estraverse.traverse(ast, { /// Con traverse nos metemos en el árbol y buscamos que tipo de node es\n    enter: function(node, parent) {\n      if (node.type === 'FunctionDeclaration' ||\n          node.type === 'ArrowFunctionExpression' ||\n          node.type === 'FunctionExpression') {\n            addBeforeCode(node);\n          }\n      }\n    });\n  return escodegen.generate(ast); /// Generamos el ast usando escodegen\n}\n```\n-------------------------\n\n## Reto 2: Añadir el número de línea\n\nUsando una variable llamada *'lines'*, podemos obtener la propiedad del número de línea ya que cada nodo tiene una propiedad que contiene información sobre su localización en el código al principio del nodo. <br>\n![addbeforeCode](./docs/imgs/addbefore.png)\n<br>\n\n## Tests and Covering\n\n...","readmeFilename":"README.md"}