{"_id":"@drosophyllum/mdlinks","_rev":"3-f0a3ba1171ed2016ae8a3b1a11edcbdb","name":"@drosophyllum/mdlinks","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@drosophyllum/mdlinks","version":"0.1.0","devDependencies":{"jest":"^24.7.0"},"dependencies":{"node-fetch":"^2.3.0"},"bin":{"mdLinks":"./index.js"},"gitHead":"aa5f042ee7c49db20ac566bb0e15dcd44ac1ed51","description":"## Preámbulo","_id":"@drosophyllum/mdlinks@0.1.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"drosophyllum","email":"mitziulter@gmail.com"},"dist":{"integrity":"sha512-9oYpQLvV9UqIbiY4gWTf6pc2y1zQQFIzynydhn3oA6ZrFRX4ToD3JUGTjbstId9F3MDevukFtX4+PZn/02btng==","shasum":"2912f1476e3eacc073cfc03a677c7859d9de74ae","tarball":"https://registry.npmjs.org/@drosophyllum/mdlinks/-/mdlinks-0.1.0.tgz","fileCount":13,"unpackedSize":55653,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpvlxCRA9TVsSAnZWagAApEcP/0EV1zRqTeZ+fhNhQCML\nSeA9FhG827R8GPQ7qPFqLBvhKfL8g/ismZfE7Q9v2U28FdWN1PurXRY/muSe\nF6WU0Cwkbjn/G3W7bygj+ET1jzDgAu4xtHNlIzfPLxtSiFn0+yfD37zQWt4Z\niiJEhyiavfVCs0pt/wDbIqQrcMv0V7pYRbKKr3DIyDodsd0hRu2Ut60OiNCU\nLuwX+LJOI3tsBZlbgKMSts3RfZbXhrre4p4tdmi4H0Knj0AaTqd7pBqK4zrM\ndoJfHGMQGKXh+NmN0itMWO6Dha9N15cj41OjQatPaevBDk8wFWDAd4cqpBnV\nN0PAKuhOihXOAqpAOjxR+pyZUhUuBxB3SiDmSDtctR61woTgmvvOUjWBDgxe\nH7jVfxml75a+6uuIyk1DvnLp8J79F0RH0DKEc7uEdSCTo3Th9MafeKxEOLIF\n6m1bFpCyLJfSAzRyv2P1d+gEWl1TUiv2YAMRTVYH3D62hqa1R8/nyF300BqV\nMu+QW1kyNLE5wPD91UkC2NMmFEjtFWzts0hoEAWDmocmYlLTJsfC4tk5coPz\nNa+mmlzXkCwPvzyMYt5yHJwASp1ssg4Qh1LjAiUA9JQj3QSj1ysnx38LCsQC\n/3QlcEeqq3YGj5sOw6ezbY/ixer75aW9Zbora3eQqH/TcHapFdnvEaJrgwPN\nAR1t\r\n=Z5r0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB2QOmmZwIQ67sMsqFoLnE3FutOm1yj6ZbF9fqCjnw2wAiEA3iRXzg12xPa8PE3PY0ANnauepQwfEPwxeMD78Qk8dbE="}]},"maintainers":[{"name":"drosophyllum","email":"mitziulter@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/mdlinks_0.1.0_1554446704474_0.8188947825255839"},"_hasShrinkwrap":false},"0.1.1":{"name":"@drosophyllum/mdlinks","version":"0.1.1","devDependencies":{"jest":"^24.7.0"},"dependencies":{"node-fetch":"^2.3.0"},"bin":{"mdLinks":"./index.js"},"gitHead":"08b4241a148e2431cda5d25f73c284be091363b3","description":"[Proyecto NPM](https://www.npmjs.com/package/@drosophyllum/mdlinks)","_id":"@drosophyllum/mdlinks@0.1.1","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"drosophyllum","email":"mitziulter@gmail.com"},"dist":{"integrity":"sha512-ohe8+sIb5LLJKQyEikqvYEP4FJskCXJfizEQye0wJJb2X/O/MP0NfJw0CkzpxLyWK5AH93p464GBLCvFJ+RUeA==","shasum":"910cf291b6203b1b76a1cf567912e34c953de2a2","tarball":"https://registry.npmjs.org/@drosophyllum/mdlinks/-/mdlinks-0.1.1.tgz","fileCount":13,"unpackedSize":56012,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcrsWACRA9TVsSAnZWagAATt8P/iYsXrzvJd3YM1okOagV\nmnuV1i6SxYHrsE9YIXvI2Xyb1+2jpZtirEFYWCYB/fe3YMIvI1zH5nt3jXdC\nxNbSy7CaC0Vsi/nz6P2dNeUXXOfjODjFK9A72pfAbzzbJQkEbbMV3Vznvt/7\n+srPAnVnZxsngfu0alGwT3Cw+YSJEySkgob9QgLzHB8ahx1bShaR4aKtBqOu\nYBQk8fPPrK6wAVTwKIsWXz/bXzE6lbRb0WGzs71E0auT61LgW1KKQwPUJkWh\nF+N/dxBJwTcEjPazRls18Kqafgvh1NZo6uTjLMqxJfpnRN4LeADpiVGTu59m\nJIPpKiuHB4stj3T7gIm+nvoFaItCXrbjIGuBgIIEqAdojbZeLuwnMd0JdzwF\ngyoay94RBIBKUWLeim66UMPH977lJZFpueYzLcg6Q9s4vjeaLI0t006b4K1V\nAr7mjFZHTaoXsKjqPS9XHGBxxHhfgl/RlzzfLUnm4GMCJjeumTsDsd/tmW59\nq9K5o0iVwoGwDoiMwQbnKwvL04goHyi8VWzxrKLEQu1BHi4tzJt8f7Z/A9oP\nYnhnmxa6ML+AuhJgL07VkupX9GRXlkNaWJcnF1PiVrRRwHRYUcXn5fMyAolB\nLxfg1SOTj+MrLmLBSAPp4BNDYE3CnTBwFskEQnFnJbZ/NqMaHr3YVUhb0Tt6\nItZz\r\n=quGz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICrBzgNe5GYXpSkp2WA02EhaG8AApVQ/0kgmw5zN5D4SAiBU17qx8Pboc7UTMeZDE1DAmRL0xQ6oL4kqwf0ibIU0FA=="}]},"maintainers":[{"name":"drosophyllum","email":"mitziulter@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/mdlinks_0.1.1_1554957695749_0.9342564108888276"},"_hasShrinkwrap":false},"0.1.2":{"name":"@drosophyllum/mdlinks","version":"0.1.2","devDependencies":{"jest":"^24.7.0"},"dependencies":{"colors":"^1.3.3","node-fetch":"^2.3.0"},"bin":{"mdLinks":"./index.js"},"gitHead":"b6a9f7309430916c045db976e850ac85fd484c55","description":"Herramienta y librería creada usando Node.js (entorno de ejecución para JavaScript construido con el motor de JavaScript V8 de Chrome), que lee y analiza archivos en formato Markdown, para verificar los links que contengan y reportar algunas estadísticas.","_id":"@drosophyllum/mdlinks@0.1.2","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"drosophyllum","email":"mitziulter@gmail.com"},"dist":{"integrity":"sha512-Z5MkLLDdDWe9TfqG77MAq8ufTS7m3hP0t5jz7+0wiDiiNHG/KEW57onA2cs4TUE1Uc4Qx7xVQNqdQxNpfVFy3g==","shasum":"90a2b8d9cdc098637b70aa4ee1f0f6db1513945a","tarball":"https://registry.npmjs.org/@drosophyllum/mdlinks/-/mdlinks-0.1.2.tgz","fileCount":14,"unpackedSize":59724,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcrtbaCRA9TVsSAnZWagAARbcP/RwfY0Ml67r+6WDguMxe\nrsp7z6YjnH4oQfRq41GtpUPv0XqJ2ldbfMnEhVnivrWjFNsBIXbFr9PerEQt\nRznRwheQkaDqXIjslCczWPlmRO3uzJcw58WSIsmEFtMg+hdtY0Zs4TY/72iY\nmpLgN0T+yVCYj0vO/SXh3jHN+XTH+nhdFapAF8E7YPUmVrCqqrTsOZIzd9D8\npXI73buJlCnP/R9z+EHJAAcc6glez7CFY4tGK8W8gKn1giCsYlZYaQ+i/dDD\ng5Lp7dQceliluV8eD1d5bL1ba5GG7/vrDqTbwPcIueEF9DgFlCBa00me+iCb\nX0o0IBEg8kMnSt1J2hoD8SDfthw6VF0AGsodh9/D+SF/5keRvHkBKkM7b9Ys\nYUXSeEOf8t5ynlBf24ByWiIBMxJ7HLYK1E7EfGwjwyF4UhC+s+3qMDgu8lRe\nnFh/xiz+bJemgPNs4UrZiXOfnUgml3zS+FrJ7yYnlZH5VbOwzBoQ7Lgm60lf\nASgcjjeB2qSjvMIpOGlt1UUrjONsJZ1v2tdSis9cJt1gTUe6xlKl1yappJj8\nlAMNgsrM8N4uU8wPpHXqU+pX71c0naZm+jBj1vhix0sCQgGrp9XtYIm0Xz/X\npIIRH6Hcj+uSxu8NcQzB8k7DIMoy7m+yqAeJVZIjGZQlenNXUUCgZ9kz0xqa\ntTq+\r\n=Stbd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGOrX3b1IqDp5914uLLcHOTKTBCHyxxI1HkSi5qJmSfBAiEAq3SUMqjhMuO6c7OpbjRcPs7H8aEucEqVfTVgksn5daQ="}]},"maintainers":[{"name":"drosophyllum","email":"mitziulter@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/mdlinks_0.1.2_1554962137340_0.7281358965900289"},"_hasShrinkwrap":false}},"time":{"created":"2019-04-05T06:45:04.288Z","0.1.0":"2019-04-05T06:45:04.645Z","modified":"2022-04-05T05:42:16.927Z","0.1.1":"2019-04-11T04:41:35.924Z","0.1.2":"2019-04-11T05:55:37.505Z"},"maintainers":[{"name":"drosophyllum","email":"mitziulter@gmail.com"}],"description":"Herramienta y librería creada usando Node.js (entorno de ejecución para JavaScript construido con el motor de JavaScript V8 de Chrome), que lee y analiza archivos en formato Markdown, para verificar los links que contengan y reportar algunas estadísticas.","readme":"# Markdown Links\n\nHerramienta y librería creada usando Node.js (entorno de ejecución para JavaScript construido con el motor de JavaScript V8 de Chrome), que lee y analiza archivos en formato Markdown, para verificar los links que contengan y reportar algunas estadísticas.\n\n## Proyecto\n[Proyecto NPM Markdown links](https://www.npmjs.com/package/@drosophyllum/mdlinks) version\n0.1.1\n\n- Instalar [Node.js](https://nodejs.org/es/)\n- Instalar librería del proyecto desde la terminal dentro del proyecto en donde se ejecutará la búsqueda de archivos Markdown: \n\nnpm i @drosophyllum/mdlinks\n- Instalar [node-fetch](https://www.npmjs.com/package/node-fetch)\n- Instalar [npm link](https://docs.npmjs.com/cli/link.html) para acceder con CLI: mdLinks\n\nGuía:\n\n1.- Para encontrar un arreglo con la lista de los links de los archivos .md que se encontraron en la carpeta. Dentro del proyecto o carpeta que contenga archivos .md, ejecutar desde terminal:\n\nmdLinks ./ --links\n\n\n2.- Para saber que archivos se encuentran activos y que archivos se encuentran desactivados, ejecutar:\n\nmdLinks ./  --validate\n\n3.- Para saber el número total de links, los links no repetidos y los links rotos, ejecutar:\n\nmdLinks ./  --stats\n\n#\n\n### Boceto Diagrama de Flujo\n[Boceto diagrama y pseudocódigo](https://docs.google.com/document/d/1o4-FjFOaUuPfN857oUrgex7oJrt1_TmY2IA4ur6bKWA/edit)\n\n#\n## Preámbulo\n\n[Markdown](https://es.wikipedia.org/wiki/Markdown) es un lenguaje de marcado\nligero muy popular entre developers. Es usado en muchísimas plataformas que\nmanejan texto plano (GitHub, foros, blogs, ...), y es muy común\nencontrar varios archivos en ese formato en cualquier tipo de repositorio\n(empezando por el tradicional `README.md`).\n\nEstos archivos `Markdown` normalmente contienen _links_ (vínculos/ligas) que\nmuchas veces están rotos o ya no son válidos y eso perjudica mucho el valor de\nla información que se quiere compartir.\n\nDentro de una comunidad de código abierto, nos han propuesto crear una\nherramienta usando [Node.js](https://nodejs.org/), que lea y analice archivos\nen formato `Markdown`, para verificar los links que contengan y reportar\nalgunas estadísticas.\n\n\n## Introducción\n\n[Node.js](https://nodejs.org/es/) es un entorno de ejecución para JavaScript\nconstruido con el [motor de JavaScript V8 de Chrome](https://developers.google.com/v8/).\nEsto nos va a permitir ejecutar JavaScript en el entorno del sistema operativo,\nya sea tu máquina o un servidor, lo cual nos abre las puertas para poder\ninteractuar con el sistema en sí, archivos, redes, ...\n\nEn este proyecto nos alejamos un poco del navegador para construir un programa\nque se ejecute usando Node.js, donde aprenderemos sobre cómo interactuar con el\nsistema archivos, con el entorno (_process_, _env_, _stdin/stdout/stderr_), ...\n\n## Objetivos\n\nEl objetivo práctico de este proyecto es que aprendas cómo crear tu propia\n**librería** (o biblioteca - _library_) en JavaScript.\n\nDiseñar tu propia librería es una experiencia fundamental para cualquier\ndesarrollador porque que te obliga a pensar en la interfaz (API) de tus\n_módulos_ y cómo será usado por otros developers. Debes tener especial\nconsideración en peculiaridades del lenguaje, convenciones y buenas prácticas.\n\nTópicos:\n\n- [Node.js](https://nodejs.org/en/).\n- [módulos (CommonJS)](https://nodejs.org/docs/latest-v0.10.x/api/modules.html).\n- [file system](https://nodejs.org/api/fs.html).\n- [path](https://nodejs.org/api/path.html).\n- [http.get](https://nodejs.org/api/http.html#http_http_get_options_callback).\n- [Parsing](https://en.wikipedia.org/wiki/Parsing).\n- [markdown](https://daringfireball.net/projects/markdown/syntax).\n- [CLI](https://www.proyectobyte.com/windows/simbolo-del-sistema/uso-la-interfaz-linea-comandos).\n- [npm-scripts](https://docs.npmjs.com/misc/scripts).\n- [semver](https://semver.org/).\n\n## Consideraciones generales\n\nEste proyecto se debe \"resolver\" de manera individual.\n\nLa librería debe estar implementada en JavaScript para ser ejecutada con\nNode.js. **Está permitido usar librerías externas**.\n\n## Parte obligatoria\n\nTu módulo debe ser instalable via `npm install <github-user>/md-links`. Este\nmódulo debe incluir tanto un _ejecutable_ que podamos invocar en la línea de\ncomando como una interfaz que podamos importar con `require` para usarlo\nprogramáticamente.\n\nLos tests unitarios deben cubrir un mínimo del 70% de _statements_, _functions_,\n_lines_ y _branches_. Te recomendamos explorar [Jest](https://jestjs.io/)\npara tus pruebas unitarias.\n\nPara comenzar este proyecto tendrás que hacer un _fork_ y _clonar_ este\nrepositorio.\n\nAntes de comenzar a codear, es necesario crear un plan de acción. Esto debería\nquedar detallado en el `README.md` de tu repo y en una serie de _issues_\ny _milestones_ para priorizar y organizar el trabajo, y para poder hacer\nseguimiento de tu progreso.\n\nDentro de cada _milestone_ se crearán y asignarán los _issues_ que cada quien\nconsidere necesarios.\n\nTambién te sugerimos que empieces a utilizar los [project boards](https://help.github.com/en/articles/about-project-boards) de github que te\nayudaran a organizar y priorizar su trabajo.\n\n### Archivos del proyecto\n\n- `README.md` con descripción del módulo, instrucciones de instalación/uso,\n  documentación del API y ejemplos. Todo lo relevante para que cualquier\n  developer que quiera usar tu librería pueda hacerlo sin inconvenientes.\n- `index.js`: Desde este archivo debes exportar una función (`mdLinks`).\n- `package.json` con nombre, versión, descripción, autores, licencia,\n  dependencias, scripts (pretest, test, ...)\n- `.editorconfig` con configuración para editores de texto.\n- `.eslintrc` con configuración para linter.\n- `.gitignore` para ignorar `node_modules` u otras carpetas que no deban\n  incluirse en control de versiones (`git`).\n- `test/md-links.spec.js` debe contener los tests unitarios para la función\n  `mdLinks()`. Tu implementación debe pasar estos test.\n\n### JavaScript API\n\nEl módulo debe poder importarse en otros scripts de Node.js y debe ofrecer la\nsiguiente interfaz:\n\n#### `mdLinks(path, options)`\n\n##### Argumentos\n\n- `path`: Ruta absoluta o relativa al archivo o directorio. Si la ruta pasada es\n  relativa, debe resolverse con respecto al directorio desde donde se invoca\n  node (_current working directory_).\n- `options`: Un objeto con las siguientes propiedades:\n  - `validate`: Booleano que determina si se desea validar los links\n    encontrados.\n\n##### Valor de retorno\n\nLa función debe retornar una promesa (`Promise`) que resuelva a un arreglo\n(`Array`) de objetos (`Object`), donde cada objeto representa un link y contiene\nlas siguientes propiedades:\n\n- `href`: URL encontrada.\n- `text`: Texto que aparecía dentro del link (`<a>`).\n- `file`: Ruta del archivo donde se encontró el link.\n\n#### Ejemplo\n\n```js\nconst mdLinks = require(\"md-links\");\n\n// Caso 1 .- Ruta relativa sin options\nmdLinks(\"./some/example.md\")\n  .then(links => {\n    // => [{ href, text, file }]\n  })\n  .catch(console.error);\n\n// Caso  .- Ruta relativa con option (validate)\nmdLinks(\"./some/example.md\", { validate: true })\n  .then(links => {\n    // => [{ href, text, file, status, ok }]\n  })\n  .catch(console.error);\n\n// Caso 3 .- Ruta relativa de un directorio sin options\nmdLinks(\"./some/dir\")\n  .then(links => {\n    // => [{ href, text, file }]\n  })\n  .catch(console.error);\n\n//PD: Pueden presentarse más casos.\n```\n\n### CLI (Command Line Interface - Interfaz de Línea de Comando)\n\nEl ejecutable de nuestra aplicación debe poder ejecutarse de la siguiente\nmanera a través de la terminal:\n\n`md-links <path-to-file> [options]`\n\nPor ejemplo:\n\n```sh\n$ md-links ./some/example.md\n\n```\n\nEl comportamiento por defecto no debe validar si las URLs responden ok o no,\nsolo debe identificar el archivo markdown (a partir de la ruta que recibe como\nargumento), analizar el archivo Markdown e imprimir los links que vaya\nencontrando, junto con la ruta del archivo donde aparece y el texto\nque hay dentro del link (truncado a 50 caracteres).\n\n#### Options\n\n##### `--validate`\n\nSi pasamos la opción `--validate`, el módulo debe hacer una petición HTTP para\naveriguar si el link funciona o no. Si el link resulta en una redirección a una\nURL que responde ok, entonces consideraremos el link como ok.\n\nPor ejemplo:\n\n```sh\n$ md-links ./some/example.md --validate\n\n```\n\nVemos que el _output_ en este caso incluye la palabra `ok` o `fail` después de\nla URL, así como el status de la respuesta recibida a la petición HTTP a dicha\nURL.\n\n##### `--stats`\n\nSi pasamos la opción `--stats` el output (salida) será un texto con estadísticas\nbásicas sobre los links.\n\n```sh\n$ md-links ./some/example.md --stats\nTotal: 3\nUnique: 3\n```\n\nTambién podemos combinar `--stats` y `--validate` para obtener estadísticas que\nnecesiten de los resultados de la validación.\n\n```sh\n$ md-links ./some/example.md --stats --validate\nTotal: 3\nUnique: 3\nBroken: 1\n```\n\n## Entregables\n\nMódulo instalable via `npm install <github-user>/md-links`. Este módulo debe\nincluir tanto un ejecutable como una interfaz que podamos importar con `require`\npara usarlo programáticamente.\n\n## Hacker edition\n\n- Puedes agregar la propiedad `line` a cada objeto `link` indicando en qué línea\n  del archivo se encontró el link.\n- Puedes agregar más estadísticas.\n- Integración continua con Travis o Circle CI.\n\n## Evaluación\n\n### Tech\n\n| Habilidad              |\n| ---------------------- |\n| **JavaScript**         |\n| Estilo                 |\n| Nomenclatura/semántica |\n| Funciones/modularidad  |\n| Estructuras de datos   |\n| Tests                  |\n| **SCM**                |\n| Git                    |\n| GitHub                 |\n| **CS**                 |\n| Lógica                 |\n| Arquitectura           |\n\n### Habilidades Blandas\n\n| Habilidad                                                  |\n| ---------------------------------------------------------- |\n| Planificación y organización                               |\n| Autoaprendizaje                                            |\n| Solución de Problemas                                      |\n| Dar y recibir feedback                                     |\n| Adaptabilidad                                              |\n| Trabajo en equipo (trabajo colaborativo y responsabilidad) |\n| Comunicación eficaz                                        |\n| Presentaciones                                             |\n\nRecuerda revisar la rúbrica y de acuerdo a tus alcances en proyectos anteriores busca tu crecimiento personal.\n\n## Pistas / Tips\n\n### FAQs\n\n#### ¿Cómo hago para que mi módulo sea _instalable_ desde GitHub?\n\nPara que el módulo sea instalable desde GitHub solo tiene que:\n\n- Estar en un repo público de GitHub\n- Contener un `package.json` válido\n\nCon el comando `npm install githubname/reponame` podemos instalar directamente\ndesde GitHub. Ver [docs oficiales de `npm install` acá](https://docs.npmjs.com/cli/install).\n\nPor ejemplo, el [`course-parser`](https://github.com/Laboratoria/course-parser)\nque usamos para la currícula no está publicado en el registro público de NPM,\nasí que lo instalamos directamente desde GitHub con el comando `npm install Laboratoria/course-parser`.\n\n### Sugerencias de implementación\n\nLa implementación de este proyecto tiene varias partes: leer del sistema de\narchivos, recibir argumentos a través de la línea de comando, analizar texto,\nhacer consultas HTTP, ... y todas estas cosas pueden enfocarse de muchas formas,\ntanto usando librerías como implementando en VanillaJS.\n\nPor poner un ejemplo, el _parseado_ (análisis) del markdown para extraer los\nlinks podría plantearse de las siguientes maneras (todas válidas):\n\n- Usando un _módulo_ como [markdown-it](https://github.com/markdown-it/markdown-it),\n  que nos devuelve un arreglo de _tokens_ que podemos recorrer para identificar\n  los links.\n- Siguiendo otro camino completamente, podríamos usar\n  [expresiones regulares (`RegExp`)](https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Regular_Expressions).\n- También podríamos usar una combinación de varios _módulos_ (podría ser válido\n  transformar el markdown a HTML usando algo como [marked](https://github.com/markedjs/marked)\n  y de ahí extraer los link con una librería de DOM como [JSDOM](https://github.com/jsdom/jsdom)\n  o [Cheerio](https://github.com/cheeriojs/cheerio) entre otras).\n- Usando un _custom renderer_ de [marked](https://github.com/markedjs/marked)\n  (`new marked.Renderer()`).\n\nNo dudes en consultar a tus compañeras, coaches y/o el [foro de la comunidad](http://community.laboratoria.la/c/js)\nsi tienes dudas existenciales con respecto a estas decisiones. No existe una\n\"única\" manera correcta :wink:\n\n### Tutoriales / NodeSchool workshoppers\n\n- [learnyounode](https://github.com/workshopper/learnyounode)\n- [how-to-npm](https://github.com/workshopper/how-to-npm)\n- [promise-it-wont-hurt](https://github.com/stevekane/promise-it-wont-hurt)\n\n### Otros recursos\n\n- [Acerca de Node.js - Documentación oficial](https://nodejs.org/es/about/)\n- [Node.js file system - Documentación oficial](https://nodejs.org/api/fs.html)\n- [Node.js http.get - Documentación oficial](https://nodejs.org/api/http.html#http_http_get_options_callback)\n- [Node.js - Wikipedia](https://es.wikipedia.org/wiki/Node.js)\n- [What exactly is Node.js? - freeCodeCamp](https://medium.freecodecamp.org/what-exactly-is-node-js-ae36e97449f5)\n- [¿Qué es Node.js y para qué sirve? - drauta.com](https://www.drauta.com/que-es-nodejs-y-para-que-sirve)\n- [¿Qué es Nodejs? Javascript en el Servidor - Fazt en YouTube](https://www.youtube.com/watch?v=WgSc1nv_4Gw)\n- [¿Simplemente qué es Node.js? - IBM Developer Works, 2011](https://www.ibm.com/developerworks/ssa/opensource/library/os-nodejs/index.html)\n- [Node.js y npm](https://www.genbeta.com/desarrollo/node-js-y-npm)\n- [Módulos, librerías, paquetes, frameworks... ¿cuál es la diferencia?](http://community.laboratoria.la/t/modulos-librerias-paquetes-frameworks-cual-es-la-diferencia/175)\n- [Asíncronía en js](https://carlosazaustre.com/manejando-la-asincronia-en-javascript/)\n- [NPM](https://docs.npmjs.com/getting-started/what-is-npm)\n- [Publicar packpage](https://docs.npmjs.com/getting-started/publishing-npm-packages)\n- [Crear módulos en Node.js](https://docs.npmjs.com/getting-started/publishing-npm-packages)\n- [Leer un archivo](https://nodejs.org/api/fs.html#fs_fs_readfile_path_options_callback)\n- [Leer un directorio](https://nodejs.org/api/fs.html#fs_fs_readdir_path_options_callback)\n- [Path](https://nodejs.org/api/path.html)\n- [Linea de comando CLI](https://medium.com/netscape/a-guide-to-create-a-nodejs-command-line-package-c2166ad0452e)\n\n## Checklist\n\n### General\n\n- [x] Puede instalarse via `npm install --global <github-user>/md-links`\n\n### `README.md`\n\n- [x] Colocar el pseudo código o diagrama de flujo con el algoritmo que soluciona el problema.\n- [x] Un board con el backlog para la implementación de la librería.\n- [x] Documentación técnica de la librería.\n- [x] Guía de uso e instalación de la librería\n\n### API `mdLinks(path, opts)`\n\n- [x] El módulo exporta una función con la interfaz (API) esperada.\n- [ ] Implementa soporte para archivo individual\n- [x] Implementa soporte para directorios\n- [x] Implementa `options.validate`\n\n### Pruebas / tests\n\n- [ ] Pruebas unitarias cubren un mínimo del 70% de statements, functions,\n      lines, y branches.\n- [ ] Pasa tests (y linters) (`npm test`).\n\n### CLI\n\n- [x] Expone ejecutable `md-links` en el path (configurado en `package.json`)\n- [ ] Se ejecuta sin errores / output esperado\n- [x] Implementa `--validate`\n- [x] Implementa `--stats`\n\n## Hacker Edition\n\n- [ ] Crear un script en el package.json que transforme el codigo ES6+ a ES5.\n- [ ] Puedes agregar la propiedad line a cada objeto link indicando en qué línea del archivo se encontró el link.\n- [ ] Puedes agregar más estadísticas.\n- [ ] Integración continua con Travis o Circle CI.\n","readmeFilename":"README.md"}