bson-rpc
Version:
the nodejs version of bson-rpc
31 lines (24 loc) • 971 B
JavaScript
;
const indentString = require('indent-string');
const cleanStack = require('clean-stack');
const cleanInternalStack = stack => stack.replace(/\s+at .*aggregate-error\/index.js:\d+:\d+\)?/g, '');
class AggregateError extends Error {
constructor(errors) {
// Even though strings are iterable, we don't allow them to prevent subtle user mistakes
if (!errors[Symbol.iterator] || typeof errors === 'string') {
throw new TypeError(`Expected input to be iterable, got ${typeof errors}`);
}
errors = Array.from(errors).map(err => err instanceof Error ? err : new Error(err));
let message = errors.map(err => cleanInternalStack(cleanStack(err.stack))).join('\n');
message = '\n' + indentString(message, 4);
super(message);
this.name = this.constructor.name;
Object.defineProperty(this, '_errors', {value: errors});
}
* [Symbol.iterator]() {
for (const error of this._errors) {
yield error;
}
}
}
module.exports = AggregateError;