{"_id":"@adrian-alu0101024363/espree-logging-solution","_rev":"2-5cc5f3711b1003c7cf2f2bcb3b9ad391","name":"@adrian-alu0101024363/espree-logging-solution","dist-tags":{"latest":"0.3.2"},"versions":{"0.3.0":{"name":"@adrian-alu0101024363/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":{"execute":"./bin/log.js","cov":"nyc --reporter=html --reporter=text npm run test","test":"mocha test/test.mjs","test1":"$node ./bin/log.js ./test/data/test1.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":"0.3.0","devDependencies":{"mocha":"^10.2.0","nyc":"^15.1.0"},"gitHead":"6f52a86700951da0615752af34851b11a9e4d788","_id":"@adrian-alu0101024363/espree-logging-solution@0.3.0","_nodeVersion":"19.6.0","_npmVersion":"9.4.0","dist":{"integrity":"sha512-/zTX5hCo+3S9A+53SnefQcGfLkicC4DAoyYAsBckF/Ys38vUzbvcveZ2E2v++DvBjJbasHEmop4fBBFDFbXM+Q==","shasum":"4434e452fd22cffad94eecb01b9a8c9b7bc6cdfb","tarball":"https://registry.npmjs.org/@adrian-alu0101024363/espree-logging-solution/-/espree-logging-solution-0.3.0.tgz","fileCount":32,"unpackedSize":46596,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDa3wKsSvXk0P72RT4HQ4hc7trqk0i6Ro36hD7uoOG3NwIhAIYmmyPkkQ49xwjVXdIg4uqJ5j1c+v4YhIbRbJm5yhrc"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj+5k4ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpL1A/+KNvwOp6rbY47Q5bDxYHF3moOFuBDXwlBhYc5TLJ1XwYzxFQ4\r\naVYOjO32WxGJ477e2Sqc3CU5XHQCMb2pfGhhBf2aAfzPPBxIj9B8zcXAL/Ow\r\nQRe69Z9LgmbuZePpTmhfd8Aecb5zMgl9ctSE2Z/kizcBnKnQ8iws70E7If25\r\naQvnUye438p2m1/T6nJuLspRMA5es6SEf6zUWodTaO6MeK9+YJai/VqSUMyx\r\ne4xX2mHYNHsXL/JWSgZs83Gh3OefbbwfxxnzylbQAM4KGTw//t1jbqlPNonV\r\nIDwQPny40/ytzRrk2XZxvbsEwyOXUMaB4J2+67unhfLW5EQ3zZrg8pCU8AM+\r\nxNvAgEiXg3RZygp/o/JiscTGNWZXFlVQrs1wVyDOoSFk6JYtRaJ9ghiSFVxC\r\nouGMPKleql2ClEBEqSuL9IJ7BSlKRMjMjkUl1XZLPJPB81CizjY1v7nF2i0/\r\nhe4phsblEZOd/zZ4sCpMhj2PWdhYQv/S6mgGfk2wpCWyvAJqfi0oieJy8wVM\r\nRme0Jy3EtEwC/WfAPCP/dD2Bwc20ejD1zfTQirJIup9Nno48j4EfKXJmw8fB\r\n0thJykvQA8mzgzqX9hI38N1P3qJyN+AnKOwRN+HjPRVjscfj4PmOiShrVzAI\r\ng2f/SMlUGWf/PQ+V3E0VwAnQHTpGZdf8S50=\r\n=aozs\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"adrian-alu0101024363","email":"alu0101024363@ull.edu.es"},"directories":{},"maintainers":[{"name":"adrian-alu0101024363","email":"alu0101024363@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/espree-logging-solution_0.3.0_1677433144489_0.7675147004365299"},"_hasShrinkwrap":false},"0.3.1":{"name":"@adrian-alu0101024363/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","main":"src/logging-espree.js","bin":{"funlog":"bin/log.js"},"scripts":{"execute":"./bin/log.js","test":"mocha","cov":"c8 --reporter=html --reporter=text npm run test","test1":"$node ./bin/log.js ./test/data/test1.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":"0.3.1","devDependencies":{"mocha":"^10.2.0","nyc":"^15.1.0"},"gitHead":"f490e1ec90c4a04e1f3e1365c34bb38e773ec0aa","_id":"@adrian-alu0101024363/espree-logging-solution@0.3.1","_nodeVersion":"19.6.0","_npmVersion":"9.4.0","dist":{"integrity":"sha512-kxzl9dapPyK0btdml2RlvHHW0mmNbuLB0JjSHrbRtuujAC9GoVYMF0hUHz8ahV273A3wApf9+C0JcakU7Rajdg==","shasum":"176cafa4c707cdfa243d25ee10f56b266a27248f","tarball":"https://registry.npmjs.org/@adrian-alu0101024363/espree-logging-solution/-/espree-logging-solution-0.3.1.tgz","fileCount":52,"unpackedSize":2260065,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmKTc9EHpdP9yMNAjOrILh/47508+e/fafQndp03qBuQIgYx6CtgidHucbpVzsuwYCiWu97CJi99VYAdLEploJ1bM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/4LMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrOVw//bJwo2KlHiKc0SMjvnWizabWIr00CGC77in+KXzm3TxgF1NfB\r\nWHHQwzyUuUSBWDTyv4MSfUJ1evlrM2jshN/2k2F4J5EcaQ05w0kxd6janWxh\r\ngFPZQbdCCx3IkG2nz1y9xTck/gE7MsulOMJHv2i+DV8S/o8o+17qMzUopcCn\r\nuiHhDqoQAPQRr/girq9tqvnYiif2e2pN+1bfO0lixD9lt+2Sg3OiffGGbviY\r\nwvwR0+BEEYCagh5mlpUutRIRWWRblh3FbDPn1GonDUX2pNG/BL3WN6Xud7Sk\r\nDBwM/qNDVYHgiPUvFrTtvg7TKkTIXfIpm4Sk/xKQF2LgL0bIyGpiGHjZwRDq\r\n0MoF8UZEXf56kG9DlakXWcHk4Lt0RT8WG46S/aUQwCMqS6PYt+m1Tj3uYyaF\r\nN8dEdnrUzxz43fZCFAXwmrv5UEB//hSYs/LcPuTpATp/vo77kVVZudqFfYSM\r\ncqj48fqB9ntze1ZkaNiU7bi33W/E0FRNFUIxj2DRKYo6LTxsRXKPcKGaT8m1\r\n57YRtctT/wZDoz9xkGxUKRbC1FDYzV5uSTRiKhHo1M+VDrAsUDoGywI8N1ab\r\n4MEo08vOhRbAjW3U7K8o3Nt4400cmNAkySfgo6cJSlYlOv9eSITcuPQROet0\r\n/Ri64G/zGmnKKrjuNrYEG+mRrLNeDEtQ2CU=\r\n=ADPK\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"adrian-alu0101024363","email":"alu0101024363@ull.edu.es"},"directories":{},"maintainers":[{"name":"adrian-alu0101024363","email":"alu0101024363@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/espree-logging-solution_0.3.1_1677689548318_0.36780442438463945"},"_hasShrinkwrap":false},"0.3.2":{"name":"@adrian-alu0101024363/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","main":"src/logging-espree.js","bin":{"funlog":"bin/log.js"},"scripts":{"execute":"./bin/log.js","test":"mocha","cov":"c8 --reporter=html --reporter=text npm run test","test1":"node ./bin/log.js ./test/data/test1.js","doc":"documentation build src/logging-espree.js -f md -o doc.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","@adrian-alu0101024363/espree-logging-solution":"*"},"version":"0.3.2","devDependencies":{"mocha":"^10.2.0","nyc":"^15.1.0"},"gitHead":"78f44dfaa13819affcbcb9f1f28fadeb12494a21","_id":"@adrian-alu0101024363/espree-logging-solution@0.3.2","_nodeVersion":"19.6.0","_npmVersion":"9.4.0","dist":{"integrity":"sha512-YfpgVWcl8hf2a8aQaiUrCAiK5hxnY+QYnwENq5CGAZhVWKmipH/sjyFnRj9Slzqd4Yxol5FNpLXDN5GMUj/HNA==","shasum":"6c170cddddf72abf5164a5c8ebe8d96f221f2a3f","tarball":"https://registry.npmjs.org/@adrian-alu0101024363/espree-logging-solution/-/espree-logging-solution-0.3.2.tgz","fileCount":113,"unpackedSize":5773825,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFX1a0u3mOFGzIEI/AAb8M54NskyF2Xe4z8C0YE6p2zHAiEA7LE6P7HBV9faeQSN9C9fZ2eXsKyPCfoB7QTKAo03Ja0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/63lACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrlVg//ULbeh4tYu2uxsf95ilSDVT6n7ThC1jI6zQYInX//mL9Ci/45\r\newp9g3y1/aRWPBDDKULYXWjlmgSQWOIWSygByX1A8wLwfT9ZwhuuQEWWipRU\r\nAhyk/CIHMkmz6dFuEbKUAzhRv8cGho/pdr/pfdzk7Nc97czRSfyk5uMIfwzY\r\nmRi2kYmTrCj1S0tnYsjsRp78khkTAbVQnybKaMfcIOcs+txPSEUi20nZUcC8\r\nLOauqe/Xv+ZjoYuZNgQtW/ZWg7MFzPGBOWnGV2VZRs4zQhLi73r2CwHiHBal\r\nZ9T2wAwJ0vFKuZ/W2pH/ua/YZCsYJAfAaMiqW9QZTCAeRuNacCEMbPrmZl0c\r\nut3/CA9qjHIYnQJ69N2OZ7hf4rsWrvgZk034VmuqEGMVWye/GKXcv6MCRzF3\r\nHpZ6RnfnrYdfUPuHynUyTOtFDiGHqjG4iCzeYIEWhg44w1VL/WulKSjf/WL8\r\naa9FfSNMCRw1yqNAwhn8s797FH8bOqCeN1+2Dn2hCssFqlGEfsAF24dhGPSn\r\n3nkzYEOntEknEPWT9g5xTLVbBMf5ahOXgbbtdMmiAJJpQ/kJhHYoIRVHo78B\r\nDSizT2dSW5VhtCJh6qr/Xya0+M+Sz8KLxTkTP54dGid3sLNj7LkyV1dXxjqI\r\ncvRdyimkJj0QBlhEtD8HbRX7mKjXidJYWic=\r\n=yBj5\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"adrian-alu0101024363","email":"alu0101024363@ull.edu.es"},"directories":{},"maintainers":[{"name":"adrian-alu0101024363","email":"alu0101024363@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/espree-logging-solution_0.3.2_1677700581109_0.31819976792897875"},"_hasShrinkwrap":false}},"time":{"created":"2023-02-26T17:39:04.427Z","0.3.0":"2023-02-26T17:39:04.650Z","modified":"2023-03-01T19:56:21.459Z","0.3.1":"2023-03-01T16:52:28.562Z","0.3.2":"2023-03-01T19:56:21.319Z"},"maintainers":[{"name":"adrian-alu0101024363","email":"alu0101024363@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=10277098)\n# Práctica Espree logging\n\n## Docs module\n\n### Installation \n\n```bash\nnpm i @adrian-alu0101024363/espree-logging-solution\n```\n\n### Usage\n\n```js\nimport { transpile } from \"@adrian-alu0101024363/espree-logging-solution\";\nlet inputfile = \"test1.js\";\nlet outputfile = \"out1.js\";\ntranspile(inputfile, outputfile);\n```\n\n### Test\n\nnpm test \n\n## Resumen de lo aprendido\n\n### Debugging con Chrome\n\n- Ejecutamos en la terminal \n```\nnode --inspect-brk bin/log.js test/data/test1.js \n```\nPuede ser cualquier test y cualquier opción pero para esta demostración usaré el test1. \n\n![brk](https://github.com/ULL-ESIT-PL-2223/espree-logging-adrian-fleitas-de_la_rosa-alu0101024363/blob/main/img/command.png)\n\n- Abrimos Chrome y escribimos chrome://inspect resultando en la siguiente pantalla:\n\n![inspect](https://github.com/ULL-ESIT-PL-2223/espree-logging-adrian-fleitas-de_la_rosa-alu0101024363/blob/main/img/inspect.png)\n\n- Le damos a inspect. Importante que hayamos puesto debugger en alguna línea de nuestro código ya que es el breakpoint para chrome\n\n- A partir de aquí podemos manejarnos como con cualquier otro debugger entrando en una función, ejecutando paso a paso, ejecución hasta el final, etc.\n\n![debug](https://github.com/ULL-ESIT-PL-2223/espree-logging-adrian-fleitas-de_la_rosa-alu0101024363/blob/main/img/debugger.png)\n\n- Por ejemplo podemos ver aquí como lee la function foo, muestra que tiene dos parametros a y b, vemos su información del nodo type, start, etc y vemos que en beforeCode esta nuestra console.log string\n\n![foo](https://github.com/ULL-ESIT-PL-2223/espree-logging-adrian-fleitas-de_la_rosa-alu0101024363/blob/main/img/foo.png)\n\n![fooi](https://github.com/ULL-ESIT-PL-2223/espree-logging-adrian-fleitas-de_la_rosa-alu0101024363/blob/main/img/inspectfoo.png)\n\n### Descripción de las funciones\n\n- transpile se encarga de leer el archivo de input pasarle la información a la función addLogging y escribir el resultado en el argumento dado (por commander).\n- Tener en cuenta que necesitamos asegurarnos de que el archivo ha sido leído antes de hacer cualquier otra cosa así que la llamada a addLogging.\n```javascript\n  if (inputFile) {\n    let input = await fs.readFile(inputFile, 'utf-8');\n    const output = addLogging(input);\n    if (outputFile === undefined) {\n      console.log(output);\n      return;\n    }\n    await fs.writeFile(outputFile, output);\n  } else program.help();\n  ...\n```\n- la función addLogging recoge este input añade los comentarios usando addBeforeCode y devuelve \"javascript\" con el resultado. Osea devuelve el texto de lo que debería ser el javascript.\n- addLogging primero genera el ast del código input, luego lo recorremos y por cada nodo de dicho árbol miramos si el tipo del nodo es alguno de los que nos interesa. Si es el caso llamamos a addBeforeCode pasandole dicho nodo. Hacemos esto con cada nodo y devolvemos el \"código javascript\" usando escodegen.generate\n- addBeforeCode primero comprueba si es función anonima o no para asignarle un nombre, luego usando map guardamos un vector con los parametros del nodo. Seguidamente creamos con dichas variables un console.log que va a ser insertado. Para insertarlo primero necesitamos parsear esta string y luego la insertamos en el body del body del node que ha sido pasado.\n- A tener en cuenta insertamos en el body porque es ahí donde esta todo el cuerpo del nodo. No debemos sobreescribir las otras partes del nodo.\n\n- Para que sea mas claro lo explicado sobre el body presento esta imagen:\n\n![ast](https://github.com/ULL-ESIT-PL-2122/espree-logging-adrian-fleitas-de-la-rosa-alu0101024363/blob/master/img/ast.jpg)\n\n- de este código:\n\n```javascript\nfunction foo(a, b) {   \n    var x = 'blah';   \n    var y = (function () {\n      return 3;\n    })();\n  }     \nfoo(1, 'wut', 3);\n```\n\n## El ejecutable\n\nEl ejecutable está en `bin/log.js` este archivo simplemente implementa commander como será explicado en su sección y luego usa el método transpile de logging-espree.js\n\n```\n✗ bin/logging.js -h\nUsage: jslogging [options] <filename>\n\nAdds logs to javascript code\n\nArguments:\n  filename                 file with the original code\n\nOptions:\n  -V, --version            output the version number\n  -o, --output <filename>  file in which to write the output (default: \"output.js\")\n  -h, --help               display help for command\n```\n\n```\ngit:(main) ✗ cat test/test1.js \nfunction foo(a, b) {   \n    var x = 'blah';   \n    var y = (function () {\n      return 3;\n    })();\n  }     \nfoo(1, 'wut', 3);\n➜  git:(template) ✗ bin/logging.js test/test1.js -o salida.js\nFile read succesfully\nOutput written succesfully in salida.js\n➜  git:(template) ✗ node salida.js\nEntering foo(1, wut) at line 1\nEntering <anonymous function>() at line 3\n```\n\nUsando un script de npm de nuestro package.json podemos ejecutar el programa también de esta manera:\n```\nnpm run execute test/data/test1.js -- -o out.js\n```\nPodemos ejecutar cualquiera de la opciones por ejemplo -h:\n\n![help](https://github.com/ULL-ESIT-PL-2223/espree-logging-adrian-fleitas-de_la_rosa-alu0101024363/blob/main/img/help.png)\n\n\n![eje](https://github.com/ULL-ESIT-PL-2223/espree-logging-adrian-fleitas-de_la_rosa-alu0101024363/blob/main/img/eje.png)\n\n## CLI con [Commander.js](https://www.npmjs.com/package/commander)\n\nCommander.js nos permite simplificar tanto el control de argumentos pasados por consola como el de opciones. Tal y como se ve en el código siguiente si queremos un argumento\nobligatorio usamos .argument() si queremos una opción usamos .option() pasandole primero la sintaxis de la opción luego la descripción y por último la opción por defecto. En\neste caso es un archivo por defecto llamado output.js. Por último tenemos la acción con action() a la que cúal se le pasa una función (en este caso anónima) con lo que \ndebería ejecutar (en este caso nuestro método transpile del archivo logging-espree.js). Version y description vienen dado por nuestro package.json el que ha sido requerido antes.\n\n```javascript\nprogram\n    .name(\"jslogging\")\n    .version(version)\n    .description(description)\n    .argument(\"<filename>\", 'file with the original code')\n    .option(\"-o, --output <filename>\", \"file in which to write the output\", \"output.js\")\n    .action((filename, options) => {\n       transpile(filename, options.output);\n    });\n\nprogram.parse(process.argv);\n```\n\n## Reto 1: Soportar funciones flecha\n\nPara superar este reto necesitamos comprobar que el tipo del nodo es ArrowFunctionExpression para ello añadimos esta condición al if de cuando atravesamos el árbol. Además \nen la función addBeforeCode como la funciones flecha no tienen nombre(name) necesitamos cambiar la asignación de la variable name dependiendo de si el nodo tienen name o no de esta manera:\n\n```\nconst name = node.id ? node.id.name : '<anonymous function>';\n```\n\n```javascript\nfunction addLogging(code) {\n  let ast = espree.parse(code, {ecmaVersion:6, loc:true});\n  estraverse.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  return escodegen.generate(ast);\n}\n```\n\n## Reto 2: Añadir el número de línea\n\nPara conseguir este reto necesitamos primero añadir al parse la opción loc:true (o al menos la necesite para que me aceptará luego node.loc.start.line) este parse\nse encuentra en la función addLogging. Luego en la función addBeforeCode necesitamos añadir a nuestra string beforeCode el número de línea usando node.loc.start.line.\nA continuación se muestra el cambio y la función addBeforeCode:\n\n```javascript\n  let ast = espree.parse(code, {ecmaVersion:6, loc:true});\n```\n\n```javascript\nfunction addBeforeCode(node) {\n  const name = node.id ? node.id.name : '<anonymous function>';\n  const parameters = node.params.map(param => `\\$\\{${param.name}\\}`);\n  const beforeCode = `console.log(\\`Entering ${name}(${parameters}) at line ${node.loc.start.line}\\`);`;\n  const beforeNodes = espree.parse(beforeCode,{ecmaVersion:6}).body;\n  node.body.body = beforeNodes.concat(node.body.body);\n}\n```\n\n## Tests\n\nPrimero se han probado a mano con varios test el correcto funcionamiento del programa. Luego usando npm scripts se ha automatizado el proceso. Simplemente ejecutando npm test se realizan todos los test disponibles en la carpeta test. Esto simplemente hace una diferencia de ficheros entre el que genera el programa y el \"correcto\" por tanto si queremos añadir tests nuevos necesitamos añadir el \"correcto\" también. Esto funciona así por ser una práctica de la asignatura PL.\nVeamos los tests y los resultados:\n\n### Test 1\n```javascript\nfunction foo(a, b) {   \n    var x = 'blah';   \n    var y = (function () {\n      return 3;\n    })();\n  }     \nfoo(1, 'wut', 3);\n```\n\n```javascript\n// Result\nfunction foo(a, b) {\n    console.log(`Entering foo(${ a },${ b }) at line 1`);\n    var x = 'blah';\n    var y = function () {\n        console.log(`Entering <anonymous function>() at line 3`);\n        return 3;\n    }();\n}\nfoo(1, 'wut', 3);\n```\n\n### Test 2\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\n// Result\nfunction foo(a, b) {\n    console.log(`Entering foo(${ a },${ b }) at line 1`);\n    var x = 'blah';\n    var y = function (z) {\n        console.log(`Entering <anonymous function>(${ z }) at line 3`);\n        return z + 3;\n    }(2);\n}\nfoo(1, 'wut', 3);\n```\n\n### Test 3\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```javascript\n// Result\nfunction foo(a, b, c) {   \n    console.log(`Entering foo(${ a },${ b },${ c }) at line 1`);\n    let x = 'tutu';\n    let y = function (x) {\n        console.log(`Entering <anonymous function>(${ x }) at line 3`);\n        return x * x;\n    }(2);\n    let z = (e => {\n        console.log(`Entering <anonymous function>(${ e }) at line 4`);\n        return e + 1;\n    })(4);\n    console.log(x, y, z);\n}\nfoo(1, 'wut', 3);\n```\n### Ejecución conjunta con npm test\n\n![test](https://github.com/ULL-ESIT-PL-2223/espree-logging-adrian-fleitas-de_la_rosa-alu0101024363/blob/main/img/test.png)\n\n...\n\n### Coverage \n\n![cov](https://github.com/ULL-ESIT-PL-2223/espree-logging-adrian-fleitas-de_la_rosa-alu0101024363/blob/main/img/cov.png)\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### Publicación en npm\n\n- Primero debemos logearnos (o crear una cuenta) en la web o bien seguimos los siguientes pasos.\n- Por consola sería primeramente configurar npm con estos comandos: \n\n```bash\nnpm set init.author.name \"Casiano Rodriguez-Leon\"\nnpm set init.author.email \"whatever@gmail.com\"\nnpm set init.author.url \"https://github.com/crguezl\"\n```\n\n- Y añadimos el usuario al registry con npm adduser\n- Logeamos con npm login y comprobamos que estamos dentro con npm whoami\n- Para evitar conflictos debemos usar un scope bajo el que publicaremos nuestros módulos npm.\n- Para ello añadimos @username/project-name (rellenado con los datos correctos) en el name del package.json\n- Por último publicamos con:\n\n```bash\nnpm publish --access=public\n```\n-- Con npm version patch/minor/major podemos cambiar el versionado\n-- Y al hacer esto se crean las tags correspondientes\n-- Para probar simplemente tras linkear o instalar el modulo ponemos en la consola funlog inputfile \nEnlace de este mismo módulo publicado: https://www.npmjs.com/package/@adrian-alu0101024363/espree-logging-solution\n\nEnlace de pages: https://ull-esit-pl-2223.github.io/espree-logging-adrian-fleitas-de_la_rosa-alu0101024363/\n","readmeFilename":"README.md"}