You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							2526 lines
						
					
					
						
							69 KiB
						
					
					
				
			
		
		
	
	
							2526 lines
						
					
					
						
							69 KiB
						
					
					
				/*! | 
						|
 * @overview RSVP - a tiny implementation of Promises/A+. | 
						|
 * @copyright Copyright (c) 2016 Yehuda Katz, Tom Dale, Stefan Penner and contributors | 
						|
 * @license   Licensed under MIT license | 
						|
 *            See https://raw.githubusercontent.com/tildeio/rsvp.js/master/LICENSE | 
						|
 * @version   4.8.4+ff10049b | 
						|
 */ | 
						|
 | 
						|
function callbacksFor(object) { | 
						|
  var callbacks = object._promiseCallbacks; | 
						|
 | 
						|
  if (!callbacks) { | 
						|
    callbacks = object._promiseCallbacks = {}; | 
						|
  } | 
						|
 | 
						|
  return callbacks; | 
						|
} | 
						|
 | 
						|
/** | 
						|
  @class EventTarget | 
						|
  @for rsvp | 
						|
  @public | 
						|
*/ | 
						|
var EventTarget = { | 
						|
 | 
						|
  /** | 
						|
    `EventTarget.mixin` extends an object with EventTarget methods. For | 
						|
    Example: | 
						|
     ```javascript | 
						|
    import EventTarget from 'rsvp'; | 
						|
     let object = {}; | 
						|
     EventTarget.mixin(object); | 
						|
     object.on('finished', function(event) { | 
						|
      // handle event | 
						|
    }); | 
						|
     object.trigger('finished', { detail: value }); | 
						|
    ``` | 
						|
     `EventTarget.mixin` also works with prototypes: | 
						|
     ```javascript | 
						|
    import EventTarget from 'rsvp'; | 
						|
     let Person = function() {}; | 
						|
    EventTarget.mixin(Person.prototype); | 
						|
     let yehuda = new Person(); | 
						|
    let tom = new Person(); | 
						|
     yehuda.on('poke', function(event) { | 
						|
      console.log('Yehuda says OW'); | 
						|
    }); | 
						|
     tom.on('poke', function(event) { | 
						|
      console.log('Tom says OW'); | 
						|
    }); | 
						|
     yehuda.trigger('poke'); | 
						|
    tom.trigger('poke'); | 
						|
    ``` | 
						|
     @method mixin | 
						|
    @for rsvp | 
						|
    @private | 
						|
    @param {Object} object object to extend with EventTarget methods | 
						|
  */ | 
						|
  mixin: function (object) { | 
						|
    object.on = this.on; | 
						|
    object.off = this.off; | 
						|
    object.trigger = this.trigger; | 
						|
    object._promiseCallbacks = undefined; | 
						|
    return object; | 
						|
  }, | 
						|
 | 
						|
 | 
						|
  /** | 
						|
    Registers a callback to be executed when `eventName` is triggered | 
						|
     ```javascript | 
						|
    object.on('event', function(eventInfo){ | 
						|
      // handle the event | 
						|
    }); | 
						|
     object.trigger('event'); | 
						|
    ``` | 
						|
     @method on | 
						|
    @for EventTarget | 
						|
    @private | 
						|
    @param {String} eventName name of the event to listen for | 
						|
    @param {Function} callback function to be called when the event is triggered. | 
						|
  */ | 
						|
  on: function (eventName, callback) { | 
						|
    if (typeof callback !== 'function') { | 
						|
      throw new TypeError('Callback must be a function'); | 
						|
    } | 
						|
 | 
						|
    var allCallbacks = callbacksFor(this); | 
						|
    var callbacks = allCallbacks[eventName]; | 
						|
 | 
						|
    if (!callbacks) { | 
						|
      callbacks = allCallbacks[eventName] = []; | 
						|
    } | 
						|
 | 
						|
    if (callbacks.indexOf(callback) === -1) { | 
						|
      callbacks.push(callback); | 
						|
    } | 
						|
  }, | 
						|
 | 
						|
 | 
						|
  /** | 
						|
    You can use `off` to stop firing a particular callback for an event: | 
						|
     ```javascript | 
						|
    function doStuff() { // do stuff! } | 
						|
    object.on('stuff', doStuff); | 
						|
     object.trigger('stuff'); // doStuff will be called | 
						|
     // Unregister ONLY the doStuff callback | 
						|
    object.off('stuff', doStuff); | 
						|
    object.trigger('stuff'); // doStuff will NOT be called | 
						|
    ``` | 
						|
     If you don't pass a `callback` argument to `off`, ALL callbacks for the | 
						|
    event will not be executed when the event fires. For example: | 
						|
     ```javascript | 
						|
    let callback1 = function(){}; | 
						|
    let callback2 = function(){}; | 
						|
     object.on('stuff', callback1); | 
						|
    object.on('stuff', callback2); | 
						|
     object.trigger('stuff'); // callback1 and callback2 will be executed. | 
						|
     object.off('stuff'); | 
						|
    object.trigger('stuff'); // callback1 and callback2 will not be executed! | 
						|
    ``` | 
						|
     @method off | 
						|
    @for rsvp | 
						|
    @private | 
						|
    @param {String} eventName event to stop listening to | 
						|
    @param {Function} [callback] optional argument. If given, only the function | 
						|
    given will be removed from the event's callback queue. If no `callback` | 
						|
    argument is given, all callbacks will be removed from the event's callback | 
						|
    queue. | 
						|
  */ | 
						|
  off: function (eventName, callback) { | 
						|
    var allCallbacks = callbacksFor(this); | 
						|
 | 
						|
    if (!callback) { | 
						|
      allCallbacks[eventName] = []; | 
						|
      return; | 
						|
    } | 
						|
 | 
						|
    var callbacks = allCallbacks[eventName]; | 
						|
    var index = callbacks.indexOf(callback); | 
						|
 | 
						|
    if (index !== -1) { | 
						|
      callbacks.splice(index, 1); | 
						|
    } | 
						|
  }, | 
						|
 | 
						|
 | 
						|
  /** | 
						|
    Use `trigger` to fire custom events. For example: | 
						|
     ```javascript | 
						|
    object.on('foo', function(){ | 
						|
      console.log('foo event happened!'); | 
						|
    }); | 
						|
    object.trigger('foo'); | 
						|
    // 'foo event happened!' logged to the console | 
						|
    ``` | 
						|
     You can also pass a value as a second argument to `trigger` that will be | 
						|
    passed as an argument to all event listeners for the event: | 
						|
     ```javascript | 
						|
    object.on('foo', function(value){ | 
						|
      console.log(value.name); | 
						|
    }); | 
						|
     object.trigger('foo', { name: 'bar' }); | 
						|
    // 'bar' logged to the console | 
						|
    ``` | 
						|
     @method trigger | 
						|
    @for rsvp | 
						|
    @private | 
						|
    @param {String} eventName name of the event to be triggered | 
						|
    @param {*} [options] optional value to be passed to any event handlers for | 
						|
    the given `eventName` | 
						|
  */ | 
						|
  trigger: function (eventName, options, label) { | 
						|
    var allCallbacks = callbacksFor(this); | 
						|
 | 
						|
    var callbacks = allCallbacks[eventName]; | 
						|
    if (callbacks) { | 
						|
      // Don't cache the callbacks.length since it may grow | 
						|
      var callback = void 0; | 
						|
      for (var i = 0; i < callbacks.length; i++) { | 
						|
        callback = callbacks[i]; | 
						|
        callback(options, label); | 
						|
      } | 
						|
    } | 
						|
  } | 
						|
}; | 
						|
 | 
						|
var config = { | 
						|
  instrument: false | 
						|
}; | 
						|
 | 
						|
EventTarget['mixin'](config); | 
						|
 | 
						|
function configure(name, value) { | 
						|
  if (arguments.length === 2) { | 
						|
    config[name] = value; | 
						|
  } else { | 
						|
    return config[name]; | 
						|
  } | 
						|
} | 
						|
 | 
						|
var queue = []; | 
						|
 | 
						|
function scheduleFlush() { | 
						|
  setTimeout(function () { | 
						|
    for (var i = 0; i < queue.length; i++) { | 
						|
      var entry = queue[i]; | 
						|
 | 
						|
      var payload = entry.payload; | 
						|
 | 
						|
      payload.guid = payload.key + payload.id; | 
						|
      payload.childGuid = payload.key + payload.childId; | 
						|
      if (payload.error) { | 
						|
        payload.stack = payload.error.stack; | 
						|
      } | 
						|
 | 
						|
      config['trigger'](entry.name, entry.payload); | 
						|
    } | 
						|
    queue.length = 0; | 
						|
  }, 50); | 
						|
} | 
						|
 | 
						|
function instrument(eventName, promise, child) { | 
						|
  if (1 === queue.push({ | 
						|
    name: eventName, | 
						|
    payload: { | 
						|
      key: promise._guidKey, | 
						|
      id: promise._id, | 
						|
      eventName: eventName, | 
						|
      detail: promise._result, | 
						|
      childId: child && child._id, | 
						|
      label: promise._label, | 
						|
      timeStamp: Date.now(), | 
						|
      error: config["instrument-with-stack"] ? new Error(promise._label) : null | 
						|
    } })) { | 
						|
    scheduleFlush(); | 
						|
  } | 
						|
} | 
						|
 | 
						|
/** | 
						|
  `Promise.resolve` returns a promise that will become resolved with the | 
						|
  passed `value`. It is shorthand for the following: | 
						|
 | 
						|
  ```javascript | 
						|
  import Promise from 'rsvp'; | 
						|
 | 
						|
  let promise = new Promise(function(resolve, reject){ | 
						|
    resolve(1); | 
						|
  }); | 
						|
 | 
						|
  promise.then(function(value){ | 
						|
    // value === 1 | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  Instead of writing the above, your code now simply becomes the following: | 
						|
 | 
						|
  ```javascript | 
						|
  import Promise from 'rsvp'; | 
						|
 | 
						|
  let promise = RSVP.Promise.resolve(1); | 
						|
 | 
						|
  promise.then(function(value){ | 
						|
    // value === 1 | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  @method resolve | 
						|
  @for Promise | 
						|
  @static | 
						|
  @param {*} object value that the returned promise will be resolved with | 
						|
  @param {String} [label] optional string for identifying the returned promise. | 
						|
  Useful for tooling. | 
						|
  @return {Promise} a promise that will become fulfilled with the given | 
						|
  `value` | 
						|
*/ | 
						|
function resolve$$1(object, label) { | 
						|
  /*jshint validthis:true */ | 
						|
  var Constructor = this; | 
						|
 | 
						|
  if (object && typeof object === 'object' && object.constructor === Constructor) { | 
						|
    return object; | 
						|
  } | 
						|
 | 
						|
  var promise = new Constructor(noop, label); | 
						|
  resolve$1(promise, object); | 
						|
  return promise; | 
						|
} | 
						|
 | 
						|
function withOwnPromise() { | 
						|
  return new TypeError('A promises callback cannot return that same promise.'); | 
						|
} | 
						|
 | 
						|
function objectOrFunction(x) { | 
						|
  var type = typeof x; | 
						|
  return x !== null && (type === 'object' || type === 'function'); | 
						|
} | 
						|
 | 
						|
function noop() {} | 
						|
 | 
						|
var PENDING = void 0; | 
						|
var FULFILLED = 1; | 
						|
var REJECTED = 2; | 
						|
 | 
						|
var TRY_CATCH_ERROR = { error: null }; | 
						|
 | 
						|
function getThen(promise) { | 
						|
  try { | 
						|
    return promise.then; | 
						|
  } catch (error) { | 
						|
    TRY_CATCH_ERROR.error = error; | 
						|
    return TRY_CATCH_ERROR; | 
						|
  } | 
						|
} | 
						|
 | 
						|
