| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 | 'use strict';var $ = require('../internals/export');var IS_PURE = require('../internals/is-pure');var IS_NODE = require('../internals/engine-is-node');var global = require('../internals/global');var call = require('../internals/function-call');var defineBuiltIn = require('../internals/define-built-in');var setPrototypeOf = require('../internals/object-set-prototype-of');var setToStringTag = require('../internals/set-to-string-tag');var setSpecies = require('../internals/set-species');var aCallable = require('../internals/a-callable');var isCallable = require('../internals/is-callable');var isObject = require('../internals/is-object');var anInstance = require('../internals/an-instance');var speciesConstructor = require('../internals/species-constructor');var task = require('../internals/task').set;var microtask = require('../internals/microtask');var hostReportErrors = require('../internals/host-report-errors');var perform = require('../internals/perform');var Queue = require('../internals/queue');var InternalStateModule = require('../internals/internal-state');var NativePromiseConstructor = require('../internals/promise-native-constructor');var PromiseConstructorDetection = require('../internals/promise-constructor-detection');var newPromiseCapabilityModule = require('../internals/new-promise-capability');var PROMISE = 'Promise';var FORCED_PROMISE_CONSTRUCTOR = PromiseConstructorDetection.CONSTRUCTOR;var NATIVE_PROMISE_REJECTION_EVENT = PromiseConstructorDetection.REJECTION_EVENT;var NATIVE_PROMISE_SUBCLASSING = PromiseConstructorDetection.SUBCLASSING;var getInternalPromiseState = InternalStateModule.getterFor(PROMISE);var setInternalState = InternalStateModule.set;var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;var PromiseConstructor = NativePromiseConstructor;var PromisePrototype = NativePromisePrototype;var TypeError = global.TypeError;var document = global.document;var process = global.process;var newPromiseCapability = newPromiseCapabilityModule.f;var newGenericPromiseCapability = newPromiseCapability;var DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);var UNHANDLED_REJECTION = 'unhandledrejection';var REJECTION_HANDLED = 'rejectionhandled';var PENDING = 0;var FULFILLED = 1;var REJECTED = 2;var HANDLED = 1;var UNHANDLED = 2;var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;// helpersvar isThenable = function (it) {  var then;  return isObject(it) && isCallable(then = it.then) ? then : false;};var callReaction = function (reaction, state) {  var value = state.value;  var ok = state.state == FULFILLED;  var handler = ok ? reaction.ok : reaction.fail;  var resolve = reaction.resolve;  var reject = reaction.reject;  var domain = reaction.domain;  var result, then, exited;  try {    if (handler) {      if (!ok) {        if (state.rejection === UNHANDLED) onHandleUnhandled(state);        state.rejection = HANDLED;      }      if (handler === true) result = value;      else {        if (domain) domain.enter();        result = handler(value); // can throw        if (domain) {          domain.exit();          exited = true;        }      }      if (result === reaction.promise) {        reject(TypeError('Promise-chain cycle'));      } else if (then = isThenable(result)) {        call(then, result, resolve, reject);      } else resolve(result);    } else reject(value);  } catch (error) {    if (domain && !exited) domain.exit();    reject(error);  }};var notify = function (state, isReject) {  if (state.notified) return;  state.notified = true;  microtask(function () {    var reactions = state.reactions;    var reaction;    while (reaction = reactions.get()) {      callReaction(reaction, state);    }    state.notified = false;    if (isReject && !state.rejection) onUnhandled(state);  });};var dispatchEvent = function (name, promise, reason) {  var event, handler;  if (DISPATCH_EVENT) {    event = document.createEvent('Event');    event.promise = promise;    event.reason = reason;    event.initEvent(name, false, true);    global.dispatchEvent(event);  } else event = { promise: promise, reason: reason };  if (!NATIVE_PROMISE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);  else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);};var onUnhandled = function (state) {  call(task, global, function () {    var promise = state.facade;    var value = state.value;    var IS_UNHANDLED = isUnhandled(state);    var result;    if (IS_UNHANDLED) {      result = perform(function () {        if (IS_NODE) {          process.emit('unhandledRejection', value, promise);        } else dispatchEvent(UNHANDLED_REJECTION, promise, value);      });      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should      state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;      if (result.error) throw result.value;    }  });};var isUnhandled = function (state) {  return state.rejection !== HANDLED && !state.parent;};var onHandleUnhandled = function (state) {  call(task, global, function () {    var promise = state.facade;    if (IS_NODE) {      process.emit('rejectionHandled', promise);    } else dispatchEvent(REJECTION_HANDLED, promise, state.value);  });};var bind = function (fn, state, unwrap) {  return function (value) {    fn(state, value, unwrap);  };};var internalReject = function (state, value, unwrap) {  if (state.done) return;  state.done = true;  if (unwrap) state = unwrap;  state.value = value;  state.state = REJECTED;  notify(state, true);};var internalResolve = function (state, value, unwrap) {  if (state.done) return;  state.done = true;  if (unwrap) state = unwrap;  try {    if (state.facade === value) throw TypeError("Promise can't be resolved itself");    var then = isThenable(value);    if (then) {      microtask(function () {        var wrapper = { done: false };        try {          call(then, value,            bind(internalResolve, wrapper, state),            bind(internalReject, wrapper, state)          );        } catch (error) {          internalReject(wrapper, error, state);        }      });    } else {      state.value = value;      state.state = FULFILLED;      notify(state, false);    }  } catch (error) {    internalReject({ done: false }, error, state);  }};// constructor polyfillif (FORCED_PROMISE_CONSTRUCTOR) {  // 25.4.3.1 Promise(executor)  PromiseConstructor = function Promise(executor) {    anInstance(this, PromisePrototype);    aCallable(executor);    call(Internal, this);    var state = getInternalPromiseState(this);    try {      executor(bind(internalResolve, state), bind(internalReject, state));    } catch (error) {      internalReject(state, error);    }  };  PromisePrototype = PromiseConstructor.prototype;  // eslint-disable-next-line no-unused-vars -- required for `.length`  Internal = function Promise(executor) {    setInternalState(this, {      type: PROMISE,      done: false,      notified: false,      parent: false,      reactions: new Queue(),      rejection: false,      state: PENDING,      value: undefined    });  };  // `Promise.prototype.then` method  // https://tc39.es/ecma262/#sec-promise.prototype.then  Internal.prototype = defineBuiltIn(PromisePrototype, 'then', function then(onFulfilled, onRejected) {    var state = getInternalPromiseState(this);    var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));    state.parent = true;    reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;    reaction.fail = isCallable(onRejected) && onRejected;    reaction.domain = IS_NODE ? process.domain : undefined;    if (state.state == PENDING) state.reactions.add(reaction);    else microtask(function () {      callReaction(reaction, state);    });    return reaction.promise;  });  OwnPromiseCapability = function () {    var promise = new Internal();    var state = getInternalPromiseState(promise);    this.promise = promise;    this.resolve = bind(internalResolve, state);    this.reject = bind(internalReject, state);  };  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {    return C === PromiseConstructor || C === PromiseWrapper      ? new OwnPromiseCapability(C)      : newGenericPromiseCapability(C);  };  if (!IS_PURE && isCallable(NativePromiseConstructor) && NativePromisePrototype !== Object.prototype) {    nativeThen = NativePromisePrototype.then;    if (!NATIVE_PROMISE_SUBCLASSING) {      // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs      defineBuiltIn(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {        var that = this;        return new PromiseConstructor(function (resolve, reject) {          call(nativeThen, that, resolve, reject);        }).then(onFulfilled, onRejected);      // https://github.com/zloirock/core-js/issues/640      }, { unsafe: true });    }    // make `.constructor === Promise` work for native promise-based APIs    try {      delete NativePromisePrototype.constructor;    } catch (error) { /* empty */ }    // make `instanceof Promise` work for native promise-based APIs    if (setPrototypeOf) {      setPrototypeOf(NativePromisePrototype, PromisePrototype);    }  }}$({ global: true, constructor: true, wrap: true, forced: FORCED_PROMISE_CONSTRUCTOR }, {  Promise: PromiseConstructor});setToStringTag(PromiseConstructor, PROMISE, false, true);setSpecies(PROMISE);
 |