Projeto de uma biblioteca, feito durante curso sobre node.js da Alura, que percorre arquivos .md procurando por links para validação. A biblioteca verifica se os links são validos a partir de seu HTTP status code.
- Recuperar links em arquivos
- Recuperar links em arquivos de uma pasta
- Tratamento de arquivo sem nenhum link
- Tratamento de erros (verificar se pasta ou arquivo existe)
- Verificar HTTP status code dos links encontrados no(s) arquivo(s)
npm install
- Executando todos os arquivos de uma pasta
npm run cli ./arquivos/
- Executando um arquivo
npm run cli ./arquivos/texto.md
- Validando os links do arquivo
npm run cli:valida
npm init
npm install <nome do pacote>
node index.js
"type": "module",
export default pegaArquivo;
import pegaArquivo from "./index.js";
arrLinks.map((objetoLink) => Object.values(objetoLink).join());
A função fetch só funciona apartir da versão 18.0.0. Para versões anteriores é preciso intalar uma biblioteca externa.
Exemplo de uso:
const res = await fetch('https://api.belo.app/public/price');
if (res.ok) {
const data = await res.json();
console.log(data);
}
Biblioteca usada para formatar textos no terminal.
npm install chalk
npm install chalk@5.0.1 --save-exact
Definindo a cor do texto como azul.
import chalk from 'chalk';
console.log(chalk.blue('Hello world!'));
Biblioteca para trabalhar com arquivos.
Exemplo: (lançando um erro)
throw new Error(chalk.red(erro.code, 'Não há arquivo no diretório'));
Exemplo:
function pegaArquivo(caminhoDoArquivo) {
const enconding = 'utf-8';
fs.promises.readFile(caminhoDoArquivo, enconding)
.then((texto) => console.log(chalk.green(texto)))
.catch(trataErro);
}
A função then espera receber um texto e caso ocorra algum erro, a função catch será executada chamando a função trataErro passando o parametro de erro automaticamente.
Exemplo:
async function pegaArquivo(caminhoDoArquivo) {
try {
const enconding = 'utf-8';
const texto = await fs.promises.readFile(caminhoDoArquivo, enconding);
console.log(chalk.green(texto));
} catch (erro) {
trataErro(erro);
}
}
async significa que a função será assincrona e await deve ser colocado na frente da função que deve esperar a resolução de uma promessa.
Exemplos:
Exatamento 'abc':
abc
Todas as ocorrencias dos caracteres a, b e c:
[abc]
Todas as ocorrencias que não sejam os caracteres a, b, ou c:
[^abc]
Espaços em branco:
[\s]
Qualquer caractere: (equivalente a [a-zA-Z0-9_])
[\w]
N vezes:
[\w]*?
Para separar em grupos utilize ()
gm significa global multilinha
Exemplo 1: Retornando todas as ocorrências
const regex = /\[([^[\]]*?)\]\((https?:\/\/[^\s?#.].[^\s]*)\)/gm;
const capturas = texto.match(regex);
console.log(capturas);
Exemplo 2: Retornando primeira ocorrência separando os grupos
const regex = /\[([^[\]]*?)\]\((https?:\/\/[^\s?#.].[^\s]*)\)/gm;
const capturas = texto.match(regex);
console.log(capturas);
Exemplo 3: Retornando um array de ocorrências
const regex = /\[([^[\]]*?)\]\((https?:\/\/[^\s?#.].[^\s]*)\)/gm;
const capturas = [...texto.matchAll(regex)];
console.log(capturas);
... (spread operator) expandem o array