mozu-node-sdk
Version:
Mozu JavaScript SDK for Node.js and Arc.js environments
64 lines (55 loc) • 1.91 kB
JavaScript
;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
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 === 'undefined' ? 'undefined' : _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 === 'undefined' ? 'undefined' : _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;
}