Testando o código após sua finalização de acordo com as aulas, notei que existe um bug. A execução exibe um erro quando passamos um arquivo que não contém links (ou um diretório que tenha um arquivo sem links) e a opção 'valida'.
Quando executamos o cli.js passando um arquivo sem links, a função processaTexto passa o caminho do arquivo como argumento para pegaArquivo(), que por sua vez passa o conteúdo (texto) do arquivo como argumento para extraiLinks() (em 'index.js'; existe outra função com o mesmo nome em 'http-validacao.js'). Se não há links no arquivo, extraiLinks() retorna a string 'Não há links neste arquivo' para pegaArquivo, que por sua vez devolve a mesma string para processaTexto().
Na sequência, processaTexto() passa essa string como argumento para imprimeLinks(). Quando a opção 'valida' não é informada no comando, essa string é exibida no console, conforme o esperado, informando que não há links naquele arquivo. Isso funciona tanto quando informamos um arquivo sem links quanto quando informamos um diretório que contenha um arquivo sem links.
Porém, se é passada a opção 'valida' no comando inicial, ao chegar em imprimeLinks(), essa função passa a string 'Não há links neste arquivo' como argumento para listaValidada(), que então repassa essa mesma string como argumento de extraiLinks() (dessa vez em 'http-validacao.js'). É aí que ocorre o problema, pois a função extrai links tenta executar o método map() na string, disparando um erro (já que map() é um método de arrays que não funciona para strings). Essa situação ocorre tanto no caso em que é passado inicialmente um arquivo quanto no caso de um diretório (desde que, reforçando, o arquivo não contenha links, ou o diretório contenha pelo menos um arquivo sem links).
Para tratar essa situação, eu adicionei uma verificação na função imprimeLinks(), que ficou assim:
async function imprimeLinks(valida, resultado, identificador = ''){
//O código só irá entrar na etapa de validação se a opção 'valida' foi informada
//no terminal E o argumento passado por processaTexto() for um array
if (valida && Array.isArray(resultado)){
console.log(chalk.yellow('Lista validada'), chalk.black.bgGreen(identificador), await listaValidada(resultado));
//Dessa forma, quando chegar uma string como argumento, essa string é o que será exibido no console
} else{
console.log(chalk.yellow('Lista de links'), chalk.black.bgGreen(identificador), resultado);
}
};
Dessa forma, quando imprimeLinks() recebe de processaTexto() uma string em vez de um array, ela não entra na parte de validação dos links e exibe no console a string 'Não há links neste arquivo', como se a opção 'valida' não tivesse sido informada.