"use strict";
|
Object.defineProperty(exports, "__esModule", { value: true });
|
const util_1 = require("util");
|
const verror_1 = require("verror");
|
const VError = require("verror");
|
function subinspect(obj, options) {
|
options = Object.assign({}, options, { depth: options.depth == null ? null : options.depth - 1 });
|
return util_1.inspect(obj, options);
|
}
|
class PrettyVError extends VError {
|
static errorFromList(errors) {
|
switch (errors.length) {
|
case 0: return null;
|
case 1: return errors[0];
|
default: return new PrettyMultiError(errors);
|
}
|
}
|
constructor(...params) {
|
super(...params);
|
this._ownStack = this.stack;
|
Object.defineProperty(this, "stack", {
|
get() {
|
return this[util_1.inspect.custom]();
|
},
|
set(stack) {
|
this._ownStack = stack;
|
},
|
configurable: true
|
});
|
}
|
[util_1.inspect.custom](depth = util_1.inspect.defaultOptions.depth || 2, options = Object.assign({ stylize(s) { return s; } }, util_1.inspect.defaultOptions)) {
|
if (depth < 0)
|
return this.toString();
|
const cause = this.cause();
|
return `${this._ownStack}${cause ? `\ncaused by: ${subinspect(cause, options)}` : ""}`;
|
}
|
}
|
exports.PrettyVError = PrettyVError;
|
PrettyVError.prototype.name = Error.prototype.name;
|
PrettyVError.prototype.toString = Error.prototype.toString;
|
class PrettyMultiError extends verror_1.MultiError {
|
constructor(errors) {
|
super(errors);
|
this._ownStack = this.stack;
|
Object.defineProperty(this, "stack", {
|
get() {
|
return this[util_1.inspect.custom]();
|
},
|
set(stack) {
|
this._ownStack = stack;
|
},
|
configurable: true
|
});
|
}
|
[util_1.inspect.custom](depth = util_1.inspect.defaultOptions.depth || 2, options = Object.assign({ stylize(s) { return s; } }, util_1.inspect.defaultOptions)) {
|
if (depth < 0)
|
return options.stylize(this.toString(), "special");
|
const errors = this.errors();
|
switch (errors.length) {
|
case 0: return `${this.toString()} (empty)`;
|
case 1: return util_1.inspect(errors[0]);
|
default: return `${errors.length} errors:\n${errors.map((error, errorIndex) => {
|
const isLastError = errorIndex + 1 === errors.length;
|
const formattedError = util_1.inspect(error, Object.assign({}, options, { depth: options.depth == null ? null : options.depth - 1 }));
|
let lines = formattedError.split(/\r\n|\r|\n/);
|
const firstLinePrefix = isLastError ? "└" : "├";
|
const restLinePrefix = isLastError ? " " : "│";
|
lines = lines.map((line, lineIndex) => {
|
const isFirstLine = lineIndex === 0;
|
return `${isFirstLine ? firstLinePrefix : restLinePrefix} ${line}`;
|
});
|
return lines.join("\n");
|
}).join("\n")}`;
|
}
|
}
|
}
|
exports.PrettyMultiError = PrettyMultiError;
|
PrettyMultiError.prototype.name = Error.prototype.name;
|
PrettyMultiError.prototype.toString = Error.prototype.toString;
|
//# sourceMappingURL=format-verror.js.map
|