var tryCatchCallback = void 0; | 
						|
function tryCatcher() { | 
						|
  try { | 
						|
    var target = tryCatchCallback; | 
						|
    tryCatchCallback = null; | 
						|
    return target.apply(this, arguments); | 
						|
  } catch (e) { | 
						|
    TRY_CATCH_ERROR.error = e; | 
						|
    return TRY_CATCH_ERROR; | 
						|
  } | 
						|
} | 
						|
 | 
						|
function tryCatch(fn) { | 
						|
  tryCatchCallback = fn; | 
						|
  return tryCatcher; | 
						|
} | 
						|
 | 
						|
function handleForeignThenable(promise, thenable, then$$1) { | 
						|
  config.async(function (promise) { | 
						|
    var sealed = false; | 
						|
    var result = tryCatch(then$$1).call(thenable, function (value) { | 
						|
      if (sealed) { | 
						|
        return; | 
						|
      } | 
						|
      sealed = true; | 
						|
      if (thenable === value) { | 
						|
        fulfill(promise, value); | 
						|
      } else { | 
						|
        resolve$1(promise, value); | 
						|
      } | 
						|
    }, function (reason) { | 
						|
      if (sealed) { | 
						|
        return; | 
						|
      } | 
						|
      sealed = true; | 
						|
 | 
						|
      reject(promise, reason); | 
						|
    }, 'Settle: ' + (promise._label || ' unknown promise')); | 
						|
 | 
						|
    if (!sealed && result === TRY_CATCH_ERROR) { | 
						|
      sealed = true; | 
						|
      var error = TRY_CATCH_ERROR.error; | 
						|
      TRY_CATCH_ERROR.error = null; | 
						|
      reject(promise, error); | 
						|
    } | 
						|
  }, promise); | 
						|
} | 
						|
 | 
						|
function handleOwnThenable(promise, thenable) { | 
						|
  if (thenable._state === FULFILLED) { | 
						|
    fulfill(promise, thenable._result); | 
						|
  } else if (thenable._state === REJECTED) { | 
						|
    thenable._onError = null; | 
						|
    reject(promise, thenable._result); | 
						|
  } else { | 
						|
    subscribe(thenable, undefined, function (value) { | 
						|
      if (thenable === value) { | 
						|
        fulfill(promise, value); | 
						|
      } else { | 
						|
        resolve$1(promise, value); | 
						|
      } | 
						|
    }, function (reason) { | 
						|
      return reject(promise, reason); | 
						|
    }); | 
						|
  } | 
						|
} | 
						|
 | 
						|
function handleMaybeThenable(promise, maybeThenable, then$$1) { | 
						|
  var isOwnThenable = maybeThenable.constructor === promise.constructor && then$$1 === then && promise.constructor.resolve === resolve$$1; | 
						|
 | 
						|
  if (isOwnThenable) { | 
						|
    handleOwnThenable(promise, maybeThenable); | 
						|
  } else if (then$$1 === TRY_CATCH_ERROR) { | 
						|
    var error = TRY_CATCH_ERROR.error; | 
						|
    TRY_CATCH_ERROR.error = null; | 
						|
    reject(promise, error); | 
						|
  } else if (typeof then$$1 === 'function') { | 
						|
    handleForeignThenable(promise, maybeThenable, then$$1); | 
						|
  } else { | 
						|
    fulfill(promise, maybeThenable); | 
						|
  } | 
						|
} | 
						|
 | 
						|
function resolve$1(promise, value) { | 
						|
  if (promise === value) { | 
						|
    fulfill(promise, value); | 
						|
  } else if (objectOrFunction(value)) { | 
						|
    handleMaybeThenable(promise, value, getThen(value)); | 
						|
  } else { | 
						|
    fulfill(promise, value); | 
						|
  } | 
						|
} | 
						|
 | 
						|
function publishRejection(promise) { | 
						|
  if (promise._onError) { | 
						|
    promise._onError(promise._result); | 
						|
  } | 
						|
 | 
						|
  publish(promise); | 
						|
} | 
						|
 | 
						|
function fulfill(promise, value) { | 
						|
  if (promise._state !== PENDING) { | 
						|
    return; | 
						|
  } | 
						|
 | 
						|
  promise._result = value; | 
						|
  promise._state = FULFILLED; | 
						|
 | 
						|
  if (promise._subscribers.length === 0) { | 
						|
    if (config.instrument) { | 
						|
      instrument('fulfilled', promise); | 
						|
    } | 
						|
  } else { | 
						|
    config.async(publish, promise); | 
						|
  } | 
						|
} | 
						|
 | 
						|
function reject(promise, reason) { | 
						|
  if (promise._state !== PENDING) { | 
						|
    return; | 
						|
  } | 
						|
  promise._state = REJECTED; | 
						|
  promise._result = reason; | 
						|
  config.async(publishRejection, promise); | 
						|
} | 
						|
 | 
						|
function subscribe(parent, child, onFulfillment, onRejection) { | 
						|
  var subscribers = parent._subscribers; | 
						|
  var length = subscribers.length; | 
						|
 | 
						|
  parent._onError = null; | 
						|
 | 
						|
  subscribers[length] = child; | 
						|
  subscribers[length + FULFILLED] = onFulfillment; | 
						|
  subscribers[length + REJECTED] = onRejection; | 
						|
 | 
						|
  if (length === 0 && parent._state) { | 
						|
    config.async(publish, parent); | 
						|
  } | 
						|
} | 
						|
 | 
						|
function publish(promise) { | 
						|
  var subscribers = promise._subscribers; | 
						|
  var settled = promise._state; | 
						|
 | 
						|
  if (config.instrument) { | 
						|
    instrument(settled === FULFILLED ? 'fulfilled' : 'rejected', promise); | 
						|
  } | 
						|
 | 
						|
  if (subscribers.length === 0) { | 
						|
    return; | 
						|
  } | 
						|
 | 
						|
  var child = void 0, | 
						|
      callback = void 0, | 
						|
      result = promise._result; | 
						|
 | 
						|
  for (var i = 0; i < subscribers.length; i += 3) { | 
						|
    child = subscribers[i]; | 
						|
    callback = subscribers[i + settled]; | 
						|
 | 
						|
    if (child) { | 
						|
      invokeCallback(settled, child, callback, result); | 
						|
    } else { | 
						|
      callback(result); | 
						|
    } | 
						|
  } | 
						|
 | 
						|
  promise._subscribers.length = 0; | 
						|
} | 
						|
 | 
						|
function invokeCallback(state, promise, callback, result) { | 
						|
  var hasCallback = typeof callback === 'function'; | 
						|
  var value = void 0; | 
						|
 | 
						|
  if (hasCallback) { | 
						|
    value = tryCatch(callback)(result); | 
						|
  } else { | 
						|
    value = result; | 
						|
  } | 
						|
 | 
						|
  if (promise._state !== PENDING) { | 
						|
    // noop | 
						|
  } else if (value === promise) { | 
						|
    reject(promise, withOwnPromise()); | 
						|
  } else if (value === TRY_CATCH_ERROR) { | 
						|
    var error = TRY_CATCH_ERROR.error; | 
						|
    TRY_CATCH_ERROR.error = null; // release | 
						|
    reject(promise, error); | 
						|
  } else if (hasCallback) { | 
						|
    resolve$1(promise, value); | 
						|
  } else if (state === FULFILLED) { | 
						|
    fulfill(promise, value); | 
						|
  } else if (state === REJECTED) { | 
						|
    reject(promise, value); | 
						|
  } | 
						|
} | 
						|
 | 
						|
function initializePromise(promise, resolver) { | 
						|
  var resolved = false; | 
						|
  try { | 
						|
    resolver(function (value) { | 
						|
      if (resolved) { | 
						|
        return; | 
						|
      } | 
						|
      resolved = true; | 
						|
      resolve$1(promise, value); | 
						|
    }, function (reason) { | 
						|
      if (resolved) { | 
						|
        return; | 
						|
      } | 
						|
      resolved = true; | 
						|
      reject(promise, reason); | 
						|
    }); | 
						|
  } catch (e) { | 
						|
    reject(promise, e); | 
						|
  } | 
						|
} | 
						|
 | 
						|
function then(onFulfillment, onRejection, label) { | 
						|
  var parent = this; | 
						|
  var state = parent._state; | 
						|
 | 
						|
  if (state === FULFILLED && !onFulfillment || state === REJECTED && !onRejection) { | 
						|
    config.instrument && instrument('chained', parent, parent); | 
						|
    return parent; | 
						|
  } | 
						|
 | 
						|
  parent._onError = null; | 
						|
 | 
						|
  var child = new parent.constructor(noop, label); | 
						|
  var result = parent._result; | 
						|
 | 
						|
  config.instrument && instrument('chained', parent, child); | 
						|
 | 
						|
  if (state === PENDING) { | 
						|
    subscribe(parent, child, onFulfillment, onRejection); | 
						|
  } else { | 
						|
    var callback = state === FULFILLED ? onFulfillment : onRejection; | 
						|
    config.async(function () { | 
						|
      return invokeCallback(state, child, callback, result); | 
						|
    }); | 
						|
  } | 
						|
 | 
						|
  return child; | 
						|
} | 
						|
 | 
						|
var Enumerator = function () { | 
						|
  function Enumerator(Constructor, input, abortOnReject, label) { | 
						|
    this._instanceConstructor = Constructor; | 
						|
    this.promise = new Constructor(noop, label); | 
						|
    this._abortOnReject = abortOnReject; | 
						|
    this._isUsingOwnPromise = Constructor === Promise; | 
						|
    this._isUsingOwnResolve = Constructor.resolve === resolve$$1; | 
						|
 | 
						|
    this._init.apply(this, arguments); | 
						|
  } | 
						|
 | 
						|
  Enumerator.prototype._init = function _init(Constructor, input) { | 
						|
    var len = input.length || 0; | 
						|
    this.length = len; | 
						|
    this._remaining = len; | 
						|
    this._result = new Array(len); | 
						|
 | 
						|
    this._enumerate(input); | 
						|
  }; | 
						|
 | 
						|
  Enumerator.prototype._enumerate = function _enumerate(input) { | 
						|
    var length = this.length; | 
						|
    var promise = this.promise; | 
						|
 | 
						|
    for (var i = 0; promise._state === PENDING && i < length; i++) { | 
						|
      this._eachEntry(input[i], i, true); | 
						|
    } | 
						|
    this._checkFullfillment(); | 
						|
  }; | 
						|
 | 
						|
  Enumerator.prototype._checkFullfillment = function _checkFullfillment() { | 
						|
    if (this._remaining === 0) { | 
						|
      var result = this._result; | 
						|
      fulfill(this.promise, result); | 
						|
      this._result = null; | 
						|
    } | 
						|
  }; | 
						|
 | 
						|
  Enumerator.prototype._settleMaybeThenable = function _settleMaybeThenable(entry, i, firstPass) { | 
						|
    var c = this._instanceConstructor; | 
						|
 | 
						|
    if (this._isUsingOwnResolve) { | 
						|
      var then$$1 = getThen(entry); | 
						|
 | 
						|
      if (then$$1 === then && entry._state !== PENDING) { | 
						|
        entry._onError = null; | 
						|
        this._settledAt(entry._state, i, entry._result, firstPass); | 
						|
      } else if (typeof then$$1 !== 'function') { | 
						|
        this._settledAt(FULFILLED, i, entry, firstPass); | 
						|
      } else if (this._isUsingOwnPromise) { | 
						|
        var promise = new c(noop); | 
						|
        handleMaybeThenable(promise, entry, then$$1); | 
						|
        this._willSettleAt(promise, i, firstPass); | 
						|
      } else { | 
						|
        this._willSettleAt(new c(function (resolve) { | 
						|
          return resolve(entry); | 
						|
        }), i, firstPass); | 
						|
      } | 
						|
    } else { | 
						|
      this._willSettleAt(c.resolve(entry), i, firstPass); | 
						|
    } | 
						|
  }; | 
						|
 | 
						|
  Enumerator.prototype._eachEntry = function _eachEntry(entry, i, firstPass) { | 
						|
    if (entry !== null && typeof entry === 'object') { | 
						|
      this._settleMaybeThenable(entry, i, firstPass); | 
						|
    } else { | 
						|
      this._setResultAt(FULFILLED, i, entry, firstPass); | 
						|
    } | 
						|
  }; | 
						|
 | 
						|
  Enumerator.prototype._settledAt = function _settledAt(state, i, value, firstPass) { | 
						|
    var promise = this.promise; | 
						|
 | 
						|
    if (promise._state === PENDING) { | 
						|
      if (this._abortOnReject && state === REJECTED) { | 
						|
        reject(promise, value); | 
						|
      } else { | 
						|
        this._setResultAt(state, i, value, firstPass); | 
						|
        this._checkFullfillment(); | 
						|
      } | 
						|
    } | 
						|
  }; | 
						|
 | 
						|
  Enumerator.prototype._setResultAt = function _setResultAt(state, i, value, firstPass) { | 
						|
    this._remaining--; | 
						|
    this._result[i] = value; | 
						|
  }; | 
						|
 | 
						|
  Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i, firstPass) { | 
						|
    var _this = this; | 
						|
 | 
						|
    subscribe(promise, undefined, function (value) { | 
						|
      return _this._settledAt(FULFILLED, i, value, firstPass); | 
						|
    }, function (reason) { | 
						|
      return _this._settledAt(REJECTED, i, reason, firstPass); | 
						|
    }); | 
						|
  }; | 
						|
 | 
						|
  return Enumerator; | 
						|
}(); | 
						|
 | 
						|
 | 
						|
