1
resposta

Projeto Final

Alguém poderia me ajudar a fazer essa biblioteca rodar ? o curso inteiro me deparei com erros de versionamento e da metade pra frente não consegui mais rodar nenhuma vez, esperei chegar no final para pegar o projeto finalizado, copiar, mas mesmo assim não roda. Poderiam verificar as possíveis alterações para a biblioteca funcionar ?

Percebi também que o readdir e path saiu do projeto final.

index.js

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

import chalk from 'chalk';
import fs from 'fs';
import path from 'path';


function extraiLinks(texto){
    const regex = /\[([^\]]*)\]\((https?:\/\/[^$#\s].[^\s]*)\)/gm;
    const arrayResultados = [];
    let temp;
    while ((temp = regex.exec(texto)) !== null){
        arrayResultados.push({[temp[1]]: temp[2]})
    }
    return arrayResultados.length === 0 ? 'não há links' : arrayResultados;
}

function trataErro(erro){
    throw new Error(chalk.red(erro.code, 'não há arquivo no caminho'));
}

export default async function pegaArquivo(caminhoDoArquivo) {
    const encoding = 'utf-8';
    try {
      const texto = await fs.promises.readFile(caminhoDoArquivo, encoding)
      return extraiLinks(texto);
    } catch(erro) {
      trataErro(erro);
    }
}

http-validacao.js

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args));

function manejaErros(erro) {
    throw new Error(erro.message);
  }

  async function checaStatus(arrayURLs) {
    try {
      const arrayStatus = await Promise
        .all(arrayURLs
          .map(async url => {
            const res = await fetch(url)
            return res.status;
      }))
      return arrayStatus;
    } catch(erro) {
      manejaErros(erro);
    }
  }

  function geraArrayDeURLs(arrayLinks) {
    return arrayLinks
      .map(objetoLink => Object
        .values(objetoLink).join());
  }

  async function validaURLs(arrayLinks) {
    const links = geraArrayDeURLs(arrayLinks);
    const statusLinks = await checaStatus(links);

    const resultados = arrayLinks.map((objeto, indice) => ({
      ...objeto,
      status: statusLinks[indice]
    }))
    return resultados;
  }

export default validaURLs

cli.js

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

import chalk from 'chalk';
import pegaArquivo from './index.js';
import validaURLs from './http-validacao.js';


const caminho = process.argv;

async function processaTexto(caminhoDeArquivo){
    const resultado = await pegaArquivo(caminhoDeArquivo[2]);
    if(caminho[3] === 'validar') {
        console.log(chalk.yellow('links validados'), await validaURLs(resultado));
    } else{
        console.log(chalk.yellow('lista de links'), resultado);
    }
}

processaTexto(caminho);

index.test.js

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

import pegaArquivo from './index.js';

const arrayResult = [
    {
      FileList: 'https://developer.mozilla.org/pt-BR/docs/Web/API/FileList'
    }
  ]

  describe('pegaArquivo::', () => {
    it('deve ser uma função', () => {
      expect(typeof pegaArquivo).toBe('function');
    })
    it('deve retornar array com resultados', async () => {
      const resultado = await pegaArquivo('/home/juliana/Documents/alura/lib-markdown/test/arquivos/texto1.md') 
      expect(resultado).toEqual(arrayResult)
    })
    it('deve retornar mensagem "não há links"', async () => {
      const resultado = await pegaArquivo('/home/juliana/Documents/alura/lib-markdown/test/arquivos/texto1_semlinks.md')
      expect(resultado).toBe('não há links');
    })
    it('deve lançar um erro na falta de arquivo', () => {
      async function capturaErro() {
        await pegaArquivo('/home/juliana/Documents/alura/lib-markdown/test/arquivos')
        expect(capturaErro).toThrowError(/não há arquivo no caminho/)
      }
    })
  })

Eu gostaria que vocês me dessem uma resposta revisando a biblioteca, para mim isso é muito importante

1 resposta

Olá, Caio! Tudo bem?

Desculpa a demora por um retorno.

Parabéns pelo empenho em curso e o desenvolvimento do projeto!

Ao analisar o código, notei que as importações dos módulos readdir e path não estão sendo utilizadas nos arquivos fornecidos. Portanto, você pode removê-las sem problemas.

Além disso, percebi que a função trataErro está lançando um erro, mas não está sendo capturada em nenhum lugar. Sugiro que você utilize um try/catch ao chamar a função pegaArquivo no arquivo cli.js, para que seja possível tratar esse erro adequadamente.

No arquivo http-validacao.js, a função manejaErros está lançando um erro, mas também não está sendo capturada em nenhum lugar. Recomendo que você utilize um try/catch ao chamar a função checaStatus no mesmo arquivo, para tratar possíveis erros.

Outra sugestão é adicionar comentários explicativos ao código, para facilitar o entendimento e a manutenção futura.

Caso ainda encontre algum problema, fique à vontade para me perguntar.

Espero ter ajudado e bons estudos!

Caso este post tenha te ajudado, por favor, marcar como solucionado ✓