mozu-node-sdk
Version:
Mozu JavaScript SDK for Node.js and Arc.js environments
62 lines (54 loc) • 1.54 kB
JavaScript
;
var extend = require('./tiny-extend');
var util = require('util');
module.exports = function errorify(res, additions) {
try {
if (typeof res === "string") {
return new Error(res);
}
var err;
var message = ensureMessage(res);
var stringBody = ensureString(res.body);
var details = typeof res.body === "object" ? res.body : (typeof res === "object" ? res : {});
if (!message && stringBody) {
try {
details = JSON.parse(stringBody);
message = details.message || stringBody;
} catch(e) {
message = stringBody;
}
}
if (additions) {
extend(details, additions);
}
message = (message || "Unknown error!") + formatDetails(details);
err = new Error(message);
err.originalError = details;
return err;
} catch(e) {
return e;
}
};
function formatDetails(deets) {
return "\n\nDetails:\n" + Object.keys(deets).map(function(label) {
var deet = deets[label];
if (typeof deet === "object") deet = util.inspect(deet);
return " " + label + ": " + deet;
}).join('\n') + '\n';
}
function ensureString(something) {
if (!something) return String(something);
if (typeof something === "string") {
return something;
}
if (Buffer.isBuffer(something)) {
return something.toString('utf-8');
}
if (typeof something.toString === "function") {
return something.toString();
}
return String(something);
}
function ensureMessage(res) {
return res.message || res.body && res.body.message;
}