'use strict';
var $ = require('../internals/export');
+var global = require('../internals/global');
+var isPrototypeOf = require('../internals/object-is-prototype-of');
var getPrototypeOf = require('../internals/object-get-prototype-of');
var setPrototypeOf = require('../internals/object-set-prototype-of');
+var copyConstructorProperties = require('../internals/copy-constructor-properties');
var create = require('../internals/object-create');
var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
var createPropertyDescriptor = require('../internals/create-property-descriptor');
+var clearErrorStack = require('../internals/clear-error-stack');
+var installErrorCause = require('../internals/install-error-cause');
var iterate = require('../internals/iterate');
+var normalizeStringArgument = require('../internals/normalize-string-argument');
+var wellKnownSymbol = require('../internals/well-known-symbol');
+var ERROR_STACK_INSTALLABLE = require('../internals/error-stack-installable');
-var $AggregateError = function AggregateError(errors, message) {
- var that = this;
- if (!(that instanceof $AggregateError)) return new $AggregateError(errors, message);
+var TO_STRING_TAG = wellKnownSymbol('toStringTag');
+var Error = global.Error;
+var push = [].push;
+
+var $AggregateError = function AggregateError(errors, message /* , options */) {
+ var options = arguments.length > 2 ? arguments[2] : undefined;
+ var isInstance = isPrototypeOf(AggregateErrorPrototype, this);
+ var that;
if (setPrototypeOf) {
- // eslint-disable-next-line unicorn/error-message -- expected
- that = setPrototypeOf(new Error(undefined), getPrototypeOf(that));
+ that = setPrototypeOf(new Error(undefined), isInstance ? getPrototypeOf(this) : AggregateErrorPrototype);
+ } else {
+ that = isInstance ? this : create(AggregateErrorPrototype);
+ createNonEnumerableProperty(that, TO_STRING_TAG, 'Error');
}
- if (message !== undefined) createNonEnumerableProperty(that, 'message', String(message));
+ createNonEnumerableProperty(that, 'message', normalizeStringArgument(message, ''));
+ if (ERROR_STACK_INSTALLABLE) createNonEnumerableProperty(that, 'stack', clearErrorStack(that.stack, 1));
+ installErrorCause(that, options);
var errorsArray = [];
- iterate(errors, errorsArray.push, { that: errorsArray });
+ iterate(errors, push, { that: errorsArray });
createNonEnumerableProperty(that, 'errors', errorsArray);
return that;
};
-$AggregateError.prototype = create(Error.prototype, {
- constructor: createPropertyDescriptor(5, $AggregateError),
- message: createPropertyDescriptor(5, ''),
- name: createPropertyDescriptor(5, 'AggregateError')
+if (setPrototypeOf) setPrototypeOf($AggregateError, Error);
+else copyConstructorProperties($AggregateError, Error);
+
+var AggregateErrorPrototype = $AggregateError.prototype = create(Error.prototype, {
+ constructor: createPropertyDescriptor(1, $AggregateError),
+ message: createPropertyDescriptor(1, ''),
+ name: createPropertyDescriptor(1, 'AggregateError')
});
// `AggregateError` constructor