Esta librería fue pensada para usuarios que quieran extraer links de sus archivos markdown (ya sea un solo archivo o una carpeta con muchos de ellos) y además poder realizar distintas operaciones, como validar los links para saber si estos son funcionales o no y hacer estadísticas con cadas uno de ellos, como por ejemplo sacar el total, la unicidad de cada link y si están rotos.
Realizamos este diagrama de flujo para reconocer las posibles combinaciones que se realizarán con nuestras funciones.
- evaluatePath
- Ingreso: Ruta (string).
- Proceso: Utiliza el método path.isAbsolute para reconocer si la ruta es absoluta.
- Salida: true/false (booleano).
- convertToAbsolutePath
- Ingreso: Ruta (string).
- Proceso: Utilizar método path.resolve para convertir ruta relativa a absoluta.
- Salida: Ruta absoluta (string).
- IsFile
- Ingreso: Ruta absoluta (string).
- Proceso: Utilizar método fs.lstat.isFile para reconocer si la ruta dada pertenece a un archivo.
- Salida: true/false (booleano).
- getFiles
- Ingreso: Ruta absoluta (string).
- Proceso: Función para obtener todos los archivos de la carpeta.
- Salida: Array con las rutas de todos los archivos(array).
- verifyExtName
- Ingreso: Ruta absoluta (string)
- Proceso: Verificar si los archivos obtenidos son extensión markdown.
- Salida: true/false (booleano).
- extractLinks
- Ingreso: Ruta ansoluta archivo MD.
- Proceso: Usar librería Marked(marke.renderer) para obtener los links del archivo.
- Salida: Array de objetos con los links obtenidos.
- verifyLinks
- Ingreso: Array de links obtenidos.
- Proceso: Usar librería link-check para verificar el status de los links.
- Salida: Objeto con status de cada link(array).
- calculateStats
- Ingreso: Array de links obtenidos.
- Proceso: Evaluar el total de links, cuántos son únicos y en caso de ingresar validate y stats los links rotos o no funcionales.
- Salida: Objeto con las estadísticas obtenidas.
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);
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:
$ 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
Si pasamos la opción --validate
, el módulo hace una petición HTTP para
averiguar si el link funciona o no.
Por ejemplo:
$ md-links ./some/miarchivo.md --validate
./some/miarchivo.md http://algo.com/2/3/ ok 200 Link a algo
./some/miarchivo.md https://otra-cosa.net/algun-doc.html fail 404 algún doc
./some/miarchivo.md http://google.com/ ok 301 Google
Además del código de status, las palabras ok
o fail
sirven para identificar el status de cada link.
Si pasamos la opción --stats
el output (salida) será un texto con estadísticas
básicas sobre los links.
$ md-links ./some/miarchivo.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.
$ md-links ./some/miarchivo.md --stats --validate
Total: 3
Unique: 3
Broken: 1