Comparing version 0.3.2 to 0.4.0
@@ -10,2 +10,3 @@ declare module 'frete' { | ||
'40290': 'SEDEX Hoje Varejo*'; | ||
[key: string]: string; | ||
} | ||
@@ -12,0 +13,0 @@ |
99
frete.js
@@ -103,5 +103,5 @@ 'use strict'; | ||
allOptions.forEach(function (propertyName) { | ||
let setterName = getSetterName(propertyName); | ||
let proto = Frete.prototype; | ||
for (const propertyName of allOptions) { | ||
const setterName = getSetterName(propertyName); | ||
const proto = Frete.prototype; | ||
@@ -117,3 +117,3 @@ frete[propertyName] = frete[setterName] = function (value) { | ||
} | ||
}); | ||
} | ||
@@ -126,4 +126,4 @@ frete.defaultOptions = defaultOptions; | ||
this.options = opts; | ||
for (let key in this.options) { | ||
let value = this.options[key]; | ||
for (const key in this.options) { | ||
const value = this.options[key]; | ||
@@ -235,7 +235,20 @@ if (!V.isFunction(this[key])) { | ||
] | ||
}, | ||
listaServicos: { | ||
correiosMethodName: 'ListaServicos' | ||
}, | ||
listaServicosStar: { | ||
correiosMethodName: 'ListaServicosSTAR' | ||
}, | ||
verificaModal: { | ||
correiosMethodName: 'VerificaModal', | ||
required: [] | ||
} | ||
}; | ||
for (let methodName in apiMethods) { | ||
let api = apiMethods[methodName]; | ||
for (const methodName in apiMethods) { | ||
const api = apiMethods[methodName]; | ||
defineFreteApiMethod(methodName, api.correiosMethodName); | ||
@@ -287,5 +300,5 @@ } | ||
let errors = getValidationErrors(methodName, opts); | ||
const errors = getValidationErrors(methodName, opts); | ||
if (errors.length > 0) { | ||
let err = new Error("Validation error:\n" + errors.join("\n")); | ||
const err = new Error("Validation error:\n" + errors.join("\n")); | ||
return callback(err); | ||
@@ -310,13 +323,13 @@ } | ||
function decorateServices (services) { | ||
services.forEach(function(service) { | ||
for (let key in service) { | ||
let value = service[key]; | ||
for (const service of services) { | ||
for (const key in service) { | ||
const value = service[key]; | ||
delete service[key]; | ||
let keyCamelCase = key[0].toLowerCase() + '' + key.substring(1); | ||
const keyCamelCase = key[0].toLowerCase() + '' + key.substring(1); | ||
service[keyCamelCase] = value; | ||
} | ||
service.name = frete.servicos.names[String(service.codigo).padStart(5, '0')]; | ||
}); | ||
} | ||
@@ -327,9 +340,9 @@ return services; | ||
function getErrorsFromServices (services) { | ||
let errors = []; | ||
const errors = []; | ||
services.forEach(function(service) { | ||
if (service.MsgErro && errors.indexOf(service.MsgErro) === -1) { | ||
errors.push(service.MsgErro); | ||
for (const service of services) { | ||
if (service.MsgErro && !errors.includes(service.MsgErro)) { | ||
errors.push(`${service.MsgErro} ${service.Erro || ''}`.trim()); | ||
} | ||
}); | ||
} | ||
@@ -339,2 +352,8 @@ return errors; | ||
const resultParsers = { | ||
ListaServicos(body) { return body.ServicosCalculo.cServicosCalculo; }, | ||
ListaServicosSTAR(body) { return body.ServicosCalculo.cServicosCalculo; }, | ||
VerificaModal(body) { return body.ServicosModal.cModal; } | ||
}; | ||
function doRequest(methodName, opts, callback) { | ||
@@ -345,3 +364,3 @@ V.string(methodName, 'methodName'); | ||
let resultNode = methodName + "Result"; | ||
const resultNode = methodName + "Result"; | ||
execute(methodName, opts, function (err, res, body) { | ||
@@ -357,5 +376,5 @@ if (err) return callback(err, res, body); | ||
let errors = getErrorsFromServices(services); | ||
const errors = getErrorsFromServices(services); | ||
if (errors.length > 0) { | ||
let err = new Error(methodName + ":\n" + errors.join("\n")); | ||
const err = new Error(methodName + ":\n" + errors.join("\n")); | ||
return callback(err, res, body); | ||
@@ -367,2 +386,12 @@ } | ||
if (res[resultNode] && resultParsers[methodName]) { | ||
try { | ||
const parser = resultParsers[methodName]; | ||
return callback(null, parser(res[resultNode])); | ||
} catch (ex) { | ||
return callback("Unknown response", res, body); | ||
} | ||
} | ||
return callback("Unknown response", res, body); | ||
@@ -376,3 +405,3 @@ }); | ||
let api = apiMethods[methodName]; | ||
const api = apiMethods[methodName]; | ||
if (!api) { | ||
@@ -382,18 +411,20 @@ throw new Error("Invalid method name: " + methodName); | ||
let requiredFields = api.required.concat(['nCdServico', 'sCepOrigem', 'sCepDestino']); | ||
const requiredFields = api.required ? | ||
api.required.concat(['nCdServico', 'sCepOrigem', 'sCepDestino']) : []; | ||
let errors = []; | ||
requiredFields.forEach(function(fieldName) { | ||
const errors = []; | ||
for (const fieldName of requiredFields) { | ||
// special case for cdServico since its a string but starts with n | ||
// and accepts more numbers with , | ||
let isString = fieldName == 'nCdServico' || fieldName[0] === 's'; | ||
let isNumber = fieldName != 'nCdServico' && fieldName[0] === 'n'; | ||
const isString = fieldName == 'nCdServico' || fieldName[0] === 's'; | ||
const isNumber = fieldName != 'nCdServico' && fieldName[0] === 'n'; | ||
let value = options[fieldName]; | ||
const value = options[fieldName]; | ||
if ((isString && !V.isString(value)) || (isNumber && !V.isNumber(value))) { | ||
let msg = "Required option: " + fieldName + " has invalid value: " + value; | ||
msg += "\nExpected a valid: " + (isString ? 'string' : 'number'); | ||
let msg = `Required option: ${fieldName} has invalid value: ${value}`; | ||
msg += `\nExpected a valid: ${(isString ? 'string' : 'number')}`; | ||
errors.push(msg); | ||
} | ||
}); | ||
} | ||
@@ -423,3 +454,3 @@ if (V.isArray(options.nCdServico) && options.nCdServico.length > 1) { | ||
// now we need to set the first letter to lowerCase(), just to be cool | ||
let firstLetter = prettyNameMethod[0].toLowerCase(); | ||
const firstLetter = prettyNameMethod[0].toLowerCase(); | ||
prettyNameMethod = firstLetter + prettyNameMethod.substring(1); | ||
@@ -426,0 +457,0 @@ } |
@@ -8,6 +8,6 @@ 'use strict'; | ||
it('Test validation errors', function (done) { | ||
var f = frete() | ||
const f = frete() | ||
f.preco(function (err) { | ||
let msg = err.message; | ||
const msg = err.message; | ||
@@ -32,4 +32,4 @@ assert(/Validation error:/.test(msg)); | ||
it('Set default options', function () { | ||
let defaultOptions = frete.defaultOptions; | ||
let expected = { | ||
const defaultOptions = frete.defaultOptions; | ||
const expected = { | ||
sCepOrigem: '', | ||
@@ -60,3 +60,3 @@ sCdMaoPropria: 'N', | ||
it('Request .prazo() ok', function (done) { | ||
let f = frete().servico([ frete.servicos.sedex ]).cepOrigem('13467460'); | ||
const f = frete().servico([ frete.servicos.sedex ]).cepOrigem('13467460'); | ||
@@ -66,4 +66,4 @@ f.prazo('13466321', function (err, results) { | ||
let services = f.options.nCdServico; | ||
let hasAllServices = true; | ||
const services = f.options.nCdServico; | ||
const hasAllServices = true; | ||
@@ -90,3 +90,3 @@ services.forEach(function (service) { | ||
it('Requests .prazo() validation errors', function (done) { | ||
let f = frete().servico(''); | ||
const f = frete().servico(''); | ||
@@ -109,3 +109,3 @@ f.prazo('13466321', function (err) { | ||
it('Requests .prazo() correios error', function (done) { | ||
let f = frete().servico([ frete.servicos.sedex ]).cepOrigem('13467460'); | ||
const f = frete().servico([ frete.servicos.sedex ]).cepOrigem('13467460'); | ||
@@ -119,3 +119,3 @@ f.prazo('555555', function (err) { | ||
it('Request .preco()', function (done) { | ||
let f = frete().servico([ frete.servicos.sedex ]).cepOrigem('13467460'); | ||
const f = frete().servico([ frete.servicos.sedex ]).cepOrigem('13467460'); | ||
@@ -136,3 +136,3 @@ f | ||
let services = f.options.nCdServico; | ||
const services = f.options.nCdServico; | ||
let hasAllServices = true; | ||
@@ -161,3 +161,3 @@ | ||
it('Request .precoPrazo()', function (done) { | ||
let f = frete().servico([ frete.servicos.sedex ]).cepOrigem('13467460'); | ||
const f = frete().servico([ frete.servicos.sedex ]).cepOrigem('13467460'); | ||
@@ -178,3 +178,3 @@ f | ||
let services = f.options.nCdServico; | ||
const services = f.options.nCdServico; | ||
let hasAllServices = true; | ||
@@ -205,3 +205,3 @@ | ||
var f = frete({ | ||
const f = frete({ | ||
cepDestino: '13466321', | ||
@@ -222,3 +222,3 @@ peso: 1, | ||
let services = f.options.nCdServico; | ||
const services = f.options.nCdServico; | ||
let hasAllServices = true; | ||
@@ -249,3 +249,3 @@ | ||
var f = frete({ | ||
const f = frete({ | ||
cepDestino: '13466321', | ||
@@ -265,3 +265,3 @@ peso: 1, | ||
let services = f.options.nCdServico; | ||
const services = f.options.nCdServico; | ||
let hasAllServices = true; | ||
@@ -287,7 +287,7 @@ | ||
it('[promises] Request .prazo() ok', async() => { | ||
let f = frete().servico([ frete.servicos.sedex ]).cepOrigem('13467460'); | ||
const f = frete().servico([ frete.servicos.sedex ]).cepOrigem('13467460'); | ||
const results = await f.prazo('13466321'); | ||
let services = f.options.nCdServico; | ||
const services = f.options.nCdServico; | ||
let hasAllServices = true; | ||
@@ -336,3 +336,3 @@ | ||
it('[promises] request .precoPrazo()', async() => { | ||
let f = frete().servico([ frete.servicos.sedex ]).cepOrigem('13467460'); | ||
const f = frete().servico([ frete.servicos.sedex ]).cepOrigem('13467460'); | ||
@@ -351,3 +351,3 @@ f | ||
const results = await f.precoPrazo('13466321'); | ||
let services = f.options.nCdServico; | ||
const services = f.options.nCdServico; | ||
let hasAllServices = true; | ||
@@ -375,3 +375,3 @@ | ||
var f = frete({ | ||
const f = frete({ | ||
cepDestino: '13466321', | ||
@@ -391,3 +391,3 @@ peso: 1, | ||
let services = f.options.nCdServico; | ||
const services = f.options.nCdServico; | ||
let hasAllServices = true; | ||
@@ -411,2 +411,29 @@ | ||
}); | ||
it('listaServicos', async () => { | ||
const results = await frete().listaServicos(); | ||
assert(results); | ||
for (const service in frete.servicos) { | ||
if (service === 'names') { continue; } | ||
assert(results.some((r) => r.codigo == frete.servicos[service])); | ||
} | ||
}); | ||
it('listaServicosStar', async () => { | ||
const results = await frete().listaServicosStar(); | ||
assert(results); | ||
}); | ||
it('verificaModal', async () => { | ||
const results = await frete({ | ||
cepOrigem: '13467460', | ||
cepDestino: '13466321', | ||
}).servico([ frete.servicos.sedex ]).verificaModal(); | ||
assert(results); | ||
assert(results.length, 1); | ||
assert(results[0].codigo, '04014'); | ||
}); | ||
}); |
{ | ||
"name": "frete", | ||
"version": "0.3.2", | ||
"version": "0.4.0", | ||
"description": "Modulo para consumo da API de frete dos correios brasileiros, com apenas node-soap como dependencia e consultando *apenas* a api dos correios, promises support.", | ||
@@ -5,0 +5,0 @@ "main": "frete.js", |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
106764
9
795