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-brendanovoa

v0.1.0

Published

Read markdown files and identify broken links

Downloads

2

Readme

Markdown Links

Analizador de enlaces en archivos Markdown

Índice

  1. Introducción
  2. Características
  3. Instalación
  4. Uso
  5. Desarrollo del proyecto
  6. Estructura del código
  7. Pruebas Unitarias
  8. Desarrollado con
  9. Autora

Introducción

MD-Links es una librería de Node.js y una herramienta de línea de comandos que te permite analizar archivos tipo markdown para extraer y mostrar información sobre los enlaces presentes en ellos.

Esta herramienta es útil para verificar la integridad de los enlaces en este tipo de documentos, identificar enlaces rotos y obtener información sobre ellos como su estado y texto anclado.

Permite analizar archivos con las siguientes extensiones: .md, .mkd, .mdwn, .mdown, .mdtxt, .mdtext, .markdown, .text.

Características

Extracción de Enlaces: Obtén una lista de enlaces con información como el enlace en sí, el texto descriptivo y el archivo de origen.

Estadísticas de Enlaces: Con la opción --stats, puedes obtener estadísticas sobre la cantidad total de enlaces, enlaces válidos y enlaces rotos.

Resultados estadísticas

Validación de Enlaces: Utilizando la opción --validate, MD-Links verifica el estado de cada enlace haciendo una solicitud HTTP y muestra el código de status de las llamadas junto con un mensaje indicando si la solicitud fue exitosa o falló.

Resultados con validate

Instalación

Para utilizar MD-Links, primero, instala la herramienta globalmente con npm en tu terminal:

npm install -g md-links-brendanovoa

Uso

Comando Básico

md-links-brendanovoa ruta/al/archivo.md

Esto mostrará una tabla con la información básica de los enlaces encontrados.

Estadísticas de Enlaces

md-links-brendanovoa ruta/al/archivo.md --stats

Obtén estadísticas sobre la cantidad total de enlaces, enlaces válidos y enlaces rotos.

Validación de Enlaces

md-links-brendanovoa ruta/al/archivo.md --validate

Además de la información básica, muestra el estado de cada enlace y un mensaje de éxito o falla.

Desarrollo del proyecto

Diagrama de Flujo Antes de iniciar el desarrollo, se creó un diagrama de flujo que detalla la lógica de la aplicación. Este diagrama describe el proceso que sigue la herramienta desde la recepción de una ruta hasta la extracción y análisis de los enlaces contenidos en un archivo Markdown.

Diagrama de flujo

A continuación, se presenta un desglose paso a paso:

Entrada de Ruta: La herramienta recibe una ruta como entrada, ya sea relativa o absoluta, proporcionada por el usuario. Verificación de Ruta Absoluta: Se verifica si la ruta proporcionada es una ruta absoluta utilizando la función typeofPath con el método path.isAbsolute. Transformación de Ruta: Si la ruta no es absoluta, se transforma en una ruta absoluta utilizando la función transformPath con el método path.resolve. Verificación de Existencia de Ruta: Se utiliza la función existingRoute para verificar que la ruta exista en el sistema de archivos mediante fs.access. Verificación de Extensión Markdown: Se emplea la función isMarkdown para asegurarse de que el archivo en la ruta proporcionada sea un archivo Markdown mediante el método path.extname. La función verifica la extensión del archivo y acepta diversas extensiones como .md, .mkd, .mdwn, .mdown, .mdtxt, .mdtext, .markdown, y .text. Lectura de Contenido del Archivo: Se utiliza la función fileContent para leer el contenido del archivo Markdown de manera asíncrona utilizando fs.readFile. Este contenido se almacenará para el siguiente paso. Extracción de Enlaces: Se aplica la función linksArray para analizar el contenido del archivo y extraer todos los enlaces encontrados utilizando expresiones regulares. Cada enlace se representa como un objeto con propiedades como href (URL del enlace), text (texto descriptivo) y file (ruta del archivo de origen). Opción --validate: Si se proporciona la opción --validate, se ejecuta la función validateLinks para validar cada enlace utilizando la información proporcionada por la respuesta HTTP del enlace obtenida mediante node-fetch. Se añaden las propiedades status y message a cada objeto de enlace. Resultados Finales: Los enlaces extraídos, ya sea con o sin validación, se devuelven como un array de objetos. Este resultado es el que se utilizará para generar la salida final.

Este diagrama de flujo proporciona una visión detallada del proceso de la herramienta. Cada función cumple un papel crucial en la ejecución fluida de la herramienta, garantizando una experiencia consistente y fiable para el usuario.

Este enfoque modular y detallado es esencial para comprender cómo la herramienta aborda cada paso del procesamiento de archivos Markdown y la manipulación de enlaces.

Estructura del código

El código se ha organizado en módulos para mejorar la legibilidad y la mantenibilidad. Aquí hay un resumen de los módulos clave:

pathFunctions.js: Contiene funciones relacionadas con el manejo de rutas, como typeofPath, transformPath, existingRoute y isMarkdown.

fileFunctions.js: Agrupa funciones encargadas de la lectura de archivos y el procesamiento de su contenido, como fileContent, linksArray, y validateLinks.

index.js: Integra todas las funciones para crear la función principal mdLinks.

cli.js: Gestiona la ejecución de la función mdLinks desde la línea de comandos, manejando opciones como --validate y --stats. También formatea y muestra la salida utilizando las bibliotecas cli-table3 y colors.js.

Pruebas Unitarias

El proyecto cuenta con un conjunto sólido de pruebas unitarias implementadas con Jest. Estas pruebas cubren escenarios clave para garantizar la estabilidad y confiabilidad del código.

Se testearon las funcionesde ruta (pathFunctions) y de manejo de archivo (file Functions). También se testeo la función validateLinks que verifica las llamadas HTTP status code utilizando mocks de node-fetch para las promesas obtenidas.

Se obtuvieron los siguientes resultados:

Resultados pruebas unitarias

[========]

Desarrollado con

Node.js, CommonJS y JavaScript Vainilla

[========]

Autora

Brenda Gisel Hernández Novoa

https://github.com/brendanovoa/md-links.git

https://www.laboratoria.la/