UNPKG

ceputils

Version:

**CepUtils** é uma biblioteca Node.js para cálculo de distâncias entre CEPs e obtenção de dados de endereços a partir de CEPs no Brasil. A biblioteca usa a API da AwesomeAPI para obter informações de CEPs e o `geolib` para calcular a distância entre os lo

81 lines (69 loc) 2.6 kB
const axios = require('axios'); const geolib = require('geolib'); /** * Verifica se o CEP é válido. * @param {string} cep - O CEP a ser verificado. * @returns {boolean} - Retorna true se o CEP for válido, false caso contrário. */ async function isValidCep(cep) { try { const response = await axios.get(`https://cep.awesomeapi.com.br/json/${cep}`); if (response.data.status === 400) { // Se a resposta indicar que o CEP é inválido return false; } return true; } catch (error) { return false; // Se a API não conseguir responder, consideramos o CEP inválido } } /** * Busca os dados de um CEP usando a API AwesomeAPI. * @param {string} cep - O CEP no formato 12345678. * @returns {Promise<Object>} - Dados do CEP, incluindo latitude e longitude. */ async function getCepData(cep) { if (!await isValidCep(cep)) { throw new Error('CEP inválido.'); } try { const response = await axios.get(`https://cep.awesomeapi.com.br/json/${cep}`); const { cep: formattedCep, address, district, city, state, lat, lng } = response.data; return { cep: formattedCep, address, district, city, state, latitude: parseFloat(lat), longitude: parseFloat(lng), }; } catch (error) { throw new Error('Erro ao buscar os dados do CEP: ' + error.message); } } /** * Calcula a distância total passando por uma sequência de CEPs. * Recebe os CEPs como entrada e usa a função `getCepData` para obter as informações. * @param {...string} ceps - Vários CEPs no formato de string (ex: '01001000'). * @returns {Promise<number>} - Distância total em quilômetros. */ async function calculateDistance(...ceps) { if (ceps.length < 2) { throw new Error('É necessário informar pelo menos dois CEPs para calcular a distância.'); } let totalDistance = 0; // Coleta os dados de cada CEP e calcula as distâncias for (let i = 0; i < ceps.length - 1; i++) { const cepData1 = await getCepData(ceps[i]); const cepData2 = await getCepData(ceps[i + 1]); const distance = geolib.getDistance( { latitude: cepData1.latitude, longitude: cepData1.longitude }, { latitude: cepData2.latitude, longitude: cepData2.longitude } ); // Somar a distância ao total (convertida para quilômetros) totalDistance += geolib.convertDistance(distance, 'km'); } return totalDistance; } module.exports = { getCepData, calculateDistance };