function setSettledResult(state, i, value) { | 
						|
  this._remaining--; | 
						|
  if (state === FULFILLED) { | 
						|
    this._result[i] = { | 
						|
      state: 'fulfilled', | 
						|
      value: value | 
						|
    }; | 
						|
  } else { | 
						|
    this._result[i] = { | 
						|
      state: 'rejected', | 
						|
      reason: value | 
						|
    }; | 
						|
  } | 
						|
} | 
						|
 | 
						|
/** | 
						|
  `Promise.all` accepts an array of promises, and returns a new promise which | 
						|
  is fulfilled with an array of fulfillment values for the passed promises, or | 
						|
  rejected with the reason of the first passed promise to be rejected. It casts all | 
						|
  elements of the passed iterable to promises as it runs this algorithm. | 
						|
 | 
						|
  Example: | 
						|
 | 
						|
  ```javascript | 
						|
  import Promise, { resolve } from 'rsvp'; | 
						|
 | 
						|
  let promise1 = resolve(1); | 
						|
  let promise2 = resolve(2); | 
						|
  let promise3 = resolve(3); | 
						|
  let promises = [ promise1, promise2, promise3 ]; | 
						|
 | 
						|
  Promise.all(promises).then(function(array){ | 
						|
    // The array here would be [ 1, 2, 3 ]; | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  If any of the `promises` given to `RSVP.all` are rejected, the first promise | 
						|
  that is rejected will be given as an argument to the returned promises's | 
						|
  rejection handler. For example: | 
						|
 | 
						|
  Example: | 
						|
 | 
						|
  ```javascript | 
						|
  import Promise, { resolve, reject } from 'rsvp'; | 
						|
 | 
						|
  let promise1 = resolve(1); | 
						|
  let promise2 = reject(new Error("2")); | 
						|
  let promise3 = reject(new Error("3")); | 
						|
  let promises = [ promise1, promise2, promise3 ]; | 
						|
 | 
						|
  Promise.all(promises).then(function(array){ | 
						|
    // Code here never runs because there are rejected promises! | 
						|
  }, function(error) { | 
						|
    // error.message === "2" | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  @method all | 
						|
  @for Promise | 
						|
  @param {Array} entries array of promises | 
						|
  @param {String} [label] optional string for labeling the promise. | 
						|
  Useful for tooling. | 
						|
  @return {Promise} promise that is fulfilled when all `promises` have been | 
						|
  fulfilled, or rejected if any of them become rejected. | 
						|
  @static | 
						|
*/ | 
						|
function all(entries, label) { | 
						|
  if (!Array.isArray(entries)) { | 
						|
    return this.reject(new TypeError("Promise.all must be called with an array"), label); | 
						|
  } | 
						|
  return new Enumerator(this, entries, true /* abort on reject */, label).promise; | 
						|
} | 
						|
 | 
						|
/** | 
						|
  `Promise.race` returns a new promise which is settled in the same way as the | 
						|
  first passed promise to settle. | 
						|
 | 
						|
  Example: | 
						|
 | 
						|
  ```javascript | 
						|
  import Promise from 'rsvp'; | 
						|
 | 
						|
  let promise1 = new Promise(function(resolve, reject){ | 
						|
    setTimeout(function(){ | 
						|
      resolve('promise 1'); | 
						|
    }, 200); | 
						|
  }); | 
						|
 | 
						|
  let promise2 = new Promise(function(resolve, reject){ | 
						|
    setTimeout(function(){ | 
						|
      resolve('promise 2'); | 
						|
    }, 100); | 
						|
  }); | 
						|
 | 
						|
  Promise.race([promise1, promise2]).then(function(result){ | 
						|
    // result === 'promise 2' because it was resolved before promise1 | 
						|
    // was resolved. | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  `Promise.race` is deterministic in that only the state of the first | 
						|
  settled promise matters. For example, even if other promises given to the | 
						|
  `promises` array argument are resolved, but the first settled promise has | 
						|
  become rejected before the other promises became fulfilled, the returned | 
						|
  promise will become rejected: | 
						|
 | 
						|
  ```javascript | 
						|
  import Promise from 'rsvp'; | 
						|
 | 
						|
  let promise1 = new Promise(function(resolve, reject){ | 
						|
    setTimeout(function(){ | 
						|
      resolve('promise 1'); | 
						|
    }, 200); | 
						|
  }); | 
						|
 | 
						|
  let promise2 = new Promise(function(resolve, reject){ | 
						|
    setTimeout(function(){ | 
						|
      reject(new Error('promise 2')); | 
						|
    }, 100); | 
						|
  }); | 
						|
 | 
						|
  Promise.race([promise1, promise2]).then(function(result){ | 
						|
    // Code here never runs | 
						|
  }, function(reason){ | 
						|
    // reason.message === 'promise 2' because promise 2 became rejected before | 
						|
    // promise 1 became fulfilled | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  An example real-world use case is implementing timeouts: | 
						|
 | 
						|
  ```javascript | 
						|
  import Promise from 'rsvp'; | 
						|
 | 
						|
  Promise.race([ajax('foo.json'), timeout(5000)]) | 
						|
  ``` | 
						|
 | 
						|
  @method race | 
						|
  @for Promise | 
						|
  @static | 
						|
  @param {Array} entries array of promises to observe | 
						|
  @param {String} [label] optional string for describing the promise returned. | 
						|
  Useful for tooling. | 
						|
  @return {Promise} a promise which settles in the same way as the first passed | 
						|
  promise to settle. | 
						|
*/ | 
						|
function race(entries, label) { | 
						|
  /*jshint validthis:true */ | 
						|
  var Constructor = this; | 
						|
 | 
						|
  var promise = new Constructor(noop, label); | 
						|
 | 
						|
  if (!Array.isArray(entries)) { | 
						|
    reject(promise, new TypeError('Promise.race must be called with an array')); | 
						|
    return promise; | 
						|
  } | 
						|
 | 
						|
  for (var i = 0; promise._state === PENDING && i < entries.length; i++) { | 
						|
    subscribe(Constructor.resolve(entries[i]), undefined, function (value) { | 
						|
      return resolve$1(promise, value); | 
						|
    }, function (reason) { | 
						|
      return reject(promise, reason); | 
						|
    }); | 
						|
  } | 
						|
 | 
						|
  return promise; | 
						|
} | 
						|
 | 
						|
/** | 
						|
  `Promise.reject` returns a promise rejected with the passed `reason`. | 
						|
  It is shorthand for the following: | 
						|
 | 
						|
  ```javascript | 
						|
  import Promise from 'rsvp'; | 
						|
 | 
						|
  let promise = new Promise(function(resolve, reject){ | 
						|
    reject(new Error('WHOOPS')); | 
						|
  }); | 
						|
 | 
						|
  promise.then(function(value){ | 
						|
    // Code here doesn't run because the promise is rejected! | 
						|
  }, function(reason){ | 
						|
    // reason.message === 'WHOOPS' | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  Instead of writing the above, your code now simply becomes the following: | 
						|
 | 
						|
  ```javascript | 
						|
  import Promise from 'rsvp'; | 
						|
 | 
						|
  let promise = Promise.reject(new Error('WHOOPS')); | 
						|
 | 
						|
  promise.then(function(value){ | 
						|
    // Code here doesn't run because the promise is rejected! | 
						|
  }, function(reason){ | 
						|
    // reason.message === 'WHOOPS' | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  @method reject | 
						|
  @for Promise | 
						|
  @static | 
						|
  @param {*} reason value that the returned promise will be rejected with. | 
						|
  @param {String} [label] optional string for identifying the returned promise. | 
						|
  Useful for tooling. | 
						|
  @return {Promise} a promise rejected with the given `reason`. | 
						|
*/ | 
						|
function reject$1(reason, label) { | 
						|
  /*jshint validthis:true */ | 
						|
  var Constructor = this; | 
						|
  var promise = new Constructor(noop, label); | 
						|
  reject(promise, reason); | 
						|
  return promise; | 
						|
} | 
						|
 | 
						|
var guidKey = 'rsvp_' + Date.now() + '-'; | 
						|
var counter = 0; | 
						|
 | 
						|
function needsResolver() { | 
						|
  throw new TypeError('You must pass a resolver function as the first argument to the promise constructor'); | 
						|
} | 
						|
 | 
						|
function needsNew() { | 
						|
  throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."); | 
						|
} | 
						|
 | 
						|
