Markdown es un lenguaje de marcado ligero muy popular entre developers. Es usado en muchs 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.
El proyecto MDLinks crea una librería usando Node JS, que lee y analiza archivos en formato Markdown
, para verificar los links que contengan y reportar algunas estadísticas, así como una herramienta de línea de comando (CLI).
Para la instalación, usar el siguiente comando:
npm i astridtimana-md-links
El ejecutable de la aplicación se ejecuta de la siguiente manera a través de la terminal:
md-links <path-to-file> [options]
Si pasamos la opción '-s' o '--stats', el output (salida) será un texto con estadísticas básicas sobre los links.
$ md-links ./some/example.md --stats
Por ejemplo:
Si pasamos la opción '--validate' o '-v' o 'validate link', 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.
$ md-links ./some/example.md --validate
Por ejemplo:
También podemos combinar --stats y --validate o pasarla opción '-a' para obtener estadísticas que necesiten de los resultados de la validación.
$ md-links <path-to-file> --stats --validate
Por ejemplo:
Si no se ingresa una opción, por default se identifica al archivo markdown (a partir de la ruta que recibe como argumento), analiza , e imprimevlos links que vaya encontrando, junto con la ruta del archivo donde aparece y el texto que hay dentro del link (truncado a 50 caracteres).
$ md-links <path-to-file>
Por ejemplo:
Si se desea conocer los comandos a usar, se debe ingresar elcomando '-h' o '--help' (sin ingresar el 'path') , de la siguiente forma:
$ md-links --help
Por ejemplo:
- [x] Uso de condicionales (if-else | switch | operador ternario)
- [x] Uso de funciones (parámetros | argumentos | valor de retorno)
- [x] Manipular arrays (filter | map | sort | reduce)
- [ ] Manipular objects (key | value)
- [x] Uso ES modules (
import
|export
) - [x] Diferenciar entre expression y statements.
- [x] Diferenciar entre tipos de datos atómicos y estructurados.
- [x] Uso de callbacks.
- [x] Consumo de Promesas.
- [x] Creación de Promesas.
- [x] Uso de sistema de archivos. (fs, path)
- [x] Instalar y usar módulos. (npm)
- [x] Creación de modules. (CommonJS)
- [x] Configuración de package.json.
- [x] Configuración de npm-scripts
- [x] Uso de CLI (Command Line Interface - Interfaz de Línea de Comando)
- [x] Testeo unitario.
- [x] Testeo asíncrono.
- [ ] Uso de librerias de Mock.
- [x] Uso de Mocks manuales.
- [ ] Testeo para múltiples Sistemas Operativos.
- [x] Organizar y dividir el código en módulos (Modularización)
- [x] Uso de identificadores descriptivos (Nomenclatura | Semántica)
- [x] Uso de linter (ESLINT)
- [x] Uso de comandos de git (add | commit | pull | status | push)
- [x] Manejo de repositorios de GitHub (clone | fork | gh-pages)
- [x] Colaboración en Github (branches | pull requests | |tags)
- [x] Organización en Github (projects | issues | labels | milestones)
- [x] Verbos HTTP (http.get)
- [x] Recursión.
- [x] Puede instalarse via
npm install --global <github-user>/md-links
- [x] Un board con el backlog para la implementación de la librería.
- [ ] Documentación técnica de la librería.
- [x] Guía de uso e instalación de la librería
- [x] El módulo exporta una función con la interfaz (API) esperada.
- [x] Implementa soporte para archivo individual
- [x] Implementa soporte para directorios
- [x] Implementa
options.validate
- [x] Expone ejecutable
md-links
en el path (configurado enpackage.json
) - [x] Se ejecuta sin errores / output esperado
- [x] Implementa
--validate
- [x] Implementa
--stats
- [x] Pruebas unitarias cubren un mínimo del 70% de statements, functions, lines, y branches.
- [x] Pasa tests (y linters) (
npm test
).