No capítulo passado, houve uma atividade de refatoração da função pegaArquivo(), onde ela agora pega todos os arquivos de um diretório, como mostrado a seguir:
async function pegaArquivos(caminho) {
const caminhoAbsoluto = path.join("__dirname", '..', caminho);
const encoding = 'utf-8';
try {
const arquivos = await fs.promises.readdir(caminhoAbsoluto, { encoding });
const result = await Promise.all(arquivos.map(async (arquivo) => {
const localArquivo = `${caminhoAbsoluto}/${arquivo}`;
const texto = await fs.promises.readFile(localArquivo, encoding);
return extraiLinks(texto);
}));
return result;
} catch (erro) {
return trataErro(erro);
}
}
Obs: O package.json também foi alterado para:
"cli": "node cli.js ./arquivos/"
No entanto, não é possível utilizar a função validaURLs da forma que ela está, pois o resultado da função pegaArquivos é um array de arrays. Eu consegui contornar este problema da seguinte forma:
function geraArrayURLs(arrayLinks) {
let atual = 0;
let arrayResultado = []
while (atual < arrayLinks.length) {
let arrayAtual = arrayLinks[atual];
arrayResultado.push(arrayAtual.map(objetoLink => Object.values(objetoLink).join()));
atual++
}
return arrayResultado
}
Eu criei um segundo arquivo chamado texto2.md na pasta arquivos contendo [Google](http://www.google.com)\ e então executei o comando npm run cli validar, e o resultado disso tudo fica:
links validados [
[
[ 'https://developer.mozilla.org/pt-BR/docs/Web/API/FileList' ],
[
'https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element/Input'
],
[ 'https://developer.mozilla.org/pt-BR/docs/Web/API/DataTransfer' ],
[
'https://developer.mozilla.org/pt-BR/docs/Web/API/HTMLCanvasElement'
],
[
'https://developer.mozilla.org/pt-BR/docs/Web/API/File#implementation_notes'
]
],
[ [ 'http://www.google.com' ] ]
]
Como eu faço para unir os dois arrays dentro de um só?