/** | 
						|
  Promise objects represent the eventual result of an asynchronous operation. The | 
						|
  primary way of interacting with a promise is through its `then` method, which | 
						|
  registers callbacks to receive either a promise’s eventual value or the reason | 
						|
  why the promise cannot be fulfilled. | 
						|
 | 
						|
  Terminology | 
						|
  ----------- | 
						|
 | 
						|
  - `promise` is an object or function with a `then` method whose behavior conforms to this specification. | 
						|
  - `thenable` is an object or function that defines a `then` method. | 
						|
  - `value` is any legal JavaScript value (including undefined, a thenable, or a promise). | 
						|
  - `exception` is a value that is thrown using the throw statement. | 
						|
  - `reason` is a value that indicates why a promise was rejected. | 
						|
  - `settled` the final resting state of a promise, fulfilled or rejected. | 
						|
 | 
						|
  A promise can be in one of three states: pending, fulfilled, or rejected. | 
						|
 | 
						|
  Promises that are fulfilled have a fulfillment value and are in the fulfilled | 
						|
  state.  Promises that are rejected have a rejection reason and are in the | 
						|
  rejected state.  A fulfillment value is never a thenable. | 
						|
 | 
						|
  Promises can also be said to *resolve* a value.  If this value is also a | 
						|
  promise, then the original promise's settled state will match the value's | 
						|
  settled state.  So a promise that *resolves* a promise that rejects will | 
						|
  itself reject, and a promise that *resolves* a promise that fulfills will | 
						|
  itself fulfill. | 
						|
 | 
						|
 | 
						|
  Basic Usage: | 
						|
  ------------ | 
						|
 | 
						|
  ```js | 
						|
  let promise = new Promise(function(resolve, reject) { | 
						|
    // on success | 
						|
    resolve(value); | 
						|
 | 
						|
    // on failure | 
						|
    reject(reason); | 
						|
  }); | 
						|
 | 
						|
  promise.then(function(value) { | 
						|
    // on fulfillment | 
						|
  }, function(reason) { | 
						|
    // on rejection | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  Advanced Usage: | 
						|
  --------------- | 
						|
 | 
						|
  Promises shine when abstracting away asynchronous interactions such as | 
						|
  `XMLHttpRequest`s. | 
						|
 | 
						|
  ```js | 
						|
  function getJSON(url) { | 
						|
    return new Promise(function(resolve, reject){ | 
						|
      let xhr = new XMLHttpRequest(); | 
						|
 | 
						|
      xhr.open('GET', url); | 
						|
      xhr.onreadystatechange = handler; | 
						|
      xhr.responseType = 'json'; | 
						|
      xhr.setRequestHeader('Accept', 'application/json'); | 
						|
      xhr.send(); | 
						|
 | 
						|
      function handler() { | 
						|
        if (this.readyState === this.DONE) { | 
						|
          if (this.status === 200) { | 
						|
            resolve(this.response); | 
						|
          } else { | 
						|
            reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']')); | 
						|
          } | 
						|
        } | 
						|
      }; | 
						|
    }); | 
						|
  } | 
						|
 | 
						|
  getJSON('/posts.json').then(function(json) { | 
						|
    // on fulfillment | 
						|
  }, function(reason) { | 
						|
    // on rejection | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  Unlike callbacks, promises are great composable primitives. | 
						|
 | 
						|
  ```js | 
						|
  Promise.all([ | 
						|
    getJSON('/posts'), | 
						|
    getJSON('/comments') | 
						|
  ]).then(function(values){ | 
						|
    values[0] // => postsJSON | 
						|
    values[1] // => commentsJSON | 
						|
 | 
						|
    return values; | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  @class Promise | 
						|
  @public | 
						|
  @param {function} resolver | 
						|
  @param {String} [label] optional string for labeling the promise. | 
						|
  Useful for tooling. | 
						|
  @constructor | 
						|
*/ | 
						|
 | 
						|
var Promise = function () { | 
						|
  function Promise(resolver, label) { | 
						|
    this._id = counter++; | 
						|
    this._label = label; | 
						|
    this._state = undefined; | 
						|
    this._result = undefined; | 
						|
    this._subscribers = []; | 
						|
 | 
						|
    config.instrument && instrument('created', this); | 
						|
 | 
						|
    if (noop !== resolver) { | 
						|
      typeof resolver !== 'function' && needsResolver(); | 
						|
      this instanceof Promise ? initializePromise(this, resolver) : needsNew(); | 
						|
    } | 
						|
  } | 
						|
 | 
						|
  Promise.prototype._onError = function _onError(reason) { | 
						|
    var _this = this; | 
						|
 | 
						|
    config.after(function () { | 
						|
      if (_this._onError) { | 
						|
        config.trigger('error', reason, _this._label); | 
						|
      } | 
						|
    }); | 
						|
  }; | 
						|
 | 
						|
  /** | 
						|
    `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same | 
						|
    as the catch block of a try/catch statement. | 
						|
   | 
						|
    ```js | 
						|
    function findAuthor(){ | 
						|
      throw new Error('couldn\'t find that author'); | 
						|
    } | 
						|
   | 
						|
    // synchronous | 
						|
    try { | 
						|
      findAuthor(); | 
						|
    } catch(reason) { | 
						|
      // something went wrong | 
						|
    } | 
						|
   | 
						|
    // async with promises | 
						|
    findAuthor().catch(function(reason){ | 
						|
      // something went wrong | 
						|
    }); | 
						|
    ``` | 
						|
   | 
						|
    @method catch | 
						|
    @param {Function} onRejection | 
						|
    @param {String} [label] optional string for labeling the promise. | 
						|
    Useful for tooling. | 
						|
    @return {Promise} | 
						|
  */ | 
						|
 | 
						|
 | 
						|
  Promise.prototype.catch = function _catch(onRejection, label) { | 
						|
    return this.then(undefined, onRejection, label); | 
						|
  }; | 
						|
 | 
						|
  /** | 
						|
    `finally` will be invoked regardless of the promise's fate just as native | 
						|
    try/catch/finally behaves | 
						|
   | 
						|
    Synchronous example: | 
						|
   | 
						|
    ```js | 
						|
    findAuthor() { | 
						|
      if (Math.random() > 0.5) { | 
						|
        throw new Error(); | 
						|
      } | 
						|
      return new Author(); | 
						|
    } | 
						|
   | 
						|
    try { | 
						|
      return findAuthor(); // succeed or fail | 
						|
    } catch(error) { | 
						|
      return findOtherAuthor(); | 
						|
    } finally { | 
						|
      // always runs | 
						|
      // doesn't affect the return value | 
						|
    } | 
						|
    ``` | 
						|
   | 
						|
    Asynchronous example: | 
						|
   | 
						|
    ```js | 
						|
    findAuthor().catch(function(reason){ | 
						|
      return findOtherAuthor(); | 
						|
    }).finally(function(){ | 
						|
      // author was either found, or not | 
						|
    }); | 
						|
    ``` | 
						|
   | 
						|
    @method finally | 
						|
    @param {Function} callback | 
						|
    @param {String} [label] optional string for labeling the promise. | 
						|
    Useful for tooling. | 
						|
    @return {Promise} | 
						|
  */ | 
						|
 | 
						|
 | 
						|
  Promise.prototype.finally = function _finally(callback, label) { | 
						|
    var promise = this; | 
						|
    var constructor = promise.constructor; | 
						|
 | 
						|
    if (typeof callback === 'function') { | 
						|
      return promise.then(function (value) { | 
						|
        return constructor.resolve(callback()).then(function () { | 
						|
          return value; | 
						|
        }); | 
						|
      }, function (reason) { | 
						|
        return constructor.resolve(callback()).then(function () { | 
						|
          throw reason; | 
						|
        }); | 
						|
      }); | 
						|
    } | 
						|
 | 
						|
    return promise.then(callback, callback); | 
						|
  }; | 
						|
 | 
						|
  return Promise; | 
						|
}(); | 
						|
 | 
						|
Promise.cast = resolve$$1; // deprecated | 
						|
Promise.all = all; | 
						|
Promise.race = race; | 
						|
Promise.resolve = resolve$$1; | 
						|
Promise.reject = reject$1; | 
						|
 | 
						|
Promise.prototype._guidKey = guidKey; | 
						|
 | 
						|
/** | 
						|
  The primary way of interacting with a promise is through its `then` method, | 
						|
  which registers callbacks to receive either a promise's eventual value or the | 
						|
  reason why the promise cannot be fulfilled. | 
						|
 | 
						|
  ```js | 
						|
  findUser().then(function(user){ | 
						|
    // user is available | 
						|
  }, function(reason){ | 
						|
    // user is unavailable, and you are given the reason why | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  Chaining | 
						|
  -------- | 
						|
 | 
						|
  The return value of `then` is itself a promise.  This second, 'downstream' | 
						|
  promise is resolved with the return value of the first promise's fulfillment | 
						|
  or rejection handler, or rejected if the handler throws an exception. | 
						|
 | 
						|
  ```js | 
						|
  findUser().then(function (user) { | 
						|
    return user.name; | 
						|
  }, function (reason) { | 
						|
    return 'default name'; | 
						|
  }).then(function (userName) { | 
						|
    // If `findUser` fulfilled, `userName` will be the user's name, otherwise it | 
						|
    // will be `'default name'` | 
						|
  }); | 
						|
 | 
						|
  findUser().then(function (user) { | 
						|
    throw new Error('Found user, but still unhappy'); | 
						|
  }, function (reason) { | 
						|
    throw new Error('`findUser` rejected and we\'re unhappy'); | 
						|
  }).then(function (value) { | 
						|
    // never reached | 
						|
  }, function (reason) { | 
						|
    // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'. | 
						|
    // If `findUser` rejected, `reason` will be '`findUser` rejected and we\'re unhappy'. | 
						|
  }); | 
						|
  ``` | 
						|
  If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream. | 
						|
 | 
						|
  ```js | 
						|
  findUser().then(function (user) { | 
						|
    throw new PedagogicalException('Upstream error'); | 
						|
  }).then(function (value) { | 
						|
    // never reached | 
						|
  }).then(function (value) { | 
						|
    // never reached | 
						|
  }, function (reason) { | 
						|
    // The `PedgagocialException` is propagated all the way down to here | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  Assimilation | 
						|
  ------------ | 
						|
 | 
						|
  Sometimes the value you want to propagate to a downstream promise can only be | 
						|
  retrieved asynchronously. This can be achieved by returning a promise in the | 
						|
  fulfillment or rejection handler. The downstream promise will then be pending | 
						|
  until the returned promise is settled. This is called *assimilation*. | 
						|
 | 
						|
  ```js | 
						|
  findUser().then(function (user) { | 
						|
    return findCommentsByAuthor(user); | 
						|
  }).then(function (comments) { | 
						|
    // The user's comments are now available | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  If the assimliated promise rejects, then the downstream promise will also reject. | 
						|
 | 
						|
  ```js | 
						|
  findUser().then(function (user) { | 
						|
    return findCommentsByAuthor(user); | 
						|
  }).then(function (comments) { | 
						|
    // If `findCommentsByAuthor` fulfills, we'll have the value here | 
						|
  }, function (reason) { | 
						|
    // If `findCommentsByAuthor` rejects, we'll have the reason here | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  Simple Example | 
						|
  -------------- | 
						|
 | 
						|
  Synchronous Example | 
						|
 | 
						|
  ```javascript | 
						|
  let result; | 
						|
 | 
						|
  try { | 
						|
    result = findResult(); | 
						|
    // success | 
						|
  } catch(reason) { | 
						|
    // failure | 
						|
  } | 
						|
  ``` | 
						|
 | 
						|
  Errback Example | 
						|
 | 
						|
  ```js | 
						|
  findResult(function(result, err){ | 
						|
    if (err) { | 
						|
      // failure | 
						|
    } else { | 
						|
      // success | 
						|
    } | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  Promise Example; | 
						|
 | 
						|
  ```javascript | 
						|
  findResult().then(function(result){ | 
						|
    // success | 
						|
  }, function(reason){ | 
						|
    // failure | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  Advanced Example | 
						|
  -------------- | 
						|
 | 
						|
  Synchronous Example | 
						|
 | 
						|
  ```javascript | 
						|
  let author, books; | 
						|
 | 
						|
  try { | 
						|
    author = findAuthor(); | 
						|
    books  = findBooksByAuthor(author); | 
						|
    // success | 
						|
  } catch(reason) { | 
						|
    // failure | 
						|
  } | 
						|
  ``` | 
						|
 | 
						|
  Errback Example | 
						|
 | 
						|
  ```js | 
						|
 | 
						|
  function foundBooks(books) { | 
						|
 | 
						|
  } | 
						|
 | 
						|
  function failure(reason) { | 
						|
 | 
						|
  } | 
						|
 | 
						|
  findAuthor(function(author, err){ | 
						|
    if (err) { | 
						|
      failure(err); | 
						|
      // failure | 
						|
    } else { | 
						|
      try { | 
						|
        findBoooksByAuthor(author, function(books, err) { | 
						|
          if (err) { | 
						|
            failure(err); | 
						|
          } else { | 
						|
            try { | 
						|
              foundBooks(books); | 
						|
            } catch(reason) { | 
						|
              failure(reason); | 
						|
            } | 
						|
          } | 
						|
        }); | 
						|
      } catch(error) { | 
						|
        failure(err); | 
						|
      } | 
						|
      // success | 
						|
    } | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  Promise Example; | 
						|
 | 
						|
  ```javascript | 
						|
  findAuthor(). | 
						|
    then(findBooksByAuthor). | 
						|
    then(function(books){ | 
						|
      // found books | 
						|
  }).catch(function(reason){ | 
						|
    // something went wrong | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  @method then | 
						|
  @param {Function} onFulfillment | 
						|
  @param {Function} onRejection | 
						|
  @param {String} [label] optional string for labeling the promise. | 
						|
  Useful for tooling. | 
						|
  @return {Promise} | 
						|
*/ | 
						|
