{"_id":"@alu0101329888pl/espree-logging","_rev":"5-6d739d2fb9b857028374675b62c2770d","time":{"created":"2023-03-02T00:59:55.487Z","0.3.9":"2023-03-02T00:58:39.757Z","modified":"2023-03-02T03:43:24.010Z","0.1.0":"2023-03-02T00:59:55.727Z","1.0.0":"2023-03-02T02:38:38.095Z","1.1.0":"2023-03-02T02:51:58.395Z","2.0.0":"2023-03-02T03:43:23.922Z"},"name":"@alu0101329888pl/espree-logging","dist-tags":{"latest":"2.0.0"},"versions":{"0.1.0":{"name":"@alu0101329888pl/espree-logging","author":{"name":"Edwin Plasencia Hernández","email":"alu0101329888@ull.edu.es","url":"https://github.com/alu0101329888"},"description":"Adds logs to javascript code","type":"module","exports":"./src/logging-espree.js","bin":{"funlog":"bin/log.js"},"scripts":{"fill":"your scripts here"},"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.1.0","devDependencies":{"mocha":"^10.2.0"},"gitHead":"f700915643ad2a6303cc7ecdc32d42bbde431f62","_id":"@alu0101329888pl/espree-logging@0.1.0","_nodeVersion":"19.6.0","_npmVersion":"9.4.0","dist":{"integrity":"sha512-TO1mEy43+hoCqGVLhfYyQFp58hrbsuLiu7edNdJGariQtURs9BivfUilA6JVXFeTYjl7psbnL7pRnvE6kK4t2w==","shasum":"93ccd445cd6fd8bf85ba52d200945cb2a7b9184d","tarball":"https://registry.npmjs.org/@alu0101329888pl/espree-logging/-/espree-logging-0.1.0.tgz","fileCount":15,"unpackedSize":6430,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH1wM3Dl4LQrRh1mhZf8l9RPLA/904U6E1Bd6pK60yOtAiEAshFTe42uVCsliYqk0vbFjrab1b5QgT+O1KSTLVQ79Ks="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj//ULACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqLuQ//VZ8my58+ouOtQ51lMepEqpUkSIVDBYjjuOn/45M1feAd5kpW\r\n5lLVilpbaUjo8RswVWoQ7xcZl+ENThJhSwldJLxHVh8pyLExscu3jtqozVmU\r\n86CutVixRkIaLQg4YTeCjuRNKqFTdjsnjX3EueS6Bp5yAAhOpCajv4ylFSZK\r\ncxyPmzZleNBMSDFDzFqGqh8U5G3XXtDc1cua46zTavjydcgllHsmgJnZyJsn\r\nF/rNabbyLMVlFnHSsxQzSRMhBF4L7jnQcdTJMJvWF+uey5NdYgozd4XqoIYi\r\n3clA65qXUdqidUXm8xysKWfvjTXPfd/SBT5wgxWJTpkqL/ZphcuTL4WGRBwo\r\nBNGf7Q0X0hpnL5fYRgiootu4FA64qJtzJYzv3hxbUuUih2uPkmxkf7RCJQfu\r\n6qkpAeYduASb7bbtFehuwi0khgQv4vB9DsploOUX07D/XuvPx0RGrYzkpQJD\r\nh2CqwM77pvKdvdoS1KR++TkpcwFp601N6xHzDPI6NnTe1rUbKtSqbDAH7+3m\r\naZCOUVKPMvxBhskP2I4A+ScOK9WOvijdh1eZbBSwFFpwKJXYaka4R3KAQJuB\r\noTxIMvDe39fwpbbPF5XFnwkXevA+fnQFyXUQxvdHaZH2VoOqClCVNxRq3GAS\r\ns+Na5pouguLtYD2+KU2U4oA2kgaaR5viPfo=\r\n=XsrQ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"alu0101329888pl","email":"alu0101329888@ull.edu.es"},"directories":{},"maintainers":[{"name":"alu0101329888pl","email":"alu0101329888@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/espree-logging_0.1.0_1677718795570_0.05362745878092512"},"_hasShrinkwrap":false},"1.0.0":{"name":"@alu0101329888pl/espree-logging","author":{"name":"Edwin Plasencia Hernández","email":"alu0101329888@ull.edu.es","url":"https://github.com/alu0101329888"},"description":"Adds logs to javascript code","type":"module","exports":"./src/logging-espree.js","bin":{"funlog":"bin/log.js"},"scripts":{"test":"mocha ./test/test.mjs --require mocha-suppress-logs && node --experimental-vm-modules node_modules/jest/bin/jest.js --coverage logging-espree.test.js","help":"node ./bin/log.js -h","version":"node ./bin/log.js -V","example":"node ./bin/log.js ./test/data/test1.js -o result.js"},"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":"1.0.0","devDependencies":{"jest":"^29.4.3","mocha":"^10.2.0","mocha-suppress-logs":"^0.3.1"},"gitHead":"8500943534c95ad1f15088981e29bc3c81f6daf0","_id":"@alu0101329888pl/espree-logging@1.0.0","_nodeVersion":"19.6.0","_npmVersion":"9.4.0","dist":{"integrity":"sha512-lt8l03NatPhUOgNfRqm9a66G9UTkx1vg9vIZIp8G+gDBzNGpRa/HgLKlQYlx8Ggsw57BjyOk5lHfnkcM9SLUTg==","shasum":"aae7fc3508b17eda40789f0af9108e6faa274b45","tarball":"https://registry.npmjs.org/@alu0101329888pl/espree-logging/-/espree-logging-1.0.0.tgz","fileCount":31,"unpackedSize":78169,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD7yyCObtNtfw9F71qCy5VJrzQKJc69OTn7i9HMErpOkgIgMrVDT+VqmW8sGaPs4zoK0gterZF2mEOGZZ53YROMj00="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkAAwuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqdvA/+Mm805gdfIA+I6aZ3aKDJq/rqP/aZ+cMt91Tg34k2t5HprumH\r\nzZoj8Lc+mWxMB4sFSlb7VnJNEM2y0c/WXKY4ppcbw8/cGQVQuKcCt6FN3Z6a\r\n3nX8ixp9pzCdi+bv5tSa13XGjoJp4Yzrmt/fp+/tD3eoGTrfvlzyPSs3lyyE\r\nP7fIRb3sFwVNUuobo9G4rX2aZ/ghl3pPsG8OgFc1IpE+fcqeQvOqs+MYZ0ef\r\n7w/8TFUC+CXiFE01i4y6k7rAgi8+KtWh80snOSOKpz7HLZqu3UfHOJDfJtIr\r\nHtF8+uTIRk9uwEniB0I3rKOugbHJLSEm0X76vsTm4TtuBa4FYY0GmmWcp16r\r\nhafbRuwBWeavS3irLHft8sbzHSOghnEGttKqZR7CkNigAJFLZeR2I4ZiMWt3\r\n/tqoph/csmxsWfh3/AhXafbLGLmxEsbliSyJoEMWQSD35VEUuVGobgNMbgOB\r\nAtcgKxvwCvu3v8pRK+bijj/BQgug4a37S/DsRt51fq4TZUlSwNADLOO2cm2L\r\nrjkzTV1z/HiKjXWrGb7LdOXohqQcQ3x278jj4Cyb7+7TF2znKeFDadO044Ra\r\nrBjTnqxHj3gWUlwLcvlF3AhA425NYau8ZLObcYK2+mntEJYkjdgx6K5ni/ly\r\nj3Z339+NZcJ+/NHeJa1+F2y7qTKj6/KcLxc=\r\n=BgZ1\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"alu0101329888pl","email":"alu0101329888@ull.edu.es"},"directories":{},"maintainers":[{"name":"alu0101329888pl","email":"alu0101329888@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/espree-logging_1.0.0_1677724717910_0.43908853875382214"},"_hasShrinkwrap":false},"1.1.0":{"name":"@alu0101329888pl/espree-logging","author":{"name":"Edwin Plasencia Hernández","email":"alu0101329888@ull.edu.es","url":"https://github.com/alu0101329888"},"description":"Adds logs to javascript code","type":"module","exports":"./src/logging-espree.js","bin":{"funlog":"bin/log.js"},"scripts":{"test":"mocha ./test/test.mjs --require mocha-suppress-logs && node --experimental-vm-modules node_modules/jest/bin/jest.js --coverage logging-espree.test.js","help":"node ./bin/log.js -h","version":"node ./bin/log.js -V","example":"node ./bin/log.js ./test/data/test1.js -o result.js"},"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":"1.1.0","devDependencies":{"jest":"^29.4.3","mocha":"^10.2.0","mocha-suppress-logs":"^0.3.1"},"gitHead":"410ee18f042519c0fcf8a0255d4efcfac1ccd766","_id":"@alu0101329888pl/espree-logging@1.1.0","_nodeVersion":"19.6.0","_npmVersion":"9.4.0","dist":{"integrity":"sha512-9K7DhbEoepHMD/oPm3VbvT5xKW0tk7j/NNKeaMZpBihyBlZ6IXEkXyd9nbPxD4YSBYh5WmLefFTn+ZtSezVjdQ==","shasum":"829980d5220508fb39d665dfbf6ce8045af0bac8","tarball":"https://registry.npmjs.org/@alu0101329888pl/espree-logging/-/espree-logging-1.1.0.tgz","fileCount":32,"unpackedSize":79274,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICY+TNRkiaOv8Qq4p87Ah2uZ1x5WSa26kDMTr0lnyaT5AiB9bdgu4EdZ6BYpuN0Rsq0szrh3NChm/AZM2d+IzZxumQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkAA9OACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrP8RAAo9C0e74PH+4XBvkuBjUMqa/Ew8c//14W5DMoTOizToSkk4nu\r\neCGFXWRHRiVBRrzwCz7HphL+sXkea1zpGu9J8xwPDkEN17rf/E5CvUzhqbQZ\r\nL1bb6NMyiX2HcNgV3dC2jve06NUSFDKLSuQg6EpE68+9j+eIq12LmEEuA7FU\r\nYcR2vR01Xg6HSf+D23/M+eM4LRkZrj1BScvkMMpQc3RV74SJ7dvnXPJDUuTX\r\nsjeTX9eg35LW3vFLk9Z5jQxGq4fYRFL62Nd1n2qVMR2o+uqWVkTi8tYy0oTa\r\naWUsAJNJOEcbkoP6bCSP5GeZZqwtSpso9igKe0n3RJmFn/vY/J/ocJr1Frbc\r\nL72uB+TiLla3lPXPZMz1hM9XCm4mtWzYM/l51Hy/QPaMSC8zTDDfRNQrfebj\r\nyY15th4FIIoVVxlm1jk+sA6LjldjWl1jbHhMS4ubCQL8Auj/pLQesrxHFJ0E\r\nzwE61pMHStB36Y4p6OlA4a3b3piBULxYYJ5XwbuJXGOQY0vfz60r/6AmpNNR\r\nyqOT+Ghok0vWQp2/t6DJl3gzqIP/Cmhs6/ykoueB/ZObghYduy7IvmcCJs4n\r\nv0HJAkGecYxB1cqblTZMoFFHlmv1sZB2eCzVAT/MVprUorhOkUEJMRuE+SMX\r\n/ADYVcxW8Nv5RXatnVsF6Q7wH0aJ9KZQt6c=\r\n=Vjxp\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"alu0101329888pl","email":"alu0101329888@ull.edu.es"},"directories":{},"maintainers":[{"name":"alu0101329888pl","email":"alu0101329888@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/espree-logging_1.1.0_1677725518183_0.7205108029127363"},"_hasShrinkwrap":false},"2.0.0":{"name":"@alu0101329888pl/espree-logging","author":{"name":"Edwin Plasencia Hernández","email":"alu0101329888@ull.edu.es","url":"https://github.com/alu0101329888"},"description":"Adds logs to javascript code","type":"module","exports":"./src/logging-espree.js","bin":{"funlog":"bin/log.js"},"scripts":{"test":"mocha ./test/test.mjs --require mocha-suppress-logs && node --experimental-vm-modules node_modules/jest/bin/jest.js --coverage logging-espree.test.js","help":"node ./bin/log.js -h","version":"node ./bin/log.js -V","example":"node ./bin/log.js ./test/data/test1.js -o result.js"},"dependencies":{"acorn":"^8.8.2","commander":"^10.0.0","escodegen":"^2.0.0","espree":"^9.4.1","estraverse":"^5.2.0","jsdoc":"^4.0.2","jsdoc-to-markdown":"^8.0.0","underscore":"^1.12.0"},"version":"2.0.0","devDependencies":{"jest":"^29.4.3","mocha":"^10.2.0","mocha-suppress-logs":"^0.3.1"},"gitHead":"8360eb7bab665d90c68c1420f5c9c157254bd1f6","_id":"@alu0101329888pl/espree-logging@2.0.0","_nodeVersion":"19.6.0","_npmVersion":"9.4.0","dist":{"integrity":"sha512-DM8r533sFk6B0kWwh/ShNoUY8z+duboqmn/cB8i1Z06UjSpm4mdzFcJ138Q8UK8HI7MnVY5JQqBXq8D8xO/NpQ==","shasum":"367cabb9cbf470bd886fc60415ddcf4cd48b1cf5","tarball":"https://registry.npmjs.org/@alu0101329888pl/espree-logging/-/espree-logging-2.0.0.tgz","fileCount":62,"unpackedSize":1111680,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC1JAsa9sEbOp0QrvqMGaU9AU+hMlMsrq8QiHfSoRIbQAiEAk1pwwGznE5lAyaOvV2xQTq73+ixo/tPDaLn17dou56k="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkABtbACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpyeQ//RSjJcrRdwDkWSBwTGuiJVnTXUHr6C1LLBl8+xM3/6zcH+1PD\r\nfBLJI8frzkj7soGHTsYKq3JAz94LILoBZ2P27n6NwGjQFSqBzTjeIbqLBl1+\r\ng4zJU3gxAHs2M0G8RuJ2JaR1TIcMSKLMNZnc5cvHbhKsOdxrwpbxZ7u176Gz\r\n0KWix49YfHQ3m+qgnIKnRFTqY3Ms9Jfv3rcLTepBA3bFV1CNWEp6FLluncbN\r\nRPNdgVBRZc6ErO/SsR86/LY1+c8EeWck8jYVjLcBsnhNw7ti4QTlpcv3rScy\r\ntzKNsd5G5bv+GJJEdgx5Uxy/RNDScBxZa9QXMerlmNmI7ZK7UKKlKJnQIyRr\r\nBl1ZKdkVF0R8cU1JjU8EkgvlmMJFRvApcMEdjpOFTHdiQKeP9/5d9I7ZVdhU\r\nljq0mo1rMHPpRlf/sEAVjAp2FRZBGViqlGQpXZXiIj4zamSKBMASpydXSge1\r\n0f6EzUZ1DnnJdgiviocCsnKchurGEYwruTxtDGr0z6fcFjYyQxK9N0cdbFXV\r\neh2ScLb3JQlaiCObxy5/a256fUCRw1aZbgdMV7NaypbJjZi3cV+a49AxQeVF\r\nhZXVfdbQXDf1CZ2GuKy+A2wdXGxM0KKtiAF6M/Gon4mSqz10H9jD/Tac8MMq\r\nTV+Wh+YXTOUqxNllnQK1rQo2aUvCLnF+MBw=\r\n=u/Nh\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"alu0101329888pl","email":"alu0101329888@ull.edu.es"},"directories":{},"maintainers":[{"name":"alu0101329888pl","email":"alu0101329888@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/espree-logging_2.0.0_1677728603628_0.24408836551546242"},"_hasShrinkwrap":false}},"maintainers":[{"name":"alu0101329888pl","email":"alu0101329888@ull.edu.es"}],"description":"Adds logs to javascript code","author":{"name":"Edwin Plasencia Hernández","email":"alu0101329888@ull.edu.es","url":"https://github.com/alu0101329888"},"readme":"# Práctica Espree logging\n\n## Resumen de lo aprendido\n\n...\n\n## Retos\n### 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\nPara realizar tal cambio, hizo falta analizar los valores de los parámetros del nodo pasado a la función `addBeforeCode`\n\n```javascript\nlet args = [];\nfor (let parameter of node.params) {\n    args.push(parameter.name);\n  }\n  let beforeCode = \"console.log(\\`Entering \" + name + \"(\";\n  for (let [index, value] of args.entries()) {\n    if (index != 0) {\n      beforeCode += \", \";\n    }\n    beforeCode += \"${ \" + value + \" }\";\n  }\n  beforeCode += \")\";\n```\n\nEste código, guarda en args los parámetros de la función y luego los escribe en `beforeCode` correctamente \n\n### Funciones de flecha gorda\n\nPara lograr analizar correctamente funciones flecha gorda como las de este ejemplo:\n\n```javascript\nfunction foo(a, b, c) {\n    let x = 'tutu';\n    let y = (function (x) { return x*x })(2);\n    let z = (e => { return e +1 })(4);\n    console.log(x,y,z);\n  }\nfoo(1, 'wut', 3);\n```\n\nHace falta editar la función addLoging para que acepte las funciones, esto se hace modificando el código de la siguiente forma:\n\n```javascript\nestraverse.traverse(ast, {\n      enter: function(node, parent) {\n          if (node.type === 'FunctionDeclaration' ||\n              node.type === 'FunctionExpression'  ||\n              node.type === 'ArrowFunctionExpression') {\n              addBeforeCode(node);\n          }\n      }\n  });\n```\n\nAquí especificamos cómo queremos que también tenga en cuenta las `ArrowFunctionExpression`, esto es posible gracias a que llamamos anteriormente a la instrucción `parse`, especificando que queremos que use ecmaVersion >= 6.\n\n```javascript\nconst ast = espree.parse(code, {ecmaVersion: 12, loc: true});\n```\n\n### Número de línea\n\nPuede apreciarse en el código anterior, cómo llamamos a parse con también la opción `loc: true`, ésto hace que el parser cree información extra sobre la posición de cada línea de código. Con ésta información, solo hace falta modificar un poco de código en la función `addBeforeCode` para añadir las líneas:\n\n```javascript\n...\n\nbeforeCode += \") at line \" + node.loc.start.line + \"\\`);\";\n\n...\n```\n\n## CLI con [Commander.js](https://www.npmjs.com/package/commander)\n\nCon el uso de commander, podemos crear menús de ayuda y documentación simple para la ejecución de nuestro programa.\nEn nuestro ejecutable `log.js` encontramos lo siguiente:\n\n```javascript\nimport { program } from \"commander\";\n\nprogram\n  .version(version)\n  .argument(\"<filename>\", 'file with the original code')\n  .option(\"-o, --output <filename>\", \"file in which to write the output\")\n  .action((filename, options) => {\n    transpile(filename, options.output);\n  });\n\nprogram.parse(process.argv);\n```\n\nDe entre todas las opciones que podemos poner, las que vamos a ver son las anteriores.\n`.version` permite establecer un número de versión.\n`.argument` nos deja poner los argumentos que recibirá nuestro programa, de no ser dados, devolverá un error.\n`.option` nos permite añadir argumentos opcionales a nuestro programa, en este caso, el fichero de salida, que no es necesario para que el programa funcione.\n`.action` por último, dice al programa qué hacer dados los argumentos y parámetros opcionales. En nuestro caso, llama a transpile que es la función principal del programa.\n\n\n## Tests and Covering\n\nEn esta práctica he desarrollado tests con Mocha y con Jest para también tener un test de cobertura.\nEn el fichero `test.mjs` se encuentran los tests de Mocha y en `loging-espree.test.js` los de jest.\nPara ejecutarlos solo hace falta usar `npm test`.\n\nAmbos ficheros usan los códigos de JS encontrados en la carpeta `data` y comparan los resultados con ficheros correctos también en la misma carpeta.\n\nLogramos testear el módulo con Github actions cada vez que realizamos un push al repositorio gracias al fichero `nodejs.yml` en `./github/workflows` y nos cercioramos que funciona todo correctamente en varios sistemas operativos.\n\n## NPMJS\n\nEl módulo finalizado y funcional, se puede descargar desde npmjs con el simple comando:\n`npm install @alu0101329888js/espree-logging` en cualquier proyecto.\nPara usar lo que proporciona el módulo, se puede importar con:\n```javascript\nimport * as el from '@alu0101329888pl/espree-logging'\n```\n\n## Documentación\n\nCon ayuda de documentation, se ha creado un fichero `doc.md` que contiene información en MarkDown sobre el fichero `logging-espree.js` que contiene las funciones principales del programa.\n\nCon JSDoc, se ha creado lo mismo pero en formato HTML en la carpeta `out`\n\nY con JSDoc 2 markdown se ha creado otro fichero markdown llamado `doc2md.md` para ver todas las posibilidades de documentación existentes.\n","readmeFilename":"README.md"}