UNPKG

analiaklein-md-links

Version:

herramienta de línea de comando (CLI) así como tu propia librería (o biblioteca - library) en JavaScript.

246 lines (144 loc) 6.37 kB
# Markdown Links ## Índice * 1. Preambulo * 2. Documentacion técnica de la libreria * 3. Diagrama de flujo * 4. Guía de uso e instalación de la librería * 5. Planificación y organización *** ![md-links](./mdLinks.png) ## 1. Preámbulo [Markdown](https://es.wikipedia.org/wiki/Markdown) es un lenguaje de marcado ligero muy popular entre developers. Es usado en muchísimas plataformas que manejan texto plano (GitHub, foros, blogs, ...) y es muy común encontrar varios archivos en ese formato en cualquier tipo de repositorio (empezando por el tradicional `README.md`). Estos archivos `Markdown` normalmente contienen _links_ (vínculos/ligas) que muchas veces están rotos o ya no son válidos y eso perjudica mucho el valor de la información que se quiere compartir. Dentro de una comunidad de código abierto, nos han propuesto crear una herramienta usando [Node.js](https://nodejs.org/), que lea y analice archivos en formato `Markdown`, para verificar los links que contengan y reportar algunas estadísticas. ## 2. Documentación técnica de la librería: ## Este proyecto consta de DOS partes ### 1) JavaScript API El módulo debe poder **importarse** en otros scripts de Node.js y debe ofrecer la siguiente interfaz: #### `mdLinks(path, options)` ##### Argumentos * `path`: Ruta **absoluta** o **relativa** al **archivo**. Si la ruta pasada es relativa, se la convierte en absoluta. * `options`: Un objeto con **únicamente** la siguiente propiedad: - `validate`: Booleano que determina si se desea validar los links encontrados. ##### Valor de retorno La función debe **retornar una promesa** (`Promise`) que **resuelva a un arreglo** (`Array`) de objetos (`Object`), donde cada objeto representa un link y contiene las siguientes propiedades Con `validate:false` : * `href`: URL encontrada. * `text`: Texto que aparecía dentro del link (`<a>`). * `file`: Ruta del archivo donde se encontró el link. Con `validate:true` : * `href`: URL encontrada. * `text`: Texto que aparecía dentro del link (`<a>`). * `file`: Ruta del archivo donde se encontró el link. * `status`: Código de respuesta HTTP. * `ok`: Mensaje `fail` en caso de fallo u `ok` en caso de éxito. #### Ejemplo (resultados como comentarios) ```js const mdLinks = require("md-links"); mdLinks("./some/example.md") .then(links => { // => [{ href, text, file }, ...] }) .catch(console.error); mdLinks("./some/example.md", { validate: true }) .then(links => { // => [{ href, text, file, status, ok }, ...] }) .catch(console.error); mdLinks("./some/dir") .then(links => { // => [{ href, text, file }, ...] }) .catch(console.error); ``` ### 2) CLI (Command Line Interface - Interfaz de Línea de Comando) El ejecutable de nuestra aplicación debe poder ejecutarse de la siguiente manera a través de la **terminal**: `md-links <path-to-file> [options]` Por ejemplo: ```sh $ md-links ./some/example.md ./some/example.md http://algo.com/2/3/ Link a algo ./some/example.md https://otra-cosa.net/algun-doc.html algún doc ./some/example.md http://google.com/ Google ``` El comportamiento por defecto no debe validar si las URLs responden ok o no, solo debe identificar el archivo markdown (a partir de la ruta que recibe como argumento), analizar el archivo Markdown e imprimir los links que vaya encontrando, junto con la ruta del archivo donde aparece y el texto que hay dentro del link (truncado a 50 caracteres). #### Options ##### `--validate` Si pasamos la opción `--validate`, el módulo debe hacer una petición HTTP para averiguar si el link funciona o no. Si el link resulta en una redirección a una URL que responde ok, entonces consideraremos el link como ok. Por ejemplo: ```sh $ md-links ./some/example.md --validate ./some/example.md http://algo.com/2/3/ ok 200 Link a algo ./some/example.md https://otra-cosa.net/algun-doc.html fail 404 algún doc ./some/example.md http://google.com/ ok 301 Google ``` Vemos que el _output_ en este caso incluye la palabra `ok` o `fail` después de la URL, así como el status de la respuesta recibida a la petición HTTP a dicha URL. ##### `--stats` Si pasamos la opción `--stats` el output (salida) será un texto con estadísticas básicas sobre los links. ```sh $ md-links ./some/example.md --stats Total: 3 Unique: 3 ``` También podemos combinar `--stats` y `--validate` para obtener estadísticas que necesiten de los resultados de la validación. ```sh $ md-links ./some/example.md --stats --validate Total: 3 Unique: 3 Broken: 1 ``` ## 3. Diagrama de flujo https://app.diagrams.net/#G1mijc1XWBymtoZNpqZVGlrh0lRg7qTLD_ ![](./diagramadeflujo.png) ## 4. Guía de uso e instalación de la librería instalacion npm i analiaklein-md-links Modo de Uso El ejecutable de nuestra aplicación se realiza de siguiente manera a través de la terminal: mdLinks <path-to-file> [options] 1.- mdLinks: Con este comando comienzas a utilizar la Herramienta, te muestra una pequeña descripcion de su uso. 2.- path: Argumento con el cual le indicas a la herramienta la ruta del archivo que quieres revisar, esta ruta puede ser relativa o absoluta. - Al agregar este argumento sin options igualmente entregara un resumen de los links de la ruta consultada. 3.- options: Argumento con el cual le indicas a la herramienta si deseas evaluar ciertas caracteristicas: --validate: el módulo debe hacer una petición HTTP para averiguar si el link funciona o no. --stats : Si pasamos la opción --stats el output (salida) será un texto con estadísticas básicas sobre los links, el cual contendra Total de links, y total de links sin repetir. --stats + --validate: entregara estadistica completa en la cual se agregara broken que son los archivos rotos o no validos. ## Ejemplos: Sin options: ![](./sin-options.png) Con options stats: ![](./options-stats.png) Con options validate: ![](./options-validate.png) Con options validate y stats: ![](./options-validate-stats.png) ## 5. Board El proyecto se trabajo en 4 Sprints, en los cuales se organizo segun Diagrama de flujo establecido. Planificación en github proyects y Trello ![](./githubproyect.png) ![](./trello.png) Proyecto mdLinks (./https://github.com/Analiak/DEV007-md-links) README.md de Laboratoria (./https://github.com/Laboratoria/DEV007-md-links)