Promise.prototype.then = then; | 
						|
 | 
						|
function makeObject(_, argumentNames) { | 
						|
  var obj = {}; | 
						|
  var length = _.length; | 
						|
  var args = new Array(length); | 
						|
 | 
						|
  for (var x = 0; x < length; x++) { | 
						|
    args[x] = _[x]; | 
						|
  } | 
						|
 | 
						|
  for (var i = 0; i < argumentNames.length; i++) { | 
						|
    var name = argumentNames[i]; | 
						|
    obj[name] = args[i + 1]; | 
						|
  } | 
						|
 | 
						|
  return obj; | 
						|
} | 
						|
 | 
						|
function arrayResult(_) { | 
						|
  var length = _.length; | 
						|
  var args = new Array(length - 1); | 
						|
 | 
						|
  for (var i = 1; i < length; i++) { | 
						|
    args[i - 1] = _[i]; | 
						|
  } | 
						|
 | 
						|
  return args; | 
						|
} | 
						|
 | 
						|
function wrapThenable(then, promise) { | 
						|
  return { | 
						|
    then: function (onFulFillment, onRejection) { | 
						|
      return then.call(promise, onFulFillment, onRejection); | 
						|
    } | 
						|
  }; | 
						|
} | 
						|
 | 
						|
/** | 
						|
  `denodeify` takes a 'node-style' function and returns a function that | 
						|
  will return an `Promise`. You can use `denodeify` in Node.js or the | 
						|
  browser when you'd prefer to use promises over using callbacks. For example, | 
						|
  `denodeify` transforms the following: | 
						|
 | 
						|
  ```javascript | 
						|
  let fs = require('fs'); | 
						|
 | 
						|
  fs.readFile('myfile.txt', function(err, data){ | 
						|
    if (err) return handleError(err); | 
						|
    handleData(data); | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  into: | 
						|
 | 
						|
  ```javascript | 
						|
  let fs = require('fs'); | 
						|
  let readFile = denodeify(fs.readFile); | 
						|
 | 
						|
  readFile('myfile.txt').then(handleData, handleError); | 
						|
  ``` | 
						|
 | 
						|
  If the node function has multiple success parameters, then `denodeify` | 
						|
  just returns the first one: | 
						|
 | 
						|
  ```javascript | 
						|
  let request = denodeify(require('request')); | 
						|
 | 
						|
  request('http://example.com').then(function(res) { | 
						|
    // ... | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  However, if you need all success parameters, setting `denodeify`'s | 
						|
  second parameter to `true` causes it to return all success parameters | 
						|
  as an array: | 
						|
 | 
						|
  ```javascript | 
						|
  let request = denodeify(require('request'), true); | 
						|
 | 
						|
  request('http://example.com').then(function(result) { | 
						|
    // result[0] -> res | 
						|
    // result[1] -> body | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  Or if you pass it an array with names it returns the parameters as a hash: | 
						|
 | 
						|
  ```javascript | 
						|
  let request = denodeify(require('request'), ['res', 'body']); | 
						|
 | 
						|
  request('http://example.com').then(function(result) { | 
						|
    // result.res | 
						|
    // result.body | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  Sometimes you need to retain the `this`: | 
						|
 | 
						|
  ```javascript | 
						|
  let app = require('express')(); | 
						|
  let render = denodeify(app.render.bind(app)); | 
						|
  ``` | 
						|
 | 
						|
  The denodified function inherits from the original function. It works in all | 
						|
  environments, except IE 10 and below. Consequently all properties of the original | 
						|
  function are available to you. However, any properties you change on the | 
						|
  denodeified function won't be changed on the original function. Example: | 
						|
 | 
						|
  ```javascript | 
						|
  let request = denodeify(require('request')), | 
						|
      cookieJar = request.jar(); // <- Inheritance is used here | 
						|
 | 
						|
  request('http://example.com', {jar: cookieJar}).then(function(res) { | 
						|
    // cookieJar.cookies holds now the cookies returned by example.com | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  Using `denodeify` makes it easier to compose asynchronous operations instead | 
						|
  of using callbacks. For example, instead of: | 
						|
 | 
						|
  ```javascript | 
						|
  let fs = require('fs'); | 
						|
 | 
						|
  fs.readFile('myfile.txt', function(err, data){ | 
						|
    if (err) { ... } // Handle error | 
						|
    fs.writeFile('myfile2.txt', data, function(err){ | 
						|
      if (err) { ... } // Handle error | 
						|
      console.log('done') | 
						|
    }); | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  you can chain the operations together using `then` from the returned promise: | 
						|
 | 
						|
  ```javascript | 
						|
  let fs = require('fs'); | 
						|
  let readFile = denodeify(fs.readFile); | 
						|
  let writeFile = denodeify(fs.writeFile); | 
						|
 | 
						|
  readFile('myfile.txt').then(function(data){ | 
						|
    return writeFile('myfile2.txt', data); | 
						|
  }).then(function(){ | 
						|
    console.log('done') | 
						|
  }).catch(function(error){ | 
						|
    // Handle error | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  @method denodeify | 
						|
  @public | 
						|
  @static | 
						|
  @for rsvp | 
						|
  @param {Function} nodeFunc a 'node-style' function that takes a callback as | 
						|
  its last argument. The callback expects an error to be passed as its first | 
						|
  argument (if an error occurred, otherwise null), and the value from the | 
						|
  operation as its second argument ('function(err, value){ }'). | 
						|
  @param {Boolean|Array} [options] An optional paramter that if set | 
						|
  to `true` causes the promise to fulfill with the callback's success arguments | 
						|
  as an array. This is useful if the node function has multiple success | 
						|
  paramters. If you set this paramter to an array with names, the promise will | 
						|
  fulfill with a hash with these names as keys and the success parameters as | 
						|
  values. | 
						|
  @return {Function} a function that wraps `nodeFunc` to return a `Promise` | 
						|
*/ | 
						|
function denodeify(nodeFunc, options) { | 
						|
  var fn = function () { | 
						|
    var l = arguments.length; | 
						|
    var args = new Array(l + 1); | 
						|
    var promiseInput = false; | 
						|
 | 
						|
    for (var i = 0; i < l; ++i) { | 
						|
      var arg = arguments[i]; | 
						|
 | 
						|
      if (!promiseInput) { | 
						|
        // TODO: clean this up | 
						|
        promiseInput = needsPromiseInput(arg); | 
						|
        if (promiseInput === TRY_CATCH_ERROR) { | 
						|
          var error = TRY_CATCH_ERROR.error; | 
						|
          TRY_CATCH_ERROR.error = null; | 
						|
          var p = new Promise(noop); | 
						|
          reject(p, error); | 
						|
          return p; | 
						|
        } else if (promiseInput && promiseInput !== true) { | 
						|
          arg = wrapThenable(promiseInput, arg); | 
						|
        } | 
						|
      } | 
						|
      args[i] = arg; | 
						|
    } | 
						|
 | 
						|
    var promise = new Promise(noop); | 
						|
 | 
						|
    args[l] = function (err, val) { | 
						|
      if (err) { | 
						|
        reject(promise, err); | 
						|
      } else if (options === undefined) { | 
						|
        resolve$1(promise, val); | 
						|
      } else if (options === true) { | 
						|
        resolve$1(promise, arrayResult(arguments)); | 
						|
      } else if (Array.isArray(options)) { | 
						|
        resolve$1(promise, makeObject(arguments, options)); | 
						|
      } else { | 
						|
        resolve$1(promise, val); | 
						|
      } | 
						|
    }; | 
						|
 | 
						|
    if (promiseInput) { | 
						|
      return handlePromiseInput(promise, args, nodeFunc, this); | 
						|
    } else { | 
						|
      return handleValueInput(promise, args, nodeFunc, this); | 
						|
    } | 
						|
  }; | 
						|
 | 
						|
  fn.__proto__ = nodeFunc; | 
						|
 | 
						|
  return fn; | 
						|
} | 
						|
 | 
						|
function handleValueInput(promise, args, nodeFunc, self) { | 
						|
  var result = tryCatch(nodeFunc).apply(self, args); | 
						|
  if (result === TRY_CATCH_ERROR) { | 
						|
    var error = TRY_CATCH_ERROR.error; | 
						|
    TRY_CATCH_ERROR.error = null; | 
						|
    reject(promise, error); | 
						|
  } | 
						|
  return promise; | 
						|
} | 
						|
 | 
						|
function handlePromiseInput(promise, args, nodeFunc, self) { | 
						|
  return Promise.all(args).then(function (args) { | 
						|
    return handleValueInput(promise, args, nodeFunc, self); | 
						|
  }); | 
						|
} | 
						|
 | 
						|
function needsPromiseInput(arg) { | 
						|
  if (arg !== null && typeof arg === 'object') { | 
						|
    if (arg.constructor === Promise) { | 
						|
      return true; | 
						|
    } else { | 
						|
      return getThen(arg); | 
						|
    } | 
						|
  } else { | 
						|
    return false; | 
						|
  } | 
						|
} | 
						|
 | 
						|
/** | 
						|
  This is a convenient alias for `Promise.all`. | 
						|
 | 
						|
  @method all | 
						|
  @public | 
						|
  @static | 
						|
  @for rsvp | 
						|
  @param {Array} array Array of promises. | 
						|
  @param {String} [label] An optional label. This is useful | 
						|
  for tooling. | 
						|
*/ | 
						|
function all$1(array, label) { | 
						|
  return Promise.all(array, label); | 
						|
} | 
						|
 | 
						|
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } | 
						|
 | 
						|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } | 
						|
 | 
						|
/** | 
						|
@module rsvp | 
						|
@public | 
						|
**/ | 
						|
 | 
						|
var AllSettled = function (_Enumerator) { | 
						|
  _inherits(AllSettled, _Enumerator); | 
						|
 | 
						|
  function AllSettled(Constructor, entries, label) { | 
						|
    return _possibleConstructorReturn(this, _Enumerator.call(this, Constructor, entries, false /* don't abort on reject */, label)); | 
						|
  } | 
						|
 | 
						|
  return AllSettled; | 
						|
}(Enumerator); | 
						|
 | 
						|
AllSettled.prototype._setResultAt = setSettledResult; | 
						|
 | 
						|
