UNPKG

jbf-md-links

Version:

Esta librería permite analizar enlaces contenidos en archivos Markdown. Puedes utilizarla tanto en formato de línea de comandos (CLI) o instalarla como un módulo desde GitHub.

72 lines (63 loc) 2.7 kB
const fs = require('fs/promises'); const path = require('path'); const { linkExtractor, linkValidator, validMarkdownFile, calculateStats, } = require('./src/fileUtils'); function mdLinks(filePath, options = { validate: false, stats: false }) {//Usaremos un objeto options para mantener una estructura de datos mas clara const absolutePath = path.resolve(filePath);//Esta linea convierte la ruta a absoluta con el metodo path.resolve para que pueda funcionar en todos los modulos de manera futura. return new Promise((resolve, reject) => {//Creamos una promesa que resuelva la lectura del archivo y que extraiga los enlaces contenidos fs.readFile(absolutePath, 'utf-8')//Utilizamos el metodo readFile para leer el contenido de los archivos. .then((content) => { if (!validMarkdownFile(absolutePath)) { // Si no es válido, rechazamos la promesa con un error. reject(new Error('El archivo no tiene un formato Markdown valido')); return; } const links = linkExtractor(content);//Extraemos los enlaces dentro del contenido del archivo md con nuestra funcion importada de linkExtractor. if (options.validate && options.stats) { // Validación y estadísticas const linkValidationPromises = links.map((link) => linkValidator(link)); Promise.all(linkValidationPromises) .then((validatedLinks) => { const stats = calculateStats(validatedLinks); resolve(stats); }) .catch((validationError) => { reject(validationError); }); } else if (options.validate) { // Solo validación const linkValidationPromises = links.map((link) => linkValidator(link)); Promise.all(linkValidationPromises) .then((validatedLinks) => { resolve(validatedLinks); }) .catch((validationError) => { reject(validationError); }); } else if (options.stats) { // Solo estadísticas const stats = calculateStats(links); resolve(stats); } else { // Sin validación ni estadísticas resolve(links.map((link) => ({ href: link.href, text: link.text, file: absolutePath, }))); } }) .catch((error) => { if (error.code === 'ENOENT') { reject(new Error('La ruta del archivo es incorrecta o no existe.')); } else { reject(error); } }); }); } module.exports = mdLinks;