Coder Social home page Coder Social logo

brasilapi / cep-promise Goto Github PK

View Code? Open in Web Editor NEW
2.9K 82.0 318.0 725 KB

Busca por CEP integrado diretamente aos serviços dos Correios, ViaCEP e outros (Node.js e Browser)

License: MIT License

JavaScript 100.00%
correios cep promise-support nodejs browser javascript zipcode hacktoberfest viacep cep-promise

cep-promise's Introduction

Vamos transformar o Brasil em uma API?

Powered by Vercel

Quality Gate Status Code Smells Maintainability Rating Security Rating Vulnerabilities

Motivo

Acesso programático de informações é algo fundamental na comunicação entre sistemas, mas, para nossa surpresa, uma informação tão útil e pública quanto um CEP não consegue ser acessada diretamente por um navegador por conta da API dos Correios não possuir CORS habilitado.

Dado a isso, este projeto experimental tem como objetivo centralizar e disponibilizar endpoints modernos com baixíssima latência utilizando tecnologias como Vercel Smart CDN responsável por fazer o cache das informações em atualmente 23 regiões distribuídas ao longo do mundo (incluindo Brasil). Então não importa o quão devagar for a fonte dos dados, nós queremos disponibilizá-la da forma mais rápida e moderna possível.

Documentação

Caso deseje saber mais sobre os detalhes das integrações consulte nossa documentação OpenAPI.

Como contribuir

Através do Next.js, um framework utilizado por empresas como Marvel, Twitch, Nike, Hulu, TypeForm, Nubank, Ferrari, TikTok, Square Enix, entre outras, estamos construindo a página de apresentação do projeto e, por ser um framework híbrido, ele possibilita a construção e deploy de APIs com o mínimo de configuração possível em uma infraestrutura autoescalável da Vercel, a mesma que conta com recursos sensacionais como a Vercel Smart CDN.

Caso você esteja lendo esta versão de README, você está pegando o projeto num estágio extremamente inicial, porém empolgante, pois há várias coisas a serem definidas. Então caso queira contribuir, utilize as issues para entender quais pontos ainda não foram resolvidos, conversar conosco e contribuir tanto com idéias técnicas, quanto de quais APIs podem ser criadas.

Veja mais detalhes sobre Como contribuir no arquivo CONTRIBUTING.md

Termos de Uso

O BrasilAPI é uma iniciativa feita de brasileiros para brasileiros, por favor, não abuse deste serviço. Estamos em beta e ainda elaborando os Termos de Uso, mas por enquanto por favor não utilize formas automatizadas para fazer "crawling" dos dados da API. Um exemplo prático disso foi quando um dos maiores provedores de telefonia do Brasil estava validando novamente todos os CEPs (de 00000000 até 99999999) e ultrapassando em cinco vezes o limite atual da nossa conta no servidor. O volume de consultas deve ter a natureza de uma pessoa real requisitando um determinado dado. Para consultas com um alto volume automatizado forneceremos posteriormente alguma solução, como, por exemplo, permitir o download de toda a base de CEPs em uma única requisição.

Pessoas que já contribuíram

📦 Bibliotecas da comunidade

Abaixo segue uma lista de integrações com a BrasilApi fornecidas pela comunidade (muito obrigado a eles!):

Go

JS

Flutter

.Net

PHP

Python

Ruby

Rust

Java

Delphi

V

Autores


@filipedeschamps

@lucianopf

cep-promise's People

Contributors

albertotrindade avatar bearkfear avatar chrisbenseler avatar claytonsilva avatar dominguetigs avatar evaporei avatar filipedeschamps avatar flyingluscas avatar fontebasso avatar ivmarcos avatar jhonnymoreira avatar luanmuniz avatar lucianopf avatar luisguilhermemsalmeida avatar marcoworms avatar mateusosmarin avatar mshlz avatar murilohns avatar olegon avatar pedrro avatar petronetto avatar rafaeljesus avatar rafas avatar riicksouzaa avatar samycici avatar sergiovago avatar thiamsantos avatar vagnercardosoweb avatar wellwelwel avatar z22092 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cep-promise's Issues

Como usar no AngularJS

Prezados, não consegui captar como usar esta excelente biblioteca no AngularJS...

Poderiam explicar?