/** | 
						|
`RSVP.allSettled` is similar to `RSVP.all`, but instead of implementing | 
						|
a fail-fast method, it waits until all the promises have returned and | 
						|
shows you all the results. This is useful if you want to handle multiple | 
						|
promises' failure states together as a set. | 
						|
 Returns a promise that is fulfilled when all the given promises have been | 
						|
settled. The return promise is fulfilled with an array of the states of | 
						|
the promises passed into the `promises` array argument. | 
						|
 Each state object will either indicate fulfillment or rejection, and | 
						|
provide the corresponding value or reason. The states will take one of | 
						|
the following formats: | 
						|
 ```javascript | 
						|
{ state: 'fulfilled', value: value } | 
						|
  or | 
						|
{ state: 'rejected', reason: reason } | 
						|
``` | 
						|
 Example: | 
						|
 ```javascript | 
						|
let promise1 = RSVP.Promise.resolve(1); | 
						|
let promise2 = RSVP.Promise.reject(new Error('2')); | 
						|
let promise3 = RSVP.Promise.reject(new Error('3')); | 
						|
let promises = [ promise1, promise2, promise3 ]; | 
						|
 RSVP.allSettled(promises).then(function(array){ | 
						|
  // array == [ | 
						|
  //   { state: 'fulfilled', value: 1 }, | 
						|
  //   { state: 'rejected', reason: Error }, | 
						|
  //   { state: 'rejected', reason: Error } | 
						|
  // ] | 
						|
  // Note that for the second item, reason.message will be '2', and for the | 
						|
  // third item, reason.message will be '3'. | 
						|
}, function(error) { | 
						|
  // Not run. (This block would only be called if allSettled had failed, | 
						|
  // for instance if passed an incorrect argument type.) | 
						|
}); | 
						|
``` | 
						|
 @method allSettled | 
						|
@public | 
						|
@static | 
						|
@for rsvp | 
						|
@param {Array} entries | 
						|
@param {String} [label] - optional string that describes the promise. | 
						|
Useful for tooling. | 
						|
@return {Promise} promise that is fulfilled with an array of the settled | 
						|
states of the constituent promises. | 
						|
*/ | 
						|
 | 
						|
function allSettled(entries, label) { | 
						|
  if (!Array.isArray(entries)) { | 
						|
    return Promise.reject(new TypeError("Promise.allSettled must be called with an array"), label); | 
						|
  } | 
						|
 | 
						|
  return new AllSettled(Promise, entries, label).promise; | 
						|
} | 
						|
 | 
						|
/** | 
						|
  This is a convenient alias for `Promise.race`. | 
						|
 | 
						|
  @method race | 
						|
  @public | 
						|
  @static | 
						|
  @for rsvp | 
						|
  @param {Array} array Array of promises. | 
						|
  @param {String} [label] An optional label. This is useful | 
						|
  for tooling. | 
						|
 */ | 
						|
function race$1(array, label) { | 
						|
  return Promise.race(array, label); | 
						|
} | 
						|
 | 
						|
function _possibleConstructorReturn$1(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } | 
						|
 | 
						|
function _inherits$1(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } | 
						|
 | 
						|
var PromiseHash = function (_Enumerator) { | 
						|
  _inherits$1(PromiseHash, _Enumerator); | 
						|
 | 
						|
  function PromiseHash(Constructor, object) { | 
						|
    var abortOnReject = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; | 
						|
    var label = arguments[3]; | 
						|
    return _possibleConstructorReturn$1(this, _Enumerator.call(this, Constructor, object, abortOnReject, label)); | 
						|
  } | 
						|
 | 
						|
  PromiseHash.prototype._init = function _init(Constructor, object) { | 
						|
    this._result = {}; | 
						|
    this._enumerate(object); | 
						|
  }; | 
						|
 | 
						|
  PromiseHash.prototype._enumerate = function _enumerate(input) { | 
						|
    var keys = Object.keys(input); | 
						|
 | 
						|
    var length = keys.length; | 
						|
    var promise = this.promise; | 
						|
    this._remaining = length; | 
						|
 | 
						|
    var key = void 0, | 
						|
        val = void 0; | 
						|
    for (var i = 0; promise._state === PENDING && i < length; i++) { | 
						|
      key = keys[i]; | 
						|
      val = input[key]; | 
						|
      this._eachEntry(val, key, true); | 
						|
    } | 
						|
 | 
						|
    this._checkFullfillment(); | 
						|
  }; | 
						|
 | 
						|
  return PromiseHash; | 
						|
}(Enumerator); | 
						|
 | 
						|
/** | 
						|
  `hash` is similar to `all`, but takes an object instead of an array | 
						|
  for its `promises` argument. | 
						|
 | 
						|
  Returns a promise that is fulfilled when all the given promises have been | 
						|
  fulfilled, or rejected if any of them become rejected. The returned promise | 
						|
  is fulfilled with a hash that has the same key names as the `promises` object | 
						|
  argument. If any of the values in the object are not promises, they will | 
						|
  simply be copied over to the fulfilled object. | 
						|
 | 
						|
  Example: | 
						|
 | 
						|
  ```javascript | 
						|
  let promises = { | 
						|
    myPromise: resolve(1), | 
						|
    yourPromise: resolve(2), | 
						|
    theirPromise: resolve(3), | 
						|
    notAPromise: 4 | 
						|
  }; | 
						|
 | 
						|
  hash(promises).then(function(hash){ | 
						|
    // hash here is an object that looks like: | 
						|
    // { | 
						|
    //   myPromise: 1, | 
						|
    //   yourPromise: 2, | 
						|
    //   theirPromise: 3, | 
						|
    //   notAPromise: 4 | 
						|
    // } | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  If any of the `promises` given to `hash` are rejected, the first promise | 
						|
  that is rejected will be given as the reason to the rejection handler. | 
						|
 | 
						|
  Example: | 
						|
 | 
						|
  ```javascript | 
						|
  let promises = { | 
						|
    myPromise: resolve(1), | 
						|
    rejectedPromise: reject(new Error('rejectedPromise')), | 
						|
    anotherRejectedPromise: reject(new Error('anotherRejectedPromise')), | 
						|
  }; | 
						|
 | 
						|
  hash(promises).then(function(hash){ | 
						|
    // Code here never runs because there are rejected promises! | 
						|
  }, function(reason) { | 
						|
    // reason.message === 'rejectedPromise' | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  An important note: `hash` is intended for plain JavaScript objects that | 
						|
  are just a set of keys and values. `hash` will NOT preserve prototype | 
						|
  chains. | 
						|
 | 
						|
  Example: | 
						|
 | 
						|
  ```javascript | 
						|
  import { hash, resolve } from 'rsvp'; | 
						|
  function MyConstructor(){ | 
						|
    this.example = resolve('Example'); | 
						|
  } | 
						|
 | 
						|
  MyConstructor.prototype = { | 
						|
    protoProperty: resolve('Proto Property') | 
						|
  }; | 
						|
 | 
						|
  let myObject = new MyConstructor(); | 
						|
 | 
						|
  hash(myObject).then(function(hash){ | 
						|
    // protoProperty will not be present, instead you will just have an | 
						|
    // object that looks like: | 
						|
    // { | 
						|
    //   example: 'Example' | 
						|
    // } | 
						|
    // | 
						|
    // hash.hasOwnProperty('protoProperty'); // false | 
						|
    // 'undefined' === typeof hash.protoProperty | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  @method hash | 
						|
  @public | 
						|
  @static | 
						|
  @for rsvp | 
						|
  @param {Object} object | 
						|
  @param {String} [label] optional string that describes the promise. | 
						|
  Useful for tooling. | 
						|
  @return {Promise} promise that is fulfilled when all properties of `promises` | 
						|
  have been fulfilled, or rejected if any of them become rejected. | 
						|
*/ | 
						|
function hash(object, label) { | 
						|
  return Promise.resolve(object, label).then(function (object) { | 
						|
    if (object === null || typeof object !== 'object') { | 
						|
      throw new TypeError("Promise.hash must be called with an object"); | 
						|
    } | 
						|
    return new PromiseHash(Promise, object, label).promise; | 
						|
  }); | 
						|
} | 
						|
 | 
						|
function _possibleConstructorReturn$2(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } | 
						|
 | 
						|
function _inherits$2(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } | 
						|
 | 
						|
var HashSettled = function (_PromiseHash) { | 
						|
  _inherits$2(HashSettled, _PromiseHash); | 
						|
 | 
						|
  function HashSettled(Constructor, object, label) { | 
						|
    return _possibleConstructorReturn$2(this, _PromiseHash.call(this, Constructor, object, false, label)); | 
						|
  } | 
						|
 | 
						|
  return HashSettled; | 
						|
}(PromiseHash); | 
						|
 | 
						|
HashSettled.prototype._setResultAt = setSettledResult; | 
						|
 | 
						|
/** | 
						|
  `hashSettled` is similar to `allSettled`, but takes an object | 
						|
  instead of an array for its `promises` argument. | 
						|
 | 
						|
  Unlike `all` or `hash`, which implement a fail-fast method, | 
						|
  but like `allSettled`, `hashSettled` waits until all the | 
						|
  constituent promises have returned and then shows you all the results | 
						|
  with their states and values/reasons. This is useful if you want to | 
						|
  handle multiple promises' failure states together as a set. | 
						|
 | 
						|
  Returns a promise that is fulfilled when all the given promises have been | 
						|
  settled, or rejected if the passed parameters are invalid. | 
						|
 | 
						|
  The returned promise is fulfilled with a hash that has the same key names as | 
						|
  the `promises` object argument. If any of the values in the object are not | 
						|
  promises, they will be copied over to the fulfilled object and marked with state | 
						|
  'fulfilled'. | 
						|
 | 
						|
  Example: | 
						|
 | 
						|
  ```javascript | 
						|
  import { hashSettled, resolve } from 'rsvp'; | 
						|
 | 
						|
  let promises = { | 
						|
    myPromise: resolve(1), | 
						|
    yourPromise: resolve(2), | 
						|
    theirPromise: resolve(3), | 
						|
    notAPromise: 4 | 
						|
  }; | 
						|
 | 
						|
  hashSettled(promises).then(function(hash){ | 
						|
    // hash here is an object that looks like: | 
						|
    // { | 
						|
    //   myPromise: { state: 'fulfilled', value: 1 }, | 
						|
    //   yourPromise: { state: 'fulfilled', value: 2 }, | 
						|
    //   theirPromise: { state: 'fulfilled', value: 3 }, | 
						|
    //   notAPromise: { state: 'fulfilled', value: 4 } | 
						|
    // } | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  If any of the `promises` given to `hash` are rejected, the state will | 
						|
  be set to 'rejected' and the reason for rejection provided. | 
						|
 | 
						|
  Example: | 
						|
 | 
						|
  ```javascript | 
						|
  import { hashSettled, reject, resolve } from 'rsvp'; | 
						|
 | 
						|
  let promises = { | 
						|
    myPromise: resolve(1), | 
						|
    rejectedPromise: reject(new Error('rejection')), | 
						|
    anotherRejectedPromise: reject(new Error('more rejection')), | 
						|
  }; | 
						|
 | 
						|
  hashSettled(promises).then(function(hash){ | 
						|
    // hash here is an object that looks like: | 
						|
    // { | 
						|
    //   myPromise:              { state: 'fulfilled', value: 1 }, | 
						|
    //   rejectedPromise:        { state: 'rejected', reason: Error }, | 
						|
    //   anotherRejectedPromise: { state: 'rejected', reason: Error }, | 
						|
    // } | 
						|
    // Note that for rejectedPromise, reason.message == 'rejection', | 
						|
    // and for anotherRejectedPromise, reason.message == 'more rejection'. | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  An important note: `hashSettled` is intended for plain JavaScript objects that | 
						|
  are just a set of keys and values. `hashSettled` will NOT preserve prototype | 
						|
  chains. | 
						|
 | 
						|
  Example: | 
						|
 | 
						|
  ```javascript | 
						|
  import Promise, { hashSettled, resolve } from 'rsvp'; | 
						|
 | 
						|
  function MyConstructor(){ | 
						|
    this.example = resolve('Example'); | 
						|
  } | 
						|
 | 
						|
  MyConstructor.prototype = { | 
						|
    protoProperty: Promise.resolve('Proto Property') | 
						|
  }; | 
						|
 | 
						|
  let myObject = new MyConstructor(); | 
						|
 | 
						|
  hashSettled(myObject).then(function(hash){ | 
						|
    // protoProperty will not be present, instead you will just have an | 
						|
    // object that looks like: | 
						|
    // { | 
						|
    //   example: { state: 'fulfilled', value: 'Example' } | 
						|
    // } | 
						|
    // | 
						|
    // hash.hasOwnProperty('protoProperty'); // false | 
						|
    // 'undefined' === typeof hash.protoProperty | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  @method hashSettled | 
						|
  @public | 
						|
  @for rsvp | 
						|
  @param {Object} object | 
						|
  @param {String} [label] optional string that describes the promise. | 
						|
  Useful for tooling. | 
						|
  @return {Promise} promise that is fulfilled when when all properties of `promises` | 
						|
  have been settled. | 
						|
  @static | 
						|
*/ | 
						|
 | 
						|
