{"_id":"@carlos.anuarbe/2019-11-07","_rev":"1-92da374abc29e91f1e9a4f8317d64f51","name":"@carlos.anuarbe/2019-11-07","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@carlos.anuarbe/2019-11-07","version":"1.0.0","description":"root","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://carlos_anuarbe@bitbucket.org/carlos_anuarbe/iya049-20192020-master.git"},"keywords":["root"],"author":{"name":"carlos.anuarbe"},"license":"ISC","homepage":"https://bitbucket.org/carlos_anuarbe/iya049-20192020-master#readme","_id":"@carlos.anuarbe/2019-11-07@1.0.0","_nodeVersion":"12.13.0","_npmVersion":"6.12.0","dist":{"integrity":"sha512-G6eJGvQ0zoMRVHc/st4iAQHzZsN8VyjxlLPZMjJl9lfYXuuVkMzZVTNzQKhyErCBGUK43IpNkKYAKFdXYOVH7A==","shasum":"27770e621649332e444ff535801158b56ef16876","tarball":"https://registry.npmjs.org/@carlos.anuarbe/2019-11-07/-/2019-11-07-1.0.0.tgz","fileCount":8,"unpackedSize":8826,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd37etCRA9TVsSAnZWagAAYy4P/1SWW2O76PKnGcLcJbJe\n6BisbQaeIHF0FXUzNj/sTQMU+HjRFLuNeRkDQoZg1T51C1lXvXfwU9fBAsFO\nO5CZPFEU70kbm46yLBzfqvmvJH9r/iqVRe++dFBNTMIjPjVXdtpbiN//1Vx3\nEwflJ0++Pzbl0BQ/7NjyNyM/SpVm8qgxJ6ydRi+xBMJvEXNhQZKwqmcYormh\nYk3VoySCiDaG13B0o98bFOgICaF/ugLhRqcV6b8ecB4IDMORMa/rXYbDyi10\n/eIYMAlSpr/yHP7sqWijPfca7OFc/L6tkOirW8jtq5ypS8IL9dTk3ruw6P8o\nzmqOn/nBnqjmNn6qra5PX4+8gvnlMaSybzOt023t5v2epYWG95CyT4P50CLM\nNKofk2JDYaFZuBxXLoETjjhSSgndcdUbZs9f9cWqhKt+IMT5YSdmAyJjTk47\nsQkQN3ONRF3pPm1m/ZvKcLfALfuluT/P2pF6JDrVve/tD4VyjfnDvNiDvkM4\nR7WiHEhOktS2Og5t8kTMS3VeijDk7GCcC38+ExObJWs6XD7U+VD7dyfWIszs\n6aw7Xgn+E7Xj4H3mb8RfR00p3mJhhPXVmNNoHQtO4UgS25TPbEXKBxvpzSU3\n2CdL9mV84KQbngqWstv0ZteCy1FD120xGG+U80m/AwFXgwpVW8NtcSh1wmtM\n+RS1\r\n=axTx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2/SIfS/Fg25XFKYCuGaoPAcb6vBaQye0u6d2UfJ0YfwIgHDufLBGxNtozpC3MmyJzs4bbVVKnf6IMAfwhelWEBAI="}]},"maintainers":[{"name":"carlos.anuarbe","email":"carlos.anuarbe@alumnos.uneatlantico.es"}],"_npmUser":{"name":"carlos.anuarbe","email":"carlos.anuarbe@alumnos.uneatlantico.es"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/2019-11-07_1.0.0_1574942637106_0.5802068213355271"},"_hasShrinkwrap":false}},"time":{"created":"2019-11-28T12:03:56.868Z","1.0.0":"2019-11-28T12:03:57.276Z","modified":"2022-04-04T21:57:55.275Z"},"maintainers":[{"name":"carlos.anuarbe","email":"carlos.anuarbe@alumnos.uneatlantico.es"}],"description":"root","homepage":"https://bitbucket.org/carlos_anuarbe/iya049-20192020-master#readme","keywords":["root"],"repository":{"type":"git","url":"git+https://carlos_anuarbe@bitbucket.org/carlos_anuarbe/iya049-20192020-master.git"},"author":{"name":"carlos.anuarbe"},"license":"ISC","readme":"# Ejercicio 11-07\r\n\r\nEl ejercicio consiste en implementar una de estas abstracciones:\r\n\r\n- List\r\n- Tree\r\n- Maybe\r\n- Either\r\n\r\n## Fecha de entrega\r\n\r\nEl _pull request_ para la entrega del ejercicio debe crearse antes del comienzo de la clase del jueves día 28 de noviembre.\r\n\r\n## Enunciado\r\n\r\nModifica el archivo `index.js` de cada carpeta para implementar una de las abstracciones propuestas, utilizando patrones diferentes en cada una de ellas:\r\n\r\n- `class/`: debe exponer una clase, creada con el _keyword_ `class`.\r\n- `factory/`: debe exponer una función que pueda ser llamada sin `new`.\r\n- `prototype/`: debe exponer un constructor (implementado sin el _keyword_ `class`).\r\n\r\nModifica el archivo `package.json` de cada carpeta como sea necesario y publica una librería en NPM a partir de cada uno de ellos. Los nombres de los paquetes deben tener un formato acorde a los ejemplos en los párrafos siguientes.\r\n\r\nPodéis seguir la guía de NPM sobre cómo publicar un módulo: https://docs.npmjs.com/creating-and-publishing-scoped-public-packages . Tened en cuenta que necesitaréis instalar NPM como ejecutable y crea una cuenta cuyo nombre de usuario sea vuestro código en la asignatura (eg gerardo.munguia).\r\n\r\n### List\r\n\r\n```javascript\r\nconst { Cons, Nil } = require(\"@gerardo.munguia/list-class\");\r\n\r\nconst food = new Cons(\"broccoli\", new Cons(\"kale\", new Nil()));\r\n\r\nconsole.log(food.head); // -> broccoli\r\nconsole.log(food.map(meal => `steamed ${meal}`)); // -> (\"steamed broccoli\", (\"steamed kale\", nil))\r\nconsole.log(food.getType()); // -> List\r\nconsole.log(new Nil().getType()); // -> List\r\n```\r\n\r\n### Tree\r\n\r\n```javascript\r\nconst { Branch, Leaf } = require(\"@gerardo.munguia/tree-prototype\");\r\n\r\nconst leftBranch = new Branch(\"foo\", new Leaf(), new Leaf());\r\nconst rightBranch = new Branch(\"bar\", new Leaf(), new Leaf());\r\nconst tree = new Branch(\"baz\", leftBranch, rightBranch);\r\n\r\nconsole.log(tree.left); // -> (\"foo\", 🍂, 🍂)\r\nconsole.log(tree.map(word => `${word}!`)); // -> (\"baz\", (\"foo!\", 🍂, 🍂), (\"bar!\", 🍂, 🍂))\r\nconsole.log(tree.getType()); // -> Tree\r\nconsole.log(new Leaf().getType()); // -> Tree\r\n```\r\n\r\n### Maybe\r\n\r\n```javascript\r\nconst { createJust, createNothing } = require(\"@gerardo.munguia/maybe-factory\");\r\n\r\nconst prop = (key, object) =>\r\n  key in object ? createJust(object[key]) : createNothing();\r\n\r\nconst httpPostMessage = { method: \"POST\", body: \"foobar\" };\r\nconst httpOptionMessage = { method: \"POST\" };\r\n\r\nconsole.log(prop(\"foo\", { foo: \"bar\" }).map(word => `${word}!`)); // -> Just(\"foo!\")\r\nconsole.log(prop(\"baz\", { foo: \"bar\" }).map(word => `${word}!`)); // -> Nothing\r\nconsole.log(prop(\"foo\", { foo: \"bar\" }).getType()); // -> Maybe\r\nconsole.log(prop(\"baz\", { foo: \"bar\" }).getType()); // -> Maybe\r\n```\r\n\r\n### Either\r\n\r\n```javascript\r\nconst { createLeft, createRight } = require(\"@gerardo.munguia/either-factory\");\r\n\r\nconst prop = (key, object) =>\r\n  key in object\r\n    ? createRight(object[key])\r\n    : createLeft(`Cannot read property '${key}'`);\r\n\r\nconst foobar = prop(\"foo\", { foo: \"bar\" });\r\nconst bazbar = prop(\"baz\", { foo: \"bar\" });\r\n\r\nconsole.log(foobar.map(word => `${word}!`)); // -> Right(\"bar!\")\r\nconsole.log(bazbar.map(word => `${word}!`)); // -> Left(\"Cannot read property 'baz'\")\r\nfoobar.runEither(error => console.error(new Error(error)), console.log); // -> foo\r\nbazbar.runEither(error => console.error(new Error(error)), console.log); // -> Error: \"Cannot read property 'baz'\" at ...\r\nconsole.log(prop(\"foo\", { foo: \"bar\" }).getType()); // -> Either\r\nconsole.log(prop(\"baz\", { foo: \"bar\" }).getType()); // -> Either\r\n```\r\n\r\n## Tecnologías\r\n\r\nEl ejercicio se debe realizar sin utilizar librerías externas.\r\n\r\n## Entregables\r\n\r\nTodos los archivos de esta carpeta son entregrables.\r\n\r\nEl método de entrega será:\r\n\r\n- Un _pull request_ a su rama _master_ (`/alumno/xxx.yyy/master`). El PR puede hacerse desde un _fork_ si es preciso.\r\n- Tres paquetes publicados en NPM, como se indica en el enunciado.\r\n\r\nPreferiblemente, cread la rama para esta práctica a partir de la rama `master` del repositorio de la asignatura.\r\n","readmeFilename":"README.md"}