'use strict'; 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;