diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..1b9cd83 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,18 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Launch Program", + "runtimeVersion": "20", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}/dist/cep-promise.min.js" + } + ] +} \ No newline at end of file diff --git a/dist/cep-promise-browser.js b/dist/cep-promise-browser.js index e9ec1c6..c033650 100644 --- a/dist/cep-promise-browser.js +++ b/dist/cep-promise-browser.js @@ -4,33 +4,73 @@ (global = global || self, global.cep = factory()); }(this, (function () { 'use strict'; - function _typeof(obj) { - "@babel/helpers - typeof"; - - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; + function _callSuper(t, o, e) { + return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); + } + function _construct(t, e, r) { + if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); + var o = [null]; + o.push.apply(o, e); + var p = new (t.bind.apply(t, o))(); + return r && _setPrototypeOf(p, r.prototype), p; + } + function _isNativeReflectConstruct() { + try { + var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); + } catch (t) {} + return (_isNativeReflectConstruct = function () { + return !!t; + })(); + } + function _toPrimitive(t, r) { + if ("object" != typeof t || !t) return t; + var e = t[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t, r || "default"); + if ("object" != typeof i) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); } - - return _typeof(obj); + return ("string" === r ? String : Number)(t); } + function _toPropertyKey(t) { + var i = _toPrimitive(t, "string"); + return "symbol" == typeof i ? i : String(i); + } + function _typeof(o) { + "@babel/helpers - typeof"; + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { + return typeof o; + } : function (o) { + return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; + }, _typeof(o); + } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } - subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, @@ -38,79 +78,45 @@ configurable: true } }); + Object.defineProperty(subClass, "prototype", { + writable: false + }); if (superClass) _setPrototypeOf(subClass, superClass); } - function _getPrototypeOf(o) { - _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { + _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; - return _setPrototypeOf(o, p); } - - function _isNativeReflectConstruct() { - if (typeof Reflect === "undefined" || !Reflect.construct) return false; - if (Reflect.construct.sham) return false; - if (typeof Proxy === "function") return true; - + function _isNativeFunction(fn) { try { - Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); - return true; + return Function.toString.call(fn).indexOf("[native code]") !== -1; } catch (e) { - return false; - } - } - - function _construct(Parent, args, Class) { - if (_isNativeReflectConstruct()) { - _construct = Reflect.construct; - } else { - _construct = function _construct(Parent, args, Class) { - var a = [null]; - a.push.apply(a, args); - var Constructor = Function.bind.apply(Parent, a); - var instance = new Constructor(); - if (Class) _setPrototypeOf(instance, Class.prototype); - return instance; - }; + return typeof fn === "function"; } - - return _construct.apply(null, arguments); - } - - function _isNativeFunction(fn) { - return Function.toString.call(fn).indexOf("[native code]") !== -1; } - function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; - _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; - if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } - if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); - _cache.set(Class, Wrapper); } - function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } - Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, @@ -121,57 +127,31 @@ }); return _setPrototypeOf(Wrapper, Class); }; - return _wrapNativeSuper(Class); } - function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } - return self; } - function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; + } else if (call !== void 0) { + throw new TypeError("Derived constructors may only return object or undefined"); } - return _assertThisInitialized(self); } - - function _createSuper(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct(); - - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), - result; - - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - - return _possibleConstructorReturn(this, result); - }; - } - function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } - function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } - function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } - function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); @@ -180,29 +160,21 @@ if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - return arr2; } - function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - function _createForOfIteratorHelper(o, allowArrayLike) { - var it; - - if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; + if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; - var F = function () {}; - return { s: F, n: function () { @@ -220,16 +192,14 @@ f: F }; } - throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - var normalCompletion = true, - didErr = false, - err; + didErr = false, + err; return { s: function () { - it = o[Symbol.iterator](); + it = it.call(o); }, n: function () { var step = it.next(); @@ -252,103 +222,85 @@ var CepPromiseError = /*#__PURE__*/function (_Error) { _inherits(CepPromiseError, _Error); - - var _super = _createSuper(CepPromiseError); - function CepPromiseError() { var _this; - var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - message = _ref.message, - type = _ref.type, - errors = _ref.errors; - + message = _ref.message, + type = _ref.type, + errors = _ref.errors; _classCallCheck(this, CepPromiseError); - - _this = _super.call(this); + _this = _callSuper(this, CepPromiseError); _this.name = 'CepPromiseError'; _this.message = message; _this.type = type; _this.errors = errors; return _this; } - - return CepPromiseError; + return _createClass(CepPromiseError); }( /*#__PURE__*/_wrapNativeSuper(Error)); function fetch (e, n) { return n = n || {}, new Promise(function (t, r) { var s = new XMLHttpRequest(), - o = [], - u = [], - i = {}, - a = function a() { - return { - ok: 2 == (s.status / 100 | 0), - statusText: s.statusText, - status: s.status, - url: s.responseURL, - text: function text() { - return Promise.resolve(s.responseText); - }, - json: function json() { - return Promise.resolve(JSON.parse(s.responseText)); - }, - blob: function blob() { - return Promise.resolve(new Blob([s.response])); - }, - clone: a, - headers: { - keys: function keys() { - return o; + o = [], + u = [], + i = {}, + a = function a() { + return { + ok: 2 == (s.status / 100 | 0), + statusText: s.statusText, + status: s.status, + url: s.responseURL, + text: function text() { + return Promise.resolve(s.responseText); }, - entries: function entries() { - return u; + json: function json() { + return Promise.resolve(JSON.parse(s.responseText)); }, - get: function get(e) { - return i[e.toLowerCase()]; + blob: function blob() { + return Promise.resolve(new Blob([s.response])); }, - has: function has(e) { - return e.toLowerCase() in i; + clone: a, + headers: { + keys: function keys() { + return o; + }, + entries: function entries() { + return u; + }, + get: function get(e) { + return i[e.toLowerCase()]; + }, + has: function has(e) { + return e.toLowerCase() in i; + } } - } + }; }; - }; - for (var l in s.open(n.method || "get", e, !0), s.onload = function () { s.getAllResponseHeaders().replace(/^(.*?):[^\S\n]*([\s\S]*?)$/gm, function (e, n, t) { o.push(n = n.toLowerCase()), u.push([n, t]), i[n] = i[n] ? i[n] + "," + t : t; }), t(a()); - }, s.onerror = r, s.withCredentials = "include" == n.credentials, n.headers) { - s.setRequestHeader(l, n.headers[l]); - } - + }, s.onerror = r, s.withCredentials = "include" == n.credentials, n.headers) s.setRequestHeader(l, n.headers[l]); s.send(n.body || null); }); } var ServiceError = /*#__PURE__*/function (_Error) { _inherits(ServiceError, _Error); - - var _super = _createSuper(ServiceError); - function ServiceError() { var _this; - var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - message = _ref.message, - service = _ref.service; - + message = _ref.message, + service = _ref.service; _classCallCheck(this, ServiceError); - - _this = _super.call(this); + _this = _callSuper(this, ServiceError); _this.name = 'ServiceError'; _this.message = message; _this.service = service; return _this; } - - return ServiceError; + return _createClass(ServiceError); }( /*#__PURE__*/_wrapNativeSuper(Error)); function fetchCorreiosService(cepWithLeftPad, configurations) { @@ -364,28 +316,22 @@ }; return fetch(url, options).then(analyzeAndParseResponse)["catch"](throwApplicationError); } - function analyzeAndParseResponse(response) { if (response.ok) { return response.text().then(parseSuccessXML).then(extractValuesFromSuccessResponse); } - return response.text().then(parseAndextractErrorMessage).then(throwCorreiosError); } - function parseSuccessXML(xmlString) { try { var _xmlString$replace$ma; - var returnStatement = (_xmlString$replace$ma = xmlString.replace(/\r?\n|\r/g, '').match(/(.*)<\/return>/)[0]) !== null && _xmlString$replace$ma !== void 0 ? _xmlString$replace$ma : ''; var cleanReturnStatement = returnStatement.replace('', '').replace('', ''); var parsedReturnStatement = cleanReturnStatement.split(/'); - if (splittenExp.length > 1 && splittenExp[1].length) { result[splittenExp[0]] = splittenExp[1]; } - return result; }, {}); return parsedReturnStatement; @@ -393,11 +339,9 @@ throw new Error('Não foi possível interpretar o XML de resposta.'); } } - function parseAndextractErrorMessage(xmlString) { try { var _xmlString$match$; - var returnStatement = (_xmlString$match$ = xmlString.match(/(.*)<\/faultstring>/)[0]) !== null && _xmlString$match$ !== void 0 ? _xmlString$match$ : ''; var cleanReturnStatement = returnStatement.replace('', '').replace('', ''); return cleanReturnStatement; @@ -405,11 +349,9 @@ throw new Error('Não foi possível interpretar o XML de resposta.'); } } - function throwCorreiosError(translatedErrorMessage) { throw new Error(translatedErrorMessage); } - function extractValuesFromSuccessResponse(xmlObject) { return { cep: xmlObject.cep, @@ -420,21 +362,20 @@ service: 'correios' }; } - function throwApplicationError(error) { var serviceError = new ServiceError({ message: error.message, service: 'correios' }); - if (error.name === 'FetchError') { serviceError.message = 'Erro ao se conectar com o serviço dos Correios.'; } - throw serviceError; } + var queriedCep = null; function fetchCorreiosAltAPIService(cepWithLeftPad, configurations) { + queriedCep = cepWithLeftPad; var url = 'https://buscacepinter.correios.com.br/app/endereco/carrega-cep-endereco.php'; var options = { method: 'POST', @@ -447,19 +388,17 @@ body: "endereco=".concat(cepWithLeftPad, "&tipoCEP=ALL"), timeout: configurations.timeout || 30000 }; + console.log(options); return fetch(url, options).then(parseResponse).then(extractCepValuesFromResponse)["catch"](throwApplicationError$1); } - function parseResponse(response) { return response.json().then(function (result) { - if (result.total === 0 || result.erro || result.dados[0].cep === "") { + if (result.total === 0 || result.erro || result.dados[0].cep === "" || result.dados[0].cep.replace(/\D/g, '') !== queriedCep) { throw new Error('CEP não encontrado na base dos Correios.'); } - return result; }); } - function extractCepValuesFromResponse(response) { var firstCep = response.dados[0]; return { @@ -471,17 +410,14 @@ service: 'correios-alt' }; } - function throwApplicationError$1(error) { var serviceError = new ServiceError({ message: error.message, service: 'correios-alt' }); - if (error.name === 'FetchError') { serviceError.message = 'Erro ao se conectar com o serviço dos Correios Alt.'; } - throw serviceError; } @@ -495,30 +431,23 @@ }, timeout: configurations.timeout || 30000 }; - if (typeof window == 'undefined') { options.headers['user-agent'] = 'cep-promise'; } - return fetch(url, options).then(analyzeAndParseResponse$1).then(checkForViaCepError).then(extractCepValuesFromResponse$1)["catch"](throwApplicationError$2); } - function analyzeAndParseResponse$1(response) { if (response.ok) { return response.json(); } - throw Error('Erro ao se conectar com o serviço ViaCEP.'); } - function checkForViaCepError(responseObject) { if (responseObject.erro === true) { throw new Error('CEP não encontrado na base do ViaCEP.'); } - return responseObject; } - function extractCepValuesFromResponse$1(responseObject) { return { cep: responseObject.cep.replace('-', ''), @@ -529,17 +458,61 @@ service: 'viacep' }; } - function throwApplicationError$2(error) { var serviceError = new ServiceError({ message: error.message, service: 'viacep' }); - if (error.name === 'FetchError') { serviceError.message = 'Erro ao se conectar com o serviço ViaCEP.'; } + throw serviceError; + } + function fetchViaCepService$1(cepWithLeftPad, configurations) { + var url = "https://api.postmon.com.br/v1/cep/".concat(cepWithLeftPad); + var options = { + method: "GET", + mode: "cors", + headers: { + "content-type": "application/json;charset=utf-8" + }, + timeout: configurations.timeout || 30000 + }; + if (typeof window == "undefined") { + options.headers["user-agent"] = "cep-promise"; + } + return fetch(url, options).then(analyzeAndParseResponse$2).then(extractCepValuesFromResponse$2)["catch"](throwApplicationError$3); + } + function analyzeAndParseResponse$2(response) { + if (response.ok) { + return response.json(); + } else if (response.status === 404) { + throw new Error("CEP não encontrado na base do Postmon."); + } + throw Error("Erro ao se conectar com o serviço Postmon."); + } + function extractCepValuesFromResponse$2(responseObject) { + return { + cep: responseObject.cep.replace("-", ""), + state: responseObject.estado, + city: responseObject.cidade, + neighborhood: responseObject.bairro, + street: responseObject.logradouro, + service: "postmon" + }; + } + function throwApplicationError$3(error) { + var serviceError = new ServiceError({ + message: error.message, + service: "postmon" + }); + if (!!error.response && error.reseponse.status === 404) { + throw new Error("CEP não encontrado na base do Postmon."); + } + if (error.name === "FetchError") { + serviceError.message = "Erro ao se conectar com o serviço Postmon."; + } throw serviceError; } @@ -554,26 +527,21 @@ }, timeout: configurations.timeout || 30000 }; - return fetch(url, options).then(analyzeAndParseResponse$2).then(checkForWideNetError).then(extractCepValuesFromResponse$2)["catch"](throwApplicationError$3); + return fetch(url, options).then(analyzeAndParseResponse$3).then(checkForWideNetError).then(extractCepValuesFromResponse$3)["catch"](throwApplicationError$4); } - - function analyzeAndParseResponse$2(response) { + function analyzeAndParseResponse$3(response) { if (response.ok) { return response.json(); } - throw Error('Erro ao se conectar com o serviço WideNet.'); } - function checkForWideNetError(object) { if (object.ok === false || object.status !== 200) { throw new Error('CEP não encontrado na base do WideNet.'); } - return object; } - - function extractCepValuesFromResponse$2(object) { + function extractCepValuesFromResponse$3(object) { return { cep: object.code.replace('-', ''), state: object.state, @@ -583,17 +551,14 @@ service: 'widenet' }; } - - function throwApplicationError$3(error) { + function throwApplicationError$4(error) { var serviceError = new ServiceError({ message: error.message, service: 'widenet' }); - if (error.name === 'FetchError') { serviceError.message = 'Erro ao se conectar com o serviço WideNet.'; } - throw serviceError; } @@ -607,18 +572,15 @@ }, timeout: configurations.timeout || 30000 }; - return fetch(url, options).then(parseResponse$1).then(extractCepValuesFromResponse$3)["catch"](throwApplicationError$4); + return fetch(url, options).then(parseResponse$1).then(extractCepValuesFromResponse$4)["catch"](throwApplicationError$5); } - function parseResponse$1(response) { if (response.ok === false || response.status !== 200) { throw new Error('CEP não encontrado na base do BrasilAPI.'); } - return response.json(); } - - function extractCepValuesFromResponse$3(response) { + function extractCepValuesFromResponse$4(response) { return { cep: response.cep, state: response.state, @@ -628,36 +590,33 @@ service: 'brasilapi' }; } - - function throwApplicationError$4(error) { + function throwApplicationError$5(error) { var serviceError = new ServiceError({ message: error.message, service: 'brasilapi' }); - if (error.name === 'FetchError') { serviceError.message = 'Erro ao se conectar com o serviço BrasilAPI.'; } - throw serviceError; } function getAvailableServices() { var isBrowser = typeof window !== 'undefined'; - if (isBrowser) { return { viacep: fetchViaCepService, widenet: fetchWideNetService, + postmon: fetchViaCepService$1, brasilapi: fetchBrasilAPIService }; } - return { correios: fetchCorreiosService, 'correios-alt': fetchCorreiosAltAPIService, viacep: fetchViaCepService, widenet: fetchWideNetService, + postmon: fetchViaCepService$1, brasilapi: fetchBrasilAPIService }; } @@ -667,11 +626,9 @@ return Promise.resolve(promise).then(reject, resolve); }); }; - Promise.any = function (iterable) { return reverse(Promise.all(_toConsumableArray(iterable).map(reverse))); }; - var Promise$1 = Promise; var CEP_SIZE = 8; @@ -683,12 +640,10 @@ return cepRawValue; }).then(removeSpecialCharacters).then(validateInputLength).then(leftPadWithZeros).then(function (cepWithLeftPad) { return fetchCepFromServices(cepWithLeftPad, configurations); - })["catch"](handleServicesError)["catch"](throwApplicationError$5); + })["catch"](handleServicesError)["catch"](throwApplicationError$6); } - function validateProviders(providers) { var availableProviders = Object.keys(getAvailableServices()); - if (!Array.isArray(providers)) { throw new CepPromiseError({ message: 'Erro ao inicializar a instância do CepPromise.', @@ -699,14 +654,11 @@ }] }); } - var _iterator = _createForOfIteratorHelper(providers), - _step; - + _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var provider = _step.value; - if (!availableProviders.includes(provider)) { throw new CepPromiseError({ message: 'Erro ao inicializar a instância do CepPromise.', @@ -724,14 +676,11 @@ _iterator.f(); } } - function validateInputType(cepRawValue) { var cepTypeOf = _typeof(cepRawValue); - if (cepTypeOf === 'number' || cepTypeOf === 'string') { return cepRawValue; } - throw new CepPromiseError({ message: 'Erro ao inicializar a instância do CepPromise.', type: 'validation_error', @@ -741,20 +690,16 @@ }] }); } - function removeSpecialCharacters(cepRawValue) { return cepRawValue.toString().replace(/\D+/g, ''); } - function leftPadWithZeros(cepCleanValue) { return '0'.repeat(CEP_SIZE - cepCleanValue.length) + cepCleanValue; } - function validateInputLength(cepWithLeftPad) { if (cepWithLeftPad.length <= CEP_SIZE) { return cepWithLeftPad; } - throw new CepPromiseError({ message: "CEP deve conter exatamente ".concat(CEP_SIZE, " caracteres."), type: 'validation_error', @@ -764,21 +709,17 @@ }] }); } - function fetchCepFromServices(cepWithLeftPad, configurations) { var providersServices = getAvailableServices(); - if (configurations.providers.length === 0) { return Promise$1.any(Object.values(providersServices).map(function (provider) { return provider(cepWithLeftPad, configurations); })); } - return Promise$1.any(configurations.providers.map(function (provider) { return providersServices[provider](cepWithLeftPad, configurations); })); } - function handleServicesError(aggregatedErrors) { if (aggregatedErrors.length !== undefined) { throw new CepPromiseError({ @@ -787,14 +728,12 @@ errors: aggregatedErrors }); } - throw aggregatedErrors; } - - function throwApplicationError$5(_ref) { + function throwApplicationError$6(_ref) { var message = _ref.message, - type = _ref.type, - errors = _ref.errors; + type = _ref.type, + errors = _ref.errors; throw new CepPromiseError({ message: message, type: type, diff --git a/dist/cep-promise-browser.min.js b/dist/cep-promise-browser.min.js index 3a33d46..73c4055 100644 --- a/dist/cep-promise-browser.min.js +++ b/dist/cep-promise-browser.min.js @@ -1 +1 @@ -!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(e=e||self).cep=r()}(this,function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}function e(e,r){if("function"!=typeof r&&null!==r)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(r&&r.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),r&&i(e,r)}function o(e){return(o=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function i(e,r){return(i=Object.setPrototypeOf||function(e,r){return e.__proto__=r,e})(e,r)}function c(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}function s(e,r,t){return(s=c()?Reflect.construct:function(e,r,t){var n=[null];n.push.apply(n,r);var o=new(Function.bind.apply(e,n));return t&&i(o,t.prototype),o}).apply(null,arguments)}function r(e){var n="function"==typeof Map?new Map:void 0;return(r=function(e){if(null===e||(r=e,-1===Function.toString.call(r).indexOf("[native code]")))return e;var r;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==n){if(n.has(e))return n.get(e);n.set(e,t)}function t(){return s(e,arguments,o(this).constructor)}return t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),i(t,e)})(e)}function u(e,r){return!r||"object"!=typeof r&&"function"!=typeof r?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):r}function n(t){var n=c();return function(){var e,r=o(t);return u(this,n?(e=o(this).constructor,Reflect.construct(r,arguments,e)):r.apply(this,arguments))}}function p(e){return function(e){if(Array.isArray(e))return l(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||f(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function f(e,r){if(e){if("string"==typeof e)return l(e,r);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?l(e,r):void 0}}function l(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=new Array(r);t\n\n \n \n \n '.concat(e,"\n \n \n"),headers:{"Content-Type":"text/xml;charset=UTF-8","cache-control":"no-cache"},timeout:r.timeout||3e4}).then(y).catch(P)}function y(e){return e.ok?e.text().then(b).then(E):e.text().then(g).then(w)}function b(e){try{var r;return(null!==(r=e.replace(/\r?\n|\r/g,"").match(/(.*)<\/return>/)[0])&&void 0!==r?r:"").replace("","").replace("","").split(/");return 1(.*)<\/faultstring>/)[0])&&void 0!==r?r:"").replace("","").replace("","")}catch(e){throw new Error("Não foi possível interpretar o XML de resposta.")}}function w(e){throw new Error(e)}function E(e){return{cep:e.cep,state:e.uf,city:e.cidade,neighborhood:e.bairro,street:e.end,service:"correios"}}function P(e){var r=new m({message:e.message,service:"correios"});throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço dos Correios."),r}function C(e,r){return h("https://buscacepinter.correios.com.br/app/endereco/carrega-cep-endereco.php",{method:"POST",mode:"cors",headers:{"content-type":"application/x-www-form-urlencoded; charset=UTF-8",Referer:"https://buscacepinter.correios.com.br/app/endereco/index.php","Referrer-Policy":"strict-origin-when-cross-origin"},body:"endereco=".concat(e,"&tipoCEP=ALL"),timeout:r.timeout||3e4}).then(S).then(j).catch(x)}function S(e){return e.json().then(function(e){if(0===e.total||e.erro||""===e.dados[0].cep)throw new Error("CEP não encontrado na base dos Correios.");return e})}function j(e){var r=e.dados[0];return{cep:r.cep,state:r.uf,city:r.localidade,neighborhood:r.bairro,street:r.logradouroDNEC,service:"correios-alt"}}function x(e){var r=new m({message:e.message,service:"correios-alt"});throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço dos Correios Alt."),r}function O(e,r){var t="https://viacep.com.br/ws/".concat(e,"/json/"),n={method:"GET",mode:"cors",headers:{"content-type":"application/json;charset=utf-8"},timeout:r.timeout||3e4};return"undefined"==typeof window&&(n.headers["user-agent"]="cep-promise"),h(t,n).then(A).then(T).then(_).catch(R)}function A(e){if(e.ok)return e.json();throw Error("Erro ao se conectar com o serviço ViaCEP.")}function T(e){if(!0===e.erro)throw new Error("CEP não encontrado na base do ViaCEP.");return e}function _(e){return{cep:e.cep.replace("-",""),state:e.uf,city:e.localidade,neighborhood:e.bairro,street:e.logradouro,service:"viacep"}}function R(e){var r=new m({message:e.message,service:"viacep"});throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço ViaCEP."),r}function F(e,r){var t="".concat(e.slice(0,5),"-").concat(e.slice(5));return h("https://cdn.apicep.com/file/apicep/".concat(t,".json"),{method:"GET",mode:"cors",headers:{accept:"application/json"},timeout:r.timeout||3e4}).then(L).then(k).then(N).catch(I)}function L(e){if(e.ok)return e.json();throw Error("Erro ao se conectar com o serviço WideNet.")}function k(e){if(!1===e.ok||200!==e.status)throw new Error("CEP não encontrado na base do WideNet.");return e}function N(e){return{cep:e.code.replace("-",""),state:e.state,city:e.city,neighborhood:e.district,street:e.address,service:"widenet"}}function I(e){var r=new m({message:e.message,service:"widenet"});throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço WideNet."),r}function M(e,r){return h("https://brasilapi.com.br/api/cep/v1/".concat(e),{method:"GET",mode:"cors",headers:{"content-type":"application/json;charset=utf-8"},timeout:r.timeout||3e4}).then(B).then(z).catch(D)}function B(e){if(!1===e.ok||200!==e.status)throw new Error("CEP não encontrado na base do BrasilAPI.");return e.json()}function z(e){return{cep:e.cep,state:e.state,city:e.city,neighborhood:e.neighborhood,street:e.street,service:"brasilapi"}}function D(e){var r=new m({message:e.message,service:"brasilapi"});throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço BrasilAPI."),r}function H(){return"undefined"!=typeof window?{viacep:O,widenet:F,brasilapi:M}:{correios:v,"correios-alt":C,viacep:O,widenet:F,brasilapi:M}}function U(t){return new Promise(function(e,r){return Promise.resolve(t).then(r,e)})}Promise.any=function(e){return U(Promise.all(p(e).map(U)))};var V=Promise,q=8;function G(e){var r=t(e);if("number"===r||"string"===r)return e;throw new d({message:"Erro ao inicializar a instância do CepPromise.",type:"validation_error",errors:[{message:"Você deve chamar o construtor utilizando uma String ou um Number.",service:"cep_validation"}]})}function W(e){return e.toString().replace(/\D+/g,"")}function X(e){return"0".repeat(q-e.length)+e}function J(e){if(e.length<=q)return e;throw new d({message:"CEP deve conter exatamente ".concat(q," caracteres."),type:"validation_error",errors:[{message:"CEP informado possui mais do que ".concat(q," caracteres."),service:"cep_validation"}]})}function $(e){if(void 0!==e.length)throw new d({message:"Todos os serviços de CEP retornaram erro.",type:"service_error",errors:e});throw e}function K(e){var r=e.message,t=e.type,n=e.errors;throw new d({message:r,type:t,errors:n})}return function(e){var o=1=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,c=!0,a=!1;return{s:function(){t=e[Symbol.iterator]()},n:function(){var e=t.next();return c=e.done,e},e:function(e){a=!0,i=e},f:function(){try{c||null==t.return||t.return()}finally{if(a)throw i}}}}(e);try{for(n.s();!(t=n.n()).done;){var o=t.value;if(!r.includes(o))throw new d({message:"Erro ao inicializar a instância do CepPromise.",type:"validation_error",errors:[{message:'O provider "'.concat(o,'" é inválido. Os providers disponíveis são: ["').concat(r.join('", "'),'"].'),service:"providers_validation"}]})}}catch(e){n.e(e)}finally{n.f()}}(o.providers),e}).then(W).then(J).then(X).then(function(e){return r=e,t=o,n=H(),0!==t.providers.length?V.any(t.providers.map(function(e){return n[e](r,t)})):V.any(Object.values(n).map(function(e){return e(r,t)}));var r,t,n}).catch($).catch(K)}}); \ No newline at end of file +!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(e=e||self).cep=r()}(this,function(){"use strict";function a(e,r,t){return r=s(r),function(e,r){{if(r&&("object"==typeof r||"function"==typeof r))return r;if(void 0!==r)throw new TypeError("Derived constructors may only return object or undefined")}return function(e){if(void 0!==e)return e;throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}(e)}(e,i()?Reflect.construct(r,t||[],s(e).constructor):r.apply(e,t))}function i(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(i=function(){return!!e})()}function n(e){var r=function(e,r){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0===t)return("string"===r?String:Number)(e);var o=t.call(e,r||"default");if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}(e,"string");return"symbol"==typeof r?r:String(r)}function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function c(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}function o(e,r){for(var t=0;te.length)&&(r=e.length);for(var t=0,o=new Array(r);t\n\n \n \n \n '.concat(e,"\n \n \n"),headers:{"Content-Type":"text/xml;charset=UTF-8","cache-control":"no-cache"},timeout:r.timeout||3e4}).then(b).catch(j)}function b(e){return e.ok?e.text().then(w).then(P):e.text().then(g).then(E)}function w(e){try{var r;return(null!==(r=e.replace(/\r?\n|\r/g,"").match(/(.*)<\/return>/)[0])&&void 0!==r?r:"").replace("","").replace("","").split(/");return 1(.*)<\/faultstring>/)[0])&&void 0!==r?r:"").replace("","").replace("","")}catch(e){throw new Error("Não foi possível interpretar o XML de resposta.")}}function E(e){throw new Error(e)}function P(e){return{cep:e.cep,state:e.uf,city:e.cidade,neighborhood:e.bairro,street:e.end,service:"correios"}}function j(e){var r=new v({message:e.message,service:"correios"});throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço dos Correios."),r}var C=null;function S(e,r){var t={method:"POST",mode:"cors",headers:{"content-type":"application/x-www-form-urlencoded; charset=UTF-8",Referer:"https://buscacepinter.correios.com.br/app/endereco/index.php","Referrer-Policy":"strict-origin-when-cross-origin"},body:"endereco=".concat(C=e,"&tipoCEP=ALL"),timeout:r.timeout||3e4};return console.log(t),h("https://buscacepinter.correios.com.br/app/endereco/carrega-cep-endereco.php",t).then(O).then(x).catch(T)}function O(e){return e.json().then(function(e){if(0===e.total||e.erro||""===e.dados[0].cep||e.dados[0].cep.replace(/\D/g,"")!==C)throw new Error("CEP não encontrado na base dos Correios.");return e})}function x(e){var r=e.dados[0];return{cep:r.cep,state:r.uf,city:r.localidade,neighborhood:r.bairro,street:r.logradouroDNEC,service:"correios-alt"}}function T(e){var r=new v({message:e.message,service:"correios-alt"});throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço dos Correios Alt."),r}function A(e,r){var t="https://viacep.com.br/ws/".concat(e,"/json/"),o={method:"GET",mode:"cors",headers:{"content-type":"application/json;charset=utf-8"},timeout:r.timeout||3e4};return"undefined"==typeof window&&(o.headers["user-agent"]="cep-promise"),h(t,o).then(_).then(k).then(R).catch(F)}function _(e){if(e.ok)return e.json();throw Error("Erro ao se conectar com o serviço ViaCEP.")}function k(e){if(!0===e.erro)throw new Error("CEP não encontrado na base do ViaCEP.");return e}function R(e){return{cep:e.cep.replace("-",""),state:e.uf,city:e.localidade,neighborhood:e.bairro,street:e.logradouro,service:"viacep"}}function F(e){var r=new v({message:e.message,service:"viacep"});throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço ViaCEP."),r}function L(e,r){var t="https://api.postmon.com.br/v1/cep/".concat(e),o={method:"GET",mode:"cors",headers:{"content-type":"application/json;charset=utf-8"},timeout:r.timeout||3e4};return"undefined"==typeof window&&(o.headers["user-agent"]="cep-promise"),h(t,o).then(N).then(B).catch(I)}function N(e){if(e.ok)return e.json();if(404===e.status)throw new Error("CEP não encontrado na base do Postmon.");throw Error("Erro ao se conectar com o serviço Postmon.")}function B(e){return{cep:e.cep.replace("-",""),state:e.estado,city:e.cidade,neighborhood:e.bairro,street:e.logradouro,service:"postmon"}}function I(e){var r=new v({message:e.message,service:"postmon"});if(e.response&&404===e.reseponse.status)throw new Error("CEP não encontrado na base do Postmon.");throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço Postmon."),r}function M(e,r){var t="".concat(e.slice(0,5),"-").concat(e.slice(5));return h("https://cdn.apicep.com/file/apicep/".concat(t,".json"),{method:"GET",mode:"cors",headers:{accept:"application/json"},timeout:r.timeout||3e4}).then(z).then(D).then(G).catch(H)}function z(e){if(e.ok)return e.json();throw Error("Erro ao se conectar com o serviço WideNet.")}function D(e){if(!1===e.ok||200!==e.status)throw new Error("CEP não encontrado na base do WideNet.");return e}function G(e){return{cep:e.code.replace("-",""),state:e.state,city:e.city,neighborhood:e.district,street:e.address,service:"widenet"}}function H(e){var r=new v({message:e.message,service:"widenet"});throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço WideNet."),r}function U(e,r){return h("https://brasilapi.com.br/api/cep/v1/".concat(e),{method:"GET",mode:"cors",headers:{"content-type":"application/json;charset=utf-8"},timeout:r.timeout||3e4}).then(V).then(q).catch(W)}function V(e){if(!1===e.ok||200!==e.status)throw new Error("CEP não encontrado na base do BrasilAPI.");return e.json()}function q(e){return{cep:e.cep,state:e.state,city:e.city,neighborhood:e.neighborhood,street:e.street,service:"brasilapi"}}function W(e){var r=new v({message:e.message,service:"brasilapi"});throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço BrasilAPI."),r}function X(){return"undefined"!=typeof window?{viacep:A,widenet:M,postmon:L,brasilapi:U}:{correios:y,"correios-alt":S,viacep:A,widenet:M,postmon:L,brasilapi:U}}function J(t){return new Promise(function(e,r){return Promise.resolve(t).then(r,e)})}Promise.any=function(e){return J(Promise.all(f(e).map(J)))};var $=Promise,K=8;function Q(e){var r=t(e);if("number"===r||"string"===r)return e;throw new m({message:"Erro ao inicializar a instância do CepPromise.",type:"validation_error",errors:[{message:"Você deve chamar o construtor utilizando uma String ou um Number.",service:"cep_validation"}]})}function Y(e){return e.toString().replace(/\D+/g,"")}function Z(e){return"0".repeat(K-e.length)+e}function ee(e){if(e.length<=K)return e;throw new m({message:"CEP deve conter exatamente ".concat(K," caracteres."),type:"validation_error",errors:[{message:"CEP informado possui mais do que ".concat(K," caracteres."),service:"cep_validation"}]})}function re(e){if(void 0!==e.length)throw new m({message:"Todos os serviços de CEP retornaram erro.",type:"service_error",errors:e});throw e}function te(e){var r=e.message,t=e.type,o=e.errors;throw new m({message:r,type:t,errors:o})}return function(e){var n=1=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,c=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return a=e.done,e},e:function(e){c=!0,i=e},f:function(){try{a||null==t.return||t.return()}finally{if(c)throw i}}}}(e);try{for(o.s();!(t=o.n()).done;){var n=t.value;if(!r.includes(n))throw new m({message:"Erro ao inicializar a instância do CepPromise.",type:"validation_error",errors:[{message:'O provider "'.concat(n,'" é inválido. Os providers disponíveis são: ["').concat(r.join('", "'),'"].'),service:"providers_validation"}]})}}catch(e){o.e(e)}finally{o.f()}}(n.providers),e}).then(Y).then(ee).then(Z).then(function(e){return r=e,t=n,o=X(),0!==t.providers.length?$.any(t.providers.map(function(e){return o[e](r,t)})):$.any(Object.values(o).map(function(e){return e(r,t)}));var r,t,o}).catch(re).catch(te)}}); \ No newline at end of file diff --git a/dist/cep-promise.js b/dist/cep-promise.js index b82e4e7..3578421 100644 --- a/dist/cep-promise.js +++ b/dist/cep-promise.js @@ -6,33 +6,73 @@ fetch = fetch && Object.prototype.hasOwnProperty.call(fetch, 'default') ? fetch['default'] : fetch; - function _typeof(obj) { - "@babel/helpers - typeof"; - - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; + function _callSuper(t, o, e) { + return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); + } + function _construct(t, e, r) { + if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); + var o = [null]; + o.push.apply(o, e); + var p = new (t.bind.apply(t, o))(); + return r && _setPrototypeOf(p, r.prototype), p; + } + function _isNativeReflectConstruct() { + try { + var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); + } catch (t) {} + return (_isNativeReflectConstruct = function () { + return !!t; + })(); + } + function _toPrimitive(t, r) { + if ("object" != typeof t || !t) return t; + var e = t[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t, r || "default"); + if ("object" != typeof i) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); } - - return _typeof(obj); + return ("string" === r ? String : Number)(t); } + function _toPropertyKey(t) { + var i = _toPrimitive(t, "string"); + return "symbol" == typeof i ? i : String(i); + } + function _typeof(o) { + "@babel/helpers - typeof"; + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { + return typeof o; + } : function (o) { + return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; + }, _typeof(o); + } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } - subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, @@ -40,79 +80,45 @@ configurable: true } }); + Object.defineProperty(subClass, "prototype", { + writable: false + }); if (superClass) _setPrototypeOf(subClass, superClass); } - function _getPrototypeOf(o) { - _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { + _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; - return _setPrototypeOf(o, p); } - - function _isNativeReflectConstruct() { - if (typeof Reflect === "undefined" || !Reflect.construct) return false; - if (Reflect.construct.sham) return false; - if (typeof Proxy === "function") return true; - + function _isNativeFunction(fn) { try { - Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); - return true; + return Function.toString.call(fn).indexOf("[native code]") !== -1; } catch (e) { - return false; + return typeof fn === "function"; } } - - function _construct(Parent, args, Class) { - if (_isNativeReflectConstruct()) { - _construct = Reflect.construct; - } else { - _construct = function _construct(Parent, args, Class) { - var a = [null]; - a.push.apply(a, args); - var Constructor = Function.bind.apply(Parent, a); - var instance = new Constructor(); - if (Class) _setPrototypeOf(instance, Class.prototype); - return instance; - }; - } - - return _construct.apply(null, arguments); - } - - function _isNativeFunction(fn) { - return Function.toString.call(fn).indexOf("[native code]") !== -1; - } - function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; - _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; - if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } - if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); - _cache.set(Class, Wrapper); } - function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } - Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, @@ -123,57 +129,31 @@ }); return _setPrototypeOf(Wrapper, Class); }; - return _wrapNativeSuper(Class); } - function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } - return self; } - function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; + } else if (call !== void 0) { + throw new TypeError("Derived constructors may only return object or undefined"); } - return _assertThisInitialized(self); } - - function _createSuper(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct(); - - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), - result; - - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - - return _possibleConstructorReturn(this, result); - }; - } - function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } - function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } - function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } - function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); @@ -182,29 +162,21 @@ if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - return arr2; } - function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - function _createForOfIteratorHelper(o, allowArrayLike) { - var it; - - if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; + if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; - var F = function () {}; - return { s: F, n: function () { @@ -222,16 +194,14 @@ f: F }; } - throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - var normalCompletion = true, - didErr = false, - err; + didErr = false, + err; return { s: function () { - it = o[Symbol.iterator](); + it = it.call(o); }, n: function () { var step = it.next(); @@ -254,52 +224,38 @@ var CepPromiseError = /*#__PURE__*/function (_Error) { _inherits(CepPromiseError, _Error); - - var _super = _createSuper(CepPromiseError); - function CepPromiseError() { var _this; - var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - message = _ref.message, - type = _ref.type, - errors = _ref.errors; - + message = _ref.message, + type = _ref.type, + errors = _ref.errors; _classCallCheck(this, CepPromiseError); - - _this = _super.call(this); + _this = _callSuper(this, CepPromiseError); _this.name = 'CepPromiseError'; _this.message = message; _this.type = type; _this.errors = errors; return _this; } - - return CepPromiseError; + return _createClass(CepPromiseError); }( /*#__PURE__*/_wrapNativeSuper(Error)); var ServiceError = /*#__PURE__*/function (_Error) { _inherits(ServiceError, _Error); - - var _super = _createSuper(ServiceError); - function ServiceError() { var _this; - var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - message = _ref.message, - service = _ref.service; - + message = _ref.message, + service = _ref.service; _classCallCheck(this, ServiceError); - - _this = _super.call(this); + _this = _callSuper(this, ServiceError); _this.name = 'ServiceError'; _this.message = message; _this.service = service; return _this; } - - return ServiceError; + return _createClass(ServiceError); }( /*#__PURE__*/_wrapNativeSuper(Error)); function fetchCorreiosService(cepWithLeftPad, configurations) { @@ -315,28 +271,22 @@ }; return fetch(url, options).then(analyzeAndParseResponse)["catch"](throwApplicationError); } - function analyzeAndParseResponse(response) { if (response.ok) { return response.text().then(parseSuccessXML).then(extractValuesFromSuccessResponse); } - return response.text().then(parseAndextractErrorMessage).then(throwCorreiosError); } - function parseSuccessXML(xmlString) { try { var _xmlString$replace$ma; - var returnStatement = (_xmlString$replace$ma = xmlString.replace(/\r?\n|\r/g, '').match(/(.*)<\/return>/)[0]) !== null && _xmlString$replace$ma !== void 0 ? _xmlString$replace$ma : ''; var cleanReturnStatement = returnStatement.replace('', '').replace('', ''); var parsedReturnStatement = cleanReturnStatement.split(/'); - if (splittenExp.length > 1 && splittenExp[1].length) { result[splittenExp[0]] = splittenExp[1]; } - return result; }, {}); return parsedReturnStatement; @@ -344,11 +294,9 @@ throw new Error('Não foi possível interpretar o XML de resposta.'); } } - function parseAndextractErrorMessage(xmlString) { try { var _xmlString$match$; - var returnStatement = (_xmlString$match$ = xmlString.match(/(.*)<\/faultstring>/)[0]) !== null && _xmlString$match$ !== void 0 ? _xmlString$match$ : ''; var cleanReturnStatement = returnStatement.replace('', '').replace('', ''); return cleanReturnStatement; @@ -356,11 +304,9 @@ throw new Error('Não foi possível interpretar o XML de resposta.'); } } - function throwCorreiosError(translatedErrorMessage) { throw new Error(translatedErrorMessage); } - function extractValuesFromSuccessResponse(xmlObject) { return { cep: xmlObject.cep, @@ -371,21 +317,20 @@ service: 'correios' }; } - function throwApplicationError(error) { var serviceError = new ServiceError({ message: error.message, service: 'correios' }); - if (error.name === 'FetchError') { serviceError.message = 'Erro ao se conectar com o serviço dos Correios.'; } - throw serviceError; } + var queriedCep = null; function fetchCorreiosAltAPIService(cepWithLeftPad, configurations) { + queriedCep = cepWithLeftPad; var url = 'https://buscacepinter.correios.com.br/app/endereco/carrega-cep-endereco.php'; var options = { method: 'POST', @@ -398,19 +343,17 @@ body: "endereco=".concat(cepWithLeftPad, "&tipoCEP=ALL"), timeout: configurations.timeout || 30000 }; + console.log(options); return fetch(url, options).then(parseResponse).then(extractCepValuesFromResponse)["catch"](throwApplicationError$1); } - function parseResponse(response) { return response.json().then(function (result) { - if (result.total === 0 || result.erro || result.dados[0].cep === "") { + if (result.total === 0 || result.erro || result.dados[0].cep === "" || result.dados[0].cep.replace(/\D/g, '') !== queriedCep) { throw new Error('CEP não encontrado na base dos Correios.'); } - return result; }); } - function extractCepValuesFromResponse(response) { var firstCep = response.dados[0]; return { @@ -422,17 +365,14 @@ service: 'correios-alt' }; } - function throwApplicationError$1(error) { var serviceError = new ServiceError({ message: error.message, service: 'correios-alt' }); - if (error.name === 'FetchError') { serviceError.message = 'Erro ao se conectar com o serviço dos Correios Alt.'; } - throw serviceError; } @@ -446,30 +386,23 @@ }, timeout: configurations.timeout || 30000 }; - if (typeof window == 'undefined') { options.headers['user-agent'] = 'cep-promise'; } - return fetch(url, options).then(analyzeAndParseResponse$1).then(checkForViaCepError).then(extractCepValuesFromResponse$1)["catch"](throwApplicationError$2); } - function analyzeAndParseResponse$1(response) { if (response.ok) { return response.json(); } - throw Error('Erro ao se conectar com o serviço ViaCEP.'); } - function checkForViaCepError(responseObject) { if (responseObject.erro === true) { throw new Error('CEP não encontrado na base do ViaCEP.'); } - return responseObject; } - function extractCepValuesFromResponse$1(responseObject) { return { cep: responseObject.cep.replace('-', ''), @@ -480,17 +413,61 @@ service: 'viacep' }; } - function throwApplicationError$2(error) { var serviceError = new ServiceError({ message: error.message, service: 'viacep' }); - if (error.name === 'FetchError') { serviceError.message = 'Erro ao se conectar com o serviço ViaCEP.'; } + throw serviceError; + } + function fetchViaCepService$1(cepWithLeftPad, configurations) { + var url = "https://api.postmon.com.br/v1/cep/".concat(cepWithLeftPad); + var options = { + method: "GET", + mode: "cors", + headers: { + "content-type": "application/json;charset=utf-8" + }, + timeout: configurations.timeout || 30000 + }; + if (typeof window == "undefined") { + options.headers["user-agent"] = "cep-promise"; + } + return fetch(url, options).then(analyzeAndParseResponse$2).then(extractCepValuesFromResponse$2)["catch"](throwApplicationError$3); + } + function analyzeAndParseResponse$2(response) { + if (response.ok) { + return response.json(); + } else if (response.status === 404) { + throw new Error("CEP não encontrado na base do Postmon."); + } + throw Error("Erro ao se conectar com o serviço Postmon."); + } + function extractCepValuesFromResponse$2(responseObject) { + return { + cep: responseObject.cep.replace("-", ""), + state: responseObject.estado, + city: responseObject.cidade, + neighborhood: responseObject.bairro, + street: responseObject.logradouro, + service: "postmon" + }; + } + function throwApplicationError$3(error) { + var serviceError = new ServiceError({ + message: error.message, + service: "postmon" + }); + if (!!error.response && error.reseponse.status === 404) { + throw new Error("CEP não encontrado na base do Postmon."); + } + if (error.name === "FetchError") { + serviceError.message = "Erro ao se conectar com o serviço Postmon."; + } throw serviceError; } @@ -505,26 +482,21 @@ }, timeout: configurations.timeout || 30000 }; - return fetch(url, options).then(analyzeAndParseResponse$2).then(checkForWideNetError).then(extractCepValuesFromResponse$2)["catch"](throwApplicationError$3); + return fetch(url, options).then(analyzeAndParseResponse$3).then(checkForWideNetError).then(extractCepValuesFromResponse$3)["catch"](throwApplicationError$4); } - - function analyzeAndParseResponse$2(response) { + function analyzeAndParseResponse$3(response) { if (response.ok) { return response.json(); } - throw Error('Erro ao se conectar com o serviço WideNet.'); } - function checkForWideNetError(object) { if (object.ok === false || object.status !== 200) { throw new Error('CEP não encontrado na base do WideNet.'); } - return object; } - - function extractCepValuesFromResponse$2(object) { + function extractCepValuesFromResponse$3(object) { return { cep: object.code.replace('-', ''), state: object.state, @@ -534,17 +506,14 @@ service: 'widenet' }; } - - function throwApplicationError$3(error) { + function throwApplicationError$4(error) { var serviceError = new ServiceError({ message: error.message, service: 'widenet' }); - if (error.name === 'FetchError') { serviceError.message = 'Erro ao se conectar com o serviço WideNet.'; } - throw serviceError; } @@ -558,18 +527,15 @@ }, timeout: configurations.timeout || 30000 }; - return fetch(url, options).then(parseResponse$1).then(extractCepValuesFromResponse$3)["catch"](throwApplicationError$4); + return fetch(url, options).then(parseResponse$1).then(extractCepValuesFromResponse$4)["catch"](throwApplicationError$5); } - function parseResponse$1(response) { if (response.ok === false || response.status !== 200) { throw new Error('CEP não encontrado na base do BrasilAPI.'); } - return response.json(); } - - function extractCepValuesFromResponse$3(response) { + function extractCepValuesFromResponse$4(response) { return { cep: response.cep, state: response.state, @@ -579,36 +545,33 @@ service: 'brasilapi' }; } - - function throwApplicationError$4(error) { + function throwApplicationError$5(error) { var serviceError = new ServiceError({ message: error.message, service: 'brasilapi' }); - if (error.name === 'FetchError') { serviceError.message = 'Erro ao se conectar com o serviço BrasilAPI.'; } - throw serviceError; } function getAvailableServices() { var isBrowser = typeof window !== 'undefined'; - if (isBrowser) { return { viacep: fetchViaCepService, widenet: fetchWideNetService, + postmon: fetchViaCepService$1, brasilapi: fetchBrasilAPIService }; } - return { correios: fetchCorreiosService, 'correios-alt': fetchCorreiosAltAPIService, viacep: fetchViaCepService, widenet: fetchWideNetService, + postmon: fetchViaCepService$1, brasilapi: fetchBrasilAPIService }; } @@ -618,11 +581,9 @@ return Promise.resolve(promise).then(reject, resolve); }); }; - Promise.any = function (iterable) { return reverse(Promise.all(_toConsumableArray(iterable).map(reverse))); }; - var Promise$1 = Promise; var CEP_SIZE = 8; @@ -634,12 +595,10 @@ return cepRawValue; }).then(removeSpecialCharacters).then(validateInputLength).then(leftPadWithZeros).then(function (cepWithLeftPad) { return fetchCepFromServices(cepWithLeftPad, configurations); - })["catch"](handleServicesError)["catch"](throwApplicationError$5); + })["catch"](handleServicesError)["catch"](throwApplicationError$6); } - function validateProviders(providers) { var availableProviders = Object.keys(getAvailableServices()); - if (!Array.isArray(providers)) { throw new CepPromiseError({ message: 'Erro ao inicializar a instância do CepPromise.', @@ -650,14 +609,11 @@ }] }); } - var _iterator = _createForOfIteratorHelper(providers), - _step; - + _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var provider = _step.value; - if (!availableProviders.includes(provider)) { throw new CepPromiseError({ message: 'Erro ao inicializar a instância do CepPromise.', @@ -675,14 +631,11 @@ _iterator.f(); } } - function validateInputType(cepRawValue) { var cepTypeOf = _typeof(cepRawValue); - if (cepTypeOf === 'number' || cepTypeOf === 'string') { return cepRawValue; } - throw new CepPromiseError({ message: 'Erro ao inicializar a instância do CepPromise.', type: 'validation_error', @@ -692,20 +645,16 @@ }] }); } - function removeSpecialCharacters(cepRawValue) { return cepRawValue.toString().replace(/\D+/g, ''); } - function leftPadWithZeros(cepCleanValue) { return '0'.repeat(CEP_SIZE - cepCleanValue.length) + cepCleanValue; } - function validateInputLength(cepWithLeftPad) { if (cepWithLeftPad.length <= CEP_SIZE) { return cepWithLeftPad; } - throw new CepPromiseError({ message: "CEP deve conter exatamente ".concat(CEP_SIZE, " caracteres."), type: 'validation_error', @@ -715,21 +664,17 @@ }] }); } - function fetchCepFromServices(cepWithLeftPad, configurations) { var providersServices = getAvailableServices(); - if (configurations.providers.length === 0) { return Promise$1.any(Object.values(providersServices).map(function (provider) { return provider(cepWithLeftPad, configurations); })); } - return Promise$1.any(configurations.providers.map(function (provider) { return providersServices[provider](cepWithLeftPad, configurations); })); } - function handleServicesError(aggregatedErrors) { if (aggregatedErrors.length !== undefined) { throw new CepPromiseError({ @@ -738,14 +683,12 @@ errors: aggregatedErrors }); } - throw aggregatedErrors; } - - function throwApplicationError$5(_ref) { + function throwApplicationError$6(_ref) { var message = _ref.message, - type = _ref.type, - errors = _ref.errors; + type = _ref.type, + errors = _ref.errors; throw new CepPromiseError({ message: message, type: type, diff --git a/dist/cep-promise.min.js b/dist/cep-promise.min.js index 4a7d8a2..7c60df5 100644 --- a/dist/cep-promise.min.js +++ b/dist/cep-promise.min.js @@ -1 +1 @@ -!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r(require("node-fetch")):"function"==typeof define&&define.amd?define(["node-fetch"],r):(e=e||self).cep=r(e.fetch)}(this,function(i){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}function e(e,r){if("function"!=typeof r&&null!==r)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(r&&r.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),r&&c(e,r)}function n(e){return(n=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,r){return(c=Object.setPrototypeOf||function(e,r){return e.__proto__=r,e})(e,r)}function s(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}function u(e,r,t){return(u=s()?Reflect.construct:function(e,r,t){var o=[null];o.push.apply(o,r);var n=new(Function.bind.apply(e,o));return t&&c(n,t.prototype),n}).apply(null,arguments)}function r(e){var o="function"==typeof Map?new Map:void 0;return(r=function(e){if(null===e||(r=e,-1===Function.toString.call(r).indexOf("[native code]")))return e;var r;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==o){if(o.has(e))return o.get(e);o.set(e,t)}function t(){return u(e,arguments,n(this).constructor)}return t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),c(t,e)})(e)}function p(e,r){return!r||"object"!=typeof r&&"function"!=typeof r?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):r}function o(t){var o=s();return function(){var e,r=n(t);return p(this,o?(e=n(this).constructor,Reflect.construct(r,arguments,e)):r.apply(this,arguments))}}function f(e){return function(e){if(Array.isArray(e))return d(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||l(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,r){if(e){if("string"==typeof e)return d(e,r);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?d(e,r):void 0}}function d(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,o=new Array(r);t\n\n \n \n \n '.concat(e,"\n \n \n"),headers:{"Content-Type":"text/xml;charset=UTF-8","cache-control":"no-cache"},timeout:r.timeout||3e4};return i("https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente",t).then(y).catch(P)}function y(e){return e.ok?e.text().then(b).then(E):e.text().then(g).then(w)}function b(e){try{var r;return(null!==(r=e.replace(/\r?\n|\r/g,"").match(/(.*)<\/return>/)[0])&&void 0!==r?r:"").replace("","").replace("","").split(/");return 1(.*)<\/faultstring>/)[0])&&void 0!==r?r:"").replace("","").replace("","")}catch(e){throw new Error("Não foi possível interpretar o XML de resposta.")}}function w(e){throw new Error(e)}function E(e){return{cep:e.cep,state:e.uf,city:e.cidade,neighborhood:e.bairro,street:e.end,service:"correios"}}function P(e){var r=new m({message:e.message,service:"correios"});throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço dos Correios."),r}function j(e,r){var t={method:"POST",mode:"cors",headers:{"content-type":"application/x-www-form-urlencoded; charset=UTF-8",Referer:"https://buscacepinter.correios.com.br/app/endereco/index.php","Referrer-Policy":"strict-origin-when-cross-origin"},body:"endereco=".concat(e,"&tipoCEP=ALL"),timeout:r.timeout||3e4};return i("https://buscacepinter.correios.com.br/app/endereco/carrega-cep-endereco.php",t).then(C).then(S).catch(O)}function C(e){return e.json().then(function(e){if(0===e.total||e.erro||""===e.dados[0].cep)throw new Error("CEP não encontrado na base dos Correios.");return e})}function S(e){var r=e.dados[0];return{cep:r.cep,state:r.uf,city:r.localidade,neighborhood:r.bairro,street:r.logradouroDNEC,service:"correios-alt"}}function O(e){var r=new m({message:e.message,service:"correios-alt"});throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço dos Correios Alt."),r}function x(e,r){var t="https://viacep.com.br/ws/".concat(e,"/json/"),o={method:"GET",mode:"cors",headers:{"content-type":"application/json;charset=utf-8"},timeout:r.timeout||3e4};return"undefined"==typeof window&&(o.headers["user-agent"]="cep-promise"),i(t,o).then(A).then(_).then(T).catch(F)}function A(e){if(e.ok)return e.json();throw Error("Erro ao se conectar com o serviço ViaCEP.")}function _(e){if(!0===e.erro)throw new Error("CEP não encontrado na base do ViaCEP.");return e}function T(e){return{cep:e.cep.replace("-",""),state:e.uf,city:e.localidade,neighborhood:e.bairro,street:e.logradouro,service:"viacep"}}function F(e){var r=new m({message:e.message,service:"viacep"});throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço ViaCEP."),r}function R(e,r){var t="".concat(e.slice(0,5),"-").concat(e.slice(5)),o="https://cdn.apicep.com/file/apicep/".concat(t,".json"),n={method:"GET",mode:"cors",headers:{accept:"application/json"},timeout:r.timeout||3e4};return i(o,n).then(I).then(N).then(k).catch(M)}function I(e){if(e.ok)return e.json();throw Error("Erro ao se conectar com o serviço WideNet.")}function N(e){if(!1===e.ok||200!==e.status)throw new Error("CEP não encontrado na base do WideNet.");return e}function k(e){return{cep:e.code.replace("-",""),state:e.state,city:e.city,neighborhood:e.district,street:e.address,service:"widenet"}}function M(e){var r=new m({message:e.message,service:"widenet"});throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço WideNet."),r}function z(e,r){var t="https://brasilapi.com.br/api/cep/v1/".concat(e),o={method:"GET",mode:"cors",headers:{"content-type":"application/json;charset=utf-8"},timeout:r.timeout||3e4};return i(t,o).then(B).then(D).catch(L)}function B(e){if(!1===e.ok||200!==e.status)throw new Error("CEP não encontrado na base do BrasilAPI.");return e.json()}function D(e){return{cep:e.cep,state:e.state,city:e.city,neighborhood:e.neighborhood,street:e.street,service:"brasilapi"}}function L(e){var r=new m({message:e.message,service:"brasilapi"});throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço BrasilAPI."),r}function V(){return"undefined"!=typeof window?{viacep:x,widenet:R,brasilapi:z}:{correios:v,"correios-alt":j,viacep:x,widenet:R,brasilapi:z}}function G(t){return new Promise(function(e,r){return Promise.resolve(t).then(r,e)})}Promise.any=function(e){return G(Promise.all(f(e).map(G)))};var U=Promise,W=8;function q(e){var r=t(e);if("number"===r||"string"===r)return e;throw new h({message:"Erro ao inicializar a instância do CepPromise.",type:"validation_error",errors:[{message:"Você deve chamar o construtor utilizando uma String ou um Number.",service:"cep_validation"}]})}function X(e){return e.toString().replace(/\D+/g,"")}function H(e){return"0".repeat(W-e.length)+e}function J(e){if(e.length<=W)return e;throw new h({message:"CEP deve conter exatamente ".concat(W," caracteres."),type:"validation_error",errors:[{message:"CEP informado possui mais do que ".concat(W," caracteres."),service:"cep_validation"}]})}function $(e){if(void 0!==e.length)throw new h({message:"Todos os serviços de CEP retornaram erro.",type:"service_error",errors:e});throw e}function K(e){var r=e.message,t=e.type,o=e.errors;throw new h({message:r,type:t,errors:o})}return function(e){var n=1=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,c=!0,a=!1;return{s:function(){t=e[Symbol.iterator]()},n:function(){var e=t.next();return c=e.done,e},e:function(e){a=!0,i=e},f:function(){try{c||null==t.return||t.return()}finally{if(a)throw i}}}}(e);try{for(o.s();!(t=o.n()).done;){var n=t.value;if(!r.includes(n))throw new h({message:"Erro ao inicializar a instância do CepPromise.",type:"validation_error",errors:[{message:'O provider "'.concat(n,'" é inválido. Os providers disponíveis são: ["').concat(r.join('", "'),'"].'),service:"providers_validation"}]})}}catch(e){o.e(e)}finally{o.f()}}(n.providers),e}).then(X).then(J).then(H).then(function(e){return r=e,t=n,o=V(),0!==t.providers.length?U.any(t.providers.map(function(e){return o[e](r,t)})):U.any(Object.values(o).map(function(e){return e(r,t)}));var r,t,o}).catch($).catch(K)}}); \ No newline at end of file +!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r(require("node-fetch")):"function"==typeof define&&define.amd?define(["node-fetch"],r):(e=e||self).cep=r(e.fetch)}(this,function(i){"use strict";function a(e,r,t){return r=u(r),function(e,r){{if(r&&("object"==typeof r||"function"==typeof r))return r;if(void 0!==r)throw new TypeError("Derived constructors may only return object or undefined")}return function(e){if(void 0!==e)return e;throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}(e)}(e,c()?Reflect.construct(r,t||[],u(e).constructor):r.apply(e,t))}function c(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(c=function(){return!!e})()}function n(e){var r=function(e,r){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0===t)return("string"===r?String:Number)(e);var o=t.call(e,r||"default");if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}(e,"string");return"symbol"==typeof r?r:String(r)}function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}function o(e,r){for(var t=0;te.length)&&(r=e.length);for(var t=0,o=new Array(r);t\n\n \n \n \n '.concat(e,"\n \n \n"),headers:{"Content-Type":"text/xml;charset=UTF-8","cache-control":"no-cache"},timeout:r.timeout||3e4};return i("https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente",t).then(b).catch(j)}function b(e){return e.ok?e.text().then(g).then(P):e.text().then(w).then(E)}function g(e){try{var r;return(null!==(r=e.replace(/\r?\n|\r/g,"").match(/(.*)<\/return>/)[0])&&void 0!==r?r:"").replace("","").replace("","").split(/");return 1(.*)<\/faultstring>/)[0])&&void 0!==r?r:"").replace("","").replace("","")}catch(e){throw new Error("Não foi possível interpretar o XML de resposta.")}}function E(e){throw new Error(e)}function P(e){return{cep:e.cep,state:e.uf,city:e.cidade,neighborhood:e.bairro,street:e.end,service:"correios"}}function j(e){var r=new v({message:e.message,service:"correios"});throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço dos Correios."),r}var C=null;function O(e,r){var t={method:"POST",mode:"cors",headers:{"content-type":"application/x-www-form-urlencoded; charset=UTF-8",Referer:"https://buscacepinter.correios.com.br/app/endereco/index.php","Referrer-Policy":"strict-origin-when-cross-origin"},body:"endereco=".concat(C=e,"&tipoCEP=ALL"),timeout:r.timeout||3e4};return console.log(t),i("https://buscacepinter.correios.com.br/app/endereco/carrega-cep-endereco.php",t).then(S).then(A).catch(x)}function S(e){return e.json().then(function(e){if(0===e.total||e.erro||""===e.dados[0].cep||e.dados[0].cep.replace(/\D/g,"")!==C)throw new Error("CEP não encontrado na base dos Correios.");return e})}function A(e){var r=e.dados[0];return{cep:r.cep,state:r.uf,city:r.localidade,neighborhood:r.bairro,street:r.logradouroDNEC,service:"correios-alt"}}function x(e){var r=new v({message:e.message,service:"correios-alt"});throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço dos Correios Alt."),r}function T(e,r){var t="https://viacep.com.br/ws/".concat(e,"/json/"),o={method:"GET",mode:"cors",headers:{"content-type":"application/json;charset=utf-8"},timeout:r.timeout||3e4};return"undefined"==typeof window&&(o.headers["user-agent"]="cep-promise"),i(t,o).then(_).then(F).then(k).catch(N)}function _(e){if(e.ok)return e.json();throw Error("Erro ao se conectar com o serviço ViaCEP.")}function F(e){if(!0===e.erro)throw new Error("CEP não encontrado na base do ViaCEP.");return e}function k(e){return{cep:e.cep.replace("-",""),state:e.uf,city:e.localidade,neighborhood:e.bairro,street:e.logradouro,service:"viacep"}}function N(e){var r=new v({message:e.message,service:"viacep"});throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço ViaCEP."),r}function I(e,r){var t="https://api.postmon.com.br/v1/cep/".concat(e),o={method:"GET",mode:"cors",headers:{"content-type":"application/json;charset=utf-8"},timeout:r.timeout||3e4};return"undefined"==typeof window&&(o.headers["user-agent"]="cep-promise"),i(t,o).then(B).then(M).catch(R)}function B(e){if(e.ok)return e.json();if(404===e.status)throw new Error("CEP não encontrado na base do Postmon.");throw Error("Erro ao se conectar com o serviço Postmon.")}function M(e){return{cep:e.cep.replace("-",""),state:e.estado,city:e.cidade,neighborhood:e.bairro,street:e.logradouro,service:"postmon"}}function R(e){var r=new v({message:e.message,service:"postmon"});if(e.response&&404===e.reseponse.status)throw new Error("CEP não encontrado na base do Postmon.");throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço Postmon."),r}function z(e,r){var t="".concat(e.slice(0,5),"-").concat(e.slice(5)),o="https://cdn.apicep.com/file/apicep/".concat(t,".json"),n={method:"GET",mode:"cors",headers:{accept:"application/json"},timeout:r.timeout||3e4};return i(o,n).then(D).then(G).then(L).catch(V)}function D(e){if(e.ok)return e.json();throw Error("Erro ao se conectar com o serviço WideNet.")}function G(e){if(!1===e.ok||200!==e.status)throw new Error("CEP não encontrado na base do WideNet.");return e}function L(e){return{cep:e.code.replace("-",""),state:e.state,city:e.city,neighborhood:e.district,street:e.address,service:"widenet"}}function V(e){var r=new v({message:e.message,service:"widenet"});throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço WideNet."),r}function U(e,r){var t="https://brasilapi.com.br/api/cep/v1/".concat(e),o={method:"GET",mode:"cors",headers:{"content-type":"application/json;charset=utf-8"},timeout:r.timeout||3e4};return i(t,o).then(W).then(q).catch(X)}function W(e){if(!1===e.ok||200!==e.status)throw new Error("CEP não encontrado na base do BrasilAPI.");return e.json()}function q(e){return{cep:e.cep,state:e.state,city:e.city,neighborhood:e.neighborhood,street:e.street,service:"brasilapi"}}function X(e){var r=new v({message:e.message,service:"brasilapi"});throw"FetchError"===e.name&&(r.message="Erro ao se conectar com o serviço BrasilAPI."),r}function H(){return"undefined"!=typeof window?{viacep:T,widenet:z,postmon:I,brasilapi:U}:{correios:y,"correios-alt":O,viacep:T,widenet:z,postmon:I,brasilapi:U}}function J(t){return new Promise(function(e,r){return Promise.resolve(t).then(r,e)})}Promise.any=function(e){return J(Promise.all(l(e).map(J)))};var $=Promise,K=8;function Q(e){var r=t(e);if("number"===r||"string"===r)return e;throw new h({message:"Erro ao inicializar a instância do CepPromise.",type:"validation_error",errors:[{message:"Você deve chamar o construtor utilizando uma String ou um Number.",service:"cep_validation"}]})}function Y(e){return e.toString().replace(/\D+/g,"")}function Z(e){return"0".repeat(K-e.length)+e}function ee(e){if(e.length<=K)return e;throw new h({message:"CEP deve conter exatamente ".concat(K," caracteres."),type:"validation_error",errors:[{message:"CEP informado possui mais do que ".concat(K," caracteres."),service:"cep_validation"}]})}function re(e){if(void 0!==e.length)throw new h({message:"Todos os serviços de CEP retornaram erro.",type:"service_error",errors:e});throw e}function te(e){var r=e.message,t=e.type,o=e.errors;throw new h({message:r,type:t,errors:o})}return function(e){var n=1=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,c=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return a=e.done,e},e:function(e){c=!0,i=e},f:function(){try{a||null==t.return||t.return()}finally{if(c)throw i}}}}(e);try{for(o.s();!(t=o.n()).done;){var n=t.value;if(!r.includes(n))throw new h({message:"Erro ao inicializar a instância do CepPromise.",type:"validation_error",errors:[{message:'O provider "'.concat(n,'" é inválido. Os providers disponíveis são: ["').concat(r.join('", "'),'"].'),service:"providers_validation"}]})}}catch(e){o.e(e)}finally{o.f()}}(n.providers),e}).then(Y).then(ee).then(Z).then(function(e){return r=e,t=n,o=H(),0!==t.providers.length?$.any(t.providers.map(function(e){return o[e](r,t)})):$.any(Object.values(o).map(function(e){return e(r,t)}));var r,t,o}).catch(re).catch(te)}}); \ No newline at end of file diff --git a/src/services/correios-alt.js b/src/services/correios-alt.js index aece2a0..c93d2a5 100644 --- a/src/services/correios-alt.js +++ b/src/services/correios-alt.js @@ -2,11 +2,12 @@ import fetch from 'node-fetch' import ServiceError from '../errors/service.js' - +let queriedCep = null; export default function fetchCorreiosAltAPIService( cepWithLeftPad, configurations ) { + queriedCep = cepWithLeftPad; const url = 'https://buscacepinter.correios.com.br/app/endereco/carrega-cep-endereco.php' const options = { method: 'POST', @@ -28,7 +29,7 @@ export default function fetchCorreiosAltAPIService( function parseResponse(response) { return response.json().then(result => { - if (result.total === 0 || result.erro || result.dados[0].cep === "") { + if (result.total === 0 || result.erro || result.dados[0].cep === "" || result.dados[0].cep.replace(/\D/g, '') !== queriedCep) { throw new Error('CEP não encontrado na base dos Correios.') } return result diff --git a/src/services/index.js b/src/services/index.js index 22a30e3..a985f2c 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -1,6 +1,7 @@ import Correios from './correios' import CorreiosAlt from './correios-alt' import ViaCep from './viacep' +import Postmon from './postmon' import WideNet from './widenet' import BrasilAPI from './brasilapi.js' @@ -11,6 +12,7 @@ export function getAvailableServices () { return { viacep: ViaCep, widenet: WideNet, + postmon: Postmon, brasilapi: BrasilAPI } } @@ -20,6 +22,7 @@ export function getAvailableServices () { 'correios-alt': CorreiosAlt, viacep: ViaCep, widenet: WideNet, + postmon: Postmon, brasilapi: BrasilAPI } } diff --git a/src/services/postmon.js b/src/services/postmon.js new file mode 100644 index 0000000..96bfe98 --- /dev/null +++ b/src/services/postmon.js @@ -0,0 +1,63 @@ +"use strict"; + +import fetch from "node-fetch"; +import ServiceError from "../errors/service.js"; + +export default function fetchViaCepService(cepWithLeftPad, configurations) { + const url = `https://api.postmon.com.br/v1/cep/${cepWithLeftPad}`; + const options = { + method: "GET", + mode: "cors", + headers: { + "content-type": "application/json;charset=utf-8", + }, + timeout: configurations.timeout || 30000, + }; + + if (typeof window == "undefined") { + options.headers["user-agent"] = "cep-promise"; + } + + return fetch(url, options) + .then(analyzeAndParseResponse) + .then(extractCepValuesFromResponse) + .catch(throwApplicationError); +} + +function analyzeAndParseResponse(response) { + if (response.ok) { + return response.json(); + } else if (response.status === 404) { + throw new Error("CEP não encontrado na base do Postmon."); + } + + throw Error("Erro ao se conectar com o serviço Postmon."); +} + +function extractCepValuesFromResponse(responseObject) { + return { + cep: responseObject.cep.replace("-", ""), + state: responseObject.estado, + city: responseObject.cidade, + neighborhood: responseObject.bairro, + street: responseObject.logradouro, + service: "postmon", + }; +} + +function throwApplicationError(error) { + const serviceError = new ServiceError({ + message: error.message, + service: "postmon", + }); + + if (!!error.response && error.reseponse.status === 404) { + throw new Error("CEP não encontrado na base do Postmon."); + } + + if (error.name === "FetchError") { + serviceError.message = "Erro ao se conectar com o serviço Postmon."; + } + + throw serviceError; +} diff --git a/test/e2e/cep-promise.spec.js b/test/e2e/cep-promise.spec.js index 48bbce3..7d77b04 100644 --- a/test/e2e/cep-promise.spec.js +++ b/test/e2e/cep-promise.spec.js @@ -19,17 +19,17 @@ describe('[e2e] cep-promise', () => { }) describe('when invoked with a valid "05010000" string', () => { - it('should fulfill with correct address', () => cep('05010000') - .then(address => { - expect(address).to.deep.equal({ - cep: '05010000', - state: 'SP', - city: 'São Paulo', - neighborhood: 'Perdizes', - street: 'Rua Caiubi', - service: address.service - })}) - ) + it('should fulfill with correct address', () => + cep('05010000').then((address) => { + expect(address).to.deep.equal({ + cep: '05010000', + state: 'SP', + city: 'São Paulo', + neighborhood: 'Perdizes', + street: 'Rua Caiubi', + service: address.service, + }) + })) }) describe('when invoked with a valid 05010000 number', () => { @@ -37,19 +37,19 @@ describe('[e2e] cep-promise', () => { const address = await cep(5010000) expect(address).to.deep.equal({ - cep: '05010000', - state: 'SP', - city: 'São Paulo', - neighborhood: 'Perdizes', - street: 'Rua Caiubi', - service: address.service - }) + cep: '05010000', + state: 'SP', + city: 'São Paulo', + neighborhood: 'Perdizes', + street: 'Rua Caiubi', + service: address.service, + }) }) }) describe('when invoked with an inexistent "99999999" CEP', () => { it('should reject with "service_error"', () => { - return cep('99999999').catch(error => { + return cep('99999999').catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -59,25 +59,29 @@ describe('[e2e] cep-promise', () => { errors: [ { message: 'CEP INVÁLIDO', - service: 'correios' + service: 'correios', }, { message: 'Erro ao se conectar com o serviço dos Correios Alt.', - service: 'correios-alt' + service: 'correios-alt', }, { message: 'CEP não encontrado na base do ViaCEP.', - service: 'viacep' + service: 'viacep', + }, + { + service: 'widenet', }, { - service: 'widenet' + message: 'CEP não encontrado na base do Postmon.', + service: 'postmon', }, { name: 'ServiceError', message: 'CEP não encontrado na base do BrasilAPI.', - service: 'brasilapi' - } - ] + service: 'brasilapi', + }, + ], }) }) }) @@ -85,7 +89,7 @@ describe('[e2e] cep-promise', () => { describe('when invoked with an invalid "123456789" CEP', () => { it('should reject with "validation_error"', () => { - return cep('123456789').catch(error => { + return cep('123456789').catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -95,9 +99,9 @@ describe('[e2e] cep-promise', () => { errors: [ { service: 'cep_validation', - message: 'CEP informado possui mais do que 8 caracteres.' - } - ] + message: 'CEP informado possui mais do que 8 caracteres.', + }, + ], }) }) }) diff --git a/test/unit/cep-promise-browser.spec.js b/test/unit/cep-promise-browser.spec.js index db067db..444c805 100644 --- a/test/unit/cep-promise-browser.spec.js +++ b/test/unit/cep-promise-browser.spec.js @@ -58,7 +58,7 @@ describe('[unit] cep-promise for browser', () => { describe('when invoked without arguments', () => { it('should reject with "validation_error"', () => { - return cep().catch(error => { + return cep().catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -69,9 +69,9 @@ describe('[unit] cep-promise for browser', () => { { message: 'Você deve chamar o construtor utilizando uma String ou um Number.', - service: 'cep_validation' - } - ] + service: 'cep_validation', + }, + ], }) }) }) @@ -79,7 +79,7 @@ describe('[unit] cep-promise for browser', () => { describe('when invoked with an Array', () => { it('should reject with "validation_error"', () => { - return cep([1, 2, 3]).catch(error => { + return cep([1, 2, 3]).catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -90,9 +90,9 @@ describe('[unit] cep-promise for browser', () => { { message: 'Você deve chamar o construtor utilizando uma String ou um Number.', - service: 'cep_validation' - } - ] + service: 'cep_validation', + }, + ], }) }) }) @@ -100,7 +100,7 @@ describe('[unit] cep-promise for browser', () => { describe('when invoked with an Object', () => { it('should reject with "validation_error"', () => { - return cep({ nintendo: true, ps: false, xbox: false }).catch(error => { + return cep({ nintendo: true, ps: false, xbox: false }).catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -111,9 +111,9 @@ describe('[unit] cep-promise for browser', () => { { message: 'Você deve chamar o construtor utilizando uma String ou um Number.', - service: 'cep_validation' - } - ] + service: 'cep_validation', + }, + ], }) }) }) @@ -123,7 +123,7 @@ describe('[unit] cep-promise for browser', () => { it('should reject with "validation_error"', () => { return cep(function zelda() { return 'link' - }).catch(error => { + }).catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -134,9 +134,9 @@ describe('[unit] cep-promise for browser', () => { { message: 'Você deve chamar o construtor utilizando uma String ou um Number.', - service: 'cep_validation' - } - ] + service: 'cep_validation', + }, + ], }) }) }) @@ -165,16 +165,16 @@ describe('[unit] cep-promise for browser', () => { path.join(__dirname, '/fixtures/brasilapi-cep-05010000-found.json') ) - return cep('05010000') - .then(address => expect(address).to.deep.equal({ + return cep('05010000').then((address) => + expect(address).to.deep.equal({ cep: '05010000', state: 'SP', city: 'São Paulo', neighborhood: 'Perdizes', street: 'Rua Caiubi', - service: address.service + service: address.service, }) - ) + ) }) }) @@ -201,16 +201,16 @@ describe('[unit] cep-promise for browser', () => { path.join(__dirname, '/fixtures/brasilapi-cep-05010000-found.json') ) - return cep(5010000) - .then(address => expect(address).to.deep.equal({ + return cep(5010000).then((address) => + expect(address).to.deep.equal({ cep: '05010000', state: 'SP', city: 'São Paulo', neighborhood: 'Perdizes', street: 'Rua Caiubi', - service: address.service + service: address.service, }) - ) + ) }) }) @@ -237,16 +237,16 @@ describe('[unit] cep-promise for browser', () => { path.join(__dirname, '/fixtures/brasilapi-cep-99999999-error.json') ) - return cep('05010000') - .then(address => expect(address).to.deep.equal({ + return cep('05010000').then((address) => + expect(address).to.deep.equal({ cep: '05010000', state: 'SP', city: 'São Paulo', neighborhood: 'Perdizes', street: 'Rua Caiubi', - service: 'viacep' + service: 'viacep', }) - ) + ) }) }) @@ -273,15 +273,16 @@ describe('[unit] cep-promise for browser', () => { path.join(__dirname, '/fixtures/brasilapi-cep-99999999-error.json') ) - return cep('5010000') - .then(address => expect(address).to.deep.equal({ + return cep('5010000').then((address) => + expect(address).to.deep.equal({ cep: '05010000', state: 'SP', city: 'São Paulo', neighborhood: 'Perdizes', street: 'Rua Caiubi', - service: 'widenet' - })) + service: 'widenet', + }) + ) }) }) @@ -308,15 +309,16 @@ describe('[unit] cep-promise for browser', () => { path.join(__dirname, '/fixtures/brasilapi-cep-05010000-found.json') ) - return cep('5010000') - .then(address => expect(address).to.deep.equal({ + return cep('5010000').then((address) => + expect(address).to.deep.equal({ cep: '05010000', state: 'SP', city: 'São Paulo', neighborhood: 'Perdizes', street: 'Rua Caiubi', - service: 'brasilapi' - })) + service: 'brasilapi', + }) + ) }) }) @@ -342,8 +344,14 @@ describe('[unit] cep-promise for browser', () => { 404, path.join(__dirname, '/fixtures/brasilapi-cep-99999999-error.json') ) + nock('https://api.postmon.com.br') + .get('/v1/cep/99999999') + .replyWithFile( + 404, + path.join(__dirname, '/fixtures/postmon-cep-99999999-error.json') + ) - return cep('99999999').catch(error => { + return cep('99999999').catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -353,13 +361,17 @@ describe('[unit] cep-promise for browser', () => { errors: [ { message: 'CEP não encontrado na base do ViaCEP.', - service: 'viacep' + service: 'viacep', }, { message: 'CEP não encontrado na base do WideNet.', - service: 'widenet' - } - ] + service: 'widenet', + }, + { + message: 'CEP não encontrado na base do Postmon.', + service: 'postmon', + }, + ], }) }) }) @@ -367,7 +379,7 @@ describe('[unit] cep-promise for browser', () => { describe('when invoked with an invalid "123456789" CEP', () => { it('should reject with "validation_error"', () => { - return cep('123456789').catch(error => { + return cep('123456789').catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -377,9 +389,9 @@ describe('[unit] cep-promise for browser', () => { errors: [ { service: 'cep_validation', - message: 'CEP informado possui mais do que 8 caracteres.' - } - ] + message: 'CEP informado possui mais do que 8 caracteres.', + }, + ], }) }) }) @@ -398,8 +410,11 @@ describe('[unit] cep-promise for browser', () => { nock('https://brasilapi.com.br/') .get('/api/cep/v1/05010000') .reply(400, '

Bad Request (400)

') + nock('https://api.postmon.com.br') + .get('/v1/cep/05010000') + .reply(400, '

Bad Request (400)

') - return cep('05010000').catch(error => { + return cep('05010000').catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -409,18 +424,22 @@ describe('[unit] cep-promise for browser', () => { errors: [ { message: 'Erro ao se conectar com o serviço ViaCEP.', - service: 'viacep' + service: 'viacep', }, { message: 'Erro ao se conectar com o serviço WideNet.', - service: 'widenet' + service: 'widenet', + }, + { + message: 'Erro ao se conectar com o serviço Postmon.', + service: 'postmon', }, { name: 'ServiceError', message: 'CEP não encontrado na base do BrasilAPI.', - service: 'brasilapi' - } - ] + service: 'brasilapi', + }, + ], }) }) }) diff --git a/test/unit/cep-promise-node.spec.js b/test/unit/cep-promise-node.spec.js index c6a5f9b..39ba682 100644 --- a/test/unit/cep-promise-node.spec.js +++ b/test/unit/cep-promise-node.spec.js @@ -61,6 +61,12 @@ describe('[unit] cep-promise for node', () => { 200, path.join(__dirname, '/fixtures/brasilapi-cep-05010000-found.json') ) + nock('https://api.postmon.com.br') + .get('/v1/cep/05010000') + .replyWithFile( + 200, + path.join(__dirname, '/fixtures/postmon-cep-05010000-found.json') + ) const cepPromise = cep('05010000') expect(cepPromise.then).to.be.a('function') @@ -70,7 +76,7 @@ describe('[unit] cep-promise for node', () => { describe('when invoked without arguments', () => { it('should reject with "validation_error"', () => { - return cep().catch(error => { + return cep().catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -81,9 +87,9 @@ describe('[unit] cep-promise for node', () => { { message: 'Você deve chamar o construtor utilizando uma String ou um Number.', - service: 'cep_validation' - } - ] + service: 'cep_validation', + }, + ], }) }) }) @@ -91,7 +97,7 @@ describe('[unit] cep-promise for node', () => { describe('when invoked with an Array', () => { it('should reject with "validation_error"', () => { - return cep([1, 2, 3]).catch(error => { + return cep([1, 2, 3]).catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -102,9 +108,9 @@ describe('[unit] cep-promise for node', () => { { message: 'Você deve chamar o construtor utilizando uma String ou um Number.', - service: 'cep_validation' - } - ] + service: 'cep_validation', + }, + ], }) }) }) @@ -112,7 +118,7 @@ describe('[unit] cep-promise for node', () => { describe('when invoked with an Object', () => { it('should reject with "validation_error"', () => { - return cep({ nintendo: true, ps: false, xbox: false }).catch(error => { + return cep({ nintendo: true, ps: false, xbox: false }).catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -123,9 +129,9 @@ describe('[unit] cep-promise for node', () => { { message: 'Você deve chamar o construtor utilizando uma String ou um Number.', - service: 'cep_validation' - } - ] + service: 'cep_validation', + }, + ], }) }) }) @@ -135,7 +141,7 @@ describe('[unit] cep-promise for node', () => { it('should reject with "validation_error"', () => { return cep(function zelda() { return 'link' - }).catch(error => { + }).catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -146,9 +152,9 @@ describe('[unit] cep-promise for node', () => { { message: 'Você deve chamar o construtor utilizando uma String ou um Number.', - service: 'cep_validation' - } - ] + service: 'cep_validation', + }, + ], }) }) }) @@ -191,16 +197,16 @@ describe('[unit] cep-promise for node', () => { path.join(__dirname, '/fixtures/brasilapi-cep-05010000-found.json') ) - return cep('05010000') - .then(address => expect(address).to.deep.equal({ + return cep('05010000').then((address) => + expect(address).to.deep.equal({ cep: '05010000', state: 'SP', city: 'São Paulo', neighborhood: 'Perdizes', street: 'Rua Caiubi', - service: address.service + service: address.service, }) - ) + ) }) }) @@ -241,16 +247,16 @@ describe('[unit] cep-promise for node', () => { path.join(__dirname, '/fixtures/brasilapi-cep-05010000-found.json') ) - return cep(5010000) - .then(address => expect(address).to.deep.equal({ + return cep(5010000).then((address) => + expect(address).to.deep.equal({ cep: '05010000', state: 'SP', city: 'São Paulo', neighborhood: 'Perdizes', street: 'Rua Caiubi', - service: address.service + service: address.service, }) - ) + ) }) }) @@ -291,17 +297,16 @@ describe('[unit] cep-promise for node', () => { path.join(__dirname, '/fixtures/brasilapi-cep-99999999-error.json') ) - - return cep('05010000') - .then(address => expect(address).to.deep.equal({ - cep: '05010000', - state: 'SP', - city: 'São Paulo', - neighborhood: 'Perdizes', - street: 'Rua Caiubi', - service: 'correios' - }) - ) + return cep('05010000').then((address) => + expect(address).to.deep.equal({ + cep: '05010000', + state: 'SP', + city: 'São Paulo', + neighborhood: 'Perdizes', + street: 'Rua Caiubi', + service: 'correios', + }) + ) }) }) @@ -336,23 +341,30 @@ describe('[unit] cep-promise for node', () => { ) nock('https://brasilapi.com.br/') - .get('/api/cep/v1/99999999') + .get('/api/cep/v1/05010000') .replyWithFile( 404, path.join(__dirname, '/fixtures/brasilapi-cep-99999999-error.json') ) - - return cep('05010000') - .then(address => expect(address).to.deep.equal({ - cep: '05010000', - state: 'SP', - city: 'São Paulo', - neighborhood: 'Perdizes', - street: 'Rua Caiubi', - service: 'correios-alt' - }) + nock('https://api.postmon.com.br') + .get('/v1/cep/05010000') + .replyWithFile( + 404, + path.join(__dirname, '/fixtures/postmon-cep-99999999-error.json') ) + + return cep('05010000').then((address) => { + expect(address) + .to.deep.equal({ + cep: '05010000', + state: 'SP', + city: 'São Paulo', + neighborhood: 'Perdizes', + street: 'Rua Caiubi', + service: 'correios-alt', + }) + }) }) }) @@ -393,16 +405,16 @@ describe('[unit] cep-promise for node', () => { path.join(__dirname, '/fixtures/brasilapi-cep-99999999-error.json') ) - return cep('05010000') - .then(address => expect(address).to.deep.equal({ + return cep('05010000').then((address) => + expect(address).to.deep.equal({ cep: '05010000', state: 'SP', city: 'São Paulo', neighborhood: 'Perdizes', street: 'Rua Caiubi', - service: 'viacep' + service: 'viacep', }) - ) + ) }) }) @@ -443,15 +455,16 @@ describe('[unit] cep-promise for node', () => { path.join(__dirname, '/fixtures/brasilapi-cep-99999999-error.json') ) - return cep('5010000') - .then(address => expect(address).to.deep.equal({ + return cep('5010000').then((address) => + expect(address).to.deep.equal({ cep: '05010000', state: 'SP', city: 'São Paulo', neighborhood: 'Perdizes', street: 'Rua Caiubi', - service: 'widenet' - })) + service: 'widenet', + }) + ) }) }) @@ -492,15 +505,16 @@ describe('[unit] cep-promise for node', () => { path.join(__dirname, '/fixtures/brasilapi-cep-05010000-found.json') ) - return cep('5010000') - .then(address => expect(address).to.deep.equal({ + return cep('5010000').then((address) => + expect(address).to.deep.equal({ cep: '05010000', state: 'SP', city: 'São Paulo', neighborhood: 'Perdizes', street: 'Rua Caiubi', - service: 'brasilapi' - })) + service: 'brasilapi', + }) + ) }) }) @@ -541,15 +555,16 @@ describe('[unit] cep-promise for node', () => { path.join(__dirname, '/fixtures/brasilapi-cep-05010000-found.json') ) - return cep('5010000') - .then(address => expect(address).to.deep.equal({ + return cep('5010000').then((address) => + expect(address).to.deep.equal({ cep: '05010000', state: 'SP', city: 'São Paulo', neighborhood: 'Perdizes', street: 'Rua Caiubi', - service: address.service - })) + service: address.service, + }) + ) }) }) @@ -589,15 +604,16 @@ describe('[unit] cep-promise for node', () => { path.join(__dirname, '/fixtures/brasilapi-cep-05010000-found.json') ) - return cep('5010000') - .then(address => expect(address).to.deep.equal({ + return cep('5010000').then((address) => + expect(address).to.deep.equal({ cep: '05010000', state: 'SP', city: 'São Paulo', neighborhood: 'Perdizes', street: 'Rua Caiubi', - service: address.service - })) + service: address.service, + }) + ) }) }) @@ -624,6 +640,13 @@ describe('[unit] cep-promise for node', () => { path.join(__dirname, '/fixtures/viacep-cep-99999999-error.json') ) + nock('https://api.postmon.com.br') + .get('/v1/cep/99999999') + .replyWithFile( + 404, + path.join(__dirname, '/fixtures/postmon-cep-99999999-error.json') + ) + nock('https://cdn.apicep.com') .get('/file/apicep/99999-999.json') .replyWithFile( @@ -638,7 +661,7 @@ describe('[unit] cep-promise for node', () => { path.join(__dirname, '/fixtures/brasilapi-cep-99999999-error.json') ) - return cep('99999999').catch(error => { + return cep('99999999').catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -648,21 +671,25 @@ describe('[unit] cep-promise for node', () => { errors: [ { message: 'CEP NAO ENCONTRADO', - service: 'correios' + service: 'correios', }, { message: 'CEP não encontrado na base dos Correios.', - service: 'correios-alt' + service: 'correios-alt', }, { message: 'CEP não encontrado na base do ViaCEP.', - service: 'viacep' + service: 'viacep', }, { message: 'CEP não encontrado na base do WideNet.', - service: 'widenet' - } - ] + service: 'widenet', + }, + { + message: 'CEP não encontrado na base do Postmon.', + service: 'postmon', + }, + ], }) }) }) @@ -670,7 +697,7 @@ describe('[unit] cep-promise for node', () => { describe('when invoked with an invalid "123456789" CEP', () => { it('should reject with "validation_error"', () => { - return cep('123456789').catch(error => { + return cep('123456789').catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -680,9 +707,9 @@ describe('[unit] cep-promise for node', () => { errors: [ { service: 'cep_validation', - message: 'CEP informado possui mais do que 8 caracteres.' - } - ] + message: 'CEP informado possui mais do que 8 caracteres.', + }, + ], }) }) }) @@ -712,7 +739,7 @@ describe('[unit] cep-promise for node', () => { .get('/api/cep/v1/05010000') .reply(400, '

Bad Request (400)

') - return cep('05010000').catch(error => { + return cep('05010000').catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -722,26 +749,26 @@ describe('[unit] cep-promise for node', () => { errors: [ { message: 'Erro ao se conectar com o serviço dos Correios.', - service: 'correios' + service: 'correios', }, { message: 'Erro ao se conectar com o serviço dos Correios Alt.', - service: 'correios-alt' + service: 'correios-alt', }, { message: 'Erro ao se conectar com o serviço ViaCEP.', - service: 'viacep' + service: 'viacep', }, { message: 'Erro ao se conectar com o serviço WideNet.', - service: 'widenet' + service: 'widenet', }, { name: 'ServiceError', message: 'CEP não encontrado na base do BrasilAPI.', - service: 'brasilapi' - } - ] + service: 'brasilapi', + }, + ], }) }) }) @@ -758,7 +785,7 @@ describe('[unit] cep-promise for node', () => { nock('https://buscacepinter.correios.com.br') .post('/app/endereco/carrega-cep-endereco.php') - .reply(200, {erro:true}) + .reply(200, { erro: true }) nock('https://viacep.com.br') .get('/ws/05010000/json/') @@ -772,7 +799,7 @@ describe('[unit] cep-promise for node', () => { .get('/api/cep/v1/05010000') .reply(400, '

Bad Request (400)

') - return cep('05010000').catch(error => { + return cep('05010000').catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -782,26 +809,26 @@ describe('[unit] cep-promise for node', () => { errors: [ { message: 'Não foi possível interpretar o XML de resposta.', - service: 'correios' + service: 'correios', }, { message: 'CEP não encontrado na base dos Correios.', - service: 'correios-alt' + service: 'correios-alt', }, { message: 'Erro ao se conectar com o serviço ViaCEP.', - service: 'viacep' + service: 'viacep', }, { message: 'Erro ao se conectar com o serviço WideNet.', - service: 'widenet' + service: 'widenet', }, { name: 'ServiceError', message: 'CEP não encontrado na base do BrasilAPI.', - service: 'brasilapi' - } - ] + service: 'brasilapi', + }, + ], }) }) }) @@ -817,7 +844,7 @@ describe('[unit] cep-promise for node', () => { nock('https://buscacepinter.correios.com.br') .post('/app/endereco/carrega-cep-endereco.php') - .reply(200, {erro:true}) + .reply(200, { erro: true }) nock('https://viacep.com.br') .get('/ws/05010000/json/') @@ -837,7 +864,7 @@ describe('[unit] cep-promise for node', () => { 'getaddrinfo ENOTFOUND apps.correios.com.br apps.correios.com.br:443' ) - return cep('05010000').catch(error => { + return cep('05010000').catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -847,25 +874,25 @@ describe('[unit] cep-promise for node', () => { errors: [ { message: 'Erro ao se conectar com o serviço dos Correios.', - service: 'correios' + service: 'correios', }, { message: 'CEP não encontrado na base dos Correios.', - service: 'correios-alt' + service: 'correios-alt', }, { message: 'Erro ao se conectar com o serviço ViaCEP.', - service: 'viacep' + service: 'viacep', }, { message: 'Erro ao se conectar com o serviço WideNet.', - service: 'widenet' + service: 'widenet', }, { message: 'Erro ao se conectar com o serviço BrasilAPI.', - service: 'brasilapi' - } - ] + service: 'brasilapi', + }, + ], }) }) }) diff --git a/test/unit/cep-promise-providers.spec.js b/test/unit/cep-promise-providers.spec.js index 785c781..8cb5527 100644 --- a/test/unit/cep-promise-providers.spec.js +++ b/test/unit/cep-promise-providers.spec.js @@ -20,7 +20,7 @@ describe('when invoked with providers parameter', () => { describe('and the providers param is a string', () => { it('should reject with "validation_error"', () => { - return cep('05010000', { providers: 'viacep' }).catch(error => { + return cep('05010000', { providers: 'viacep' }).catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -30,9 +30,9 @@ describe('when invoked with providers parameter', () => { errors: [ { service: 'providers_validation', - message: 'O parâmetro providers deve ser uma lista.' - } - ] + message: 'O parâmetro providers deve ser uma lista.', + }, + ], }) }) }) @@ -40,7 +40,7 @@ describe('when invoked with providers parameter', () => { describe('and the providers param is a integer', () => { it('should reject with "validation_error"', () => { - return cep('05010000', { providers: 123 }).catch(error => { + return cep('05010000', { providers: 123 }).catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -50,9 +50,9 @@ describe('when invoked with providers parameter', () => { errors: [ { service: 'providers_validation', - message: 'O parâmetro providers deve ser uma lista.' - } - ] + message: 'O parâmetro providers deve ser uma lista.', + }, + ], }) }) }) @@ -60,7 +60,7 @@ describe('when invoked with providers parameter', () => { describe('and the providers param is a object', () => { it('should reject with "validation_error"', () => { - return cep('05010000', { providers: {} }).catch(error => { + return cep('05010000', { providers: {} }).catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -70,9 +70,9 @@ describe('when invoked with providers parameter', () => { errors: [ { service: 'providers_validation', - message: 'O parâmetro providers deve ser uma lista.' - } - ] + message: 'O parâmetro providers deve ser uma lista.', + }, + ], }) }) }) @@ -80,7 +80,7 @@ describe('when invoked with providers parameter', () => { describe('and the providers param is a function', () => { it('should reject with "validation_error"', () => { - return cep('05010000', { providers: () => () => { } }).catch(error => { + return cep('05010000', { providers: () => () => {} }).catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -90,9 +90,9 @@ describe('when invoked with providers parameter', () => { errors: [ { service: 'providers_validation', - message: 'O parâmetro providers deve ser uma lista.' - } - ] + message: 'O parâmetro providers deve ser uma lista.', + }, + ], }) }) }) @@ -102,7 +102,7 @@ describe('when invoked with providers parameter', () => { it('should reject with "validation_error"', () => { const availableProviders = Object.keys(getAvailableServices()) - return cep('05010000', { providers: [123, 'viacep'] }).catch(error => { + return cep('05010000', { providers: [123, 'viacep'] }).catch((error) => { return expect(error) .to.be.an.instanceOf(CepPromiseError) .and.containSubset({ @@ -110,17 +110,18 @@ describe('when invoked with providers parameter', () => { type: 'validation_error', errors: [ { - message: - `O provider "123" é inválido. Os providers disponíveis são: ["${availableProviders.join('", "')}"].`, - service: 'providers_validation' - } - ] + message: `O provider "123" é inválido. Os providers disponíveis são: ["${availableProviders.join( + '", "' + )}"].`, + service: 'providers_validation', + }, + ], }) }) }) }) - describe('and the providers param is [\'viacep\']', () => { + describe('and the providers param is ["viacep"]', () => { it('should call only viacep service', () => { const correiosMock = nock('https://apps.correios.com.br') .post('/SigepMasterJPA/AtendeClienteService/AtendeCliente') @@ -142,6 +143,12 @@ describe('when invoked with providers parameter', () => { 200, path.join(__dirname, '/fixtures/viacep-cep-05010000-found.json') ) + const postmonMock = nock('https://api.postmon.com.br') + .get('/v1/cep/05010000') + .replyWithFile( + 200, + path.join(__dirname, '/fixtures/postmon-cep-05010000-found.json') + ) const wideNetMock = nock('https://cdn.apicep.com') .get('/file/apicep/05010-000.json') @@ -150,26 +157,81 @@ describe('when invoked with providers parameter', () => { path.join(__dirname, '/fixtures/widenet-cep-05010000-found.json') ) - return cep('05010000', { providers: ['viacep'] }) - .then(address => { - expect(address).to.deep.equal({ - cep: '05010000', - state: 'SP', - city: 'São Paulo', - neighborhood: 'Perdizes', - street: 'Rua Caiubi', - service: 'viacep' - }) + return cep('05010000', { providers: ['viacep'] }).then((address) => { + expect(address).to.deep.equal({ + cep: '05010000', + state: 'SP', + city: 'São Paulo', + neighborhood: 'Perdizes', + street: 'Rua Caiubi', + service: 'viacep', + }) - expect(viaCepMock.isDone()).to.be.equal(true) - expect(correiosMock.isDone()).to.be.equal(false) - expect(correiosAltMock.isDone()).to.be.equal(false) - expect(wideNetMock.isDone()).to.be.equal(false) + expect(viaCepMock.isDone()).to.be.equal(true) + expect(correiosMock.isDone()).to.be.equal(false) + expect(correiosAltMock.isDone()).to.be.equal(false) + expect(wideNetMock.isDone()).to.be.equal(false) + expect(postmonMock.isDone()).to.be.equal(false) + }) + }) + }) + + describe('and the providers param is ["postmon"]', () => { + it('should call only postmon service', () => { + const correiosMock = nock('https://apps.correios.com.br') + .post('/SigepMasterJPA/AtendeClienteService/AtendeCliente') + .replyWithFile( + 200, + path.join(__dirname, '/fixtures/response-cep-05010000-found.xml') + ) + + const correiosAltMock = nock('https://buscacepinter.correios.com.br') + .post('/app/cep/carrega-cep.php') + .replyWithFile( + 200, + path.join(__dirname, '/fixtures/correios-alt-cep-05010000-found.json') + ) + + const viaCepMock = nock('https://viacep.com.br') + .get('/ws/05010000/json/') + .replyWithFile( + 200, + path.join(__dirname, '/fixtures/viacep-cep-05010000-found.json') + ) + const postmonMock = nock('https://api.postmon.com.br') + .get('/v1/cep/05010000') + .replyWithFile( + 200, + path.join(__dirname, '/fixtures/postmon-cep-05010000-found.json') + ) + + const wideNetMock = nock('https://cdn.apicep.com') + .get('/file/apicep/05010-000.json') + .replyWithFile( + 200, + path.join(__dirname, '/fixtures/widenet-cep-05010000-found.json') + ) + + return cep('05010000', { providers: ['postmon'] }).then((address) => { + expect(address).to.deep.equal({ + cep: '05010000', + state: 'SP', + city: 'São Paulo', + neighborhood: 'Perdizes', + street: 'Rua Caiubi', + service: 'postmon', }) + + expect(viaCepMock.isDone()).to.be.equal(false) + expect(correiosMock.isDone()).to.be.equal(false) + expect(correiosAltMock.isDone()).to.be.equal(false) + expect(wideNetMock.isDone()).to.be.equal(false) + expect(postmonMock.isDone()).to.be.equal(true) + }) }) }) - describe('and the providers param is [\'widenet\']', () => { + describe('and the providers param is ["widenet"]', () => { it('should call only widenet service', () => { const correiosMock = nock('https://apps.correios.com.br') .post('/SigepMasterJPA/AtendeClienteService/AtendeCliente') @@ -198,27 +260,33 @@ describe('when invoked with providers parameter', () => { 200, path.join(__dirname, '/fixtures/widenet-cep-05010000-found.json') ) + const postmonMock = nock('https://api.postmon.com.br') + .get('/v1/cep/05010000') + .replyWithFile( + 200, + path.join(__dirname, '/fixtures/postmon-cep-05010000-found.json') + ) - return cep('05010000', { providers: ['widenet'] }) - .then(address => { - expect(address).to.deep.equal({ - cep: '05010000', - state: 'SP', - city: 'São Paulo', - neighborhood: 'Perdizes', - street: 'Rua Caiubi', - service: 'widenet' - }) + return cep('05010000', { providers: ['widenet'] }).then((address) => { + expect(address).to.deep.equal({ + cep: '05010000', + state: 'SP', + city: 'São Paulo', + neighborhood: 'Perdizes', + street: 'Rua Caiubi', + service: 'widenet', + }) - expect(wideNetMock.isDone()).to.be.equal(true) - expect(viaCepMock.isDone()).to.be.equal(false) - expect(correiosMock.isDone()).to.be.equal(false) - expect(correiosAltMock.isDone()).to.be.equal(false) + expect(wideNetMock.isDone()).to.be.equal(true) + expect(viaCepMock.isDone()).to.be.equal(false) + expect(correiosMock.isDone()).to.be.equal(false) + expect(correiosAltMock.isDone()).to.be.equal(false) + expect(postmonMock.isDone()).to.be.equal(false) }) }) }) - describe('and the providers param is [\'correios\']', () => { + describe('and the providers param is ["correios"]', () => { it('should call only correios service', () => { const correiosMock = nock('https://apps.correios.com.br') .post('/SigepMasterJPA/AtendeClienteService/AtendeCliente') @@ -226,6 +294,12 @@ describe('when invoked with providers parameter', () => { 200, path.join(__dirname, '/fixtures/response-cep-05010000-found.xml') ) + const postmonMock = nock('https://api.postmon.com.br') + .get('/v1/cep/05010000') + .replyWithFile( + 200, + path.join(__dirname, '/fixtures/postmon-cep-05010000-found.json') + ) const correiosAltMock = nock('https://buscacepinter.correios.com.br') .post('/app/endereco/carrega-cep-endereco.php') @@ -248,33 +322,39 @@ describe('when invoked with providers parameter', () => { path.join(__dirname, '/fixtures/widenet-cep-05010000-found.json') ) - return cep('05010000', { providers: ['correios'] }) - .then(address => { - expect(address).to.deep.equal({ - cep: '05010000', - state: 'SP', - city: 'São Paulo', - neighborhood: 'Perdizes', - street: 'Rua Caiubi', - service: 'correios' - }) + return cep('05010000', { providers: ['correios'] }).then((address) => { + expect(address).to.deep.equal({ + cep: '05010000', + state: 'SP', + city: 'São Paulo', + neighborhood: 'Perdizes', + street: 'Rua Caiubi', + service: 'correios', + }) - expect(correiosMock.isDone()).to.be.equal(true) - expect(correiosAltMock.isDone()).to.be.equal(false) - expect(viaCepMock.isDone()).to.be.equal(false) - expect(wideNetMock.isDone()).to.be.equal(false) + expect(correiosMock.isDone()).to.be.equal(true) + expect(correiosAltMock.isDone()).to.be.equal(false) + expect(viaCepMock.isDone()).to.be.equal(false) + expect(wideNetMock.isDone()).to.be.equal(false) + expect(postmonMock.isDone()).to.be.equal(false) }) }) }) - describe('and the providers param is [\'correios-alt\']', () => { - it('should call only correios service', () => { + describe('and the providers param is ["correios-alt"]', () => { + it('should call only correios alt service', () => { const correiosMock = nock('https://apps.correios.com.br') .post('/SigepMasterJPA/AtendeClienteService/AtendeCliente') .replyWithFile( 200, path.join(__dirname, '/fixtures/response-cep-05010000-found.xml') ) + const postmonMock = nock('https://api.postmon.com.br') + .get('/v1/cep/05010000') + .replyWithFile( + 200, + path.join(__dirname, '/fixtures/postmon-cep-05010000-found.json') + ) const correiosAltMock = nock('https://buscacepinter.correios.com.br') .post('/app/endereco/carrega-cep-endereco.php') @@ -297,26 +377,28 @@ describe('when invoked with providers parameter', () => { path.join(__dirname, '/fixtures/widenet-cep-05010000-found.json') ) - return cep('05010000', { providers: ['correios-alt']}) - .then(address => { + return cep('05010000', { providers: ['correios-alt'] }).then( + (address) => { expect(address).to.deep.equal({ cep: '05010000', state: 'SP', city: 'São Paulo', neighborhood: 'Perdizes', street: 'Rua Caiubi', - service: 'correios-alt' + service: 'correios-alt', }) expect(correiosMock.isDone()).to.be.equal(false) expect(correiosAltMock.isDone()).to.be.equal(true) expect(viaCepMock.isDone()).to.be.equal(false) expect(wideNetMock.isDone()).to.be.equal(false) - }) + expect(postmonMock.isDone()).to.be.equal(false) + } + ) }) }) - describe('and the providers param is [\'brasilapi\']', () => { + describe('and the providers param is ["brasilapi"]', () => { it('should call only brasilapi service', () => { const correiosMock = nock('https://apps.correios.com.br') .post('/SigepMasterJPA/AtendeClienteService/AtendeCliente') @@ -332,6 +414,13 @@ describe('when invoked with providers parameter', () => { path.join(__dirname, '/fixtures/correios-alt-cep-05010000-found.json') ) + const postmonMock = nock('https://api.postmon.com.br') + .get('/v1/cep/05010000') + .replyWithFile( + 200, + path.join(__dirname, '/fixtures/postmon-cep-05010000-found.json') + ) + const viaCepMock = nock('https://viacep.com.br') .get('/ws/05010000/json/') .replyWithFile( @@ -353,27 +442,27 @@ describe('when invoked with providers parameter', () => { path.join(__dirname, '/fixtures/brasilapi-cep-05010000-found.json') ) - return cep('05010000', { providers: ['brasilapi'] }) - .then(address => { - expect(address).to.deep.equal({ - cep: '05010000', - state: 'SP', - city: 'São Paulo', - neighborhood: 'Perdizes', - street: 'Rua Caiubi', - service: 'brasilapi' - }) - - expect(correiosMock.isDone()).to.be.equal(false) - expect(correiosAltMock.isDone()).to.be.equal(false) - expect(viaCepMock.isDone()).to.be.equal(false) - expect(wideNetMock.isDone()).to.be.equal(false) - expect(brasilAPIMock.isDone()).to.be.equal(true) + return cep('05010000', { providers: ['brasilapi'] }).then((address) => { + expect(address).to.deep.equal({ + cep: '05010000', + state: 'SP', + city: 'São Paulo', + neighborhood: 'Perdizes', + street: 'Rua Caiubi', + service: 'brasilapi', }) + + expect(correiosMock.isDone()).to.be.equal(false) + expect(correiosAltMock.isDone()).to.be.equal(false) + expect(viaCepMock.isDone()).to.be.equal(false) + expect(wideNetMock.isDone()).to.be.equal(false) + expect(postmonMock.isDone()).to.be.equal(false) + expect(brasilAPIMock.isDone()).to.be.equal(true) + }) }) }) - describe('and the providers param is [\'correios, viacep\']', () => { + describe('and the providers param is ["correios, viacep"]', () => { it('should call only correios and viacep services', () => { const correiosMock = nock('https://apps.correios.com.br') .post('/SigepMasterJPA/AtendeClienteService/AtendeCliente') @@ -403,22 +492,31 @@ describe('when invoked with providers parameter', () => { path.join(__dirname, '/fixtures/widenet-cep-05010000-found.json') ) - return cep('05010000', { providers: ['correios', 'viacep'] }) - .then(address => { + const postmonMock = nock('https://api.postmon.com.br') + .get('/v1/cep/05010000') + .replyWithFile( + 200, + path.join(__dirname, '/fixtures/postmon-cep-05010000-found.json') + ) + + return cep('05010000', { providers: ['correios', 'viacep'] }).then( + (address) => { expect(address).to.deep.equal({ cep: '05010000', state: 'SP', city: 'São Paulo', neighborhood: 'Perdizes', street: 'Rua Caiubi', - service: address.service + service: address.service, }) expect(viaCepMock.isDone()).to.be.equal(true) expect(correiosMock.isDone()).to.be.equal(true) expect(correiosAltMock.isDone()).to.be.equal(false) expect(wideNetMock.isDone()).to.be.equal(false) - }) + expect(postmonMock.isDone()).to.be.equal(false) + } + ) }) }) @@ -438,6 +536,13 @@ describe('when invoked with providers parameter', () => { path.join(__dirname, '/fixtures/correios-alt-cep-05010000-found.json') ) + const postmonMock = nock('https://api.postmon.com.br') + .get('/v1/cep/05010000') + .replyWithFile( + 200, + path.join(__dirname, '/fixtures/postmon-cep-05010000-found.json') + ) + const viaCepMock = nock('https://viacep.com.br') .get('/ws/05010000/json/') .replyWithFile( @@ -452,22 +557,22 @@ describe('when invoked with providers parameter', () => { path.join(__dirname, '/fixtures/widenet-cep-05010000-found.json') ) - return cep('05010000', { providers: [] }) - .then(address => { - expect(address).to.deep.equal({ - cep: '05010000', - state: 'SP', - city: 'São Paulo', - neighborhood: 'Perdizes', - street: 'Rua Caiubi', - service: address.service - }) - - expect(viaCepMock.isDone()).to.be.equal(true) - expect(correiosMock.isDone()).to.be.equal(true) - expect(correiosAltMock.isDone()).to.be.equal(true) - expect(wideNetMock.isDone()).to.be.equal(true) + return cep('05010000', { providers: [] }).then((address) => { + expect(address).to.deep.equal({ + cep: '05010000', + state: 'SP', + city: 'São Paulo', + neighborhood: 'Perdizes', + street: 'Rua Caiubi', + service: address.service, }) + + expect(viaCepMock.isDone()).to.be.equal(true) + expect(correiosMock.isDone()).to.be.equal(true) + expect(correiosAltMock.isDone()).to.be.equal(true) + expect(wideNetMock.isDone()).to.be.equal(true) + expect(postmonMock.isDone()).to.be.equal(true) + }) }) }) diff --git a/test/unit/fixtures/postmon-cep-05010000-found.json b/test/unit/fixtures/postmon-cep-05010000-found.json new file mode 100644 index 0000000..ae0d955 --- /dev/null +++ b/test/unit/fixtures/postmon-cep-05010000-found.json @@ -0,0 +1,13 @@ +{ + "bairro": "Perdizes", + "cidade": "São Paulo", + "logradouro": "Rua Caiubi", + "estado_info": { + "area_km2": "248.221,996", + "codigo_ibge": "35", + "nome": "São Paulo" + }, + "cep": "05010000", + "cidade_info": { "area_km2": "1521,11", "codigo_ibge": "3550308" }, + "estado": "SP" +} diff --git a/test/unit/fixtures/postmon-cep-99999999-error.json b/test/unit/fixtures/postmon-cep-99999999-error.json new file mode 100644 index 0000000..e69de29