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, que lea y analice archivos
en formato Markdown
, para verificar los links que contengan y reportar
algunas estadísticas.
-
[✅] Diferenciar entre tipos de datos primitivos y no primitivos
-
[✅ ] Arrays (arreglos)
- Arreglos
- Array
- Array.prototype.sort()
- Array.prototype.forEach()
- Array.prototype.map()
- Array.prototype.filter()
- Array.prototype.reduce()
-
[✅] Objetos (key, value)
- Objetos en JavaScript
-
[✅ ] Uso de condicionales (if-else, switch, operador ternario, lógica booleana)
- Estructuras condicionales y repetitivas
- Tomando decisiones en tu código — condicionales
-
[✅] Funciones (params, args, return)
- Funciones (control de flujo)
- Funciones clásicas
- Arrow Functions
- Funciones — bloques de código reutilizables
-
[✅] Recursión o recursividad
-
[✅] Módulos de CommonJS
-
[✅] Diferenciar entre expresiones (expressions) y sentencias (statements)
-
[✅] Callbacks
- Función Callback
-
[✅] Promesas
- Promise
-
[✅] Pruebas unitarias (unit tests)
-
[✅] Pruebas asíncronas
- Tests de código asincrónico con Jest
-
[✅] Uso de mocks y espías
-
[✅] Pruebas de compatibilidad en múltiples entornos de ejecución
-
[✅] Uso de linter (ESLINT)
-
[✅] Uso de identificadores descriptivos (Nomenclatura y Semántica)
-
[✅] Instalar y usar módulos con npm
-
[✅] Configuración de package.json
-
[✅] Configuración de npm-scripts
-
[✅] process (env, argv, stdin-stdout-stderr, exit-code)
-
[✅] File system (fs, path)
-
[✅] Git: Instalación y configuración
-
[✅] Git: Control de versiones con git (init, clone, add, commit, status, push, pull, remote)
-
[✅] Git: Integración de cambios entre ramas (branch, checkout, fetch, merge, reset, rebase, tag)
-
[✅] GitHub: Creación de cuenta y repos, configuración de llaves SSH
-
[✅] GitHub: Colaboración en Github (branches | forks | pull requests | code review | tags)
-
[✅] GitHub: Organización en Github (projects | issues | labels | milestones | releases)
-
[✅] Consulta o petición (request) y respuesta (response).
-
[✅] Códigos de status de HTTP
Mediante npm, colocando en la terminal:
npm i md-links-zhaida
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
: Mensajefail
en caso de fallo uok
en caso de éxito.
El ejecutable de nuestra aplicación debe poder ejecutarse de la siguiente manera a través de la terminal:
Comando principal:
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:
Si pasamos la opción --stats
el output (salida) será un texto con estadísticas
básicas sobre los links.
Por ejemplo:
También podemos combinar --stats
y --validate
para obtener estadísticas que
necesiten de los resultados de la validación.
Por ejemplo: