{"_id":"@alu0100819786/constant-folding","_rev":"6-795a12631360a3187d5f9674f4d322c3","name":"@alu0100819786/constant-folding","dist-tags":{"latest":"2.1.1"},"versions":{"0.0.1":{"name":"@alu0100819786/constant-folding","version":"0.0.1","author":{"name":"alu0100819786","email":"alu0100819786@ull.edu.es"},"description":"Constant Folding javascript code","repository":{"type":"git","url":"git+https://github.com/ULL-ESIT-PL-2122/constant-folding-super-gabriel-melian-hernandez-alu0100819786.git"},"keywords":["ULL","constant-folding","javascript"],"license":"Unlicense","dependencies":{"commander":"^7.1.0","escodegen":"^1.14.3"},"main":"src/constant-folding.js","bin":{"cf":"src/constant-folding-cli.js"},"devDependencies":{"chai":"latest","jison":"latest","mocha":"latest","espree":"^9.3.1","nyc":"latest"},"gitHead":"e655f77a9b9d3bca8c85556fcc5a9e9c5f60bfe0","bugs":{"url":"https://github.com/ULL-ESIT-PL-2122/constant-folding-super-gabriel-melian-hernandez-alu0100819786/issues"},"homepage":"https://github.com/ULL-ESIT-PL-2122/constant-folding-super-gabriel-melian-hernandez-alu0100819786#readme","_id":"@alu0100819786/constant-folding@0.0.1","_nodeVersion":"16.13.2","_npmVersion":"8.1.2","dist":{"integrity":"sha512-1XhGq60yWBrCCwnu7oea5s82O8tYckE0ykJGaTDTtee8ifxZtROnsbboAgmqWXUFT1Y3DwhcL2TONbqrFUZEXQ==","shasum":"1adadc3e0a84fabc3cbf1297efd934e702dddc8d","tarball":"https://registry.npmjs.org/@alu0100819786/constant-folding/-/constant-folding-0.0.1.tgz","fileCount":13,"unpackedSize":226238,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiJ6JgACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpvpQ//R/nD1TX02WAmgAIJ0pNVfsNzSLHVv2fnRVH358vuYBurZkq2\r\nzUuFPTmZq20Z2WzmLgH1IxJconvxd16PDaLIXjp1da5a/utd/VS9Y5lqRbN3\r\n8VdAcYFzZTW/Ml1untWNjek7YZkB7oH8nNuakf6PADENS7FoHbrr3TH9O6um\r\nPxNj7QnUSGUb6oEUSqATyeGuo/pqv4IJyD4zHSJG0yy89MnJu4/j3VLEZ+NK\r\nvUUZj8VP+L5aoQVBMr12z56+sqcvpxSRIEN4ee7BQNIXISHdE+PPhAZGdYiF\r\nx8n8yvN2O2NJp0ukEHa2FLenaSD1S5rUW1UMKj7iJf73bgmpOTJ50eHgExkl\r\nCgFkoCzsB5m3bmki/Jnu6/a1EaTQKhA5FxlNOLcjLlyBFqFN8TOKTtRKmXtn\r\nn9pax2Wi2UhUBeNrdX94MYcdbIXPch9arhZ5rVB8IsqmnKqqoDenv+/RrcZY\r\nIl+3+7laEOc3ST6RzF3xJWhBbkzKqsuBqf/Ijiu72sxDcvHEcvw3eT9ubqTA\r\nsZgDDQ88tuskjZp9cLIZg/Reo26+LAWiQsxe3mspClPJ3G1UvbeRdECgKCGL\r\nxEZNSJn2Ps6E3kSY/cPsY5BEEg/Jcli02EipTrKZ68D+BhPqUX5Vz7SUYhbe\r\nioEOaHqzusQ8B2kR7/LO4jIEb8EVPTcETAk=\r\n=rMCS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGu9/3uEvaXocLWaM+A814zKkSvRSPgiAqUz3x7DLp3YAiBX6SLHGWrZWLXxnTULoAKVsxjFB8krnFc9OtZPdWZAdw=="}]},"_npmUser":{"name":"alu0100819786","email":"alu0100819786@ull.edu.es"},"directories":{},"maintainers":[{"name":"alu0100819786","email":"alu0100819786@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/constant-folding_0.0.1_1646764640062_0.6198434849222154"},"_hasShrinkwrap":false},"0.0.2":{"name":"@alu0100819786/constant-folding","version":"0.0.2","author":{"name":"alu0100819786","email":"alu0100819786@ull.edu.es"},"description":"Constant Folding javascript code","scripts":{"test":"mocha","prod-test":"cd ../constant-folding-production-test-aluXXX && npm test","cov":"nyc npm run test","full-cov":"npm run clean && npm i && npm run cov","clean":"rm -rf node_modules package-lock.json","doc":"blah blah"},"repository":{"type":"git","url":"git+https://github.com/ULL-ESIT-PL-2021/constant-folding-module-aluXXX.git"},"keywords":["ULL","constant-folding","javascript"],"license":"Unlicense","dependencies":{"commander":"^7.1.0","escodegen":"^1.14.3"},"main":"src/constant-folding.js","bin":{"cf":"src/constant-folding-cli.js"},"devDependencies":{"chai":"latest","jison":"latest","mocha":"latest","espree":"^9.3.1","commander":"^9.0.0","nyc":"latest"},"gitHead":"6648cc621e786ed62d9d1c62dc4f5c151988f34c","bugs":{"url":"https://github.com/ULL-ESIT-PL-2021/constant-folding-module-aluXXX/issues"},"homepage":"https://github.com/ULL-ESIT-PL-2021/constant-folding-module-aluXXX#readme","_id":"@alu0100819786/constant-folding@0.0.2","_nodeVersion":"16.13.2","_npmVersion":"8.1.2","dist":{"integrity":"sha512-wDoKznaMGSCAi4ZSiCGRrqBGir3YKaheiMDKbmPresdW1unGRcNp7JMLIxoKXAsqwMSZbgx+7/fDcwQUKeFlTA==","shasum":"6e29f917d44a29f5e76f46151740fde84fbcccf2","tarball":"https://registry.npmjs.org/@alu0100819786/constant-folding/-/constant-folding-0.0.2.tgz","fileCount":9,"unpackedSize":10130,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiJ6ShACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqf8A//fl+JU5r402MiIonaTd4BvOwQpwGE9niVrM6NwEGy3+JuST/b\r\nGlGlQUPy2LwHUSe/xrPqjPjqvAHimjLznoMYc+aoaCLgJ3t1wt0zKyBs39xi\r\nKg/4BxPG/R4GfxkAKAVIa88WkERJsmuaCU/PpGNrRzxVG/OmpCcW6uy2kxaZ\r\nHaDUFBOUtPjkf8VosqHlPC/yBS384Qi2dMATjeabjFxqLYAjedFMwbeSFKsj\r\n/U8+5Z3jIrVDzEEyFKNZLTny/TBntyGWZV8rNqB1HuBoudQHG39lz9PZSmuN\r\nnFrFYHX81VEXcFhjgsmEbNOysPYZee0l/fJvqSCd9/Th5W8YTzCT8cWnugMM\r\nWfACg6q6HRA8+fsnl6VY03MUYrOFankZ8eQ0bW5YerBmXMGVwJmdrPjG9wvi\r\n1xOemG9Om8IAVGonwTRaXUdaSeR+xgrvqRo94Ve9NYoNG7w5QwIaABw3e0aV\r\nl7X/HteprxfGmTebXcbyZk9CvygOqbQD4HM+y+Y/ktwBJDeZ9J9PdVZXu1N/\r\nDo4/ZYeFrRUFAXhCak1FAJPfq/x5YBuwh0o7pDONSNZvvpAut1fzaIXGAPzI\r\nJn+UBON6S+1oR3liwU/I92fzbnbVKC6tJSS3Bxj8OGTo74f6e1pC68PlZtZv\r\nbb4b2hlA/5u77V0qS8LHDWEdrbuvzi4ctnQ=\r\n=OyKu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQClnqDzR2RUDJn86UTd1AVaY1wgdA8t1prwoLakHxOwwQIgDEMobY/sXytlDvdHyPru4S3nOhenA5k9FuwTk+Ymwo4="}]},"_npmUser":{"name":"alu0100819786","email":"alu0100819786@ull.edu.es"},"directories":{},"maintainers":[{"name":"alu0100819786","email":"alu0100819786@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/constant-folding_0.0.2_1646765217586_0.20673000180298917"},"_hasShrinkwrap":false},"1.0.0":{"name":"@alu0100819786/constant-folding","version":"1.0.0","author":{"name":"alu0100819786","email":"alu0100819786@ull.edu.es"},"description":"Constant Folding javascript code","repository":{"type":"git","url":"git+https://github.com/ULL-ESIT-PL-2122/constant-folding-super-gabriel-melian-hernandez-alu0100819786.git"},"keywords":["ULL","constant-folding","javascript"],"license":"Unlicense","dependencies":{"commander":"^7.1.0","escodegen":"^1.14.3"},"main":"src/constant-folding.js","bin":{"cf":"src/constant-folding-cli.js"},"devDependencies":{"chai":"latest","jison":"latest","mocha":"latest","espree":"^9.3.1","nyc":"latest"},"gitHead":"cbd426999abe97713a31c91bec63881894ff148f","bugs":{"url":"https://github.com/ULL-ESIT-PL-2122/constant-folding-super-gabriel-melian-hernandez-alu0100819786/issues"},"homepage":"https://github.com/ULL-ESIT-PL-2122/constant-folding-super-gabriel-melian-hernandez-alu0100819786#readme","_id":"@alu0100819786/constant-folding@1.0.0","_nodeVersion":"16.13.2","_npmVersion":"8.1.2","dist":{"integrity":"sha512-aht36mCl6lAaHxQITw7PgFbnrU04jVrBLpBuV7WhfvkASs1ubmhvc0GL07gqu+ZJPvXPhR9/s/BUxSzB6D+TAg==","shasum":"3fc2b111f3489422e68286ca9abbb1f17b8569ea","tarball":"https://registry.npmjs.org/@alu0100819786/constant-folding/-/constant-folding-1.0.0.tgz","fileCount":18,"unpackedSize":223453,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiJ8KvACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqlwg/9EZ+T9YiZi1KXxJvasZEsBq19LikpPbmHd5Ysh1U/al3+dD/G\r\n6LLZ9aX63jlbOmpcMd75pfSMRTXhn0shYZU34vszAHii3NlQDmmUVlk7CQV9\r\nKDOl60nXj53uJZeMbFIzhw77yozRs5QamefrX53rYuy3lbfKKsbWaF0XtVSy\r\nbWVr6Xu3Flp5gALDSbujo7eUUSN21z/vGc6oW4JKFAXSWpFWnbGKgxAUoSAh\r\nJdjbPgs6Q/7wQoC3xYmT+WB7V0/9x+ZJOx319fDESsIOQIX2J7dlnge0r6iB\r\nYnt5zXyQpV/UNB+PomnM4Pdc3VQ+abiD00tzkgyf3hXjmuUKKgTUxJqzBNJ9\r\ncT8wjn6/bI120tjsiCwxdoLiF30JgaPj96spoZsE4nbzUuecTF6YGc2sgRgV\r\nY4XTrMmxWaOYaXVZPBRBrN33Iap4bhN+hpOYpp9Sd84qr6GJIsZ3BgOGBwGD\r\nrwDPk+2d+G0KsrP1+mXtSbGO8UxWXrL7i5USpdiDl8umnyJcV3dcARhkUO82\r\nvR68fDBtEcTklvR0UJ/vg2cU2ar1+tSFyr4JlL5l6uLjmfmcz73R9GnxQOFw\r\nciq/uu3pnffgP8Wpt4Sur4SZeXUewjegAHSlo45GHl59cNkR+8MGMHvcAHlm\r\n1hgm0DfcaosuZCoVXkFnFtyH+yqaUo5moPI=\r\n=6X8J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQotTU8igYlwQ+sOtELOzs2jjPJTR4nZkA1dLdIuJqPwIgIBZRAgFYV0Mtasub8MhCLIMtD9dkUpLPTHikjSPPKF8="}]},"_npmUser":{"name":"alu0100819786","email":"alu0100819786@ull.edu.es"},"directories":{},"maintainers":[{"name":"alu0100819786","email":"alu0100819786@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/constant-folding_1.0.0_1646772911783_0.9311452619003284"},"_hasShrinkwrap":false},"2.0.0":{"name":"@alu0100819786/constant-folding","version":"2.0.0","author":{"name":"alu0100819786","email":"alu0100819786@ull.edu.es"},"description":"Constant Folding javascript code","repository":{"type":"git","url":"git+https://github.com/ULL-ESIT-PL-2122/constant-folding-super-gabriel-melian-hernandez-alu0100819786.git"},"keywords":["ULL","constant-folding","javascript"],"license":"Unlicense","dependencies":{"commander":"^7.1.0","escodegen":"^1.14.3"},"main":"src/constant-folding.js","bin":{"cf":"src/constant-folding-cli.js"},"devDependencies":{"chai":"latest","jison":"latest","mocha":"latest","espree":"^9.3.1","nyc":"latest"},"gitHead":"631005985c2e024a7adf5220bd26611156a6ec2b","bugs":{"url":"https://github.com/ULL-ESIT-PL-2122/constant-folding-super-gabriel-melian-hernandez-alu0100819786/issues"},"homepage":"https://github.com/ULL-ESIT-PL-2122/constant-folding-super-gabriel-melian-hernandez-alu0100819786#readme","_id":"@alu0100819786/constant-folding@2.0.0","_nodeVersion":"16.13.2","_npmVersion":"8.1.2","dist":{"integrity":"sha512-H5EhZ+jSvHGuW/pyYPczCrfPYSkWwkUUmmibtgfvw21rohg/SqaaU/upDQbuclXW4UXR6OOGGwt55qfvZVPZ3Q==","shasum":"3dc45f7d2eb743ded7b38c6caea9eab6d109e5d5","tarball":"https://registry.npmjs.org/@alu0100819786/constant-folding/-/constant-folding-2.0.0.tgz","fileCount":18,"unpackedSize":223507,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKKlSACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr+vw/9HHq8dMaD0nCAe2sCWoP3/i1qHPjnflvMDsG9uO3xTG7LHeUf\r\nbSgks+TJUCSeQ6IUQIgpWJamJy7bENMohLa9m+ohC4+HlbfOZHz7YaqOiUfI\r\ngcPR/JZRHrftklgHiKne5vSWpLvoqjIZ7pk+o/vMJ8rx0G4ZWD/M3HIB8Hf+\r\nj7ZurnyBSR0j9lme7QQgWXWy/AdAmugLTLN60ZG5q4lIsyOK3Kdh08AqQY2K\r\nw2d+xoMo9JZUrhcNvBMW0b3+4I02B8Jw7p/O1Sd2N9HNXvxREb5NlzGlPuiV\r\n/+YsEwGPpYm7Va6iJ/X+9bm26iTGoqF/czuwGfFqVOWcbHFvvw+9z1hH1Rwd\r\n9f6RGl3sVZTMzj4UphQOexbaVDxZL2vUNMl2xpk7FOmlSqeZJi4OG6rPvau0\r\nI7fqCzzfsI6ODp45K7kO04d7+nwBAL6/9Cfqx26fdstu1aWC+UCPm4yCm3XF\r\nAE6lFMpZ6qFaHCqxhziBSa/iAjY93ZHPTmQEc+AV6xf/ElXdt2P8AvIqvgpP\r\nxZPrQGmEabhRXnNTBB9peRuahzk+heFzgs8mTpedhc/0OpVWcRugEnUx89Eg\r\ns5MZM8AoDtTIC4ooHCHS5FX8OoVWyQuvEIb0xWpzhYfVuP7MiP4vATZjFRU3\r\npgSjJ3FM9DswNiEwccr7VUDV3XHhI84JOgE=\r\n=Q0ul\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAZuolYhk/sj8QIwqtkbSXYLRVSGzBvwfkWEs/noBRvfAiAou3Vv0VA01IcDx7QwizyXUoEa5zaVuW2kCpWmPPDJyg=="}]},"_npmUser":{"name":"alu0100819786","email":"alu0100819786@ull.edu.es"},"directories":{},"maintainers":[{"name":"alu0100819786","email":"alu0100819786@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/constant-folding_2.0.0_1646831953851_0.9703414868148514"},"_hasShrinkwrap":false},"2.0.1":{"name":"@alu0100819786/constant-folding","author":{"name":"alu0100819786","email":"alu0100819786@ull.edu.es"},"description":"Constant Folding javascript code","scripts":{"test":"mocha","prod-test":"cd ../constant-folding-production-test-aluXXX && npm test","cov":"nyc npm run test","covnyc":"nyc node src/constant-folding.js","execute":"node src/constant-folding.js","full-cov":"npm run clean && npm i && npm run cov","clean":"rm -rf node_modules package-lock.json","doc":"blah blah"},"repository":{"type":"git","url":"git+https://github.com/ULL-ESIT-PL-2021/constant-folding-module-alu0100819786.git"},"keywords":["ULL","constant-folding","javascript"],"license":"Unlicense","dependencies":{"commander":"^7.1.0","escodegen":"^1.14.3"},"version":"2.0.1","main":"src/constant-folding.js","bin":{"cf":"src/constant-folding-cli.js"},"devDependencies":{"chai":"latest","jison":"latest","espree":"^9.3.1","mocha":"latest","nyc":"latest"},"gitHead":"fb5857a4017cc0e4d2a3048bd00757b135cbb24e","bugs":{"url":"https://github.com/ULL-ESIT-PL-2021/constant-folding-module-alu0100819786/issues"},"homepage":"https://github.com/ULL-ESIT-PL-2021/constant-folding-module-alu0100819786#readme","_id":"@alu0100819786/constant-folding@2.0.1","_nodeVersion":"16.13.2","_npmVersion":"8.1.2","dist":{"integrity":"sha512-55aVBAoO/+w9QFbtV9g3rrxQINcNH3l6yU+ViqPgCXpQR37TWgAnmwzdstLd3kniXtH7FqyVlHHj93XWT12zbA==","shasum":"4744d4a2c6ff527e11bc896a1a94edf2d72add1e","tarball":"https://registry.npmjs.org/@alu0100819786/constant-folding/-/constant-folding-2.0.1.tgz","fileCount":9,"unpackedSize":10436,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKKwtACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqJlxAAg37pbYjPvrxkdypMcH/v6Oehi8tyqJXvS082jJG7KtZv79m5\r\nq55Ax1SivF/nKCmiuyVCkTvj4rEFJgM63Uu30hyrpWIvXW72fidmqKpTr5Ii\r\nV2YyzIe9QO298+UrE/4wG9y7KrPknHzUZX8wuwst9NEvYt2dFNhGryw5GfNj\r\n8lmNV35wwnliEPbe4qo2Qvicnm4nA/ACx7aixONZv9aK0BYXPL+OM54eFF63\r\n0QRbaIM5rwj3bJRrepT3GcDctmg7lgZyYMQOwIN6YRuoB0ph6nJQXvJ/C4kp\r\ndwBl51vylsFZVQkBS/F/gAouK1/UxiRr/f66yY6vB3FYArphHy+SFSFPuucC\r\nIIkkCM9UrXdA8+qLvTnGkCwOiTV5Girc7bW5JWjs24I272Z79Xxbqme9qPFp\r\nfkXdWIT76k7WK8gnT9ULbM8TZ+3C5O7wCnjOOWxPCgc9pX/4mJ1JOYy5v31I\r\nHZeeg85QxrdQ7tCbXZzaQkMLXBIK5nIzW+fOrNYNkqtLbmjCeo0c6Z/DrwnS\r\n7r0K95gGn2aJVeN31WawdH7sQoDRY5ZXXhiwkp0ZOB2EsiCN4D/60LS1DzEx\r\nPcHCAJT53fG6+PAhDwkGlMj0qMEMRizNBIXiLCK9puNm78NZ7jgp4Kn1IeiP\r\n1DV3nAN6EJqmimK6UhWT3B2Sh3gxrLVkxHQ=\r\n=7C95\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDF1XpRojuYJTfpSdeu7H+2H0RuQTM5WwgSCn+BHVIuNQIgdVMDahJ6CAgMi1Q57yh2dTRuexr3sIN+yAn8aT1fQ14="}]},"_npmUser":{"name":"alu0100819786","email":"alu0100819786@ull.edu.es"},"directories":{},"maintainers":[{"name":"alu0100819786","email":"alu0100819786@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/constant-folding_2.0.1_1646832685701_0.8559413676138687"},"_hasShrinkwrap":false},"2.1.1":{"name":"@alu0100819786/constant-folding","author":{"name":"alu0100819786","email":"alu0100819786@ull.edu.es"},"description":"Constant Folding javascript code","scripts":{"test":"mocha","prod-test":"cd ../constant-folding-production-test-aluXXX && npm test","cov":"nyc npm run test","covnyc":"nyc node src/constant-folding.js","execute":"node src/constant-folding.js","full-cov":"npm run clean && npm i && npm run cov","clean":"rm -rf node_modules package-lock.json","doc":"blah blah"},"repository":{"type":"git","url":"git+https://github.com/ULL-ESIT-PL-2021/constant-folding-module-alu0100819786.git"},"keywords":["ULL","constant-folding","javascript"],"license":"Unlicense","dependencies":{"commander":"^7.1.0","escodegen":"^1.14.3"},"version":"2.1.1","main":"src/constant-folding.js","bin":{"cf":"src/constant-folding-cli.js"},"devDependencies":{"chai":"latest","jison":"latest","espree":"^9.3.1","mocha":"latest","nyc":"latest"},"gitHead":"4e05bca2d19313f9c856d9ea79e22d64e6cc485a","bugs":{"url":"https://github.com/ULL-ESIT-PL-2021/constant-folding-module-alu0100819786/issues"},"homepage":"https://github.com/ULL-ESIT-PL-2021/constant-folding-module-alu0100819786#readme","_id":"@alu0100819786/constant-folding@2.1.1","_nodeVersion":"16.13.2","_npmVersion":"8.1.2","dist":{"integrity":"sha512-fEwVGQcJ9nU/f60OTVtekOVjtQaF1YlhWFY/M2gFjlJvNTf1128xJ3CkjrmEo7XbJMixc8XgZMW0CnKqvQzE3w==","shasum":"b8024eb01e0a72c21c420c7cd601857505d42fd1","tarball":"https://registry.npmjs.org/@alu0100819786/constant-folding/-/constant-folding-2.1.1.tgz","fileCount":9,"unpackedSize":24165,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKMK7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrQKw/+KSZu3MPcQ26KQ3JeWSclsYyDNwAV1jCMdJ90g8GU5s0M7BI/\r\nMm6oYa5R3HCtRVLv4SP+1XQ6Ym32kGb8e8nCyaGwMuQr00oG98fN7/R9DsmM\r\nshgeQz8tztVezS7Rva8tgwMXGmJ9Ci1A8IbwLvG68OsCdaAjiONhE10hqph6\r\nJB+yw+H6no0kxNeUcLiCd8wL7ceQe0ylU37jPxKtwRfRXei7/j8Tez86PZhi\r\nxXtU9Qw8mvWIlb6wIR6BBWQ+b/IQWao/mEvUBi3Dc4InUjMzJzZJzpVqeWQq\r\nqdv/g/70DIaFukyGVP5e/gNlvZ0jLPZXvNCx2ECo3HGMfReqiWzd5ToTOz5w\r\nre5HB8B1gNxu57V4W27DLHw6AN6J0HG/opSp26sp5AHbcVVuJF/ptx60ia0A\r\nObePTI0+QrYre170qWqynTB4WyzePEfISM+OIoxMbECOWDMMuJjNgRFx5j7W\r\nms5VVuURXncvsJ+H+tgB7Q4/GpiymGQRaxnY6rHKOOgW1WzDgQ/TbXHcaX50\r\nSm9rxKSJ3AW+CI6sXXGTZIxO9SQcaPcr4Jxx0qg/85R8Bb8IiKnVb5Xa5Ns7\r\ngHsuH72Ouf8ZbKEV5UwQGDJ+ag+vOxAP09lF0jkChNlqtZSTcTOACEJ4sc2x\r\ni6xcpR+ZYAFO1Q/sbF3TijHGGCYRZlqTAH8=\r\n=83tc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZFimw9NKWHendo+LyeScDk6bgJfvITbartEVZB0u0EwIhAMah2CUmTQeol6etCCw9nDsN83mR3axCelBnB6lONXK8"}]},"_npmUser":{"name":"alu0100819786","email":"alu0100819786@ull.edu.es"},"directories":{},"maintainers":[{"name":"alu0100819786","email":"alu0100819786@ull.edu.es"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/constant-folding_2.1.1_1646838458918_0.7553771893322061"},"_hasShrinkwrap":false}},"time":{"created":"2022-03-08T18:37:19.986Z","0.0.1":"2022-03-08T18:37:20.244Z","modified":"2022-04-04T13:40:50.009Z","0.0.2":"2022-03-08T18:46:57.704Z","1.0.0":"2022-03-08T20:55:11.964Z","2.0.0":"2022-03-09T13:19:14.052Z","2.0.1":"2022-03-09T13:31:25.889Z","2.1.1":"2022-03-09T15:07:39.064Z"},"maintainers":[{"name":"alu0100819786","email":"alu0100819786@ull.edu.es"}],"description":"Constant Folding javascript code","homepage":"https://github.com/ULL-ESIT-PL-2021/constant-folding-module-alu0100819786#readme","keywords":["ULL","constant-folding","javascript"],"repository":{"type":"git","url":"git+https://github.com/ULL-ESIT-PL-2021/constant-folding-module-alu0100819786.git"},"author":{"name":"alu0100819786","email":"alu0100819786@ull.edu.es"},"bugs":{"url":"https://github.com/ULL-ESIT-PL-2021/constant-folding-module-alu0100819786/issues"},"license":"Unlicense","readme":"---\ndescripcion: Super Repositorio que contiene los archivos de la Práctica 3 además de un README.md explicando todo el proceso de desarrollo.\nalumno: \"Gabriel Melián Hernández  Alu0100819786\"\n---\n\n[![npm version](https://badge.fury.io/js/%40alu0100819786%2Fconstant-folding.svg)](https://badge.fury.io/js/%40alu0100819786%2Fconstant-folding)\n\n## Constant-Folding\n\nEl proceso de creación de nuestras funciones de constant folding, lo podremos encontrar dentro del subrepo `constant-folding-module-gabriel-melian-hernandez-alu0100819786`.\n\nPartimos como base para realizar nuestro constant folding de la utilización de `estraverse` y su función `traverse`. Vamos a utilizar está función de manera que actuemos sobre los nodos hijos primero que sobre los padres, para poder realizar el constant folding de manera correcta, para ello usaremos `leave` a la hora de aplicar las condiciones para que se llamen a las funciones.\n\nPartimos de una base para conseguir Constant folding, en `BinaryExpressions` de esta manera:\n\n```\nconst t = espree.parse(input, { ecmaVersion: 6, loc: false });\nestraverse.traverse(t, {\n  leave: function (n, p) {\n    if (n.type == \"BinaryExpression\" && \n        \n      n.left.type == \"Literal\" && n.right.type == \"Literal\") { replaceByLiteral(n); }\n```\n\nCon este código lo que hacemos es llamar a `replaceByLiteral(n)` con el nodo n, cuando entremos a un nodo que sea de tipo `BinaryExpression` y sus hijos izquierdo y derecho sean de tipo `Literal`.\n\nUna vez hemos accedido al nodo en el cual queremos llevar a cabo nuestro constant folding, lo realizamos de la siguiente manera:\n\n```\nfunction replaceByLiteral(n) {\n  n.type = \"Literal\";\n\n  n.value = eval(`${n.left.raw} ${n.operator} ${n.right.raw}`);\n  n.raw = String(n.value);\n\n  delete n.left;\n  delete n.right;\n}\n```\n\nRealizamos la operación que contenía la `BinaryExpression` inicial y renombramos n, para que ahora tenga type `Literal` y borramos sus hijos izquierdo y derecho.\n\nPor otra parte y respondiendo al Challenge de esta práctica se pide que el programa sea capaz de hacer constant folding no solo para `BinaryExpressions` sino también para operaciones con Arrays, en `CallExpressions`, para esto, seguimos el mismo procedimiento que mostramos anteriormente buscando ahora un nodo que tenga tipo `CallExpression` además de un `n.callee.property.name` que caze con la operación que tratará cada función, vamos a ver un par de ejemplos:\n\n```\nif (n.type == \"CallExpression\"){\n        \n\n      if(n.callee.property.name == \"join\") { replaceByString(n);}\n    }\n    if (n.type == \"CallExpression\"){\n        \n\n      if(n.callee.property.name == \"shift\") { replaceByShift(n);}\n    }\n``` \n\nTanto `join` como `shift` son operaciones que se realizan sobre arrays, pero aunque ambos crean nodos del tipo `CallExpression`, su `n.callee.property.name` es diferente y por ende la operación que van a realizar sobre el array también y es necesario tratarlas de forma separada, teniendo una función para cada una de ellas.\n\nPor ejemplo en la función join:\n\n```\nfunction replaceByString(n){\n  n.type = \"Literal\";\n  var aux;\n  var aux2 =\"\";\n  aux = n.callee.object.elements.length;\n  if(n.arguments[0] != null){\n    for( var i = 0; i < aux ; i ++){\n      if ( i == aux-1){\n        aux2 = aux2 + (n.callee.object.elements[i].value);\n      }\n      if (i < aux-1){\n        aux2 = aux2 + (n.callee.object.elements[i].value) + n.arguments[0].value;\n      }\n    }\n  }\n  if(n.arguments[0] == null){\n    for( var i = 0; i < aux ; i ++){\n      if ( i == aux-1){\n        aux2 = aux2 + (n.callee.object.elements[i].value);\n      }\n      if (i < aux-1){\n        aux2 = aux2 + (n.callee.object.elements[i].value) + ',';\n      }\n    }\n  }\n  \n  n.value = aux2;\n  delete n.callee;\n  delete n.arguments;\n}\n```\nEntramos al nodo y vamos a ir accediendo a cada elemento del array y lo vamos a ir colocando uno a uno en una cadena separados por una coma por defecto, o si la función join tiene argumento, sustituiremos la coma, por dicho argumento a la hora de realizar el join final. y por último borraremos el calle del nodo y sus argumentos quedandonos unicamente con el nodo padre y realizando correctamente el constant folding.\n\nPor otra parte en la función se shift:\n\n```\nfunction replaceByShift(n){\n  n.type = \"Literal\";\n\n  var aux;\n  aux = n.callee.object.elements[0].value;\n  n.value = aux;\n\n  delete n.callee;\n}\n```\nAl igual que en el ejemplo anterior entramos al nodo seleccionado, cambios su tipo y realizamos el comportamiento que debería llevar a cabo la función shift() que es la de sacar el primer valor del array y devolverlo. Por lo que, renombramos el tipo del nodo padre a `Literal` y a su `value` le asignamos el valor del primer elemento del array original y luego borramos el array quedando solamente el nodo padre ahora de tipo `Literal` con el value correspondiente al resultado del constant folding.\n\nSiguiendo este razonamiento se realiza la implementación de las demás funciones para llevar a cabo todos los ejemplos requeridos en el challenge.\n\n## Publicación e Instalación.\n\nPara llevar a cabo la publicación de nuestro `npm package` lo primero que tendremos que hacer es crear un usuario y darnos de alta en npm.\n\nPara ello vamos a acceder a su página web oficial.\n\n[npmjs.com](https://www.npmjs.com/).\n\nY haremos click en el botón `Sign Up`. Rellenamos nuestros datos:\n\n![ImageText](https://github.com/ULL-ESIT-PL-2122/constant-folding-super-gabriel-melian-hernandez-alu0100819786/blob/main/Images/1.PNG)\n\nTras esto nos pedirá confirmación de e-mail y además la introducción de uncódigo de contraseña de un sólo uso que nos enviarán por correo al e-mail proporcionado en el mometnod e la creación de la cuenta. Una vez verificado el e-mail, ya dispondremos de nuestra cuenta en npm y podremos publicar nuestro paquete, para ello debemos colocarnos en el repositorio que contiene nuestro paquete y abrir una terminal para primero de todo logearnos de nuevo con el comando `npm login`. Introducimos nuestras credenciales de acceso y ya estaríamos logeados correctamente.\n\nPara poder publicar nuestro paquete debemos definir primero en el archivo `package.json` nuestro ámbito y esto lo haremos simplemente modificando las primeras líneas del mismo.\n\n```\n{\n    \"name\": \"@alu0100819786/constant-folding\",\n    \"version\": \"0.0.1\",\n    \"author\": \"alu0100819786 <alu0100819786@ull.edu.es>\",\n    \"description\": \"Constant Folding javascript code\",\n```\n\nLo que escribamos en el campo `name` será el ámbito con el que se publicará nuestro paquete. Una vez configurado dicho fichero solo quedará el último paso que es publicar el propio package mediante el comando `npm publish --access=public`. Una vez hecho esto, ya podremos venirnos a la página web de npm y veremos nuestro package publicado.\n\n![ImageText](https://github.com/ULL-ESIT-PL-2122/constant-folding-super-gabriel-melian-hernandez-alu0100819786/blob/main/Images/2.PNG)\n\nUna vez publicado ya podremos instalarlo en cualquiera de nuestro proyectos, para ello usaremos un comando que podemos encontrar en esta misma página en el lado derecho, en el apartado install y se trata del comando `npm i @alu0100819786/constant-folding`.\n\nDe esta forma podemos ir a otro proyecto y ejecutar el comando. Veremos como se instala al igual que cualquier otra dependencia que tengamos en el package.json, y se incluirá dentro de la carpeta de `node_modules`, tal y como vemos en la siguiente imagen.\n\n![ImageText](https://github.com/ULL-ESIT-PL-2122/constant-folding-super-gabriel-melian-hernandez-alu0100819786/blob/main/Images/3.PNG)\n\n## Github Submodules:\n\nEn esta práctica se nos pide que sea realizada en tres repositorios diferentes, donde tendremos un super repo y los otros dos serán sub repos del primero. Para lograr esto nos colocamos en el super repo y una vez inicializado procedemos a usar el comando\n```\ngit submodule add <repo url>\n```\n\nUtilizaremos, este comando dos veces, una por cada repo que tenemos y esto creará un directorio en el super repo llamado `.gitmodules` que tendrá la información principal de los dos sub repos.\n\n```\n[submodule \"constant-folding-module-gabriel-melian-hernandez-alu0100819786\"]\n\tpath = constant-folding-module-gabriel-melian-hernandez-alu0100819786\n\turl = https://github.com/ULL-ESIT-PL-2122/constant-folding-module-gabriel-melian-hernandez-alu0100819786\n[submodule \"constant-folding-production-test-gabriel-melian-hernandez-alu0100819786\"]\n\tpath = constant-folding-production-test-gabriel-melian-hernandez-alu0100819786\n\turl = https://github.com/ULL-ESIT-PL-2122/constant-folding-production-test-gabriel-melian-hernandez-alu0100819786\n```\n\nAdemás desde que hagamos nuestro primer commit luego de añadir los sub repos y hagamos un push, se actualizará la información de nuestro super repo y aparecerán los sub repos enlazados al principal como podemos ver en la siguiente imagen.\n\n![ImageText](https://github.com/ULL-ESIT-PL-2122/constant-folding-super-gabriel-melian-hernandez-alu0100819786/blob/main/Images/4.PNG)\n\n## Coverage y Github Actions:\n\nPara llevar a cabo nuestro coverage, al igual que en la práctica anterior haremos uso de la herramienta `nyc` , que nos proporcionará información trás cada ejecución de nuestro programa. También podríamos utilizar la opción de sacar los resultados en un archivo .html y mostrarlo en github pages como en la práctica anterior.\n\n![ImageText](https://github.com/ULL-ESIT-PL-2122/constant-folding-super-gabriel-melian-hernandez-alu0100819786/blob/main/Images/5.PNG)\n\nPor otra parta para hacer uso de las Github Actions vamos a modificar el archivo `nodejs.yml` donde especificaremos las acciones que queremos realizar cada vez que hagamos un push o un pull request en nuestro repositorio.\n\n```\nsteps:\n      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it\n      - uses: actions/checkout@v2\n\n      # Runs a single command using the runners shell\n      - name: Install Dependencies\n        run: npm i\n        \n        # Runs a set of commands using the runners shell\n      - name: Run Program\n        run: npm run execute\n      \n       # Runs a set of commands using the runners shell\n      - name: Run program with coverage\n        run: npm run covnyc\n```\n\n\n## Uso del módulo y Pruebas de Producción.\n\nUna vez publicado el módulo, si queremos utilizarlo en algún otro proyecto debemos añadirlo en el `package.json` como cualquiier otra dependencia. \n```\n \"@alu0100819786/constant-folding\": \"*\",\n```\nCon esto conseguimos que el módulo sea accesible una vez que hayamos instalado las dependencias del proyecto con `npm i`.\nAhora si queremos utilizarlo en nuestro proyecto bastará con agregar la siguietne línea de código:\n\n```\nconst prueba = require (\"@alu0100819786/constant-folding\");\n```\nY ahora ya podremos a través de `prueba` acceder a todos los métodos que están presentes en nuestro módulo, comopor ejemplo el método `resolverProblema` que nos realizará el constant folding de una expresión, haciendo uso de los demás métodos del módulo.\n\n```\nfs.readFile(inputFilename, 'utf-8', (error, datos) => {\n    if(error) throw error;\n    prueba.resolverProblema(datos);\n});\n```\n\n## Examples\n\nPodemos ejecutar nuestro programa rápidamente con un input de prueba para comprobar el correcto funcionamiento del mismo.\n\n```\nconst input = `\n[\"a\", \"b\", \"c\"].join();\n[\"a\", \"b\", \"c\"].join('@');\n[1, 2, 3].length;\n[1, 2, 3][2-1];\n[1, 2, 3].shift();\n[a, b, c].pop();\n`;\n```\n\ndonde tras ejecutar nuestro programa conseguimos las siguientes salidas:\n\n```\n'a,b,c';\n'a@b@c';\n3;\n2;\n1;\nc;\n```\n## Tests\nPara llevar a cabo los test de está practica utilizaremos el archivo `test.js` u las herramientas `mocha y chai`. Y haciendo uso de los métodos definidos en la el fichero `src/constant-folding.js`.\n\n```\ndescribe(\"Constant Folding test\", () => {\n\n  for (let c of Checks) {\n    it(`Test ${c.text} => ${c.result}`, () =>{\n        let oldconstant = constantFolding.resolverProblema;\n        constantFolding.resolverProblema = x => x;\n\n      const t = constantFolding.resolverProblema(c.text);\n      const result = eval(t);\n      result.should.equal(c.result);\n\n      constantFolding.resolverProblema = oldconstant;\n    });\n  }\n});\n```\n\nCon este código y las entradas de prueba:\n\n```\nconst Checks = [\n\n  {text: `a=2*3`, result: 6},\n  {text: `a=2*4`, result: 8},\n  {text: `[\"a\", \"b\", \"c\"].join()`, result: 'a,b,c'},\n  {text:`[\"a\", \"b\", \"c\"].join('@')`, result: 'a@b@c'},\n  {text: `[1, 2, 3].length`, result: 3},\n  {text: `[1, 2, 3][2-1]`, result: 2},\n  {text: `[1, 2, 3].shift()`, result: 1},\n  {text: `[1, 2, 3].pop()`, result: 3},\n];\n```\n\nConseguimos que nuestros test funcionen correctamente, tal y como podemos apreciar en la resolución por ejemplo de las tareas de Github Actions.\n\n```\n Constant Folding test\n    ✔ Test a=2*3 => 6\n    ✔ Test a=2*4 => 8\n    ✔ Test [\"a\", \"b\", \"c\"].join() => a,b,c\n    ✔ Test [\"a\", \"b\", \"c\"].join('@') => a@b@c\n    ✔ Test [1, 2, 3].length => 3\n    ✔ Test [1, 2, 3][2-1] => 2\n    ✔ Test [1, 2, 3].shift() => 1\n    ✔ Test [1, 2, 3].pop() => 3\n\n\n  8 passing (7ms)\n```\n","readmeFilename":"README.md"}