es.aggregate-error.constructor.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. 'use strict';
  2. var $ = require('../internals/export');
  3. var global = require('../internals/global');
  4. var isPrototypeOf = require('../internals/object-is-prototype-of');
  5. var getPrototypeOf = require('../internals/object-get-prototype-of');
  6. var setPrototypeOf = require('../internals/object-set-prototype-of');
  7. var copyConstructorProperties = require('../internals/copy-constructor-properties');
  8. var create = require('../internals/object-create');
  9. var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
  10. var createPropertyDescriptor = require('../internals/create-property-descriptor');
  11. var clearErrorStack = require('../internals/clear-error-stack');
  12. var installErrorCause = require('../internals/install-error-cause');
  13. var iterate = require('../internals/iterate');
  14. var normalizeStringArgument = require('../internals/normalize-string-argument');
  15. var wellKnownSymbol = require('../internals/well-known-symbol');
  16. var ERROR_STACK_INSTALLABLE = require('../internals/error-stack-installable');
  17. var TO_STRING_TAG = wellKnownSymbol('toStringTag');
  18. var Error = global.Error;
  19. var push = [].push;
  20. var $AggregateError = function AggregateError(errors, message /* , options */) {
  21. var options = arguments.length > 2 ? arguments[2] : undefined;
  22. var isInstance = isPrototypeOf(AggregateErrorPrototype, this);
  23. var that;
  24. if (setPrototypeOf) {
  25. that = setPrototypeOf(new Error(), isInstance ? getPrototypeOf(this) : AggregateErrorPrototype);
  26. } else {
  27. that = isInstance ? this : create(AggregateErrorPrototype);
  28. createNonEnumerableProperty(that, TO_STRING_TAG, 'Error');
  29. }
  30. if (message !== undefined) createNonEnumerableProperty(that, 'message', normalizeStringArgument(message));
  31. if (ERROR_STACK_INSTALLABLE) createNonEnumerableProperty(that, 'stack', clearErrorStack(that.stack, 1));
  32. installErrorCause(that, options);
  33. var errorsArray = [];
  34. iterate(errors, push, { that: errorsArray });
  35. createNonEnumerableProperty(that, 'errors', errorsArray);
  36. return that;
  37. };
  38. if (setPrototypeOf) setPrototypeOf($AggregateError, Error);
  39. else copyConstructorProperties($AggregateError, Error, { name: true });
  40. var AggregateErrorPrototype = $AggregateError.prototype = create(Error.prototype, {
  41. constructor: createPropertyDescriptor(1, $AggregateError),
  42. message: createPropertyDescriptor(1, ''),
  43. name: createPropertyDescriptor(1, 'AggregateError')
  44. });
  45. // `AggregateError` constructor
  46. // https://tc39.es/ecma262/#sec-aggregate-error-constructor
  47. $({ global: true }, {
  48. AggregateError: $AggregateError
  49. });