{"_id":"@alu0101398198/espree-logging-solution","_rev":"3-4a00e3751aea5ee66b2a4942baf2fd7b","name":"@alu0101398198/espree-logging-solution","dist-tags":{"latest":"2.0.2"},"versions":{"1.0.0":{"name":"@alu0101398198/espree-logging-solution","author":{"name":"Gabriel Jonay Vera Estévez"},"description":"Adds logs to javascript code","type":"module","bin":{"funlog":"bin/log.js"},"scripts":{"test":"mocha test/test.mjs","cov":"nyc npm run test","clean":"rm -f test/data/out*.js; rm -f src/calc.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","mocha":"^9.2.0"},"version":"1.0.0","devDependencies":{"mocha":"^10.2.0","nyc":"^15.1.0"},"gitHead":"a50e3c0c99c06599b2305411fbfa0142428776f8","_id":"@alu0101398198/espree-logging-solution@1.0.0","_nodeVersion":"19.6.0","_npmVersion":"9.4.1","dist":{"integrity":"sha512-HplmpP/2snWf2OnexWzyN/DWx9IYwXGVKMHbU9aRz+VV19PynWjAUXxVWKDnvQoC6VhpBkf7iPt6JW/Wjt2P0Q==","shasum":"4d818861dd8c7a12344c91ef245568e4bacd665d","tarball":"https://registry.npmjs.org/@alu0101398198/espree-logging-solution/-/espree-logging-solution-1.0.0.tgz","fileCount":35,"unpackedSize":29787,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDiC9N/kcTFhcypT2B0DICRjaq4ngKt1JZ6tiLwum5wCQIhAN+1uWc2FLWxJbLSulsievGjU68vfxpCaigLYUbY8FIx"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/58MACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqIuA/+Lq5FRKFdcuDFoXiLhMlTI0ggOLdhWqBSJ6xRHAvaTOiaGRf7\r\n88gRbYrAxqXDjpNqXQSFe9KugFI1Ag0QcklZdbOb6Ew353AKHyAsoHRm+sF8\r\nq+5v4EuVAKl9B4xLnMp0DVknRE4Sm/hA8P1GHPb42KvbtWeyVItU3MCPPkWR\r\n4L40+6/39OiltWAd/AfeSigCCtGBwLu4K3FWqVGV+Z7F8Zwx5U8kQlK2Jnl+\r\nC5CrFJoIdWKmH+8hEfSQiErFSfKpMsnHG3aFFKr80N7gVRla7slCMRuQd72d\r\ndIl5/92KEKkAiiJED/qiD3GL82DR82DTOdYsE4XOU6CTxn/UfAj2DZPLXdgg\r\nPxKyH/3BTwrkiua9F06yHB/unpbo2UKLpSjXFg29Dlk4SxulEaEe/3zoaKXn\r\nqKSCECqCs6UrK3NV9pH6pmX4KDYF0xBUcOD9XBEE7G5T1uVFNzR6j5ONbuXV\r\n8d/8xIMGSRTeqUo0wBseP7+BulBIZh1257P7SUMDticvjVXTrD1pnFaKlJoc\r\nOV1pTg+69SDoN/qE50cjOU/R3WCZudSKyZKZga48zYoqT1f6oyyfP413mxio\r\nrWw5lipMgL9rxOMsA1qvD9Y+cdAslCq6vcVW7kWeLSS/zgPkFbIQ6/SqcV/2\r\nuveqd+iaxd4gP8Bz8nsKZCSoWX513kdl39E=\r\n=9jyP\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"alu0101398198","email":"alu0101398198@ull.edu.es"},"directories":{},"maintainers":[{"name":"alu0101398198","email":"alu0101398198@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/espree-logging-solution_1.0.0_1677696780388_0.2365508530714393"},"_hasShrinkwrap":false},"2.0.0":{"name":"@alu0101398198/espree-logging-solution","author":{"name":"Gabriel Jonay Vera Estévez"},"description":"Adds logs to javascript code","type":"module","bin":{"funlog":"bin/log.js"},"scripts":{"test":"mocha test/test.mjs","cov":"nyc npm run test","clean":"rm -f test/data/out*.js; rm -f src/calc.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","mocha":"^9.2.0"},"version":"2.0.0","devDependencies":{"mocha":"^10.2.0","nyc":"^15.1.0"},"gitHead":"b1c7a1e86c20c6971b3639b1041b541ef07905b1","_id":"@alu0101398198/espree-logging-solution@2.0.0","_nodeVersion":"19.6.0","_npmVersion":"9.4.1","dist":{"integrity":"sha512-ASDHUZDmRV4D3BVu1ycRXjwxf8XK03mmukMvcVFre79vrtxCiGLkOlw2UqZsUZROpRbQHF5KTAmK4UPZ3djoVg==","shasum":"db86e2284202aeeccc336ac06cdc1f26ebf64666","tarball":"https://registry.npmjs.org/@alu0101398198/espree-logging-solution/-/espree-logging-solution-2.0.0.tgz","fileCount":38,"unpackedSize":141616,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCRJAcEv8b5DjvNl49XpxAC//3FtRam6/IyorU8VqsmwAIgNTgvDeM17/9asKxwld3sakS9wtX/ek9+6WW2qe53WB0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/6N4ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmreaw/9HhkLfXBiwVpsoVx5FYXfFSORFwQeOpbRQeonjSj2JwIlXs40\r\nO6Eu7Je815gyou9/xrYwd5+3+4dirrQ833IqcR6z/ihHnHpih3uVpkXOJ/ub\r\njJWHLqDzmTTC/Z5zwpcxMjv72X2TELi1nOBnO222ZYDw+Qn9ImN2yk3UzaYG\r\n6KDBnABY0AebE+aaY195PLjM5hQeF4bsLR/7m+//M4d1OV30fwyPEzCHTS1u\r\nHgnm12YJVlOix8wpS12LTebsgz6ZrydRKh3eBjfJmU11DM9/AOBBC5Qt4sw4\r\nWdfswXcBybsUDeLqAztsL3QMVdBC7d1katuDUzotYOZ/0f4nbf8NKhievgIg\r\nPskIkTL4DqLVs4KZZB9VLqOPmfRwSHgD/Occfc65ic5GS3epip6UHZXuL5sg\r\nmoTo9hE/14N7HhN7Msl86WO2CjdAmcZGbcpXB1bJUWdjSOWUzaEjYMtiO7jX\r\nJSQM/gaKJr+RNDJ8rnn9bXjSl9j9bUBI37zd3S4BrPsyMUqDKKqeEvsQTLPl\r\nIGNiV72QugpydC4eQf43x1QQd/e8o6CFS+MB6LjVCfY9stTsWzhkm8SviNsS\r\nAgbBu2FVFp1SVcVAHecIEKqUduOTHkaMaCTNIMDIt3S90c6V/4sF3E8GnmtY\r\nDg+3Zt4yQB/BCIqh26K7RoAvTrWwfuJFj50=\r\n=Ia/K\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"alu0101398198","email":"alu0101398198@ull.edu.es"},"directories":{},"maintainers":[{"name":"alu0101398198","email":"alu0101398198@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/espree-logging-solution_2.0.0_1677697912308_0.5736258494913777"},"_hasShrinkwrap":false},"2.0.1":{"name":"@alu0101398198/espree-logging-solution","author":{"name":"Gabriel Jonay Vera Estévez"},"description":"Adds logs to javascript code","type":"module","bin":{"funlog":"bin/log.js"},"scripts":{"test":"mocha test/test.mjs","cov":"nyc npm run test","clean":"rm -f test/data/out*.js; rm -f src/calc.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","mocha":"^9.2.0"},"version":"2.0.1","devDependencies":{"mocha":"^10.2.0","nyc":"^15.1.0"},"gitHead":"4d9a52e414f6fcbb22047f8a17f9313ace53cbc1","_id":"@alu0101398198/espree-logging-solution@2.0.1","_nodeVersion":"19.6.0","_npmVersion":"9.4.1","dist":{"integrity":"sha512-21Su5pJ+72nXuW4Bp1vzF/ct9XHDBNpPgMjVNDJKsmxTLrgXsycmmgqFWFUTjKiFoN5OmZuDQdAdDbSEab39bQ==","shasum":"59b23f5dc1a7f347108ff1640919bf8d613bf828","tarball":"https://registry.npmjs.org/@alu0101398198/espree-logging-solution/-/espree-logging-solution-2.0.1.tgz","fileCount":39,"unpackedSize":291818,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiDuelC+e72eGgsDQe4dFdaG5sK1oC6AHn9tvTDCyKzgIhAMameaEuaXqmBKQetFB1eGctPMM/iKyjtybjBfGHy/z/"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/6T+ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrJoA//T06UIsLj066HTzX7QKoLW34cNQzEwCWyq2yDeGFVzgaIUMBT\r\nIEuapSUVHaCNOaFwVlFuUtiRL6TXJlZko4hfxH2Z0T+AKbqtCSsOWB8rOBsD\r\niEG8QpqjcAEj9K5RoO0tQXPDEcEcS3ewRpVsnTHSDZ/3InZd18PElot194Sg\r\n5kDiCKNpIKdVJx4ntt0z+czcHT9Jv4XkV0ocATliNbUEFFisAEjlwB0hE7hZ\r\nEJAv/aNNQFDVqeRTkHzeqB6b6d3a/zWrK+XZxJr31TjsWlPFlKkKtkdXmAME\r\nWw1DRTimov7jhs1pZsMG+zUsh5RcLGvRenzqM9L6NxHbQOqfii5ejcAoL96r\r\nE1TwLG9xPFkn6EcQmDdpxEvWT2RKn14wq2IaAGw7HQcz6lZ5oXwzacRoGw8n\r\nZ1/zSynhPx2jT2QMTlyIfOwfs4XSFWy30tc0ND6MC24x2e+Rj7xN8LfBji6r\r\ntU300Z7WCb+HbzmLWx5DonHJw907861W7N+AxoJ94zymhBOYm3HtI8twcCFX\r\n8B0DPtXYeU8DLOhzbUOf0pl53iPazZpC44FdvPJMXCkXgdhpLt7VUGj00N1b\r\njCoY/0VPICN/If15W8hwsSIols8phYk4t5jK6iNfi0H+o3UWENUWrcJAmF0+\r\n5ebFaj+CchKOnSwdxPZ30yDWwuD0cNIhvPQ=\r\n=o1uW\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"alu0101398198","email":"alu0101398198@ull.edu.es"},"directories":{},"maintainers":[{"name":"alu0101398198","email":"alu0101398198@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/espree-logging-solution_2.0.1_1677698302622_0.6511895359104127"},"_hasShrinkwrap":false},"2.0.2":{"name":"@alu0101398198/espree-logging-solution","author":{"name":"Gabriel Jonay Vera Estévez"},"description":"Adds logs to javascript code","type":"module","bin":{"funlog":"bin/log.js"},"scripts":{"test":"mocha test/test.mjs","cov":"nyc npm run test","clean":"rm -f test/data/out*.js; rm -f src/calc.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","mocha":"^9.2.0"},"version":"2.0.2","devDependencies":{"mocha":"^10.2.0","nyc":"^15.1.0"},"gitHead":"d3c54020d68ba90773625b9263d5d2e7351b4b78","_id":"@alu0101398198/espree-logging-solution@2.0.2","_nodeVersion":"19.6.0","_npmVersion":"9.4.1","dist":{"integrity":"sha512-gFNIQT/eGQGEuDZazxYoMP9tWLJpNb/BJXCk1wEmx7ug7I1VjIE3fs8hlRw0AAL/VVXhMIIRl2ppo5B1+TSoSw==","shasum":"c6335dc3a4ac95765ddf50f25b96c4773c069da8","tarball":"https://registry.npmjs.org/@alu0101398198/espree-logging-solution/-/espree-logging-solution-2.0.2.tgz","fileCount":39,"unpackedSize":291604,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICiY4xqr9NqepPk+nl4BVhQqUwzXKtVkK7XE7tEeKQ81AiEA8MCf+SF+dSMgal+Wx4fatmnOSMPEK7J7VrimodNdtuY="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj/7APACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpFNA/9FkzBLzQMrT55o+TR2/LvrZA67S9rOe2yTqnezRpIh3O6O851\r\nmKSbdxJfRPR6ZDh8yrUpB+O3m8MorehUukuJzpSiXKw3v5XmxfmgDLLjhyob\r\nBXZ87y7HEpbcFqlPDB+yP1Ga7HXk/+Zwkou+lNg9SZ0CZm7jC4J4wYSTd4xC\r\nXoNdO4/tBwUhW6ndM5lxPfxmwjy1NtEcOi8aC9yyV27MUrVIftsLKdWZNi/V\r\ntNRLoYdbU4Q2JuurqPqYnivJc3RTFFJVxaMLRQK3MiCO5gAFkupJstd48GH5\r\nYxLKyaKoCMmblsSNxpuzDwfAAbizbP4K0QYYV8NLMW+KfV7gb/AVser3u6jF\r\ngax/8e1wc/y6sPIs8PgDO+q1TiEQ5n6U4QQBi2Sk55/Xfp4jCGGmsHfePy+d\r\nZyHzt56ykc8XpD6YAp5PxFLt5MWPj2aukjfhgNVwnYy3EwaBUdIxxI+6hMJD\r\nHy3tM1eHukAb005lfFBxyD8IApI99u3nuWfzCjirL+c2zns0TpznDDqGGy5E\r\n/4ogjYm+YmTyyXTqJ1EuUawZdGRIG9yhmvf3PncIyJF/gBiYTDfCYUFwilVV\r\n3IHJLEeuGqpCE2HoCMJIoWfi6dNJAt6f9ulEeO2Jq6uTy+e34gJ9PsyoLycG\r\nObBGrb7EGmz/a/G9zqyXwCVz9aJRnoCmjYA=\r\n=8LTM\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"alu0101398198","email":"alu0101398198@ull.edu.es"},"directories":{},"maintainers":[{"name":"alu0101398198","email":"alu0101398198@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/espree-logging-solution_2.0.2_1677701135319_0.6954079157778237"},"_hasShrinkwrap":false}},"time":{"created":"2023-03-01T18:53:00.328Z","1.0.0":"2023-03-01T18:53:00.552Z","modified":"2023-03-01T20:05:35.736Z","2.0.0":"2023-03-01T19:11:52.463Z","2.0.1":"2023-03-01T19:18:22.863Z","2.0.2":"2023-03-01T20:05:35.619Z"},"maintainers":[{"name":"alu0101398198","email":"alu0101398198@ull.edu.es"}],"description":"Adds logs to javascript code","author":{"name":"Gabriel Jonay Vera Estévez"},"readme":"[![Open in Codespaces](https://classroom.github.com/assets/launch-codespace-f4981d0f882b2a3f0472912d15f9806d57e124e0fc890972558857b51b24a6f9.svg)](https://classroom.github.com/open-in-codespaces?assignment_repo_id=10290036)\n# Práctica Espree logging\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\nEl programa admite la introducción de parametros por linea de comandos\n\n![opciones](./docs/opciones.png)\n\n## Reto 1: Soportar funciones flecha\n\nSe ha modificado el código de `logging-espree.js` para que el log también se aplique a las funciones flecha.\n\n```javascript\n/**\n * @desc Adds logging to the input code.\n * @param {string} code - The code to add logging to.\n * @returns The code with logging added.\n */\nexport function addLogging(code) {\n  const ast = espree.parse(code, { ecmaVersion: 12, 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\nSe ha modificado el código de 'addBeforeCode' para que el log también indique el número de línea de la función.\n\n```javascript\n/**\n * @desc Adds logging code to the beginning of the function.\n * @param {object} node - The function node to add logging to.\n * @returns The function node with logging added.\n */\nfunction addBeforeCode(node) {\n  const name = node.id ? node.id.name : '<anonymous function>';\n  const params = node.params.map(p => '${ ' +  p.name + ' }').join(', ');\n  const beforeCode = 'console.log(\\`Entering ' + name + '(' + params + ') at line ' + node.loc.start.line + '\\`);';\n  const beforeNodes = espree.parse(beforeCode, { ecmaVersion: 12 }).body;\n  node.body.body = beforeNodes.concat(node.body.body);\n}\n```\n\n## Tests and Covering\n\nSe han añadido tests para comprobar que el programa funciona correctamente.\n\n```javascript\t\nexport default [\n  {\n    input: 'test1.js',\n    output: 'logged1.js',\n    correctLogged: 'correct-logged1.js',\n    correctOut: 'logged-out1.txt'\n  },\n  {\n    input: 'test2.js',\n    output: 'logged2.js',\n    correctLogged: 'correct-logged2.js',\n    correctOut: 'logged-out2.txt'\n  },\n  {\n    input: 'test3.js',\n    output: 'logged3.js',\n    correctLogged: 'correct-logged3.js',\n    correctOut: 'logged-out3.txt'\n  },\n  {\n    input: 'test4.js',\n    output: 'logged4.js',\n    correctLogged: 'correct-logged4.js',\n    correctOut: 'logged-out4.txt'\n  },\n  {\n    input: 'test5.js',\n    output: 'logged5.js',\n    correctLogged: 'correct-logged5.js',\n    correctOut: 'logged-out5.txt'\n  }\n]\n```\n\nSe ha añadido el siguiente fragmento de código a los test para comprobar que el programa funciona correctamente.\n\n```javascript\nfor (let i = 0; i < Test.length; i++) {\n  it ('Test ' + i, async function () {\n    const t = Test[i];\n    await transpile(t.input, t.output);\n    const correctLogged = await fs.readFile(t.correctLogged, 'utf-8');\n    assert.equal(removeSpaces(correctLogged), removeSpaces(await fs.readFile(t.output, 'utf-8')));\n\n    let outputs = [];\n    let oldLog = console.log;\n    console.log =\n        function(...args) {\n      outputs.push(args.join(' '));\n    }\n\n    await import(t.output);\n    outputs.push('');  // Add a newline at the end.\n    console.log = oldLog;\n    const correctOut = await fs.readFile(t.correctOut, 'utf-8');\n    assert.equal(removeSpaces(outputs.join('\\n')), removeSpaces(correctOut));\n  });\n}\n```\nAl ejecutar los test se obtiene el siguiente resultado:\n\n![test](./docs/test.png)\n\nDebido a que existe una incompatibilidad entre nyc y los módulos de ES6 no se puede realizar un correcto estudio de cobertura.\n\n![coverage](./docs/coverage.png)\n\n## GitHub Actions\n\nSe ha hecho uso de la integración continua de GitHub Actions para comprobar que el programa funciona correctamente.\n\n```yaml\n# Write your workflow for CI here\nname: CI\n\n# Controls when the workflow will run\non:\n  # Triggers the workflow on push or pull request events but only for the $default-branch branch\n  push:\n    branches: [ main ]\n  pull_request:\n    branches: [ main ]\n\n  # Allows you to run this workflow manually from the Actions tab\n  workflow_dispatch:\n\n# A workflow run is made up of one or more jobs that can run sequentially or in parallel\njobs:\n  # This workflow contains a single job called \"build\"\n  build:\n    # The type of runner that the job will run on\n    runs-on: ubuntu-latest\n\n    name: Test\n    # Steps represent a sequence of tasks that will be executed as part of the job\n    steps:\n      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it\n      - uses: actions/checkout@v2\n      - name: Setup node\n        uses: actions/setup-node@v2\n      # Runs a single command using the runners shell\n      - run: npm ci\n      - run: npm test\n```\n\n![github](./docs/github.png)\n\n## NPM\n\nSe ha publicado el paquete en NPM.\n\nUsamos este comando para loguearnos en NPM:\n\n```bash\nnpm login\n```\n\nUsamos este comando para publicar el paquete:\n\n```bash\nnpm publish --access=public\n```\n\n![npm](./docs/npm.png)","readmeFilename":"README.md"}