function hashSettled(object, label) { | 
						|
  return Promise.resolve(object, label).then(function (object) { | 
						|
    if (object === null || typeof object !== 'object') { | 
						|
      throw new TypeError("hashSettled must be called with an object"); | 
						|
    } | 
						|
 | 
						|
    return new HashSettled(Promise, object, false, label).promise; | 
						|
  }); | 
						|
} | 
						|
 | 
						|
/** | 
						|
  `rethrow` will rethrow an error on the next turn of the JavaScript event | 
						|
  loop in order to aid debugging. | 
						|
 | 
						|
  Promises A+ specifies that any exceptions that occur with a promise must be | 
						|
  caught by the promises implementation and bubbled to the last handler. For | 
						|
  this reason, it is recommended that you always specify a second rejection | 
						|
  handler function to `then`. However, `rethrow` will throw the exception | 
						|
  outside of the promise, so it bubbles up to your console if in the browser, | 
						|
  or domain/cause uncaught exception in Node. `rethrow` will also throw the | 
						|
  error again so the error can be handled by the promise per the spec. | 
						|
 | 
						|
  ```javascript | 
						|
  import { rethrow } from 'rsvp'; | 
						|
 | 
						|
  function throws(){ | 
						|
    throw new Error('Whoops!'); | 
						|
  } | 
						|
 | 
						|
  let promise = new Promise(function(resolve, reject){ | 
						|
    throws(); | 
						|
  }); | 
						|
 | 
						|
  promise.catch(rethrow).then(function(){ | 
						|
    // Code here doesn't run because the promise became rejected due to an | 
						|
    // error! | 
						|
  }, function (err){ | 
						|
    // handle the error here | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  The 'Whoops' error will be thrown on the next turn of the event loop | 
						|
  and you can watch for it in your console. You can also handle it using a | 
						|
  rejection handler given to `.then` or `.catch` on the returned promise. | 
						|
 | 
						|
  @method rethrow | 
						|
  @public | 
						|
  @static | 
						|
  @for rsvp | 
						|
  @param {Error} reason reason the promise became rejected. | 
						|
  @throws Error | 
						|
  @static | 
						|
*/ | 
						|
function rethrow(reason) { | 
						|
  setTimeout(function () { | 
						|
    throw reason; | 
						|
  }); | 
						|
  throw reason; | 
						|
} | 
						|
 | 
						|
/** | 
						|
  `defer` returns an object similar to jQuery's `$.Deferred`. | 
						|
  `defer` should be used when porting over code reliant on `$.Deferred`'s | 
						|
  interface. New code should use the `Promise` constructor instead. | 
						|
 | 
						|
  The object returned from `defer` is a plain object with three properties: | 
						|
 | 
						|
  * promise - an `Promise`. | 
						|
  * reject - a function that causes the `promise` property on this object to | 
						|
    become rejected | 
						|
  * resolve - a function that causes the `promise` property on this object to | 
						|
    become fulfilled. | 
						|
 | 
						|
  Example: | 
						|
 | 
						|
   ```javascript | 
						|
   let deferred = defer(); | 
						|
 | 
						|
   deferred.resolve("Success!"); | 
						|
 | 
						|
   deferred.promise.then(function(value){ | 
						|
     // value here is "Success!" | 
						|
   }); | 
						|
   ``` | 
						|
 | 
						|
  @method defer | 
						|
  @public | 
						|
  @static | 
						|
  @for rsvp | 
						|
  @param {String} [label] optional string for labeling the promise. | 
						|
  Useful for tooling. | 
						|
  @return {Object} | 
						|
 */ | 
						|
 | 
						|
function defer(label) { | 
						|
  var deferred = { resolve: undefined, reject: undefined }; | 
						|
 | 
						|
  deferred.promise = new Promise(function (resolve, reject) { | 
						|
    deferred.resolve = resolve; | 
						|
    deferred.reject = reject; | 
						|
  }, label); | 
						|
 | 
						|
  return deferred; | 
						|
} | 
						|
 | 
						|
function _possibleConstructorReturn$3(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } | 
						|
 | 
						|
function _inherits$3(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } | 
						|
 | 
						|
var MapEnumerator = function (_Enumerator) { | 
						|
  _inherits$3(MapEnumerator, _Enumerator); | 
						|
 | 
						|
  function MapEnumerator(Constructor, entries, mapFn, label) { | 
						|
    return _possibleConstructorReturn$3(this, _Enumerator.call(this, Constructor, entries, true, label, mapFn)); | 
						|
  } | 
						|
 | 
						|
  MapEnumerator.prototype._init = function _init(Constructor, input, bool, label, mapFn) { | 
						|
    var len = input.length || 0; | 
						|
    this.length = len; | 
						|
    this._remaining = len; | 
						|
    this._result = new Array(len); | 
						|
    this._mapFn = mapFn; | 
						|
 | 
						|
    this._enumerate(input); | 
						|
  }; | 
						|
 | 
						|
  MapEnumerator.prototype._setResultAt = function _setResultAt(state, i, value, firstPass) { | 
						|
    if (firstPass) { | 
						|
      var val = tryCatch(this._mapFn)(value, i); | 
						|
      if (val === TRY_CATCH_ERROR) { | 
						|
        this._settledAt(REJECTED, i, val.error, false); | 
						|
      } else { | 
						|
        this._eachEntry(val, i, false); | 
						|
      } | 
						|
    } else { | 
						|
      this._remaining--; | 
						|
      this._result[i] = value; | 
						|
    } | 
						|
  }; | 
						|
 | 
						|
  return MapEnumerator; | 
						|
}(Enumerator); | 
						|
 | 
						|
/** | 
						|
 `map` is similar to JavaScript's native `map` method. `mapFn` is eagerly called | 
						|
  meaning that as soon as any promise resolves its value will be passed to `mapFn`. | 
						|
  `map` returns a promise that will become fulfilled with the result of running | 
						|
  `mapFn` on the values the promises become fulfilled with. | 
						|
 | 
						|
  For example: | 
						|
 | 
						|
  ```javascript | 
						|
  import { map, resolve } from 'rsvp'; | 
						|
 | 
						|
  let promise1 = resolve(1); | 
						|
  let promise2 = resolve(2); | 
						|
  let promise3 = resolve(3); | 
						|
  let promises = [ promise1, promise2, promise3 ]; | 
						|
 | 
						|
  let mapFn = function(item){ | 
						|
    return item + 1; | 
						|
  }; | 
						|
 | 
						|
  map(promises, mapFn).then(function(result){ | 
						|
    // result is [ 2, 3, 4 ] | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  If any of the `promises` given to `map` are rejected, the first promise | 
						|
  that is rejected will be given as an argument to the returned promise's | 
						|
  rejection handler. For example: | 
						|
 | 
						|
  ```javascript | 
						|
  import { map, reject, resolve } from 'rsvp'; | 
						|
 | 
						|
  let promise1 = resolve(1); | 
						|
  let promise2 = reject(new Error('2')); | 
						|
  let promise3 = reject(new Error('3')); | 
						|
  let promises = [ promise1, promise2, promise3 ]; | 
						|
 | 
						|
  let mapFn = function(item){ | 
						|
    return item + 1; | 
						|
  }; | 
						|
 | 
						|
  map(promises, mapFn).then(function(array){ | 
						|
    // Code here never runs because there are rejected promises! | 
						|
  }, function(reason) { | 
						|
    // reason.message === '2' | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  `map` will also wait if a promise is returned from `mapFn`. For example, | 
						|
  say you want to get all comments from a set of blog posts, but you need | 
						|
  the blog posts first because they contain a url to those comments. | 
						|
 | 
						|
  ```javscript | 
						|
  import { map } from 'rsvp'; | 
						|
 | 
						|
  let mapFn = function(blogPost){ | 
						|
    // getComments does some ajax and returns an Promise that is fulfilled | 
						|
    // with some comments data | 
						|
    return getComments(blogPost.comments_url); | 
						|
  }; | 
						|
 | 
						|
  // getBlogPosts does some ajax and returns an Promise that is fulfilled | 
						|
  // with some blog post data | 
						|
  map(getBlogPosts(), mapFn).then(function(comments){ | 
						|
    // comments is the result of asking the server for the comments | 
						|
    // of all blog posts returned from getBlogPosts() | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  @method map | 
						|
  @public | 
						|
  @static | 
						|
  @for rsvp | 
						|
  @param {Array} promises | 
						|
  @param {Function} mapFn function to be called on each fulfilled promise. | 
						|
  @param {String} [label] optional string for labeling the promise. | 
						|
  Useful for tooling. | 
						|
  @return {Promise} promise that is fulfilled with the result of calling | 
						|
  `mapFn` on each fulfilled promise or value when they become fulfilled. | 
						|
   The promise will be rejected if any of the given `promises` become rejected. | 
						|
*/ | 
						|
function map(promises, mapFn, label) { | 
						|
  if (typeof mapFn !== 'function') { | 
						|
    return Promise.reject(new TypeError("map expects a function as a second argument"), label); | 
						|
  } | 
						|
 | 
						|
  return Promise.resolve(promises, label).then(function (promises) { | 
						|
    if (!Array.isArray(promises)) { | 
						|
      throw new TypeError("map must be called with an array"); | 
						|
    } | 
						|
    return new MapEnumerator(Promise, promises, mapFn, label).promise; | 
						|
  }); | 
						|
} | 
						|
 | 
						|
/** | 
						|
  This is a convenient alias for `Promise.resolve`. | 
						|
 | 
						|
  @method resolve | 
						|
  @public | 
						|
  @static | 
						|
  @for rsvp | 
						|
  @param {*} value value that the returned promise will be resolved with | 
						|
  @param {String} [label] optional string for identifying the returned promise. | 
						|
  Useful for tooling. | 
						|
  @return {Promise} a promise that will become fulfilled with the given | 
						|
  `value` | 
						|
*/ | 
						|
function resolve$2(value, label) { | 
						|
  return Promise.resolve(value, label); | 
						|
} | 
						|
 | 
						|
/** | 
						|
  This is a convenient alias for `Promise.reject`. | 
						|
 | 
						|
  @method reject | 
						|
  @public | 
						|
  @static | 
						|
  @for rsvp | 
						|
  @param {*} reason value that the returned promise will be rejected with. | 
						|
  @param {String} [label] optional string for identifying the returned promise. | 
						|
  Useful for tooling. | 
						|
  @return {Promise} a promise rejected with the given `reason`. | 
						|
*/ | 
						|
function reject$2(reason, label) { | 
						|
  return Promise.reject(reason, label); | 
						|
} | 
						|
 | 
						|
function _possibleConstructorReturn$4(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } | 
						|
 | 
						|
function _inherits$4(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } | 
						|
 | 
						|
var EMPTY_OBJECT = {}; | 
						|
 | 
						|
