es.aggregate-error.constructor.js 2.5 KB

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