Tarefas para lapidar

  • Transformar todo código em ES6 (imports e vars)
  • Traduzir todas as mensagens de erro para português
  • Fazer bump dos packages e fixar versão
  • Adicionar mais informações no README sobre erros
  • Calibrar descrição no package.json
  • Adicionar suporte ao browser (dropped)
  • Criar logo
  • Normalizar de Cep para CEP (e consertar o cep não encontrado)
  • Falar que não existe rate limit conhecido

Adicionar guia de contribuição

Olá, é possível que seja feito um guia para contribuição no projeto?

Alguns exemplos de informações que podem ser colocado:

  • Como iniciar o projeto localmente
  • Estrutura do projeto
  • Como abrir PR's
  • Nome dos commit's
  • etc...

Problema entre "npm run build" para o bower e .gitignore

@jhonnymoreira tudo bem?

Fiz o merge e iria fazer o release, mas ao rodar local o npm run build notei duas coisas:

  1. Gerou um diff dos binários finais de distribuição (não sei porque)
  2. Listou arquivos untracked de dist. Pelo que eu entendo, eles deveriam estar no .gitignore, correto? Ou precisam estar commited?

Segue print do git status logo após o npm run build da branch master limpa:

image

isomorphic-unfetch declarado com `^` quebrando abaixo do Node.js 7

Olha que massa, não travar a versão do módulo subitamente começou a criar um memory leak na master que estoura em um teste específico para versões 7 e abaixo do Node, bizarro.

  cep-promise (unit)
    when imported
      ✓ should return a Function
    when invoked
      ✓ should return a Promise
    when invoked without arguments
      ✓ should reject with "validation_error"
    when invoked with an Array
      ✓ should reject with "validation_error"
    when invoked with an Object
      ✓ should reject with "validation_error"
    when invoked with an Function
      ✓ should reject with "validation_error"
    when invoked with a valid "05010000" String
      ✓ should fulfill with correct address
    when invoked with a valid 5010000 Number
      ✓ should fulfill with correct address
    Should succeed only with correios service
      ✓ should fulfill with correct address
    Should succeed only with viacep service
      ✓ should fulfill with correct address
    Should succeed only with cep aberto service
      ✓ should fulfill with correct address
    when its not possible to parse the returned XML and then succeed to one failover service
      ✓ should fulfill with correct address
    when http request to Correios fails and then succeed to the failover service

<--- Last few GCs --->

   99106 ms: Scavenge 1409.9 (1457.0) -> 1409.9 (1457.0) MB, 29.6 / 0 ms (+ 1.6 ms in 1 steps since last GC) [allocation failure] [incremental marking delaying mark-sweep].
  100205 ms: Mark-sweep 1409.9 (1457.0) -> 1409.7 (1457.0) MB, 1098.5 / 0 ms (+ 2.9 ms in 2 steps since start of marking, biggest step 1.6 ms) [last resort gc].
  101363 ms: Mark-sweep 1409.7 (1457.0) -> 1408.8 (1457.0) MB, 1157.7 / 0 ms [last resort gc].


<--- JS stacktrace --->

==== JS stack trace =========================================

