ember-source 2.16.1 → 2.16.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,7 +6,7 @@
6
6
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
7
7
  * @license Licensed under MIT license
8
8
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
9
- * @version 2.16.1
9
+ * @version 2.16.2
10
10
  */
11
11
 
12
12
  var enifed, requireModule, Ember;
@@ -5307,14 +5307,15 @@ enifed('@glimmer/runtime', ['exports', '@glimmer/util', '@glimmer/reference', '@
5307
5307
  value;
5308
5308
  var partialSymbols = partial.symbolTable.symbols;
5309
5309
  var outerScope = vm.scope();
5310
+ var evalScope = outerScope.getEvalScope();
5310
5311
  var partialScope = vm.pushRootScope(partialSymbols.length, false);
5311
5312
  partialScope.bindCallerScope(outerScope.getCallerScope());
5312
- partialScope.bindEvalScope(outerScope.getEvalScope());
5313
+ partialScope.bindEvalScope(evalScope);
5313
5314
  partialScope.bindSelf(outerScope.getSelf());
5314
5315
  var evalInfo = this.evalInfo,
5315
5316
  outerSymbols = this.outerSymbols;
5316
5317
 
5317
- var locals = (0, _util.dict)();
5318
+ var locals = Object.create(outerScope.getPartialMap());
5318
5319
  for (i = 0; i < evalInfo.length; i++) {
5319
5320
  slot = evalInfo[i];
5320
5321
  name = outerSymbols[slot - 1];
@@ -5322,13 +5323,14 @@ enifed('@glimmer/runtime', ['exports', '@glimmer/util', '@glimmer/reference', '@
5322
5323
 
5323
5324
  locals[name] = ref;
5324
5325
  }
5325
- var evalScope = outerScope.getEvalScope();
5326
- for (_i2 = 0; _i2 < partialSymbols.length; _i2++) {
5327
- _name = partialSymbols[_i2];
5328
- symbol = _i2 + 1;
5329
- value = evalScope[_name];
5326
+ if (evalScope) {
5327
+ for (_i2 = 0; _i2 < partialSymbols.length; _i2++) {
5328
+ _name = partialSymbols[_i2];
5329
+ symbol = _i2 + 1;
5330
+ value = evalScope[_name];
5330
5331
 
5331
- if (value !== undefined) partialScope.bind(symbol, value);
5332
+ if (value !== undefined) partialScope.bind(symbol, value);
5333
+ }
5332
5334
  }
5333
5335
  partialScope.bindPartialMap(locals);
5334
5336
  vm.pushFrame();
@@ -44546,7 +44548,7 @@ enifed('ember/index', ['exports', 'require', 'ember-environment', 'node-module',
44546
44548
  enifed("ember/version", ["exports"], function (exports) {
44547
44549
  "use strict";
44548
44550
 
44549
- exports.default = "2.16.1";
44551
+ exports.default = "2.16.2";
44550
44552
  });
44551
44553
  enifed('node-module', ['exports'], function(_exports) {
44552
44554
  var IS_NODE = typeof module === 'object' && typeof module.require === 'function';
@@ -47605,18 +47607,6 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
47605
47607
 
47606
47608
  var _rsvp, callbacks;
47607
47609
 
47608
- function indexOf(callbacks, callback) {
47609
- var i, l;
47610
-
47611
- for (i = 0, l = callbacks.length; i < l; i++) {
47612
- if (callbacks[i] === callback) {
47613
- return i;
47614
- }
47615
- }
47616
-
47617
- return -1;
47618
- }
47619
-
47620
47610
  function callbacksFor(object) {
47621
47611
  var callbacks = object._promiseCallbacks;
47622
47612
 
@@ -47652,7 +47642,7 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
47652
47642
  callbacks = allCallbacks[eventName] = [];
47653
47643
  }
47654
47644
 
47655
- if (indexOf(callbacks, callback) === -1) {
47645
+ if (callbacks.indexOf(callback)) {
47656
47646
  callbacks.push(callback);
47657
47647
  }
47658
47648
  },
@@ -47668,7 +47658,7 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
47668
47658
 
47669
47659
  callbacks = allCallbacks[eventName];
47670
47660
 
47671
- index = indexOf(callbacks, callback);
47661
+ index = callbacks.indexOf(callback);
47672
47662
 
47673
47663
  if (index !== -1) {
47674
47664
  callbacks.splice(index, 1);
@@ -47705,40 +47695,6 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
47705
47695
  }
47706
47696
  }
47707
47697
 
47708
- function objectOrFunction(x) {
47709
- var type = typeof x;
47710
- return x !== null && (type === 'object' || type === 'function');
47711
- }
47712
-
47713
- function isFunction(x) {
47714
- return typeof x === 'function';
47715
- }
47716
-
47717
- function isObject(x) {
47718
- return x !== null && typeof x === 'object';
47719
- }
47720
-
47721
- function isMaybeThenable(x) {
47722
- return x !== null && typeof x === 'object';
47723
- }
47724
-
47725
- var _isArray = void 0;
47726
- if (Array.isArray) {
47727
- _isArray = Array.isArray;
47728
- } else {
47729
- _isArray = function (x) {
47730
- return Object.prototype.toString.call(x) === '[object Array]';
47731
- };
47732
- }
47733
-
47734
- var isArray = _isArray;
47735
-
47736
- // Date.now is not available in browsers < IE9
47737
- // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now#Compatibility
47738
- var now = Date.now || function () {
47739
- return new Date().getTime();
47740
- };
47741
-
47742
47698
  var queue = [];
47743
47699
 
47744
47700
  function scheduleFlush() {
@@ -47772,7 +47728,7 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
47772
47728
  detail: promise._result,
47773
47729
  childId: child && child._id,
47774
47730
  label: promise._label,
47775
- timeStamp: now(),
47731
+ timeStamp: Date.now(),
47776
47732
  error: config["instrument-with-stack"] ? new Error(promise._label) : null
47777
47733
  } })) {
47778
47734
  scheduleFlush();
@@ -47828,12 +47784,21 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
47828
47784
  return new TypeError('A promises callback cannot return that same promise.');
47829
47785
  }
47830
47786
 
47787
+ function objectOrFunction(x) {
47788
+ var type = typeof x;
47789
+ return x !== null && (type === 'object' || type === 'function');
47790
+ }
47791
+
47831
47792
  function noop() {}
47832
47793
 
47833
47794
  var PENDING = void 0;
47834
47795
  var FULFILLED = 1;
47835
47796
  var REJECTED = 2;
47836
47797
 
47798
+ function ErrorObject() {
47799
+ this.error = null;
47800
+ }
47801
+
47837
47802
  var GET_THEN_ERROR = new ErrorObject();
47838
47803
 
47839
47804
  function getThen(promise) {
@@ -47845,6 +47810,28 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
47845
47810
  }
47846
47811
  }
47847
47812
 
47813
+ var TRY_CATCH_ERROR = new ErrorObject();
47814
+
47815
+ var tryCatchCallback = void 0;
47816
+ function tryCatcher() {
47817
+ var target;
47818
+
47819
+ try {
47820
+ target = tryCatchCallback;
47821
+
47822
+ tryCatchCallback = null;
47823
+ return target.apply(this, arguments);
47824
+ } catch (e) {
47825
+ TRY_CATCH_ERROR.error = e;
47826
+ return TRY_CATCH_ERROR;
47827
+ }
47828
+ }
47829
+
47830
+ function tryCatch(fn) {
47831
+ tryCatchCallback = fn;
47832
+ return tryCatcher;
47833
+ }
47834
+
47848
47835
  function tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {
47849
47836
  try {
47850
47837
  then$$1.call(value, fulfillmentHandler, rejectionHandler);
@@ -47890,10 +47877,10 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
47890
47877
  reject(promise, thenable._result);
47891
47878
  } else {
47892
47879
  subscribe(thenable, undefined, function (value) {
47893
- if (thenable !== value) {
47894
- resolve(promise, value, undefined);
47895
- } else {
47880
+ if (thenable === value) {
47896
47881
  fulfill(promise, value);
47882
+ } else {
47883
+ resolve(promise, value);
47897
47884
  }
47898
47885
  }, function (reason) {
47899
47886
  return reject(promise, reason);
@@ -47902,14 +47889,17 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
47902
47889
  }
47903
47890
 
47904
47891
  function handleMaybeThenable(promise, maybeThenable, then$$1) {
47905
- var isOwnThenable = maybeThenable.constructor === promise.constructor && then$$1 === then && promise.constructor.resolve === resolve$1;
47892
+ var isOwnThenable = maybeThenable.constructor === promise.constructor && then$$1 === then && promise.constructor.resolve === resolve$1,
47893
+ error;
47906
47894
 
47907
47895
  if (isOwnThenable) {
47908
47896
  handleOwnThenable(promise, maybeThenable);
47909
47897
  } else if (then$$1 === GET_THEN_ERROR) {
47910
- reject(promise, GET_THEN_ERROR.error);
47898
+ error = GET_THEN_ERROR.error;
47899
+
47911
47900
  GET_THEN_ERROR.error = null;
47912
- } else if (isFunction(then$$1)) {
47901
+ reject(promise, error);
47902
+ } else if (typeof then$$1 === 'function') {
47913
47903
  handleForeignThenable(promise, maybeThenable, then$$1);
47914
47904
  } else {
47915
47905
  fulfill(promise, maybeThenable);
@@ -48006,46 +47996,28 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
48006
47996
  promise._subscribers.length = 0;
48007
47997
  }
48008
47998
 
48009
- function ErrorObject() {
48010
- this.error = null;
48011
- }
48012
-
48013
- var TRY_CATCH_ERROR = new ErrorObject();
48014
-
48015
- function tryCatch(callback, result) {
48016
- try {
48017
- return callback(result);
48018
- } catch (e) {
48019
- TRY_CATCH_ERROR.error = e;
48020
- return TRY_CATCH_ERROR;
48021
- }
48022
- }
48023
-
48024
47999
  function invokeCallback(state, promise, callback, result) {
48025
- var hasCallback = isFunction(callback);
48026
- var value = void 0,
48027
- error = void 0;
48000
+ var hasCallback = typeof callback === 'function',
48001
+ error;
48002
+ var value = void 0;
48028
48003
 
48029
48004
  if (hasCallback) {
48030
- value = tryCatch(callback, result);
48031
-
48032
- if (value === TRY_CATCH_ERROR) {
48033
- error = value.error;
48034
- value.error = null; // release
48035
- } else if (value === promise) {
48036
- reject(promise, withOwnPromise());
48037
- return;
48038
- }
48005
+ value = tryCatch(callback)(result);
48039
48006
  } else {
48040
48007
  value = result;
48041
48008
  }
48042
48009
 
48043
48010
  if (promise._state !== PENDING) {
48044
48011
  // noop
48045
- } else if (hasCallback && error === undefined) {
48046
- resolve(promise, value);
48047
- } else if (error !== undefined) {
48012
+ } else if (value === promise) {
48013
+ reject(promise, withOwnPromise());
48014
+ } else if (value === TRY_CATCH_ERROR) {
48015
+ error = value.error;
48016
+
48017
+ value.error = null; // release
48048
48018
  reject(promise, error);
48019
+ } else if (hasCallback) {
48020
+ resolve(promise, value);
48049
48021
  } else if (state === FULFILLED) {
48050
48022
  fulfill(promise, value);
48051
48023
  } else if (state === REJECTED) {
@@ -48104,114 +48076,122 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
48104
48076
  return child;
48105
48077
  }
48106
48078
 
48107
- function Enumerator(Constructor, input, abortOnReject, label) {
48108
- this._instanceConstructor = Constructor;
48109
- this.promise = new Constructor(noop, label);
48110
- this._abortOnReject = abortOnReject;
48079
+ var Enumerator = function () {
48080
+ function Enumerator(Constructor, input, abortOnReject, label) {
48111
48081
 
48112
- this._init.apply(this, arguments);
48113
- }
48114
-
48115
- Enumerator.prototype._init = function (Constructor, input) {
48116
- var len = input.length || 0;
48117
- this.length = len;
48118
- this._remaining = len;
48119
- this._result = new Array(len);
48082
+ this._instanceConstructor = Constructor;
48083
+ this.promise = new Constructor(noop, label);
48084
+ this._abortOnReject = abortOnReject;
48085
+ this.isUsingOwnPromise = Constructor === Promise;
48120
48086
 
48121
- this._enumerate(input);
48122
- if (this._remaining === 0) {
48123
- fulfill(this.promise, this._result);
48087
+ this._init.apply(this, arguments);
48124
48088
  }
48125
- };
48126
48089
 
48127
- Enumerator.prototype._enumerate = function (input) {
48128
- var length = this.length,
48129
- i;
48130
- var promise = this.promise;
48090
+ Enumerator.prototype._init = function (Constructor, input) {
48091
+ var len = input.length || 0;
48092
+ this.length = len;
48093
+ this._remaining = len;
48094
+ this._result = new Array(len);
48131
48095
 
48132
- for (i = 0; promise._state === PENDING && i < length; i++) {
48133
- this._eachEntry(input[i], i);
48134
- }
48135
- };
48096
+ this._enumerate(input);
48097
+ };
48136
48098
 
48137
- Enumerator.prototype._settleMaybeThenable = function (entry, i) {
48138
- var c = this._instanceConstructor,
48139
- then$$1,
48140
- promise;
48141
- var resolve$$1 = c.resolve;
48099
+ Enumerator.prototype._enumerate = function (input) {
48100
+ var length = this.length,
48101
+ i;
48102
+ var promise = this.promise;
48142
48103
 
48143
- if (resolve$$1 === resolve$1) {
48144
- then$$1 = getThen(entry);
48104
+ for (i = 0; promise._state === PENDING && i < length; i++) {
48105
+ this._eachEntry(input[i], i, true);
48106
+ }
48145
48107
 
48108
+ this._checkFullfillment();
48109
+ };
48146
48110
 
48147
- if (then$$1 === then && entry._state !== PENDING) {
48148
- entry._onError = null;
48149
- this._settledAt(entry._state, i, entry._result);
48150
- } else if (typeof then$$1 !== 'function') {
48151
- this._remaining--;
48152
- this._result[i] = this._makeResult(FULFILLED, i, entry);
48153
- } else if (c === Promise) {
48154
- promise = new c(noop);
48111
+ Enumerator.prototype._checkFullfillment = function () {
48112
+ if (this._remaining === 0) {
48113
+ fulfill(this.promise, this._result);
48114
+ }
48115
+ };
48116
+
48117
+ Enumerator.prototype._settleMaybeThenable = function (entry, i, firstPass) {
48118
+ var c = this._instanceConstructor,
48119
+ then$$1,
48120
+ promise;
48121
+ var resolve$$1 = c.resolve;
48122
+
48123
+ if (resolve$$1 === resolve$1) {
48124
+ then$$1 = getThen(entry);
48125
+
48126
+
48127
+ if (then$$1 === then && entry._state !== PENDING) {
48128
+ entry._onError = null;
48129
+ this._settledAt(entry._state, i, entry._result, firstPass);
48130
+ } else if (typeof then$$1 !== 'function') {
48131
+ this._settledAt(FULFILLED, i, entry, firstPass);
48132
+ } else if (this.isUsingOwnPromise) {
48133
+ promise = new c(noop);
48155
48134
 
48156
- handleMaybeThenable(promise, entry, then$$1);
48157
- this._willSettleAt(promise, i);
48135
+ handleMaybeThenable(promise, entry, then$$1);
48136
+ this._willSettleAt(promise, i, firstPass);
48137
+ } else {
48138
+ this._willSettleAt(new c(function (resolve$$1) {
48139
+ return resolve$$1(entry);
48140
+ }), i, firstPass);
48141
+ }
48158
48142
  } else {
48159
- this._willSettleAt(new c(function (resolve$$1) {
48160
- return resolve$$1(entry);
48161
- }), i);
48143
+ this._willSettleAt(resolve$$1(entry), i, firstPass);
48162
48144
  }
48163
- } else {
48164
- this._willSettleAt(resolve$$1(entry), i);
48165
- }
48166
- };
48145
+ };
48167
48146
 
48168
- Enumerator.prototype._eachEntry = function (entry, i) {
48169
- if (isMaybeThenable(entry)) {
48170
- this._settleMaybeThenable(entry, i);
48171
- } else {
48172
- this._remaining--;
48173
- this._result[i] = this._makeResult(FULFILLED, i, entry);
48174
- }
48175
- };
48147
+ Enumerator.prototype._eachEntry = function (entry, i, firstPass) {
48148
+ if (entry !== null && typeof entry === 'object') {
48149
+ this._settleMaybeThenable(entry, i, firstPass);
48150
+ } else {
48151
+ this._setResultAt(FULFILLED, i, entry, firstPass);
48152
+ }
48153
+ };
48176
48154
 
48177
- Enumerator.prototype._settledAt = function (state, i, value) {
48178
- var promise = this.promise;
48155
+ Enumerator.prototype._settledAt = function (state, i, value, firstPass) {
48156
+ var promise = this.promise;
48179
48157
 
48180
- if (promise._state === PENDING) {
48181
- if (this._abortOnReject && state === REJECTED) {
48182
- reject(promise, value);
48183
- } else {
48184
- this._remaining--;
48185
- this._result[i] = this._makeResult(state, i, value);
48186
- if (this._remaining === 0) {
48187
- fulfill(promise, this._result);
48158
+ if (promise._state === PENDING) {
48159
+ if (this._abortOnReject && state === REJECTED) {
48160
+ reject(promise, value);
48161
+ } else {
48162
+ this._setResultAt(state, i, value, firstPass);
48163
+ this._checkFullfillment();
48188
48164
  }
48189
48165
  }
48190
- }
48191
- };
48166
+ };
48192
48167
 
48193
- Enumerator.prototype._makeResult = function (state, i, value) {
48194
- return value;
48195
- };
48168
+ Enumerator.prototype._setResultAt = function (state, i, value) {
48169
+ this._remaining--;
48170
+ this._result[i] = value;
48171
+ };
48196
48172
 
48197
- Enumerator.prototype._willSettleAt = function (promise, i) {
48198
- var enumerator = this;
48173
+ Enumerator.prototype._willSettleAt = function (promise, i, firstPass) {
48174
+ var _this = this;
48199
48175
 
48200
- subscribe(promise, undefined, function (value) {
48201
- return enumerator._settledAt(FULFILLED, i, value);
48202
- }, function (reason) {
48203
- return enumerator._settledAt(REJECTED, i, reason);
48204
- });
48205
- };
48176
+ subscribe(promise, undefined, function (value) {
48177
+ return _this._settledAt(FULFILLED, i, value, firstPass);
48178
+ }, function (reason) {
48179
+ return _this._settledAt(REJECTED, i, reason, firstPass);
48180
+ });
48181
+ };
48182
+
48183
+ return Enumerator;
48184
+ }();
48206
48185
 
48207
- function makeSettledResult(state, position, value) {
48186
+ function setSettledResult(state, i, value) {
48187
+ this._remaining--;
48208
48188
  if (state === FULFILLED) {
48209
- return {
48189
+ this._result[i] = {
48210
48190
  state: 'fulfilled',
48211
48191
  value: value
48212
48192
  };
48213
48193
  } else {
48214
- return {
48194
+ this._result[i] = {
48215
48195
  state: 'rejected',
48216
48196
  reason: value
48217
48197
  };
@@ -48372,7 +48352,7 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
48372
48352
  */
48373
48353
 
48374
48354
 
48375
- var guidKey = 'rsvp_' + now() + '-';
48355
+ var guidKey = 'rsvp_' + Date.now() + '-';
48376
48356
  var counter = 0;
48377
48357
 
48378
48358
  function needsResolver() {
@@ -48487,121 +48467,59 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
48487
48467
  Useful for tooling.
48488
48468
  @constructor
48489
48469
  */
48490
- function Promise(resolver, label) {
48491
- this._id = counter++;
48492
- this._label = label;
48493
- this._state = undefined;
48494
- this._result = undefined;
48495
- this._subscribers = [];
48496
48470
 
48497
- config.instrument && instrument('created', this);
48471
+ var Promise = function () {
48472
+ function Promise(resolver, label) {
48498
48473
 
48499
- if (noop !== resolver) {
48500
- typeof resolver !== 'function' && needsResolver();
48501
- this instanceof Promise ? initializePromise(this, resolver) : needsNew();
48502
- }
48503
- }
48474
+ this._id = counter++;
48475
+ this._label = label;
48476
+ this._state = undefined;
48477
+ this._result = undefined;
48478
+ this._subscribers = [];
48504
48479
 
48505
- Promise.prototype._onError = function (reason) {
48506
- var _this = this;
48480
+ config.instrument && instrument('created', this);
48507
48481
 
48508
- config.after(function () {
48509
- if (_this._onError) {
48510
- config.trigger('error', reason, _this._label);
48482
+ if (noop !== resolver) {
48483
+ typeof resolver !== 'function' && needsResolver();
48484
+ this instanceof Promise ? initializePromise(this, resolver) : needsNew();
48511
48485
  }
48512
- });
48513
- };
48514
-
48515
- /**
48516
- `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same
48517
- as the catch block of a try/catch statement.
48518
-
48519
- ```js
48520
- function findAuthor(){
48521
- throw new Error('couldn\'t find that author');
48522
- }
48523
-
48524
- // synchronous
48525
- try {
48526
- findAuthor();
48527
- } catch(reason) {
48528
- // something went wrong
48529
48486
  }
48530
-
48531
- // async with promises
48532
- findAuthor().catch(function(reason){
48533
- // something went wrong
48534
- });
48535
- ```
48536
-
48537
- @method catch
48538
- @param {Function} onRejection
48539
- @param {String} label optional string for labeling the promise.
48540
- Useful for tooling.
48541
- @return {Promise}
48542
- */
48543
- Promise.prototype.catch = function (onRejection, label) {
48544
- return this.then(undefined, onRejection, label);
48545
- };
48546
48487
 
48547
- /**
48548
- `finally` will be invoked regardless of the promise's fate just as native
48549
- try/catch/finally behaves
48550
-
48551
- Synchronous example:
48552
-
48553
- ```js
48554
- findAuthor() {
48555
- if (Math.random() > 0.5) {
48556
- throw new Error();
48557
- }
48558
- return new Author();
48559
- }
48560
-
48561
- try {
48562
- return findAuthor(); // succeed or fail
48563
- } catch(error) {
48564
- return findOtherAuthor();
48565
- } finally {
48566
- // always runs
48567
- // doesn't affect the return value
48568
- }
48569
- ```
48570
-
48571
- Asynchronous example:
48572
-
48573
- ```js
48574
- findAuthor().catch(function(reason){
48575
- return findOtherAuthor();
48576
- }).finally(function(){
48577
- // author was either found, or not
48578
- });
48579
- ```
48580
-
48581
- @method finally
48582
- @param {Function} callback
48583
- @param {String} label optional string for labeling the promise.
48584
- Useful for tooling.
48585
- @return {Promise}
48586
- */
48587
- Promise.prototype.finally = function (callback, label) {
48588
- var promise = this;
48589
- var constructor = promise.constructor;
48488
+ Promise.prototype._onError = function (reason) {
48489
+ var _this2 = this;
48590
48490
 
48591
- return promise.then(function (value) {
48592
- return constructor.resolve(callback()).then(function () {
48593
- return value;
48594
- });
48595
- }, function (reason) {
48596
- return constructor.resolve(callback()).then(function () {
48597
- throw reason;
48491
+ config.after(function () {
48492
+ if (_this2._onError) {
48493
+ config.trigger('error', reason, _this2._label);
48494
+ }
48598
48495
  });
48599
- }, label);
48600
- };
48496
+ };
48497
+
48498
+ Promise.prototype.catch = function (onRejection, label) {
48499
+ return this.then(undefined, onRejection, label);
48500
+ };
48501
+
48502
+ Promise.prototype.finally = function (callback, label) {
48503
+ var promise = this;
48504
+ var constructor = promise.constructor;
48505
+
48506
+ return promise.then(function (value) {
48507
+ return constructor.resolve(callback()).then(function () {
48508
+ return value;
48509
+ });
48510
+ }, function (reason) {
48511
+ return constructor.resolve(callback()).then(function () {
48512
+ throw reason;
48513
+ });
48514
+ }, label);
48515
+ };
48516
+
48517
+ return Promise;
48518
+ }();
48601
48519
 
48602
48520
  Promise.cast = resolve$1; // deprecated
48603
48521
  Promise.all = function (entries, label) {
48604
- if (!isArray(entries)) {
48522
+ if (!Array.isArray(entries)) {
48605
48523
  return this.reject(new TypeError("Promise.all must be called with an array"), label);
48606
48524
  }
48607
48525
  return new Enumerator(this, entries, true /* abort on reject */, label).promise;
@@ -48613,7 +48531,7 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
48613
48531
 
48614
48532
  var promise = new Constructor(noop, label);
48615
48533
 
48616
- if (!isArray(entries)) {
48534
+ if (!Array.isArray(entries)) {
48617
48535
  reject(promise, new TypeError('Promise.race must be called with an array'));
48618
48536
  return promise;
48619
48537
  }
@@ -49061,7 +48979,7 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
49061
48979
  var promise = new Promise(noop);
49062
48980
 
49063
48981
  args[l] = function (err, val) {
49064
- if (err) reject(promise, err);else if (options === undefined) resolve(promise, val);else if (options === true) resolve(promise, arrayResult(arguments));else if (isArray(options)) resolve(promise, makeObject(arguments, options));else resolve(promise, val);
48982
+ if (err) reject(promise, err);else if (options === undefined) resolve(promise, val);else if (options === true) resolve(promise, arrayResult(arguments));else if (Array.isArray(options)) resolve(promise, makeObject(arguments, options));else resolve(promise, val);
49065
48983
  };
49066
48984
 
49067
48985
  if (promiseInput) {
@@ -49130,7 +49048,7 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
49130
49048
  return AllSettled;
49131
49049
  }(Enumerator);
49132
49050
 
49133
- AllSettled.prototype._makeResult = makeSettledResult;
49051
+ AllSettled.prototype._setResultAt = setSettledResult;
49134
49052
 
49135
49053
  /**
49136
49054
  `RSVP.allSettled` is similar to `RSVP.all`, but instead of implementing
@@ -49178,7 +49096,7 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
49178
49096
  */
49179
49097
 
49180
49098
  function allSettled(entries, label) {
49181
- if (!isArray(entries)) {
49099
+ if (!Array.isArray(entries)) {
49182
49100
  return Promise.reject(new TypeError("Promise.allSettled must be called with an array"), label);
49183
49101
  }
49184
49102
 
@@ -49336,7 +49254,7 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
49336
49254
  have been fulfilled, or rejected if any of them become rejected.
49337
49255
  */
49338
49256
  function hash(object, label) {
49339
- if (!isObject(object)) {
49257
+ if (object === null || typeof object !== 'object') {
49340
49258
  return Promise.reject(new TypeError("Promise.hash must be called with an object"), label);
49341
49259
  }
49342
49260
 
@@ -49353,7 +49271,7 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
49353
49271
  return HashSettled;
49354
49272
  }(PromiseHash);
49355
49273
 
49356
- HashSettled.prototype._makeResult = makeSettledResult;
49274
+ HashSettled.prototype._setResultAt = setSettledResult;
49357
49275
 
49358
49276
  /**
49359
49277
  `RSVP.hashSettled` is similar to `RSVP.allSettled`, but takes an object
@@ -49458,7 +49376,7 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
49458
49376
  */
49459
49377
 
49460
49378
  function hashSettled(object, label) {
49461
- if (!isObject(object)) {
49379
+ if (object === null || typeof object !== 'object') {
49462
49380
  return Promise.reject(new TypeError("RSVP.hashSettled must be called with an object"), label);
49463
49381
  }
49464
49382
 
@@ -49556,12 +49474,48 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
49556
49474
  return deferred;
49557
49475
  }
49558
49476
 
49477
+ var MapEnumerator = function (_Enumerator3) {
49478
+ (0, _emberBabel.inherits)(MapEnumerator, _Enumerator3);
49479
+
49480
+ function MapEnumerator(Constructor, entries, mapFn, label) {
49481
+ return (0, _emberBabel.possibleConstructorReturn)(this, _Enumerator3.call(this, Constructor, entries, true, label, mapFn));
49482
+ }
49483
+
49484
+ MapEnumerator.prototype._init = function (Constructor, input, bool, label, mapFn) {
49485
+ var len = input.length || 0;
49486
+ this.length = len;
49487
+ this._remaining = len;
49488
+ this._result = new Array(len);
49489
+ this._mapFn = mapFn;
49490
+
49491
+ this._enumerate(input);
49492
+ };
49493
+
49494
+ MapEnumerator.prototype._setResultAt = function (state, i, value, firstPass) {
49495
+ var val;
49496
+
49497
+ if (firstPass) {
49498
+ val = tryCatch(this._mapFn)(value, i);
49499
+
49500
+ if (val === TRY_CATCH_ERROR) {
49501
+ this._settledAt(REJECTED, i, val.error, false);
49502
+ } else {
49503
+ this._eachEntry(val, i, false);
49504
+ }
49505
+ } else {
49506
+ this._remaining--;
49507
+ this._result[i] = value;
49508
+ }
49509
+ };
49510
+
49511
+ return MapEnumerator;
49512
+ }(Enumerator);
49513
+
49559
49514
  /**
49560
- `RSVP.map` is similar to JavaScript's native `map` method, except that it
49561
- waits for all promises to become fulfilled before running the `mapFn` on
49562
- each item in given to `promises`. `RSVP.map` returns a promise that will
49563
- become fulfilled with the result of running `mapFn` on the values the promises
49564
- become fulfilled with.
49515
+ `RSVP.map` is similar to JavaScript's native `map` method. `mapFn` is eagerly called
49516
+ meaning that as soon as any promise resolves its value will be passed to `mapFn`.
49517
+ `RSVP.map` returns a promise that will become fulfilled with the result of running
49518
+ `mapFn` on the values the promises become fulfilled with.
49565
49519
 
49566
49520
  For example:
49567
49521
 
@@ -49635,25 +49589,15 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
49635
49589
  @static
49636
49590
  */
49637
49591
  function map(promises, mapFn, label) {
49638
- if (!isArray(promises)) {
49592
+ if (!Array.isArray(promises)) {
49639
49593
  return Promise.reject(new TypeError("RSVP.map must be called with an array"), label);
49640
49594
  }
49641
49595
 
49642
- if (!isFunction(mapFn)) {
49596
+ if (typeof mapFn !== 'function') {
49643
49597
  return Promise.reject(new TypeError("RSVP.map expects a function as a second argument"), label);
49644
49598
  }
49645
49599
 
49646
- return Promise.all(promises, label).then(function (values) {
49647
- var length = values.length,
49648
- i;
49649
- var results = new Array(length);
49650
-
49651
- for (i = 0; i < length; i++) {
49652
- results[i] = mapFn(values[i]);
49653
- }
49654
-
49655
- return Promise.all(results, label);
49656
- });
49600
+ return new MapEnumerator(Promise, promises, mapFn, label).promise;
49657
49601
  }
49658
49602
 
49659
49603
  /**
@@ -49687,12 +49631,64 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
49687
49631
  return Promise.reject(reason, label);
49688
49632
  }
49689
49633
 
49634
+ var EMPTY_OBJECT = {};
49635
+
49636
+ var FilterEnumerator = function (_Enumerator4) {
49637
+ (0, _emberBabel.inherits)(FilterEnumerator, _Enumerator4);
49638
+
49639
+ function FilterEnumerator(Constructor, entries, filterFn, label) {
49640
+ return (0, _emberBabel.possibleConstructorReturn)(this, _Enumerator4.call(this, Constructor, entries, true, label, filterFn));
49641
+ }
49642
+
49643
+ FilterEnumerator.prototype._init = function (Constructor, input, bool, label, filterFn) {
49644
+ var len = input.length || 0;
49645
+ this.length = len;
49646
+ this._remaining = len;
49647
+
49648
+ this._result = new Array(len);
49649
+ this._filterFn = filterFn;
49650
+
49651
+ this._enumerate(input);
49652
+ };
49653
+
49654
+ FilterEnumerator.prototype._checkFullfillment = function () {
49655
+ if (this._remaining === 0) {
49656
+ this._result = this._result.filter(function (val) {
49657
+ return val !== EMPTY_OBJECT;
49658
+ });
49659
+ fulfill(this.promise, this._result);
49660
+ }
49661
+ };
49662
+
49663
+ FilterEnumerator.prototype._setResultAt = function (state, i, value, firstPass) {
49664
+ var val;
49665
+
49666
+ if (firstPass) {
49667
+ this._result[i] = value;
49668
+ val = tryCatch(this._filterFn)(value, i);
49669
+
49670
+ if (val === TRY_CATCH_ERROR) {
49671
+ this._settledAt(REJECTED, i, val.error, false);
49672
+ } else {
49673
+ this._eachEntry(val, i, false);
49674
+ }
49675
+ } else {
49676
+ this._remaining--;
49677
+ if (!value) {
49678
+ this._result[i] = EMPTY_OBJECT;
49679
+ }
49680
+ }
49681
+ };
49682
+
49683
+ return FilterEnumerator;
49684
+ }(Enumerator);
49685
+
49690
49686
  /**
49691
- `RSVP.filter` is similar to JavaScript's native `filter` method, except that it
49692
- waits for all promises to become fulfilled before running the `filterFn` on
49693
- each item in given to `promises`. `RSVP.filter` returns a promise that will
49694
- become fulfilled with the result of running `filterFn` on the values the
49695
- promises become fulfilled with.
49687
+ `RSVP.filter` is similar to JavaScript's native `filter` method.
49688
+ `filterFn` is eagerly called meaning that as soon as any promise
49689
+ resolves its value will be passed to `filterFn`. `RSVP.filter` returns
49690
+ a promise that will become fulfilled with the result of running
49691
+ `filterFn` on the values the promises become fulfilled with.
49696
49692
 
49697
49693
  For example:
49698
49694
 
@@ -49773,51 +49769,17 @@ enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _em
49773
49769
  @return {Promise}
49774
49770
  */
49775
49771
 
49776
- function resolveAll(promises, label) {
49777
- return Promise.all(promises, label);
49778
- }
49779
-
49780
- function resolveSingle(promise, label) {
49781
- return Promise.resolve(promise, label).then(function (promises) {
49782
- return resolveAll(promises, label);
49783
- });
49784
- }
49785
-
49786
49772
  function filter(promises, filterFn, label) {
49787
- if (!isArray(promises) && !(isObject(promises) && promises.then !== undefined)) {
49773
+ if (!Array.isArray(promises) && !(promises !== null && typeof promises === 'object' && promises.then !== undefined)) {
49788
49774
  return Promise.reject(new TypeError("RSVP.filter must be called with an array or promise"), label);
49789
49775
  }
49790
49776
 
49791
- if (!isFunction(filterFn)) {
49777
+ if (typeof filterFn !== 'function') {
49792
49778
  return Promise.reject(new TypeError("RSVP.filter expects function as a second argument"), label);
49793
49779
  }
49794
49780
 
49795
- var promise = isArray(promises) ? resolveAll(promises, label) : resolveSingle(promises, label);
49796
- return promise.then(function (values) {
49797
- var length = values.length,
49798
- i;
49799
- var filtered = new Array(length);
49800
-
49801
- for (i = 0; i < length; i++) {
49802
- filtered[i] = filterFn(values[i]);
49803
- }
49804
-
49805
- return resolveAll(filtered, label).then(function (filtered) {
49806
- var results = new Array(length),
49807
- _i;
49808
- var newLength = 0;
49809
-
49810
- for (_i = 0; _i < length; _i++) {
49811
- if (filtered[_i]) {
49812
- results[newLength] = values[_i];
49813
- newLength++;
49814
- }
49815
- }
49816
-
49817
- results.length = newLength;
49818
-
49819
- return results;
49820
- });
49781
+ return Promise.resolve(promises, label).then(function (promises) {
49782
+ return new FilterEnumerator(Promise, promises, filterFn, label).promise;
49821
49783
  });
49822
49784
  }
49823
49785