KarlaMacedo / md-links

Proyecto 5 - En este proyecto el usuario puede encontrar una librería disponible en npm con la cual puede buscar archivos .md, buscar links que se encuentren dentro de éstos, validarlos por HTTP request y obtener estadísticas sobre éstos.
https://www.npmjs.com/package/karlamacedo-md-links
1 stars 0 forks source link

Recorrer el arreglo de .md y buscar links dentro de cada archivo #37

Closed KarlaMacedo closed 1 year ago

KarlaMacedo commented 1 year ago

Para buscar links dentro de archivos Markdown (.md), puedes utilizar expresiones regulares para buscar patrones que se asemejen a la sintaxis de un enlace. Aquí tienes un ejemplo de cómo podrías hacerlo:

function searchLinksInFile(filePath) {
  try {
    const fileContent = fs.readFileSync(filePath, 'utf8');
    const linkRegex = /\[.*?\]\((.*?)\)/g;
    const links = [];

    let match;
    while ((match = linkRegex.exec(fileContent))) {
      links.push(match[1]);
    }

    return links;
  } catch (err) {
    console.error('Error al leer el archivo:', err);
    return [];
  }
}

function searchLinksInDirectory(directory) {
  try {
    const files = fs.readdirSync(directory);
    const links = [];

    files.forEach((file) => {
      const filePath = path.join(directory, file);

      const fileStats = fs.statSync(filePath);
      if (fileStats.isFile()) {
        const fileLinks = searchLinksInFile(filePath);
        links.push(...fileLinks);
      } else if (fileStats.isDirectory()) {
        const directoryLinks = searchLinksInDirectory(filePath);
        links.push(...directoryLinks);
      }
    });

    return links;
  } catch (err) {
    console.error('Error al leer la carpeta:', err);
    return [];
  }
}

En este código, hemos agregado dos funciones: searchLinksInFile y searchLinksInDirectory. La primera se encarga de buscar links dentro de un archivo específico, utilizando una expresión regular para encontrar coincidencias con la sintaxis de un enlace Markdown. La segunda función busca links en todos los archivos dentro de un directorio, de forma recursiva.

Al ejecutar el código, se buscarán los links en todos los archivos dentro del directorio especificado (mainDirectory), y se mostrarán por consola los links encontrados.

Recuerda adaptar el código según tus necesidades y estructura de archivos.

KarlaMacedo commented 1 year ago

.

KarlaMacedo commented 1 year ago

Para crear una promesa en JavaScript, puedes utilizar la clase Promise. La clase Promise acepta una función llamada executor como argumento, que a su vez tiene dos parámetros: resolve y reject.

const miPromesa = new Promise((resolve, reject) => {
  // Lógica de la promesa

  // Si la operación se completa con éxito, llama a resolve con el resultado
  resolve('Operación completada');

  // Si hay un error, llama a reject con el motivo del error
  // reject('Ocurrió un error');
});

En el ejemplo anterior, la promesa miPromesa se crea con un executor que tiene dos funciones, resolve y reject. Dentro de la lógica de la promesa, puedes realizar cualquier operación asíncrona, como una solicitud HTTP, una lectura de archivo, una consulta a una base de datos, entre otros.

Si la operación se completa con éxito, llamas a resolve y pasas el resultado deseado. Si ocurre un error, llamas a reject y pasas el motivo del error.

Una vez que tienes la promesa creada, puedes encadenar métodos como .then() y .catch() para manejar el resultado o el error de la promesa.

miPromesa
  .then((resultado) => {
    console.log('Éxito:', resultado);
  })
  .catch((error) => {
    console.error('Error:', error);
  });

En este ejemplo, el método .then() se ejecutará cuando la promesa se resuelva con éxito, y el método .catch() se ejecutará si ocurre un error durante la ejecución de la promesa.

Recuerda que dentro de la función del executor puedes realizar operaciones asíncronas, como llamadas a API, lecturas de archivos, consultas a bases de datos, y cuando estas operaciones se completen, debes llamar a resolve o reject para indicar el resultado de la promesa.

KarlaMacedo commented 1 year ago

En JavaScript, cuando necesitamos ejecutar múltiples tareas asincrónicas al mismo tiempo y esperar a que todas se completen, podemos utilizar el patrón de "array de promesas". Un array de promesas es simplemente un array que contiene múltiples promesas que representan tareas asincrónicas.

La función Promise.all nos permite trabajar con este array de promesas. Toma un array de promesas como argumento y devuelve una nueva promesa que se resuelve cuando todas las promesas del array se han resuelto o se rechaza si alguna de las promesas se rechaza.