Security context: 0x1b0b00d37339 <JS Object>
    1: PromiseReject(aka PromiseReject) [native promise.js:~132] [pc=0x2937db6d2f7] (this=0x1b0b00d04131 <undefined>,n=0xf1e7521d151 <a Promise with map 0x2b328a5c9971>,p=0x3fedb75f6801 <a FetchError with map 0x2b328a5f0f89>)
    2: /* anonymous */(aka /* anonymous */) [native promise.js:~31] [pc=0x2937db597ec] (this=0x1b0b00d04131 <undefined>,p=0x3fedb75f6801 <a FetchError with map 0x2b328a5f0...

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory
[1]    58277 abort      npm run test-unit

Para isolar o erro, voltei para versão 3.0.1 do cep-promise (que usava o isomorphic-fetch) e os testes passavam normalmente. Voltei para versão 3.0.2 e travei no package.json a versão 2.0.0 do isomorphic-unfetch (que agora já está na 2.1.1) e funcionou.

Tentando isolar, logo na versão 2.1.0 do isomorphic-unfetch já quebra, então vamos ter que ficar na 2.0.0 mesmo:

image

Especificação do módulo

Este é para ser um módulo bem simples, mas que falhei em encontrar um no ecosistema do Node.js ou browser que utilize promises, seja coberto de testes e utilize diretamente os serviços dos correios (sem fazer parse do HTML da busca deles).

Acho que para máxima simplicidade ele deve ser uma Factory ao invés de uma Class. Então imagino da interface o seguinte:

let cep = require('cep-promise');

cep('05010000')
  .then(console.log);

// {
//   "zipcode":  "05010000",
//   "state":  "SP",
//   "city":  "São Paulo",
//   "street":  "Rua Caiubí",
//   "neighborhood":  "Perdizes",
// }

Não sei se vale a pena ser strict quanto ao valor enviado como cep, por exemplo, aceitar também coisas como "05010-000" e "05010 000" ou qualquer outro caractere especial. Acho que vale a pena dar esse conforto ao desenvolvedor.

Erro de CORS

POST https://proxier.now.sh/https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente net::ERR_ABORTED 502
add:1 Access to fetch at 'https://proxier.now.sh/https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

Atualizar README com instruções para uso no browser.

O tempo ta corrido então vou deixar aqui a ideia e se sobrar um tempo e ngm tiver feito eu faço 😄

Adicionar informações referentes ao uso da biblioteca nos navegadores no README:

  1. Usando npm install mesmo.
  2. Usando a Unpkg como CDN ou apontando direto pro file https://unpkg.com/[email protected]/dist/cep-promise-browser.min.js ou fazendo a configuração correta (tem que estudar direitinho o 'browser' do package.json pra não conflitar com a config atual. ref)
  3. Criar um package no registry do bower.

Cdnjs tbm é uma opção, mas como tem que criar a issue lá pra eles disponibilizarem acho mais chato de fazer. =/

Integração com google

Apenas uma sugestão de uma terceira opção de busca utilizando o google
Exemplo:

//https://developers.google.com/maps/documentation/javascript/examples/geocoding-reverse
return $http.get('//maps.googleapis.com/maps/api/geocode/json', {
    params: {
        address: '20560160',
        language: 'pt-BR',
        components: 'country:BR',
        location_type: 'ROOFTOP',
        result_type: 'street_address',
        sensor: false
    }
});

Exemplo de retorno do google:

$scope.logradouro = {};
var arrAddress = $item.address_components;
for (var i = 0; i < arrAddress.length; i++) {
    if (arrAddress[i].types[0] === "route") { $scope.logradouro.logradouro = arrAddress[i].long_name }
    if (arrAddress[i].types[0] === "street_number") { $scope.logradouro.numero = arrAddress[i].long_name }
    if (arrAddress[i].types[0] === "sublocality" || (arrAddress[i].types.length > 0 && arrAddress[i].types[1] == "sublocality")) { $scope.logradouro.bairro = arrAddress[i].long_name }
    if (arrAddress[i].types[0] === "locality") { $scope.logradouro.cidade = arrAddress[i].long_name }
    if (arrAddress[i].types[0] === "administrative_area_level_1") { $scope.logradouro.uf = arrAddress[i].short_name }
    if (arrAddress[i].types[0] === "postal_code") { $scope.logradouro.cep = arrAddress[i].long_name; console.log(arrAddress[i]); }
}

Vejam se conseguem usar o openstreetmap tbm, mas achei os parametros meio furados, traz dados diversos... tem que debulhar
//http://wiki.openstreetmap.org/wiki/Nominatim#Parameters

abraços!

Erro ao buscar no CEP Aberto

Ao fazer a busca, ela retorna com sucesso, porém no console é reportado erro por parte do CEP Aberto de CORS. Além de dar 404.

screenshot from 2017-11-25 19-01-15

É no client-side, não cheguei a testar no server-side.

[Off-Topic] CEP Promise PHP

Projeto incrível!

Estávamos precisando de um pacote que fizesse as requisições concorrentemente em nosso backend em PHP, porém não encontramos nada satisfatório. Tomei a liberdade de criar um pacote para PHP inspirado no CEP Promise. A única coisa que ainda não consegui reproduzir foram os mocks das requisições para efetuar os testes de unidade. No mais, preciso dar uma melhorada no README adicionando as instruções de uso.

A quem interessar, aqui está o link do projeto: claudsonm/cep-promise-php.

Refazer o handling de erros

Tive uma conversa com o @chrisenytc que explodiu minha cabeça sobre como fazer o handling de erros utilizando Promises. Como resolver a questão de interpretar de forma centralizada erros de lógica e erros inesperados como ReferenceError e TypeError.

Vou refazer a chain.

Erro ao utilizar no Angular 6

Fiz o npm install e estou utilizando o Angular 6.

Quando vou subir o projeto, já tendo importado o package em um componente eu recebo 2 erros no console.

screen shot 2018-06-08 at 12 27 26

Exceção na importação do cep-promise angular2

Olá, não estou conseguindo fazer a importação do cep-promise na minha aplicação angular2

Estou adicionando o seguinte trecho: import { default as cep } from 'cep-promise';

e quando inicio a aplicação o console me retorna:

Module ''cep-promise'' has no exported member 'default'.

Alguém já passou por isso ?

FETCH não retorna dados

Boa tarde. Hoje o viacep estava fora do ar, e acabei encontrando esse projeto. Gostei bastante da ideia. Meu projeto é em Angular2.

O problema é que toda requisição feita para os correios dá erro. Mesmo retornando dados (possível de ser visualizado no dev-tools). Aparentemente, o problema é que a requisição fetch feita com "mode: no-cors", retorna uma resposta com ok = false e type = opaque, sem header, sem body, sem nada..

O que eu posso fazer para resolver isso?

Cep is not a function no Angular 5

Primeiramente parabéns pelo projeto.

Ao utilizar com Angular 5, após a instalação via npm:

Utilização:
import * as cepFunction from 'cep-promise'

cepFunction('18110-210').then(console.log);

ERRO:
ERROR TypeError: cepFunction is not a function

DevDependencies desatualizadas

Rodar npm outdated na cli, dá o seguinte output:

screenshot from 2016-12-08 13-20-07

muitas dependências estão desatualizadas.
Não seria uma boa dar um update nelas?

Normalizar as interfaces de erro

Agora que temos múltiplos fornecedores desenvolvido pelo @lucianopf para versão 2.0 precisamos normalizar a interface de erro.

Hoje ela está alternando entre um objeto e um array:

cep().catch(console.log)

{ type: 'type_error',
  message: 'Você deve chamar o construtor utilizando uma String ou Number',
  service: undefined }
cep('99999999').catch(console.log)

[ { type: 'range_error',
    message: 'CEP inválido',
    service: 'viacep' },
  { type: 'range_error',
    message: 'CEP não encontrado na base dos Correios',
    service: 'correios' } ]

Fora isso, fica aberta a pauta: qual a melhor interface de erro para minha aplicação tratar? Por exemplo:

  1. Um array de objetos dos erros
  2. Um objeto em que a chave é o serviço e o valor é o erro (e quando for erro por validation colocar o service algo como library
  3. Um objeto onde o type é a chave
  4. Um objeto que possui uma chave errors e dentro dela um array de erros
  5. ?

Muitos erros no console.

Quando uma requisição retorna falha de algum dos serviços, o console fica cheio de erros.

image

O catch tá pegando legal e só está sendo chamado quando todos estão com erro, conforme previsto. Só gostaria de deixar o console limpo, visto que não é muito profissional colocar em produção um produto cheio de erros aparecendo pro usuário.

Poderia ter uma opção para desabilitar esses logs em produção?

Criação de um "gh-pages" para o projeto

Essa dúvida do Angular aí me despertou a curiosidade caso não seria bom a gnt ter uma página dedicada à documentação (que é muito simples) pro projeto.

1 - Adicionar uma página estática cheia dos paranauê dos desginers.
2 - Incluir o cep-promise na window pra ficar disponível pra usar tanto na página quanto livremente no console.
3 - Adicionar uns demos no corpo da página.

E aí, bora abrir o desafio nos slacks das galeras? 🤔

Mocha e Promises

Faz um bom tempo que não utilizo mocha+chai+promises, imagino que muita coisa mudou.

Alguém recomenda a melhor forma atual de abordar esse cenário?

CepPromiseError: CepAbertoService is not a function

at throwApplicationError (C:\Users\felip\Downloads\cep-promise-master\src\cep-promise.js:84:9)
at
at process._tickCallback (internal/process/next_tick.js:189:7)
at Function.Module.runMain (module.js:696:11)
at startup (bootstrap_node.js:204:16)
at bootstrap_node.js:625:3
name: 'CepPromiseError',
message: 'CepAbertoService is not a function',
type: undefined,
errors: undefined }
undefined

Sou muito leigo em Nodejs, java e etc tentei de tudo e procurei em tudo que é lugar não achei solução.

Checar se existe item no array

Filipe,

na função "extractValuesFromParsedXML" tem trechos assim, para definir aquele objeto "addressObject":

neighborhood: addressValues['bairro'][0]

não cheguei a ver o xml de retorno dos correios, mas é garantido que sempre vai ter um array com pelo menos um elemento para todas chaves de addressValues? Não seria mais seguro fazer uma checagem?
Algo como

neighborhood: addressValues['bairro'] && addressValues['bairro'].length > 0 ? addressValues['bairro'][0] : "" //ou null

?

*ou ainda uma checagem mais profunda se o addressValues['chave'] é um array, como discutida por exemplo aqui: http://stackoverflow.com/questions/5941706/javascript-detect-if-argument-is-array-instead-of-object-node-js

Não quero fazer um PR se essa for uma feature que não fará sentido (no caso, se o xml sempre retornar um array)

Importar em projeto Angular 2

@filipedeschamps estou brincando com Angular 2 pensei usar o cep-promise num teste.

Existe uma forma de dar um import nele?
import cep from 'cep-promise'
não funciona, diz que não existe o módulo. Testei, meio que no chute, com
import cep from 'cep-promise/dist/cep-promise'
mas não rola também.

Agora, usando um require, funciona normalmente. Exemplo:

let cep = require('cep-promise/dist/cep-promise');
...
export class SearchComponent implements OnInit {
  ngOnInit() {
  	cep('04477-100')
  	.then( data => {
  		console.log(data)
  	})
  }
}

Eu nem sei se isso é uma issue na real, se tem alguma coisa a ver com o TypeScript, se é algo relacionado com o babelify.

CORS (de novo) - Preflight: Redirect is not allowed for a preflight request.

Olá, estou tendo um problema dificil de debugar. Utilizava Webpack, porém, o mesmo acontece incorporando o script do cdn mencionado na documentação. Em todos as chamadas cep() que faço, recebo um erro de cors preflight...

Mensagens de erro no console:

Access to fetch at 'https://proxier.now.sh/https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente' from origin 'http://meusitelocal.com.br' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.

Access to fetch at 'https://proxier.now.sh/https://viacep.com.br/ws/14940000/json/' from origin 'http://meusitelocal.com.br' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.

Uncaught (in promise) CepPromiseError: Todos os serviços de CEP retornaram erro.
    at new r (https://cdn.jsdelivr.net/npm/cep-promise/dist/cep-promise.min.js:1:4716)
    at P (https://cdn.jsdelivr.net/npm/cep-promise/dist/cep-promise.min.js:1:3546)

Aba Network:

Screenshot from 2019-11-30 09-29-59

Todos os requests possuem o status 308. Não entendo pois o proxy veio para resolver o problema de CORS, como pode ser que isso acontece?

Observe o header 'location' do status 308 do ViaCep... não sei se significa algo.
Screenshot from 2019-11-30 09-38-53

Obrigado desde já pela ajuda.

React Native - problemas no módulo xml2js.js

Olá,

Estou tentando usar essa API em projeto, porém está ocorrendo o seguinte erro:

Unable to resolve module events from ../node_modules/xml2js/lib/xml2js.js`: module does not exist in the module map

Ações que já tentei:

  • Instalei o módulo xml2js via npm i --save xml2js
    -> o arquivo xml2js.js está na pasta lib
  • Limpei o cache do projeto
  • Deletei a pasta node_modules e rodei npm install
  • Limpei o watchaman -> watchman watch-del-all

Nada funcionou.

Alguém sabe o que está acontecendo e como resolver?

Muito obrigado.

Ambiente:
projeto react native com node.js rodando dentro do Expo.io
macbook com emuladores android e ios e smartphones reais

Dúvidas e Sugestões (2018)

Este código esta funcionando em PHP 5, 5.6, 7.0, 7.1 ou até mesmo em 7.2 ?
São muitas dúvidas e nada pessoal... (Já deixo claro)
Este código esta nas normativas novas dos correios (2017) e que pelo visto já existe novas normativas em (2018)...
Bom, este não é o único que visualizamos que aparentemente esta tudo correto.
Mas, tenho que ser este USUÁRIO questionador, já que estamos enfrentando tantos problemas seja eles em PHP, AJAX ou qualquer impulso anterior á 2017.
E assim vem as dúvidas...

Gostaria de saber se podemos implementar este código em outras ferramentas e até mesmo em outas plataformas...

Espero que tenhamos uma resposta satisfatória e um UPGRADE. (O que neste notamos que o upgrade é notavel).

Código IBGE

Verifiquei que o código IBGE vem na resposta do serviço. Ele é útil se você quiser cravar no município, algum motivo pelo qual ele não está sendo populado?

Posso fornecer um PR com a inclusão dele.

Corrigir descrições nos testes

Após a mudança do modelo de fallback para concorrência, houve a necessidade de refatorar os testes de forma que cobrisse a nova funcionalidade.

Erro ao buscar CEP - CORS

Olá!
Estou tendo um problema com CORS ao importar o package e transpilar com Webpack para um bundle. Pois dessa forma, ao utiliza-lo no browser não está adicionando o PROXY para evitar isso.
Encontrei a Issue #98 e a solução dela falava de importar uma versão específica para browser porém ela não existe mais.
Existe alguma solução mais nova?

Versão 3.03

Método cep não pode ser resolvido

Estou enfrentando problemas quando chamo a função cep() no angular. Peço desculpas pela ignorância de não ter conseguido resolver, sou novo no mundo do NodeJs e NPM.
O erro retornado é o seguinte:
ERROR TypeError: cep_promise_1.default is not a function

Estou usando as seguintes versões:
Angular CLI: 1.6.1 Node: 8.9.3 Angular: 4.4.6 cep-promise: 2.0.6

Quando crio um novo app e instalo o cep-promisse, tudo funciona normalmente.
Mas no projeto atual ele funcionava normalmente a meses, até eu rodar o npm install, ontem, desde então não funciona mais.

Estou importando o cep-primise da seguinte forma:
import {default as cep} from 'cep-promise';

Abri os fontes do arquivo dist/cep-promisse.js e alterei a linha 99 da seguinte forma:
module.exports = exports['default'];
Alterei para
module.exports = exports;

Desde então tudo voltou a funcionar normalmente.
Creio que o problema esteja no arquivo de módulo index.d.ts, na declaração da exportação do método cep. Tentei alterar essa declaração, mas nenhuma das alterações resolveu o problema.
Suspeito que seja um problema causado por versão de dependência do cep-promise, não dos fontes dele. Mas todos os pacotes que o cep-promise depende estão instalados com suas versões mínimas suportadas.

Alguem teria uma orientação de como resolver isso sem precisar alterar os fontes do componente?

Atualizar o README.md

Como sabemos, a documentação de um projeto é uma das partes mais importantes, então segue um modelo básico (incompleto) de um arquivo README.md para descrever o projeto :)


cep-promise

Coverage Status

Busca por CEP integrado ao banco de dados dos Correios - Node.js e Browser

Installation

# via npm
$ npm install cep-promise

# via github
$ git clone https://github.com/filipedeschamps/cep-promise.git

Usage

Setup

$ cd cep-promise
$ npm install

Contributing

  1. Fork it ( https://github.com/filipedeschamps/cep-promise/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Acredito que seria legal adicionar também o tipo de licença e um gif de exemplo (de uso) no terminal o/

O que você acha @filipedeschamps?

Setar um objeto promise de sua escolha

Olá, estava dando uma olhada no código e notei que o módulo está usando o bluebird como o fornecedor do objeto Promise. Bom, em meu projeto NodeJS estou usando ES6 (sem usar qualquer transpiler) e assim, estou usando Promise nativa do javascript.

Gostaria de saber se há ou haverá alguma forma de setar esse objeto Promise, ao invés de forçar o uso de um específico (nesse caso o bluebird).

Essa possibilidade já existe no Mongoose, onde podemos setar um objeto promise:

mongoose.Promise = Promise; // Promise do js

Muito bom esse módulo, parabéns!

Erros não estão sendo mostrados

Testei aqui o mesmo exemplo do readme e não mostrou o erro, será que é só comigo? LOL

cep('99999999')
  .catch(console.log);
(cep-promise)  (git:(master) )  node dist/index.js
(cep-promise)  (git:(master) )  

Alterar a interface pública de Object para Error

Uma boa library expõe erros de forma pública com a instância de um Error ou de um custom Error, pois há alguns benefícios interessantes nisto, como por exemplo, ter o call stack exposto.

Vou tentar arranjar um tempinho ao longo desta semana para trocar todos os erros e testes de um Object para um Error e aproveitar a versão 2.0.

Erro ao inicializar

Ao tentar utilizar a lib com React tenho o seguinte erro .

image

meu código e o seguinte

import cepPromise from 'cep-promise'

cepPromise(value).then(res => console.log(res))

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.