{"_id":"@alu0101397627/espree-logging","_rev":"7-26459d68faa6a6c578c304da9d3efc7b","time":{"created":"2023-03-01T23:40:34.009Z","1.0.0":"2023-02-28T21:28:02.542Z","modified":"2023-03-02T00:52:36.573Z","1.0.1":"2023-03-01T22:45:01.531Z","1.0.2":"2023-03-01T23:14:29.472Z","1.1.0":"2023-03-01T23:40:34.211Z","1.1.1":"2023-03-02T00:52:36.462Z"},"name":"@alu0101397627/espree-logging","dist-tags":{"latest":"1.1.1"},"versions":{"1.1.0":{"name":"@alu0101397627/espree-logging","author":{"name":"Alexander Gonzalez Covic","email":"alu0101397627@ull.edu.es","url":"https://covicale.github.io/"},"description":"Adds logs to javascript code","main":"/src/logging-espree.js","type":"module","bin":{"funlog":"bin/log.js"},"scripts":{"exec":"bin/log.js","exec-test":"npm run exec -- test/data/test1.js","test":"node --experimental-vm-modules node_modules/jest/bin/jest.js","cov":"npm test -- --coverage; rm ./docs/clover.xml ./docs/coverage-final.json ./docs/lcov.info && mv ./docs/lcov-report/* ./docs/ && rm -r ./docs/lcov-report","clean":"rm -rf test/data/logged*.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","jsdoc-to-markdown":"^8.0.0"},"licenses":[{"type":"MIT","url":"https://github.com/brentertz/scapegoat/blob/master/LICENSE-MIT"}],"repository":{"type":"git","url":"git+https://github.com/ULL-ESIT-PL-2223/espree-logging-alexander-gonzalez-covic-alu0101397627.git"},"gitHead":"e5c945c7f6dc82d2f394872160d7ddd79184afd1","bugs":{"url":"https://github.com/ULL-ESIT-PL-2223/espree-logging-alexander-gonzalez-covic-alu0101397627/issues"},"homepage":"https://github.com/ULL-ESIT-PL-2223/espree-logging-alexander-gonzalez-covic-alu0101397627#readme","_id":"@alu0101397627/espree-logging@1.1.0","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-1YL3vSkW/d9CUp1XpMyyKsjnlOPeb7LM5oMCLS1Wkh5JaiRwmFqJXxyI6LXglKK5TFGJeXprEzoy//ZPmgkdYg==","shasum":"f34282c241ef3a80951e263fc9c946ccf30750ff","tarball":"https://registry.npmjs.org/@alu0101397627/espree-logging/-/espree-logging-1.1.0.tgz","fileCount":29,"unpackedSize":67395,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGSSUOOSS7etp4mDNsFACm4bNpBWpIcILRvrtBpKOzsAAiAXz+nJ7b6IB5TEWVWeQ8vf8/RFY9LZtAEZ/hUbe72fJg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/+JyACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoDtQ//dxSDMCNPVEXil9IITd+3ZtxdV7Ln2b/eGyfbmqyOh4tnSH++\r\n2I/3db2OyK7J/2IScMNrypAq5BMbS/LQIK0AtE30T2FRaIDFdrybbQ07E/2e\r\nozL1OGvpK36+Blz+OCncKY+zYAEUtjN46dXoilQWG3rfMgOdAAtDw6lB5rut\r\nr3SkHOhFDLQAE8QO4y5lApsknVYMd49PwM5HqBCTj1QX264aLahG9j7ZxmYN\r\nlAtw+pKw0J2ETw909GA/shuxp7QsUWWicM47xX9zsdEHaxXImzFr6adE5+zw\r\nFPghh6c5ktvCZ0VAgRwCbyMP5XLt6t7uH4oEUNYfsAniOIr3/mikWYrL4fD+\r\nS7BGA7tNH8PFiuqCOd2O69BGg5MgqRZV/Y5MwHv23d5AkRRnIX5h/Z/eLuwn\r\n6mJpLKkPWoUukAhzfAg+Li7vXyhAOfXceS7V3o7PU9rRQ8nvE2fVhpXuXNLI\r\nFp6w2zU+VW4mLz/OPwRF8Yvi3rU3cJZ5rhw/ct/FJD3vq1+trmAh8Cec3Mus\r\nl16rl7vwrAs4Etme8KVCjJzn0aEOpDLR9OV445XMcoIZVAF5HxGKzyjoAaNk\r\nu/ps1X7OIi8uua4XIgVLyUVMrMYS5lQENNju8jM2EWK7w30ZUep5BiJo1TdV\r\nXhEyIJY0ZrzSEV7WDK168YXAn35P9gmbzcw=\r\n=yjki\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"alu0101397627","email":"alu0101397627@ull.edu.es"},"directories":{},"maintainers":[{"name":"alu0101397627","email":"alu0101397627@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/espree-logging_1.1.0_1677714034062_0.7858954250522541"},"_hasShrinkwrap":false},"1.1.1":{"name":"@alu0101397627/espree-logging","author":{"name":"Alexander Gonzalez Covic","email":"alu0101397627@ull.edu.es","url":"https://covicale.github.io/"},"description":"Adds logs to javascript code","main":"/src/logging-espree.js","type":"module","bin":{"funlog":"bin/log.js"},"scripts":{"exec":"bin/log.js","exec-test":"npm run exec -- test/data/test1.js","test":"node --experimental-vm-modules node_modules/jest/bin/jest.js","cov":"npm test -- --coverage; rm ./docs/clover.xml ./docs/coverage-final.json ./docs/lcov.info && mv ./docs/lcov-report/* ./docs/ && rm -r ./docs/lcov-report","clean":"rm -rf test/data/logged*.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.1","devDependencies":{"jest":"^29.4.3","jsdoc-to-markdown":"^8.0.0"},"licenses":[{"type":"MIT","url":"https://github.com/brentertz/scapegoat/blob/master/LICENSE-MIT"}],"repository":{"type":"git","url":"git+https://github.com/ULL-ESIT-PL-2223/espree-logging-alexander-gonzalez-covic-alu0101397627.git"},"gitHead":"78452020ae88045a0cf4eeac41f320af89a2131c","bugs":{"url":"https://github.com/ULL-ESIT-PL-2223/espree-logging-alexander-gonzalez-covic-alu0101397627/issues"},"homepage":"https://github.com/ULL-ESIT-PL-2223/espree-logging-alexander-gonzalez-covic-alu0101397627#readme","_id":"@alu0101397627/espree-logging@1.1.1","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-BdFSBD4rI6EYQcHW9wPBlGZpC+5w6EDz7ivG9TnIS1fZyUmRisuuAK/skZa2KkS2EfYC5b0JghKCP17n9Shdeg==","shasum":"c0f9e5675e74ebc7b66e1b5e99ab837c72eb6119","tarball":"https://registry.npmjs.org/@alu0101397627/espree-logging/-/espree-logging-1.1.1.tgz","fileCount":41,"unpackedSize":1965790,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGcT+1+OPofy+52AOHDy1xeysD3TXZV3ZHt3BhmzGDUMAiATIQIuouYmLI0003A+BOZTfO4/ZxIUOv9BPTbZn0XG3g=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj//NUACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrA3A//WlioFN7EC8s/ozq0u1bOy5QWZVvzEhjqH0R3u18NDuiWomAk\r\nryuaSpU8MbHvOcb/INs/TepbX+bW9XmV77uHueqcd08e1YNo4EC3TTDKbwFi\r\nkL4qPY8qq6YhgLm1Q80txgGiXfyjpcDF4l89V35eDGwSO0HH4wKCErhFvODE\r\nYp29RR+znjv3dfD03BSCZOP6NS9iOzEgiH4eMmFv3WrzzO4Iv1a5a0j0FFxk\r\nG1g9pXGSB5VzEOkqOEag2I9m1SwXAtmJ6ciaVDiO1ZFWPV7u2pToZsMg20c0\r\nDCJgsKLoDfiCHCmhogbTy6J9KBU1OH54yOLMklGhI8Z6l4gOWKb3rtZi4HfT\r\n/D5Zbf51UjSUQP5yZeuxaWnnXefrbm9kjt/Ew8jv0yDoysaoIaKwAfcG4wLv\r\nNefx6DLptlJcdBPc/DpQeRW4FVSEWMdLo2ly/2fsS0FIOWgJoZXgCpolH0Fy\r\noYBXEooEemUk5pegYQd5XTOf6rn9PRCEcvS0JiiRc1vjH2MYr3GwAM6TWlok\r\nrS+mkizSzZ31MtVW0l2GwXqIUo0nSgwjLOkQ7fi6A7jTHgW/1Iix9M1M6f1M\r\nVOvOzlkjWRu4SJURTWx9vqveSAPrJ3bLxjnN5CC7l23A4XQm51W/JbwDwvop\r\nGZ4I7Dv1oPFnkZUX60ZTILGqCbRUNTxk0WU=\r\n=gonw\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"alu0101397627","email":"alu0101397627@ull.edu.es"},"directories":{},"maintainers":[{"name":"alu0101397627","email":"alu0101397627@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/espree-logging_1.1.1_1677718356144_0.023332845588723616"},"_hasShrinkwrap":false}},"maintainers":[{"name":"alu0101397627","email":"alu0101397627@ull.edu.es"}],"description":"Adds logs to javascript code","homepage":"https://github.com/ULL-ESIT-PL-2223/espree-logging-alexander-gonzalez-covic-alu0101397627#readme","repository":{"type":"git","url":"git+https://github.com/ULL-ESIT-PL-2223/espree-logging-alexander-gonzalez-covic-alu0101397627.git"},"author":{"name":"Alexander Gonzalez Covic","email":"alu0101397627@ull.edu.es","url":"https://covicale.github.io/"},"bugs":{"url":"https://github.com/ULL-ESIT-PL-2223/espree-logging-alexander-gonzalez-covic-alu0101397627/issues"},"readme":"# Practica Espree-Logging\n\n# Documentacion código generada con JSdoc\n\nPara generar esta documentación, se ha utilizado la libreria **jsdoc-to-markdown**. Para generarla, es tan simple como hacer:\n\n```sh \n$ jsdoc2md src/logging-espree.js > README.md\n``` \n\n## Functions\n\n<dl>\n<dt><a href=\"#transpile\">transpile(inputFile, outputFile)</a> ⇒ <code>void</code></dt>\n<dd><ul>\n<li>Transforms the code of a file, adding a console.log when we\n enter a function, writing it into a file if the outputFile\n parameter is specified, otherwise writing in the console.</li>\n</ul>\n</dd>\n<dt><a href=\"#addLogging\">addLogging(code)</a> ⇒ <code>String</code></dt>\n<dd><ul>\n<li>Transforms the code of a file, adding a console.log when we\nenter a function of types FunctionDeclaration, FunctionExpression or\n ArrowFunctionExpression.</li>\n</ul>\n</dd>\n<dt><a href=\"#addBeforeCode\">addBeforeCode(node)</a> ⇒ <code>void</code></dt>\n<dd><ul>\n<li>Adds a console.log if we enter into a function,\n arrow function or anonymous function, specifying the name of the function,\n the parameters and the line number.</li>\n</ul>\n</dd>\n</dl>\n\n<a name=\"transpile\"></a>\n\n## transpile(inputFile, outputFile) ⇒ <code>void</code>\n- Transforms the code of a file, adding a console.log when we\n   enter a function, writing it into a file if the outputFile\n   parameter is specified, otherwise writing in the console.\n\n**Kind**: global function  \n**Returns**: <code>void</code> - - Nothing  \n\n| Param | Type | Description |\n| --- | --- | --- |\n| inputFile | <code>String</code> | The path of the file to be transformed |\n| outputFile | <code>String</code> | The path of the file where the transformed code will be saved |\n\n<a name=\"addLogging\"></a>\n\n## addLogging(code) ⇒ <code>String</code>\n- Transforms the code of a file, adding a console.log when we\n  enter a function of types FunctionDeclaration, FunctionExpression or\n ArrowFunctionExpression.\n\n**Kind**: global function  \n**Returns**: <code>String</code> - - The transformed code  \n\n| Param | Type | Description |\n| --- | --- | --- |\n| code | <code>String</code> | The code to be transformed |\n\n<a name=\"addBeforeCode\"></a>\n\n## addBeforeCode(node) ⇒ <code>void</code>\n- Adds a console.log if we enter into a function,\n   arrow function or anonymous function, specifying the name of the function,\n   the parameters and the line number.\n\n**Kind**: global function  \n**Returns**: <code>void</code> - - Nothing  \n\n| Param | Type | Description |\n| --- | --- | --- |\n| node | <code>Node</code> | The node were we are currently |\n\n# Instalación\n\nPara instalarlo es tan sencillo como escribir: \n![installation](/imgs/instalation.png)\n\n## Ejemplo de uso\n\nUna vez instalado, un ejemplo de uso es el siguiente:\n\n![example_use](/imgs/example_use.png)\n\nDonde obtenemos la función *addLogging* de la carpeta @alu0101397627/espree-logging, ubicada en la carpeta de los modules de node. Al estar declarado en el packaje.json del modulo un atributo *main* que indica donde esta el archivo a exportar, no hace falta escribir la ruta completa.\n\nEl output de este mini programa, para comprobar que funciona, es el siguiente:\n\n![output_example](/imgs/output-example.png)\n\nFuncionando como es debido.\n\n# Ejecutable\n\nEl ejecutable funciona correctamente y se puede ejecutar desde el propio modulo como es debido, al haber declarado el fichero en el package.json, en el atributo *bin*\n\nAqui podemos ver como podemos ejecutarlo, funcionando todos los argumentos:\n\n![exec_example](/imgs/executable_example.png)\n\nPodra tener 1 argumento y 1 opciones **(además del -h y -V)**:\n- **filename**: El fichero con el codigo a evaluar\n- **-o --output <filename>**: Fichero donde se quiera guardar el codigo generado (opcional)\n\n## Código\n\n![transpile](/imgs/transpile.png)\n\nEste código, se encarga de leer el fichero de entrada, añadirle el logging con la función descrita y explicada más abajo y escribirlo en el fichero de salida, si se ha especificado. En caso de no especificarse, se escribe por consola.\n\n# Como funciona\n\nEl archivo principal que se encarga de añadir el logging a las funciones, en que linea se encuentran y cuando se entra, es el **/src/logging-espree.js**, más en concreto estas 2 parte:\n\n![add_logging](/imgs/add_logging.png)\n\nEsta primera función, se encarga de parsear el código, recorrerlo y añadir el logging a las funciones que se encuentren. Para ello, se utiliza la libreria **espree** para parsear el código, y **estraverse** para recorrer el árbol generado por el parseo. En el momento que al entrar a un nodo, encuentre una función de los siguientes tipos:\n* **FunctionDeclaration**\n* **FunctionExpression**\n* **ArrowFunctionExpression**\n\nLlama a la función **addBeforeCode** que se encarga de añadir el logging a la función.\n\n![before_code](/imgs/before_code.png)\n\nEsta función, se encarga de añadir el logging a la función, para ello, se encarga de generar el código que se quiere añadir, en este caso, un console.log con el nombre de la función, los parametros que recibe y en que linea se encuentra.\n\nGracias al atributo **loc** de la función, podemos obtener la linea en la que se encuentra, y gracias a **id** y **params** podemos obtener el nombre de la función y los parametros que recibe.\n\n# Tests\n\nPara los tests, se ha utilizado la libreria **jest**. Para ejecutarlo, es tan simple como hacer *npm test* y en el caso de que se quiera hacer cubrimiento, es tan simple como hacer *npm run cov*.\n\nEl código de los tests es el siguiente:\n\n![test](/imgs/tests.png)\n\nEste código, se encarga de recorrer el array de tests, y para cada uno de ellos, se encarga de hacer la transpilación, comprobar que el código generado es el correcto y que la evaluación del código generado es la correcta.\n\nTanto los tests, como las soluciones de estos, están guardados en un fichero llamado **test-description.mjs**.\n\n![test_description](/imgs/test_description.png)\n\nDonde cada uno de los tests, tiene los siguientes atributos:\n- **input**: El fichero de entrada\n- **output**: El fichero de salida\n- **correctLogged**: El fichero con el código correcto\n- **correctOut**: El fichero con el output correcto\n\n# Scripts\n\nEn el package.json, se han declarado los siguientes scripts:\n\n![scripts](/imgs/scripts.png)\n\n- **exec**: Ejecuta el ejecutable\n- **exec-test**: Ejecuta el ejecutable con el fichero de test1\n- **test**: Ejecuta los tests\n- **cov**: Ejecuta los tests con el cubrimiento\n- **clean**: Limpia los ficheros generados por los tests\n\n# Github Actions\nPor último, implementamos la integración continua (CI) con Github Actions, donde creamos dentro del directorio ```/.github/worfklows``` un fichero ```nodejs.yml``` donde configuraremos las acciones que queramos hacer, quedando el fichero algo asi:\n\n![](imgs/actions.png)\n\nDonde: \n1. Especificamos el nombre de la action *\"CI\"*\n2. Configuramos que cada vez que haya un push en la rama main, se ejecute la action\n3. Creamos las tareas de la action:\n    \n    * Especificamos el sistema operativo a usar para las pruebas, en este caso ubuntu\n    * Usamos actions/checkout para que el runner se descarge el repositorio\n    * Usamos actions/setup-node para que el runner utilice node con la version que queremos\n    * Ejecutamos npm ci *(igual al npm install pero se utiliza en entornos de integracion continua)* y npm test para ejecutar los tests.\n\nY si todo sale bien, nos saldrá un tick verde como el siguiente:\n\n![](imgs/github.png)\n\n# NPM\n\nEl modulo se encuentra publicado en npm, y se puede encontrar en el siguiente enlace: https://www.npmjs.com/package/@alu0101397627/espree-logging\n\nPara publicarlo, se ha tenido primero crear un usuario en npm y conectarnos con el comando *npm login*. Si todo ha salido correctamente, si hacemos *npm whoami* nos saldrá el nombre de usuario que hemos creado.\n\n```sh \n$ npm whoami\nalu0101397627\n```\n\nUna vez hecho esto, para publicar el modulo, simplemente tenemos que hacer *npm publish --access=public* y ya estará publicado, pero antes, deberemos asignarle el ambito, en nuestro caso *alu0101397627*. Para ello, en el package.json, en el nombre del paquete lo escribimos de la siguiente manera:\n\n```json\n\"name\": \"@alu0101397627/espree-logging\"\n```\n\nY ya estaría publicado y accesible para todo el mundo, al ser un modulo publico.\n\n# Cubrimiento\n\nPara el cubrimiento, se ha utilizado la libreria **jest** con el argumento **--coverage**. Para ejecutarlo, es tan simple como hacer *npm run cov*.\n\nEl enlace a la página de cubrimiento es el siguiente:\n\n https://ull-esit-pl-2223.github.io/espree-logging-alexander-gonzalez-covic-alu0101397627/\n","readmeFilename":"README.md"}