{"_id":"@arcadiad/espree-logging-solution","_rev":"2-341972ece3c484b1d3f2d3e76c2cbce8","name":"@arcadiad/espree-logging-solution","dist-tags":{"latest":"1.1.1"},"versions":{"1.0.0":{"name":"@arcadiad/espree-logging-solution","author":{"name":"Casiano Rodriguez Leon","email":"crguezl@ull.edu.es","url":"https://crguezl.github.io/"},"description":"Adds logs to javascript code","type":"module","bin":{"funlog":"bin/log.js"},"scripts":{"test":"mocha test/test.mjs","cov":"c8 npm test"},"dependencies":{"commander":"^10.0.0","escodegen":"^2.0.0","espree":"^9.4.1","estraverse":"^5.2.0","underscore":"^1.12.0"},"version":"1.0.0","devDependencies":{"mocha":"^10.2.0","c8":"^7.13.0"},"gitHead":"cf4c839388cb9169ec3c7e1991d6d6798df45753","_id":"@arcadiad/espree-logging-solution@1.0.0","_nodeVersion":"19.6.0","_npmVersion":"9.4.0","dist":{"integrity":"sha512-bWJRIhiWBouNTD5kTaaGUKte6Qu/r8xxtwIvm9YUR1Do23cr5ZQ/7gT9LxTuT+7bnA5RNQ8stflWn7P+3D6pbw==","shasum":"395939607d351c4d78930058fde755dcce9a2631","tarball":"https://registry.npmjs.org/@arcadiad/espree-logging-solution/-/espree-logging-solution-1.0.0.tgz","fileCount":29,"unpackedSize":1890658,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDIGLyRuyUADkpSY1lEho5vPZuTafWVRnX0khk2jqmtJAiBOuiPDuLE4lITIQ5ZntN890ietx/nRmRMgIricBwtBwA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj//1aACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoxaxAAh+1L8Y1XGYQgs4fx51L7XWemdY4nOqZpkclJDK4S+TkTBW68\r\nb6FFnYm9L3ggwSuMNWrHIDtRqVprgI93Qbt+AVNl8sK/bNx1nBSKyvHnsvKI\r\nvuCXVqOX9v1yhwkTMc+Ru0KP5G/4IotVjUerEjk9MfTQtwAuui+bXzuY/ZUs\r\nFTAdkW1BcP/xe28gz4NggH3PfPZFwYtdYHKl3slamz5xJsawmaaNO+4g1Fil\r\nCg8Whuh4TBgWsaT67NOYXaPFbFP1o2oRkbxyskvTSHoBbqqOGDQkM4ESj/r2\r\nFH/dWOzkyh3yx/xUs7kaxMAMdbf0/CymbYdP/ErrIM+DM0lTFAgF8ZTyRO3S\r\nknhLHAFR5ZLWiiwlTK5Xd/qzldBsn676g7VlGlY3QFDt5siYrwy5qjLSbSBV\r\nVEujRwiWVpAgW6r3BLIAsG3KuGrV+KwBXpMUke/+5PN2YzKO5Qhvx1fGahwB\r\nEnojE6g7QbJI5Lz16MhBcItxztFQO5SVO00RC4I1WrEEtyq4Uall0gcII9Ys\r\n8fo9Bci0M2UYCMTTOEtxNtV+vdl7PoIbHZuooZdZ1rn0tu+G7vZvbNVtmHLT\r\nWw+u8ZW4Jb9O4N2uq9znlMtzgGHGvn+XtCKxJmJ96uhzLh53GIR5kUBEasbi\r\nCKiqnvucbsxkrWTphOYCRry3+Pi1Q6ynbhQ=\r\n=h5Vm\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"arcadiad","email":"alu0101345918@ull.edu.es"},"directories":{},"maintainers":[{"name":"arcadiad","email":"alu0101345918@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/espree-logging-solution_1.0.0_1677720922744_0.5678357706216957"},"_hasShrinkwrap":false},"1.1.0":{"name":"@arcadiad/espree-logging-solution","author":{"name":"Casiano Rodriguez Leon","email":"crguezl@ull.edu.es","url":"https://crguezl.github.io/"},"description":"Adds logs to javascript code","type":"module","bin":{"funlog":"bin/log.js"},"scripts":{"exec":"node bin/log.js","exec-out":"node bin/log.js -o ./bin/output.js","test":"mocha test/test.mjs","cov":"c8 npm test","cov-docs":"c8 npm test -- --reporter=html --reporter=text --reports-dir docs","jsdoc2md":"jsdoc2md --files src/*.js > jsdoc/README.md"},"dependencies":{"commander":"^10.0.0","escodegen":"^2.0.0","espree":"^9.4.1","estraverse":"^5.2.0","underscore":"^1.12.0"},"version":"1.1.0","devDependencies":{"c8":"^7.13.0","jsdoc-to-markdown":"^8.0.0","mocha":"^10.2.0"},"gitHead":"7e29e1a712b9ab307f38e1619510dc3e1a8afad8","_id":"@arcadiad/espree-logging-solution@1.1.0","_nodeVersion":"19.6.0","_npmVersion":"9.4.0","dist":{"integrity":"sha512-aSG3DleHtpEi7DTO39KMEh0PfQMt4AWFcPc+CmhekQwxNLPfVErIM29vrs05YnzILd6t0TokVipDbbm5j/dmZg==","shasum":"28044bc7837f76c997511eee19ffc0064c3e5862","tarball":"https://registry.npmjs.org/@arcadiad/espree-logging-solution/-/espree-logging-solution-1.1.0.tgz","fileCount":39,"unpackedSize":1899184,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIENkmuys6Tpg6bSpS6RU+Sd5jVSSVQD8h+hdQkXa4/aFAiAq7ruyicdYp5BjbF57FbEhWfulRtzWCisnBPMiOk5yew=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkABOKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrn3A/+JvtBe2+HheZUMQHR7dFZ6IcpBNEKuw3a6uBD5gS2XfiU/9hO\r\n3RhSpNZ6szICrDqygOLeGA4ee2jYqdbcoIS0R5+IyxJ7hswLBmOwHI/3PoKv\r\nPuCwsNIe427NhZb8BHv7hirD/0zjIy4Wh4hYuIg4mxd8873mqvu35xNsWYms\r\nEUGuK/DRW/91vlO1BN+ZYaKrIMhNkrGRcWJ1iOZNPiwuirugq3SyCXUNzFtM\r\npPVQ8OKWIa+fX9Kif8VyYvFNqfZAnK02GaTBrZlYA4nPpYzake1WG7nCBQBI\r\niitypBM04YUZBFOJwY+T49BbnzsN0asihIi/UW0LyExJpIdprvGb8X3pPJSf\r\n69NDwWEFOWF5XkBf4DEiifwf5jQJi8/AQHzpoewuwe/AkH3tJsumxGwyocKK\r\nO8En1G5g5SLEluH/r1QGiJP3mwSlFuCmYASFXNp61lrCcPkyLafUSeCGuZde\r\n8y8wkta35SJKMbNAyFaRyfJzWoFtD+8JuMdd2Azs3pNzvKupI31JcLXF54Iw\r\nwZzkp+pETzmHuQM0t8VHuDQMeiXKeGnIc87sTgKEJ4PmBliPOyqpeVsO3Xu2\r\nMbwCP3RS91+eLQMITk7PydUuLBs48kA+atUaUtz2yVWi6R24XbJIaO2q5OEk\r\ni9LWWzXcC2vwKjSgOl+McreA0sSH8Fo5Bs0=\r\n=uEws\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"arcadiad","email":"alu0101345918@ull.edu.es"},"directories":{},"maintainers":[{"name":"arcadiad","email":"alu0101345918@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/espree-logging-solution_1.1.0_1677726602078_0.9125493168058638"},"_hasShrinkwrap":false},"1.1.1":{"name":"@arcadiad/espree-logging-solution","author":{"name":"Casiano Rodriguez Leon","email":"crguezl@ull.edu.es","url":"https://crguezl.github.io/"},"description":"Adds logs to javascript code","type":"module","bin":{"funlog":"bin/log.js"},"scripts":{"exec":"node bin/log.js","exec-out":"node bin/log.js -o ./bin/output.js","test":"mocha test/test.mjs","cov":"c8 npm test","cov-docs":"c8 npm test -- --reporter=html --reporter=text --reports-dir docs","jsdoc2md":"jsdoc2md --files src/*.js > jsdoc/README.md"},"dependencies":{"commander":"^10.0.0","escodegen":"^2.0.0","espree":"^9.4.1","estraverse":"^5.2.0","underscore":"^1.12.0"},"version":"1.1.1","devDependencies":{"c8":"^7.13.0","jsdoc-to-markdown":"^8.0.0","mocha":"^10.2.0"},"gitHead":"7e29e1a712b9ab307f38e1619510dc3e1a8afad8","_id":"@arcadiad/espree-logging-solution@1.1.1","_nodeVersion":"19.6.0","_npmVersion":"9.4.0","dist":{"integrity":"sha512-hpIt/dwsD1d3kpYSPgvBbelSxMjPOUiT+xeAD24jdmHOStj+9qmlZ9n/s5NWT4pokTHrWiDJgEDYhW6xwOhPoA==","shasum":"b8bce8912858fef8d15f62b732f1cb07df18f19c","tarball":"https://registry.npmjs.org/@arcadiad/espree-logging-solution/-/espree-logging-solution-1.1.1.tgz","fileCount":39,"unpackedSize":1899195,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBU6EDDZD+X3HkI5JffvKarGYsSqzbM3PxtYTvJ1mleQIhAMBFyz5gZZINDSdn59zWzEitbBDFvaVrNtmI3rgfmP2t"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkABQYACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp4xQ//SYyAyFX0omKIXdRwHnCsBZh4ld1r83Qk+Xi223tpewDiFIk5\r\nPblC1oSv9yloGYZVHq2Ur3o3tUgFIFh+izyk+suyQe3L0XriNQGzVhhA1Ee9\r\nz62CDQQtRVckrPqp9Ml8gsadpXnLclUZDCEwEfd1G35ksOUuMwZ7AM+npFmM\r\nT+uJ2p6QTz+/+0byV1DIvphAX3dJWlzJ/3fDD+8cH1p7yPARj4O4sPpDln91\r\nHioRlbV3BIyR7G/lNkqDKVjzGhnW+BrMQ+2oKsv5DGFLIIBZCMAKYrAKI7d3\r\nDW5OkifNhGHWnHC3QLTgOuofh9ZsP4gYE/Tb2kAYYdOwV/T5oQWRCeXWzLZB\r\n30GAzL5hWAffaK4OnF719rZ/XAbrCkGDC4g/13R1mvW4rjauNqOZh3AjywH2\r\nKUomyKpAUtPThqoEaSWEf9HFT0ZDjdq4qPNOpoN8h2cncPr0SRaHguU9SFWG\r\nVjX53MOecQ+7uCLCzWOhx71bNH0T5dVGRg3i5sWcO2qA9UB01AcwwdrxGqrV\r\n00NenokJJh92J0WoVcZbgb7yAwXyGHReGXQjZ9+0Fwj5dHmAEdppiChq8LR1\r\n/ca2zdvkfpd0waRl/3eT/l+Xp8/PxNtSwdADnw9RWqWyUNBVDc43guz5am5J\r\n1qkjNNZfK+Y+wmeyxE0bVDn6ahXZkoDiV+o=\r\n=KTdv\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"arcadiad","email":"alu0101345918@ull.edu.es"},"directories":{},"maintainers":[{"name":"arcadiad","email":"alu0101345918@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/espree-logging-solution_1.1.1_1677726744447_0.27836598288463743"},"_hasShrinkwrap":false}},"time":{"created":"2023-03-02T01:35:22.659Z","1.0.0":"2023-03-02T01:35:22.949Z","modified":"2023-03-02T03:12:24.810Z","1.1.0":"2023-03-02T03:10:02.476Z","1.1.1":"2023-03-02T03:12:24.688Z"},"maintainers":[{"name":"arcadiad","email":"alu0101345918@ull.edu.es"}],"description":"Adds logs to javascript code","author":{"name":"Casiano Rodriguez Leon","email":"crguezl@ull.edu.es","url":"https://crguezl.github.io/"},"readme":"[![Open in Codespaces](https://classroom.github.com/assets/launch-codespace-f4981d0f882b2a3f0472912d15f9806d57e124e0fc890972558857b51b24a6f9.svg)](https://classroom.github.com/open-in-codespaces?assignment_repo_id=10289402)\n# Práctica Espree logging\n\n## Resumen de lo aprendido\n\n### Recorrer arbol AST\n\nCon ayuda de la librería [estraverse](https://www.npmjs.com/package/estraverse) se puede recorrer el árbol AST de un código JavaScript.\nAdemás de recorrer el árbol, se puede modificar el mismo accediendo al body del nodo que nos da estraverse.\n\n```javascript\nestraverse.traverse(ast, {\n  enter: function (node, parent) {\n    // Con el parametro node podemos acceder a la \n    // información del nodo actual y editarla\n  },\n});\n```\n\nVemos que podemos optener el tipo de nodo con la propiedad `type` y de esta forma podemos filtrar los nodos que queremos recorrer (`FunctionDeclaration` o `FunctionExpression`).\nTambién se puede acceder a los parámetros de una función con la propiedad `params` del nodo `FunctionDeclaration` o `FunctionExpression`.\n\n```javascript\nestraverse.traverse(ast, {\n  enter: function (node, parent) {\n    if (node.type === \"FunctionDeclaration\" || \n          node.type === \"FunctionExpression\") {\n      console.log(node.params);\n    }\n  },\n});\n```\n\n### Publicar un paquete en NPM\n\nPara publicar un paquete en NPM, se debe crear un usuario en [npmjs.com](https://www.npmjs.com/).\nUna vez creado el usuario, se debe iniciar sesión en la terminal con el comando `npm login`.\nLuego, se debe crear un archivo `package.json` con la información del paquete, importante añadir el scope en la propidad `name`.\nEjemplo:\n```json\n{\n  \"name\": \"@aluXXX/espree-logging\",\n}\n```\nFinalmente, se debe ejecutar el comando `npm publish --access=public` para publicar el paquete.\n\n### Documentar con JSDoc to Markdown\n\nPara documentar un paquete, se debe instalar la librería [jsdoc-to-markdown](https://www.npmjs.com/package/jsdoc-to-markdown).\nPara generar la documentación, se debe ejecutar el comando `jsdoc2md --files index.js > jsdoc/README.md`.\n\n### Covering con c8\n\nAl usar nyc para hacer covering, he descubierto que no es compatible con la última versión de Node.js (v15.0.0).\nPor lo tanto, he decidido usar [c8](https://www.npmjs.com/package/c8) que es un fork de nyc que sí es compatible con la última versión de Node.js.\nPara generar el reporte de covering, se debe instalar c8 con el comando `npm install --save-dev c8`.\nPara generar el reporte, se debe ejecutar el comando `c8 npm test -- --reporter=html --reporter=text --reports-dir docs`.\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. \nEjemplo:\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\n## CLI con [Commander.js](https://www.npmjs.com/package/commander)\n\nSe ha añadido un CLI para poder ejecutar el programa desde la terminal.\nPara ello, se ha usado la librería [Commander.js](https://www.npmjs.com/package/commander).\nPara ejecutar el programa, se debe ejecutar el comando `./bin/log.js <file.js>`.\nPara ver la ayuda, se debe ejecutar el comando `./bin/log.js --help`.\nPara ver la versión, se debe ejecutar el comando `./bin/log.js -V`.\nPara añadir un output, se debe ejecutar el comando `./bin/log.js <file.js> -o <output.js>`.\nPara sacar el resultado por pantalla, se debe ejecutar el comando `./bin/log.js <file.js> -s`.\n\n## Reto 1: Soportar funciones flecha\n\nSe ha añadido soporte para funciones flecha.\nPara ello, se ha añadido un nuevo tipo de nodo (`ArrowFunctionExpression`) a la función de entrada de estraverse.\n\n```javascript\nestraverse.traverse(ast, {\n  enter: function (node, parent) {\n    if (node.type === \"FunctionDeclaration\" || \n          node.type === \"ArrowFunctionExpression\" ||\n          node.type === \"FunctionExpression\") {\n      console.log(node.params);\n    }\n  },\n});\n```\n\n## Reto 2: Añadir el número de línea\n\nSe ha añadido el número de línea a la salida del log.\nPara ello, se ha añadido la propiedad `loc` al nodo `FunctionDeclaration` o `FunctionExpression` y se ha accedido a la propiedad `start` para obtener el número de línea.\n\n```javascript\n  const lineN = node.loc.start.line;\n  const beforeCode = \"console.log(`Entering \"\n    + name + \"(\" + paramNames + \") at line \" + lineN + \"`);\";\n  const beforeNode = espree.parse(beforeCode, { ecmaVersion: 12 }).body;\n  node.body.body = beforeNode.concat(node.body.body);\n```\n\n## Tests and Covering\n\nPara ejecutar los tests, se debe ejecutar el comando `npm test`.\nPara ejecutar el covering, se debe ejecutar el comando `npm run cov`.\nPara generar el reporte de covering, se debe ejecutar el comando `npm run cov-docs`.\n","readmeFilename":"README.md"}