Skip to content

LorenaBarr/DEV010-md-links

 
 

Repository files navigation

MD-Links

Índice

  1. Preámbulo
  2. Resumen del Proyecto
  3. Desarrollo del Proyecto
    1. Hito 1: Javascript API
    2. Hito 2: Javascript API con segundo parámetro opcional "validate"
    3. Hito 3: Buscando dentro de un directorio
  4. Código
    1. mdLinks.js
    2. readFile.js
    3. utils.js
    4. index.js
  5. Pruebas Unitarias
  6. Tecnologías Aplicadas
  7. Enlaces Útiles

1. Preámbulo

Markdown es un lenguaje de marcado ligero ampliamente utilizado entre los desarrolladores. Se emplea en numerosas plataformas que manejan texto plano (GitHub, foros, blogs, etc.), y los archivos Markdown son comunes en varios repositorios.

Estos archivos Markdown a menudo contienen enlaces que a veces están rotos o ya no son válidos, afectando negativamente el valor de la información compartida.

2. Resumen del Proyecto

MD-Links es un proyecto creado en Node.js. Involucra el desarrollo de una biblioteca dentro de este entorno de ejecución que lee y analiza archivos en formato Markdown. El objetivo es verificar los enlaces contenidos en estos archivos y generar un informe con algunas estadísticas.

3. Desarrollo del Proyecto

3.1 Hito 1: Javascript API

En este hito, se creó la versión más sencilla de mdlinks. Se desarrolló una función que retorna una promesa con los links encontrados dentro de un archivo Markdown específico. La función es un módulo que puede importarse en otros scripts de Node.js y ofrece la interfaz mdLinks(path).

Tareas Realizadas:

Creación de una Promesa. Transformación de la ruta ingresada a absoluta. Comprobación de la existencia de la ruta en el sistema. Aseguramiento de que el archivo sea de tipo Markdown. Lectura del contenido del archivo. Extracción de los enlaces dentro del documento. 3.2 Hito 2: Javascript API con segundo parámetro opcional "validate" En este hito, se agregó un parámetro adicional a la función mdLinks llamado validate, que recibe un valor booleano. validate es un argumento opcional y afecta la salida de la función.

Interfaz Actualizada:

mdLinks(path, validate) Valor que resuelve la promesa con validate = false o undefined:

Un arreglo con objetos que representan links, con las propiedades href, text, y file. Valor que resuelve la promesa con validate = true:

Un arreglo con objetos que representan links, con las propiedades href, text, file, status, y ok.

3.3 Hito 3: Buscando dentro de un directorio

En este hito, se mejoró la función mdLinks para que pueda recibir un directorio como ruta. La función ahora recorre todos los archivos existentes en el directorio y, por cada archivo .md, extrae los links para mostrarlos en pantalla.

Tareas Realizadas:

Obtención del contenido de un directorio. Unión de dos rutas para acceder a directorios y archivos.

4. Código

El código del proyecto se basa en la modularización (CommonJS) de funciones, ayudando a organizar y estructurar el código en archivos JS separados. Hay cuatro secciones principales que definen la funcionalidad de nuestra biblioteca. Bibliotecas y Módulos Utilizados chalk: Librería para dar formato a la salida en la consola mediante colores.

Métodos utilizados: chalk.cyan, chalk.white. fs (File System): Módulo de Node.js para trabajar con el sistema de archivos.

Métodos utilizados: fs.promises.readFile, fs.promises.access, fs.readdir. path: Módulo de Node.js para manipulación de rutas de archivos y directorios.

Métodos utilizados: path.join, path.extname, path.resolve, path.isAbsolute. Tecnologías y Conceptos Destacados Promesas (Promise): Se emplean para gestionar operaciones asíncronas y realizar tareas concurrentes.

Expresiones Regulares (Regex): Utilizadas para analizar y extraer información de cadenas de texto, especialmente para identificar enlaces en archivos Markdown.

Fetch API: Utilizada para realizar solicitudes HTTP y validar la existencia y estado de los enlaces.

ES6 (ECMAScript 2015): Se han aplicado características de ECMAScript 2015, como destructuración de objetos, funciones de flecha y operadores de expansión/rest.

Node.js: El proyecto está diseñado para ejecutarse en el entorno de Node.js.

Estructura del Proyecto

Módulos: El código se organiza en módulos para mejorar la legibilidad y mantenibilidad.

Exportación e Importación de Módulos: Se utiliza module.exports para exportar funciones y objetos de un módulo, y require para importarlos en otros módulos.

Funciones Principales

isLinkValid: Valida la existencia y estado de un enlace mediante solicitudes HTTP.

doesFileExist: Verifica la existencia de un archivo en una ruta dada.

getMdFilesInDirectory: Obtiene una lista de archivos Markdown en un directorio.

analyzeLinks: Analiza un archivo Markdown para extraer información sobre los enlaces.

mdLinks: Coordina la verificación de enlaces en archivos Markdown, ya sea en un archivo específico o en un directorio.

convertToAbsolutePath y isAbsolutePath: Funciones utilitarias para trabajar con rutas.

5. Pruebas Unitarias

El proyecto incluye un conjunto de pruebas para las funciones mdLinks, isLinkValid, doesFileExist, getMdFilesInDirectory, y analyzeLinks. Las pruebas también contribuyeron a alcanzar una cobertura cercana al 100%. Resultado de Pruebas

6. Tecnologías Aplicadas

JavaScript: Implementa funcionalidad para analizar el texto ingresado y mostrar resultados. Node.js: Un entorno de ejecución de JavaScript en el lado del servidor. CommonJS: Se utilizan módulos para organizar y estructurar el código en archivos JS separados. module.exports se utiliza para exportar funciones y variables desde el módulo, y require('./module') se utiliza para importar el módulo en otro archivo. Módulo fs: Interactúa con el sistema de archivos. Módulo path: Funciona con rutas de archivos y directorios. Fetch: Biblioteca para realizar solicitudes HTTP. EsLint: Herramienta de linting para JavaScript. Jest: Marco de pruebas para JavaScript.

7. Enlaces de aprendizaje

JavaScript

  • Pruebas de compatibilidad en múltiples entornos de ejecución

  • Uso de linter (ESLINT)

  • Uso de identificadores descriptivos (Nomenclatura y Semántica)

Node.js

Control de Versiones (Git y GitHub)

  • 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)

HTTP

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%