var FilterEnumerator = function (_MapEnumerator) { | 
						|
  _inherits$4(FilterEnumerator, _MapEnumerator); | 
						|
 | 
						|
  function FilterEnumerator() { | 
						|
    return _possibleConstructorReturn$4(this, _MapEnumerator.apply(this, arguments)); | 
						|
  } | 
						|
 | 
						|
  FilterEnumerator.prototype._checkFullfillment = function _checkFullfillment() { | 
						|
    if (this._remaining === 0 && this._result !== null) { | 
						|
      var result = this._result.filter(function (val) { | 
						|
        return val !== EMPTY_OBJECT; | 
						|
      }); | 
						|
      fulfill(this.promise, result); | 
						|
      this._result = null; | 
						|
    } | 
						|
  }; | 
						|
 | 
						|
  FilterEnumerator.prototype._setResultAt = function _setResultAt(state, i, value, firstPass) { | 
						|
    if (firstPass) { | 
						|
      this._result[i] = value; | 
						|
      var val = tryCatch(this._mapFn)(value, i); | 
						|
      if (val === TRY_CATCH_ERROR) { | 
						|
        this._settledAt(REJECTED, i, val.error, false); | 
						|
      } else { | 
						|
        this._eachEntry(val, i, false); | 
						|
      } | 
						|
    } else { | 
						|
      this._remaining--; | 
						|
      if (!value) { | 
						|
        this._result[i] = EMPTY_OBJECT; | 
						|
      } | 
						|
    } | 
						|
  }; | 
						|
 | 
						|
  return FilterEnumerator; | 
						|
}(MapEnumerator); | 
						|
 | 
						|
/** | 
						|
 `filter` is similar to JavaScript's native `filter` method. | 
						|
 `filterFn` is eagerly called meaning that as soon as any promise | 
						|
  resolves its value will be passed to `filterFn`. `filter` returns | 
						|
  a promise that will become fulfilled with the result of running | 
						|
  `filterFn` on the values the promises become fulfilled with. | 
						|
 | 
						|
  For example: | 
						|
 | 
						|
  ```javascript | 
						|
  import { filter, resolve } from 'rsvp'; | 
						|
 | 
						|
  let promise1 = resolve(1); | 
						|
  let promise2 = resolve(2); | 
						|
  let promise3 = resolve(3); | 
						|
 | 
						|
  let promises = [promise1, promise2, promise3]; | 
						|
 | 
						|
  let filterFn = function(item){ | 
						|
    return item > 1; | 
						|
  }; | 
						|
 | 
						|
  filter(promises, filterFn).then(function(result){ | 
						|
    // result is [ 2, 3 ] | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  If any of the `promises` given to `filter` are rejected, the first promise | 
						|
  that is rejected will be given as an argument to the returned promise's | 
						|
  rejection handler. For example: | 
						|
 | 
						|
  ```javascript | 
						|
  import { filter, reject, resolve } from 'rsvp'; | 
						|
 | 
						|
  let promise1 = resolve(1); | 
						|
  let promise2 = reject(new Error('2')); | 
						|
  let promise3 = reject(new Error('3')); | 
						|
  let promises = [ promise1, promise2, promise3 ]; | 
						|
 | 
						|
  let filterFn = function(item){ | 
						|
    return item > 1; | 
						|
  }; | 
						|
 | 
						|
  filter(promises, filterFn).then(function(array){ | 
						|
    // Code here never runs because there are rejected promises! | 
						|
  }, function(reason) { | 
						|
    // reason.message === '2' | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  `filter` will also wait for any promises returned from `filterFn`. | 
						|
  For instance, you may want to fetch a list of users then return a subset | 
						|
  of those users based on some asynchronous operation: | 
						|
 | 
						|
  ```javascript | 
						|
  import { filter, resolve } from 'rsvp'; | 
						|
 | 
						|
  let alice = { name: 'alice' }; | 
						|
  let bob   = { name: 'bob' }; | 
						|
  let users = [ alice, bob ]; | 
						|
 | 
						|
  let promises = users.map(function(user){ | 
						|
    return resolve(user); | 
						|
  }); | 
						|
 | 
						|
  let filterFn = function(user){ | 
						|
    // Here, Alice has permissions to create a blog post, but Bob does not. | 
						|
    return getPrivilegesForUser(user).then(function(privs){ | 
						|
      return privs.can_create_blog_post === true; | 
						|
    }); | 
						|
  }; | 
						|
  filter(promises, filterFn).then(function(users){ | 
						|
    // true, because the server told us only Alice can create a blog post. | 
						|
    users.length === 1; | 
						|
    // false, because Alice is the only user present in `users` | 
						|
    users[0] === bob; | 
						|
  }); | 
						|
  ``` | 
						|
 | 
						|
  @method filter | 
						|
  @public | 
						|
  @static | 
						|
  @for rsvp | 
						|
  @param {Array} promises | 
						|
  @param {Function} filterFn - function to be called on each resolved value to | 
						|
  filter the final results. | 
						|
  @param {String} [label] optional string describing the promise. Useful for | 
						|
  tooling. | 
						|
  @return {Promise} | 
						|
*/ | 
						|
 | 
						|
function filter(promises, filterFn, label) { | 
						|
  if (typeof filterFn !== 'function') { | 
						|
    return Promise.reject(new TypeError("filter expects function as a second argument"), label); | 
						|
  } | 
						|
 | 
						|
  return Promise.resolve(promises, label).then(function (promises) { | 
						|
    if (!Array.isArray(promises)) { | 
						|
      throw new TypeError("filter must be called with an array"); | 
						|
    } | 
						|
    return new FilterEnumerator(Promise, promises, filterFn, label).promise; | 
						|
  }); | 
						|
} | 
						|
 | 
						|
var len = 0; | 
						|
var vertxNext = void 0; | 
						|
function asap(callback, arg) { | 
						|
  queue$1[len] = callback; | 
						|
  queue$1[len + 1] = arg; | 
						|
  len += 2; | 
						|
  if (len === 2) { | 
						|
    // If len is 1, that means that we need to schedule an async flush. | 
						|
    // If additional callbacks are queued before the queue is flushed, they | 
						|
    // will be processed by this flush that we are scheduling. | 
						|
    scheduleFlush$1(); | 
						|
  } | 
						|
} | 
						|
 | 
						|
var browserWindow = typeof window !== 'undefined' ? window : undefined; | 
						|
var browserGlobal = browserWindow || {}; | 
						|
var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver; | 
						|
var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]'; | 
						|
 | 
						|
// test for web worker but not in IE10 | 
						|
var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined'; | 
						|
 | 
						|
// node | 
						|
function useNextTick() { | 
						|
  var nextTick = process.nextTick; | 
						|
  // node version 0.10.x displays a deprecation warning when nextTick is used recursively | 
						|
  // setImmediate should be used instead instead | 
						|
  var version = process.versions.node.match(/^(?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)$/); | 
						|
  if (Array.isArray(version) && version[1] === '0' && version[2] === '10') { | 
						|
    nextTick = setImmediate; | 
						|
  } | 
						|
  return function () { | 
						|
    return nextTick(flush); | 
						|
  }; | 
						|
} | 
						|
 | 
						|
// vertx | 
						|
function useVertxTimer() { | 
						|
  if (typeof vertxNext !== 'undefined') { | 
						|
    return function () { | 
						|
      vertxNext(flush); | 
						|
    }; | 
						|
  } | 
						|
  return useSetTimeout(); | 
						|
} | 
						|
 | 
						|
function useMutationObserver() { | 
						|
  var iterations = 0; | 
						|
  var observer = new BrowserMutationObserver(flush); | 
						|
  var node = document.createTextNode(''); | 
						|
  observer.observe(node, { characterData: true }); | 
						|
 | 
						|
  return function () { | 
						|
    return node.data = iterations = ++iterations % 2; | 
						|
  }; | 
						|
} | 
						|
 | 
						|
// web worker | 
						|
function useMessageChannel() { | 
						|
  var channel = new MessageChannel(); | 
						|
  channel.port1.onmessage = flush; | 
						|
  return function () { | 
						|
    return channel.port2.postMessage(0); | 
						|
  }; | 
						|
} | 
						|
 | 
						|
function useSetTimeout() { | 
						|
  return function () { | 
						|
    return setTimeout(flush, 1); | 
						|
  }; | 
						|
} | 
						|
 | 
						|
var queue$1 = new Array(1000); | 
						|
 | 
						|
function flush() { | 
						|
  for (var i = 0; i < len; i += 2) { | 
						|
    var callback = queue$1[i]; | 
						|
    var arg = queue$1[i + 1]; | 
						|
 | 
						|
    callback(arg); | 
						|
 | 
						|
    queue$1[i] = undefined; | 
						|
    queue$1[i + 1] = undefined; | 
						|
  } | 
						|
 | 
						|
  len = 0; | 
						|
} | 
						|
 | 
						|
function attemptVertex() { | 
						|
  try { | 
						|
    var vertx = Function('return this')().require('vertx'); | 
						|
    vertxNext = vertx.runOnLoop || vertx.runOnContext; | 
						|
    return useVertxTimer(); | 
						|
  } catch (e) { | 
						|
    return useSetTimeout(); | 
						|
  } | 
						|
} | 
						|
 | 
						|
var scheduleFlush$1 = void 0; | 
						|
// Decide what async method to use to triggering processing of queued callbacks: | 
						|
if (isNode) { | 
						|
  scheduleFlush$1 = useNextTick(); | 
						|
} else if (BrowserMutationObserver) { | 
						|
  scheduleFlush$1 = useMutationObserver(); | 
						|
} else if (isWorker) { | 
						|
  scheduleFlush$1 = useMessageChannel(); | 
						|
} else if (browserWindow === undefined && typeof require === 'function') { | 
						|
  scheduleFlush$1 = attemptVertex(); | 
						|
} else { | 
						|
  scheduleFlush$1 = useSetTimeout(); | 
						|
} | 
						|
 | 
						|
// defaults | 
						|
config.async = asap; | 
						|
config.after = function (cb) { | 
						|
  return setTimeout(cb, 0); | 
						|
}; | 
						|
var cast = resolve$2; | 
						|
 | 
						|
var async = function (callback, arg) { | 
						|
  return config.async(callback, arg); | 
						|
}; | 
						|
 | 
						|
function on() { | 
						|
  config.on.apply(config, arguments); | 
						|
} | 
						|
 | 
						|
function off() { | 
						|
  config.off.apply(config, arguments); | 
						|
} | 
						|
 | 
						|
// Set up instrumentation through `window.__PROMISE_INTRUMENTATION__` | 
						|
if (typeof window !== 'undefined' && typeof window['__PROMISE_INSTRUMENTATION__'] === 'object') { | 
						|
  var callbacks = window['__PROMISE_INSTRUMENTATION__']; | 
						|
  configure('instrument', true); | 
						|
  for (var eventName in callbacks) { | 
						|
    if (callbacks.hasOwnProperty(eventName)) { | 
						|
      on(eventName, callbacks[eventName]); | 
						|
    } | 
						|
  } | 
						|
} | 
						|
 | 
						|
// the default export here is for backwards compat: | 
						|
//   https://github.com/tildeio/rsvp.js/issues/434 | 
						|
var rsvp = { | 
						|
  asap: asap, | 
						|
  cast: cast, | 
						|
  Promise: Promise, | 
						|
  EventTarget: EventTarget, | 
						|
  all: all$1, | 
						|
  allSettled: allSettled, | 
						|
  race: race$1, | 
						|
  hash: hash, | 
						|
  hashSettled: hashSettled, | 
						|
  rethrow: rethrow, | 
						|
  defer: defer, | 
						|
  denodeify: denodeify, | 
						|
  configure: configure, | 
						|
  on: on, | 
						|
  off: off, | 
						|
  resolve: resolve$2, | 
						|
  reject: reject$2, | 
						|
  map: map, | 
						|
  async: async, | 
						|
  filter: filter | 
						|
}; | 
						|
 | 
						|
export default rsvp; | 
						|
export { asap, cast, Promise, EventTarget, all$1 as all, allSettled, race$1 as race, hash, hashSettled, rethrow, defer, denodeify, configure, on, off, resolve$2 as resolve, reject$2 as reject, map, async, filter }; | 
						|
 | 
						|
//# sourceMappingURL=rsvp.es.map
 | 
						|
 |