Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

arrayURLs.map is not a function (Resolvido)

Na aula 5, atividade 5, copiei exatamente como estava no video, mas quando fui rodar o arquivo cli.js aparece essa mensagem dizendo "arrayURLs.map is not a function"

o index.js esta assim:

import chalk from 'chalk';
import * as fs from "fs";

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 ? 'Nao ha links' : arrayResultados;
}

function trataErro(erro) {
    throw new Error(chalk.red(erro.code, 'nao ha arquivo no caminho'));
}

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

export default pegaArquivo;

o cli.js esta assim:

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);

e por fim o http-validacao.js esta assim:

import fetch from "node-fetch";

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

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

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

export default validaURLs;
1 resposta
solução!

descobri, na linha "return arrayLinks.map(objetoLink => Object.values(objetoLink)).join();" do arquivo http-validacao.js tem um parêntese no lugar errado, a linha deveria ser assim: "return arrayLinks.map(objetoLink => Object.values(objetoLink).join());"