ember-source 2.16.1 → 2.16.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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