Executando verificação de segurança...
5

[PITCH] AUTOCOMPLETE CEP

Hoje finalizei um projeto que tem a finalidade de completar automaticamente o endereço fornecendo apenas o CEP, o objetivo foi para melhorar minhas habilidades em typescript e consumo de api, apesar de simples, deixei open-source para quem tiver o interesse em usar em seus e projetos e modificar da forma que quiser.
Link: https://autocomplete-cep.vercel.app
GitHub: https://github.com/Luizboaventura1/autocomplete-cep

A classe que faz a busca do cep:

/src/services/CEPService.ts

import ICEPService from "../types/ICEPService";
import type Address from "../types/Address";

class CEPService extends ICEPService {
  async getAddress(cep: string | number): Promise<Address | string> {
    try {
      if (!ICEPService.isValidCEP(cep)) {
        throw new Error("Invalid CEP format");
      }

      const response = await fetch(`${this.baseURL}/${cep}/json`);

      if (!response.ok) {
        throw new Error("Invalid CEP");
      }

      const addressData = await response.json();

      return {
        zipcode: addressData.cep,
        street: addressData.logradouro,
        complement: addressData.complemento,
        unit: addressData.unidade,
        neighborhood: addressData.bairro,
        city: addressData.localidade,
        stateAbbreviation: addressData.uf,
        state: addressData.uf,
        region: addressData.regiao,
        ibge: addressData.ibge,
        gia: addressData.gia,
        areaCode: addressData.ddd,
        siafi: addressData.siafi,
      };
    } catch (error: unknown) {
      if (error instanceof Error) {
        return error.message;
      }
      return "An unknown error occurred";
    }
  }
}

const cepService = new CEPService();
export default cepService;

A classe abstrata que define o tipo da subclasse

/src/types/ICEPService.ts

import type Address from "./Address";

export default abstract class ICEPService {
  protected readonly baseURL = "https://viacep.com.br/ws"

  abstract getAddress(cep: string | number): Promise<Address | string>;

  static isValidCEP(cep: string | number): boolean {
    const cepPattern = /^\d{5}-?\d{3}$/;
    return cepPattern.test(String(cep));
  }
}
Carregando publicação patrocinada...
1

Maneiro, teve algum motivo especifico para você não usar o https://brasilapi.com.br/docs#tag/CEP-V2 ? Vi que voce usou direto o viacep, acredito que usando o brasil API tu vai ter uma garantia maior uma vez que la dentro ele usa os fallbacks ou até mesmo buscar em providers especificos.

Ahh coloca no titulo o "[PITCH]" que ai ele vai aparecer la no tabpitches.com.br

1