@northscaler/service-support
Version:
Artifacts that assist in writing service layers effectively
44 lines (41 loc) • 4.42 kB
JavaScript
;
/**
* @typedef {object} FormattedError
* @property {string} [name]
* @property {string} [message]
* @property {string} [code]
* @property {*} [info]
* @property {string} [stack]
* @property {object} [cause]
*/
/**
* Formats the given error as a plain object.
*
* @param {object} [arg0] The argument to be deconstructed.
* @param {object} [error] The `Error` (or `Error`-like object) to be formatted.
* @param {boolean} [includeStack=true] Whether to include the `stack` property.
* @param {boolean} [includeCause=true] Whether to include the `cause` property.
* @return {FormattedError} The formatted error as a literal object.
*/
function formatError({
error,
includeStack = true,
includeCause = true
} = {}) {
if (!error) return error;
const e = {
name: error.name
};
if (error.message) e.message = error.message.toString();
if (error.code) e.code = error.code.toString();
if (error.info) e.info = error.info;
if (includeStack && error.stack) e.stack = error.stack.toString();
if (includeCause && error.cause) e.cause = formatError({
error: error.cause,
includeStack,
includeCause
});
return e;
}
module.exports = formatError;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tYWluL2Zvcm1hdHRlcnMvZXJyb3ItZm9ybWF0dGVyLmpzIl0sIm5hbWVzIjpbImZvcm1hdEVycm9yIiwiZXJyb3IiLCJpbmNsdWRlU3RhY2siLCJpbmNsdWRlQ2F1c2UiLCJlIiwibmFtZSIsIm1lc3NhZ2UiLCJ0b1N0cmluZyIsImNvZGUiLCJpbmZvIiwic3RhY2siLCJjYXVzZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxTQUFTQSxXQUFULENBQXNCO0FBQ3BCQyxFQUFBQSxLQURvQjtBQUVwQkMsRUFBQUEsWUFBWSxHQUFHLElBRks7QUFHcEJDLEVBQUFBLFlBQVksR0FBRztBQUhLLElBSWxCLEVBSkosRUFJUTtBQUNOLE1BQUksQ0FBQ0YsS0FBTCxFQUFZLE9BQU9BLEtBQVA7QUFFWixRQUFNRyxDQUFDLEdBQUc7QUFBRUMsSUFBQUEsSUFBSSxFQUFFSixLQUFLLENBQUNJO0FBQWQsR0FBVjtBQUVBLE1BQUlKLEtBQUssQ0FBQ0ssT0FBVixFQUFtQkYsQ0FBQyxDQUFDRSxPQUFGLEdBQVlMLEtBQUssQ0FBQ0ssT0FBTixDQUFjQyxRQUFkLEVBQVo7QUFDbkIsTUFBSU4sS0FBSyxDQUFDTyxJQUFWLEVBQWdCSixDQUFDLENBQUNJLElBQUYsR0FBU1AsS0FBSyxDQUFDTyxJQUFOLENBQVdELFFBQVgsRUFBVDtBQUNoQixNQUFJTixLQUFLLENBQUNRLElBQVYsRUFBZ0JMLENBQUMsQ0FBQ0ssSUFBRixHQUFTUixLQUFLLENBQUNRLElBQWY7QUFFaEIsTUFBSVAsWUFBWSxJQUFJRCxLQUFLLENBQUNTLEtBQTFCLEVBQWlDTixDQUFDLENBQUNNLEtBQUYsR0FBVVQsS0FBSyxDQUFDUyxLQUFOLENBQVlILFFBQVosRUFBVjtBQUNqQyxNQUFJSixZQUFZLElBQUlGLEtBQUssQ0FBQ1UsS0FBMUIsRUFBaUNQLENBQUMsQ0FBQ08sS0FBRixHQUFVWCxXQUFXLENBQUM7QUFBRUMsSUFBQUEsS0FBSyxFQUFFQSxLQUFLLENBQUNVLEtBQWY7QUFBc0JULElBQUFBLFlBQXRCO0FBQW9DQyxJQUFBQTtBQUFwQyxHQUFELENBQXJCO0FBRWpDLFNBQU9DLENBQVA7QUFDRDs7QUFFRFEsTUFBTSxDQUFDQyxPQUFQLEdBQWlCYixXQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZvcm1hdHRlZEVycm9yXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21lc3NhZ2VdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NvZGVdXG4gKiBAcHJvcGVydHkgeyp9IFtpbmZvXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzdGFja11cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbY2F1c2VdXG4gKi9cblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBnaXZlbiBlcnJvciBhcyBhIHBsYWluIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gW2FyZzBdIFRoZSBhcmd1bWVudCB0byBiZSBkZWNvbnN0cnVjdGVkLlxuICogQHBhcmFtIHtvYmplY3R9IFtlcnJvcl0gVGhlIGBFcnJvcmAgKG9yIGBFcnJvcmAtbGlrZSBvYmplY3QpIHRvIGJlIGZvcm1hdHRlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luY2x1ZGVTdGFjaz10cnVlXSBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIGBzdGFja2AgcHJvcGVydHkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmNsdWRlQ2F1c2U9dHJ1ZV0gV2hldGhlciB0byBpbmNsdWRlIHRoZSBgY2F1c2VgIHByb3BlcnR5LlxuICogQHJldHVybiB7Rm9ybWF0dGVkRXJyb3J9IFRoZSBmb3JtYXR0ZWQgZXJyb3IgYXMgYSBsaXRlcmFsIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybWF0RXJyb3IgKHtcbiAgZXJyb3IsXG4gIGluY2x1ZGVTdGFjayA9IHRydWUsXG4gIGluY2x1ZGVDYXVzZSA9IHRydWVcbn0gPSB7fSkge1xuICBpZiAoIWVycm9yKSByZXR1cm4gZXJyb3JcblxuICBjb25zdCBlID0geyBuYW1lOiBlcnJvci5uYW1lIH1cblxuICBpZiAoZXJyb3IubWVzc2FnZSkgZS5tZXNzYWdlID0gZXJyb3IubWVzc2FnZS50b1N0cmluZygpXG4gIGlmIChlcnJvci5jb2RlKSBlLmNvZGUgPSBlcnJvci5jb2RlLnRvU3RyaW5nKClcbiAgaWYgKGVycm9yLmluZm8pIGUuaW5mbyA9IGVycm9yLmluZm9cblxuICBpZiAoaW5jbHVkZVN0YWNrICYmIGVycm9yLnN0YWNrKSBlLnN0YWNrID0gZXJyb3Iuc3RhY2sudG9TdHJpbmcoKVxuICBpZiAoaW5jbHVkZUNhdXNlICYmIGVycm9yLmNhdXNlKSBlLmNhdXNlID0gZm9ybWF0RXJyb3IoeyBlcnJvcjogZXJyb3IuY2F1c2UsIGluY2x1ZGVTdGFjaywgaW5jbHVkZUNhdXNlIH0pXG5cbiAgcmV0dXJuIGVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmb3JtYXRFcnJvclxuIl19