npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

md-links-abril

v0.1.0

Published

md-links CLI

Downloads

1

Readme

Markdown Links

MD-LINKS

1. Introduccion

Markdown es un lenguaje de marcado ligero muy popular entre developers. Es usado en muchísimas plataformas que manejan texto plano (GitHub, foros, blogs, etc.) 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.

2. Planificación y Organización del proyecto

El proyecto consta de cinco etapas a desarrollar cada una cuenta con una tarea en especifico que permite complementarse una de otra. Siguiendo la metodología agil se utizo la herramienta de github proyect para ir planificando y organizando los temas a desarrollar de acuerdo a cada tarea.

Tablero de Proyectos de GitHub (Github projects)

Se uso un board en github projects por etapa (hito), donde se dividen las responsabilidades en pequeñas tareas y asi poder reflejar un avance de acuerdo a cada etapa planificada.

Se utilizaron los elementos de milestone (historia de usuario) que en este caso fue por (hito). Tambien se agrego los issue de acuerdo a las tareas pequeñas y por ultimo las label que muestran el proceso de la tarea.

Label:

  • bloqueo: Se tenga una duda
  • en proceso: Se esta ejecutando la tarea
  • pendiente: Esta por realizarse la tarea
  • realizado: Tarea terminada

Permitiendo optimizar la planificación de la tarea y la organizacion de la misma.

Planificación

3. Desarrollo del proyecto

Dentro de las etapas del proyecto se utilizo algunas bibliotecas recomendadas para llevar a cabo el proyecto, entre las utilizadas son markdown-it y cheerio para realizar dos tareas clave: analizar archivos Markdown y encontrar enlaces dentro de ellos.

  • markdown-it convierte el contenido Markdown en HTML, lo que nos permite buscar y extraer enlaces de manera más efectiva.

                    const md = markdownIt();
                 const html = md.render(line);
  • cheerio busca y extrae enlaces dentro del HTML generado por markdown-it. Esto nos permite identificar los enlaces y extraer información importante, como la URL y el texto del enlace.

      const $ = cheerio.load(html);
      $('a').each((index, element) => {
        const href = $(element).attr('href');
        const text = $(element).text();
        // ... Procesa y almacena la información del enlace
      });

Ademá de busca y extrae los links, también se debía validar el status del enlace y para ello se utilizo la biblioteca axios para realizar una tarea fundamental: validar la disponibilidad y el estado de los enlaces encontrados en los archivos Markdown. axios es una biblioteca de JavaScript que nos permite realizar solicitudes HTTP y obtener información sobre las respuestas de los servidores web. En este contexto, lo utilizamos para verificar la existencia de los enlaces y determinar su estado.

Etapas del proyecto

Hito 1

Dentro del Hito 1 se crea una promesa que permita leer archivos markdown y saber si existen links dentro de el.

Pasos para resolver el hito 1:

  1. Transforma la ruta relativa a una ruta absoluta.
  2. Comprueba si la ruta existe.
  3. Verifica si el archivo es de tipo Markdown (según su extensión).
  4. Lee el contenido del archivo.
  5. Encuentra los links dentro del contenido Markdown.
  6. Resuelve la promesa con los links encontrados

Hito 2

Pasos para resolver el hito 2:

  1. Retornar el Arreglo de Objetos de Links con o sin propiedades adicionales, dependiendo de la validación.
  2. Agregar las propiedades status y ok a los objetos de link según la validación.
  3. Si validate es true, realizar solicitudes HTTP para validar cada link.
  4. Validar los Links
  5. Crear un Arreglo de Objetos de Links con las propiedades href, text, y file.
  6. Extraer Links (URL y Texto) de cada archivo markdown encontrado.
  7. Buscar y Analizar Archivos Markdown en la ruta especificada.
  8. Modificar la función mdLinks para incluir el parámetro validate.

Hito 3

Pasos para resolver el hito 3:

  1. Iniciar la Función mdLinks(path, validate) 2.Verificar si la ruta path es relativa o absoluta
  2. Verificar si path es un archivo o un directorio
  3. Buscar y analizar el archivo Markdown.
  4. Extraer los links (href y text).
  5. Si validate es true:
  6. Realizar una solicitud HTTP para validar el link.
  7. Verificar si la solicitud HTTP fue exitosa.
  8. rear objeto con status y ok/fail.
  9. Si validate es false o undefined:
  10. Crear objeto href,text y file.
  11. Si es un directorio:
  12. Obtener la lista de archivos y subdirectorios en el directorio.
  13. Verificar si es un archivo Markdown (.md).
  14. Retornar el arreglo de objetos de links encontrados

Hito 4

Creacion del CLI (Interfaz de Linea de Comandos)

Comandos para ver el resultado de las estadísticas de acuerdo a la opcion seleccionada:

  • --validate
  • --stats
  • --validate--stats

--validate

  • Muestra el resultado de los links mediante un status HTTP.

validate

--stats

  • Comando para ver el resultado de los links unicos encontrados en el archivo markdown y el total de links.

stats

--validate --stats

  • Comando para ver el resultado de los links totales, unicos y rotos dentro del archivo markdown.

ambos

Hito 5

  • Busqueda entre directorios y subdirectorios para encontrar links dentro del archivo markdown.

directorios

Manejo de Errores

  • Buscar dentro de un directorio vacío

    C:\Users\LENOVO\DEV009-md-links> md-links ./pruebaMD Error: Directorio vacío. No se encontraron archivos Markdown en el directorio.

  • Si el archivo no es markdown

    C:\Users\LENOVO\DEV009-md-links> md-links ./fileMD/archivo.txt Error: El archivo './fileMD/archivo.txt' no es un archivo Markdown.

4. Diagrama de Flujo

Diagrama de flujo

5. Instalación del paquete

Forma de instalación del paquete usando github.

    npm install github.com/abrilv29/DEV009-md-links

Resultado de instalación del paquete

prueba instalacion

6. Test Unitarios

Manejo de pruebas unitarias de acuerdo a la función mdlinks y axios.

test

Elaborado por Abril Vargas - DEV009