ember-source 2.13.0.beta.2 → 2.13.0

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.13.0-beta.2
9
+ * @version 2.13.0
10
10
  */
11
11
 
12
12
  var enifed, requireModule, Ember;
@@ -3489,6 +3489,8 @@ enifed('container/container', ['exports', 'ember-debug', 'ember-utils', 'ember-e
3489
3489
  var cacheable = !areInjectionsDynamic(injections) && !areInjectionsDynamic(factoryInjections);
3490
3490
 
3491
3491
  factoryInjections[_emberUtils.NAME_KEY] = registry.makeToString(factory, fullName);
3492
+ injections._debugContainerKey = fullName;
3493
+ _emberUtils.setOwner(injections, container.owner);
3492
3494
 
3493
3495
  var injectedFactory = factory.extend(injections);
3494
3496
 
@@ -3514,9 +3516,6 @@ enifed('container/container', ['exports', 'ember-debug', 'ember-utils', 'ember-e
3514
3516
  var type = splitName[0];
3515
3517
 
3516
3518
  var injections = buildInjections(container, registry.getTypeInjections(type), registry.getInjections(fullName));
3517
- injections._debugContainerKey = fullName;
3518
-
3519
- _emberUtils.setOwner(injections, container.owner);
3520
3519
 
3521
3520
  return injections;
3522
3521
  }
@@ -3560,6 +3559,7 @@ enifed('container/container', ['exports', 'ember-debug', 'ember-utils', 'ember-e
3560
3559
  // to create time injections
3561
3560
  // TODO: support new'ing for instantiation and merge injections for pure JS Functions
3562
3561
  var injections = injectionsFor(container, fullName);
3562
+ injections._debugContainerKey = fullName;
3563
3563
 
3564
3564
  // Ensure that a container is available to an object during instantiation.
3565
3565
  // TODO - remove when Ember reaches v3.0.0
@@ -3589,27 +3589,29 @@ enifed('container/container', ['exports', 'ember-debug', 'ember-utils', 'ember-e
3589
3589
  return factoryInjections;
3590
3590
  }
3591
3591
 
3592
+ var INJECTED_DEPRECATED_CONTAINER_DESC = {
3593
+ configurable: true,
3594
+ enumerable: false,
3595
+ get: function () {
3596
+ _emberDebug.deprecate('Using the injected `container` is deprecated. Please use the `getOwner` helper instead to access the owner of this object.', false, { id: 'ember-application.injected-container', until: '2.13.0', url: 'http://emberjs.com/deprecations/v2.x#toc_injected-container-access' });
3597
+ return this[CONTAINER_OVERRIDE] || _emberUtils.getOwner(this).__container__;
3598
+ },
3599
+
3600
+ set: function (value) {
3601
+ _emberDebug.deprecate('Providing the `container` property to ' + this + ' is deprecated. Please use `Ember.setOwner` or `owner.ownerInjection()` instead to provide an owner to the instance being created.', false, { id: 'ember-application.injected-container', until: '2.13.0', url: 'http://emberjs.com/deprecations/v2.x#toc_injected-container-access' });
3602
+
3603
+ this[CONTAINER_OVERRIDE] = value;
3604
+
3605
+ return value;
3606
+ }
3607
+ };
3608
+
3592
3609
  // TODO - remove when Ember reaches v3.0.0
3593
3610
  function injectDeprecatedContainer(object, container) {
3594
3611
  if ('container' in object) {
3595
3612
  return;
3596
3613
  }
3597
- Object.defineProperty(object, 'container', {
3598
- configurable: true,
3599
- enumerable: false,
3600
- get: function () {
3601
- _emberDebug.deprecate('Using the injected `container` is deprecated. Please use the `getOwner` helper instead to access the owner of this object.', false, { id: 'ember-application.injected-container', until: '3.0.0', url: 'http://emberjs.com/deprecations/v2.x#toc_injected-container-access' });
3602
- return this[CONTAINER_OVERRIDE] || container;
3603
- },
3604
-
3605
- set: function (value) {
3606
- _emberDebug.deprecate('Providing the `container` property to ' + this + ' is deprecated. Please use `Ember.setOwner` or `owner.ownerInjection()` instead to provide an owner to the instance being created.', false, { id: 'ember-application.injected-container', until: '3.0.0', url: 'http://emberjs.com/deprecations/v2.x#toc_injected-container-access' });
3607
-
3608
- this[CONTAINER_OVERRIDE] = value;
3609
-
3610
- return value;
3611
- }
3612
- });
3614
+ Object.defineProperty(object, 'container', INJECTED_DEPRECATED_CONTAINER_DESC);
3613
3615
  }
3614
3616
 
3615
3617
  function destroyDestroyables(container) {
@@ -3663,7 +3665,7 @@ enifed('container/container', ['exports', 'ember-debug', 'ember-utils', 'ember-e
3663
3665
  return function () {
3664
3666
  _emberDebug.deprecate('Using the injected `container` is deprecated. Please use the `getOwner` helper to access the owner of this object and then call `' + ownerProperty + '` instead.', false, {
3665
3667
  id: 'ember-application.injected-container',
3666
- until: '3.0.0',
3668
+ until: '2.13.0',
3667
3669
  url: 'http://emberjs.com/deprecations/v2.x#toc_injected-container-access'
3668
3670
  });
3669
3671
  return container[containerProperty].apply(container, arguments);
@@ -3693,6 +3695,7 @@ enifed('container/container', ['exports', 'ember-debug', 'ember-utils', 'ember-e
3693
3695
  babelHelpers.classCallCheck(this, FactoryManager);
3694
3696
 
3695
3697
  this.container = container;
3698
+ this.owner = container.owner;
3696
3699
  this.class = factory;
3697
3700
  this.fullName = fullName;
3698
3701
  this.normalizedName = normalizedName;
@@ -3700,6 +3703,14 @@ enifed('container/container', ['exports', 'ember-debug', 'ember-utils', 'ember-e
3700
3703
  this.injections = undefined;
3701
3704
  }
3702
3705
 
3706
+ FactoryManager.prototype.toString = function toString() {
3707
+ if (!this.madeToString) {
3708
+ this.madeToString = this.container.registry.makeToString(this.class, this.fullName);
3709
+ }
3710
+
3711
+ return this.madeToString;
3712
+ };
3713
+
3703
3714
  FactoryManager.prototype.create = function create() {
3704
3715
  var _this = this;
3705
3716
 
@@ -3714,8 +3725,6 @@ enifed('container/container', ['exports', 'ember-debug', 'ember-utils', 'ember-e
3714
3725
  }
3715
3726
  var props = _emberUtils.assign({}, injections, options);
3716
3727
 
3717
- props[_emberUtils.NAME_KEY] = this.madeToString || (this.madeToString = this.container.registry.makeToString(this.class, this.fullName));
3718
-
3719
3728
  _emberDebug.runInDebug(function () {
3720
3729
  var lazyInjections = undefined;
3721
3730
  var validationCache = _this.container.validationCache;
@@ -3739,6 +3748,21 @@ enifed('container/container', ['exports', 'ember-debug', 'ember-utils', 'ember-e
3739
3748
  injectDeprecatedContainer(prototype, this.container);
3740
3749
  }
3741
3750
 
3751
+ // required to allow access to things like
3752
+ // the customized toString, _debugContainerKey,
3753
+ // owner, etc. without a double extend and without
3754
+ // modifying the objects properties
3755
+ if (typeof this.class._initFactory === 'function') {
3756
+ this.class._initFactory(this);
3757
+ } else {
3758
+ // in the non-Ember.Object case we need to still setOwner
3759
+ // this is required for supporting glimmer environment and
3760
+ // template instantiation which rely heavily on
3761
+ // `options[OWNER]` being passed into `create`
3762
+ // TODO: clean this up, and remove in future versions
3763
+ _emberUtils.setOwner(props, this.owner);
3764
+ }
3765
+
3742
3766
  return this.class.create(props);
3743
3767
  };
3744
3768
 
@@ -5331,7 +5355,7 @@ enifed('ember-application/system/application-instance', ['exports', 'ember-utils
5331
5355
  lookup: function () {
5332
5356
  _emberDebug.deprecate('Using `ApplicationInstance.container.lookup` is deprecated. Please use `ApplicationInstance.lookup` instead.', false, {
5333
5357
  id: 'ember-application.app-instance-container',
5334
- until: '3.0.0',
5358
+ until: '2.13.0',
5335
5359
  url: 'http://emberjs.com/deprecations/v2.x/#toc_ember-applicationinstance-container'
5336
5360
  });
5337
5361
  return instance.lookup.apply(instance, arguments);
@@ -18977,22 +19001,16 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
18977
19001
  }
18978
19002
  }
18979
19003
 
18980
- function finishChains(obj) {
18981
- // We only create meta if we really have to
18982
- var m = _emberMetalMeta.peekMeta(obj);
18983
- if (m !== undefined) {
18984
- m = _emberMetalMeta.meta(obj);
18985
-
18986
- // finish any current chains node watchers that reference obj
18987
- var chainWatchers = m.readableChainWatchers();
18988
- if (chainWatchers !== undefined) {
18989
- chainWatchers.revalidateAll();
18990
- }
18991
- // ensure that if we have inherited any chains they have been
18992
- // copied onto our own meta.
18993
- if (m.readableChains() !== undefined) {
18994
- m.writableChains(_emberMetalWatch_path.makeChainNode);
18995
- }
19004
+ function finishChains(meta) {
19005
+ // finish any current chains node watchers that reference obj
19006
+ var chainWatchers = meta.readableChainWatchers();
19007
+ if (chainWatchers !== undefined) {
19008
+ chainWatchers.revalidateAll();
19009
+ }
19010
+ // ensure that if we have inherited any chains they have been
19011
+ // copied onto our own meta.
19012
+ if (meta.readableChains() !== undefined) {
19013
+ meta.writableChains(_emberMetalWatch_path.makeChainNode);
18996
19014
  }
18997
19015
  }
18998
19016
 
@@ -19760,7 +19778,7 @@ enifed('ember-metal/error_handler', ['exports', 'ember-console', 'ember-debug'],
19760
19778
  var stack = error.stack;
19761
19779
  var message = error.message;
19762
19780
 
19763
- if (stack && !stack.includes(message)) {
19781
+ if (stack && stack.indexOf(message) === -1) {
19764
19782
  stack = message + '\n' + stack;
19765
19783
  }
19766
19784
 
@@ -20353,6 +20371,7 @@ enifed('ember-metal/index', ['exports', 'ember-metal/core', 'ember-metal/compute
20353
20371
  exports.PROPERTY_DID_CHANGE = _emberMetalProperty_events.PROPERTY_DID_CHANGE;
20354
20372
  exports.defineProperty = _emberMetalProperties.defineProperty;
20355
20373
  exports.Descriptor = _emberMetalProperties.Descriptor;
20374
+ exports._hasCachedComputedProperties = _emberMetalProperties._hasCachedComputedProperties;
20356
20375
  exports.watchKey = _emberMetalWatch_key.watchKey;
20357
20376
  exports.unwatchKey = _emberMetalWatch_key.unwatchKey;
20358
20377
  exports.ChainNode = _emberMetalChains.ChainNode;
@@ -21613,6 +21632,7 @@ enifed('ember-metal/meta', ['exports', 'ember-utils', 'ember-metal/meta_listener
21613
21632
  this._chains = undefined;
21614
21633
  this._tag = undefined;
21615
21634
  this._tags = undefined;
21635
+ this._factory = undefined;
21616
21636
 
21617
21637
  // initial value for all flags right now is false
21618
21638
  // see FLAGS const for detailed list of flags used
@@ -21861,6 +21881,15 @@ enifed('ember-metal/meta', ['exports', 'ember-utils', 'ember-metal/meta_listener
21861
21881
  }
21862
21882
  };
21863
21883
 
21884
+ babelHelpers.createClass(Meta, [{
21885
+ key: 'factory',
21886
+ set: function (factory) {
21887
+ this._factory = factory;
21888
+ },
21889
+ get: function () {
21890
+ return this._factory;
21891
+ }
21892
+ }]);
21864
21893
  return Meta;
21865
21894
  })();
21866
21895
 
@@ -23528,6 +23557,7 @@ enifed('ember-metal/properties', ['exports', 'ember-debug', 'ember-metal/meta',
23528
23557
  exports.DEFAULT_GETTER_FUNCTION = DEFAULT_GETTER_FUNCTION;
23529
23558
  exports.INHERITING_GETTER_FUNCTION = INHERITING_GETTER_FUNCTION;
23530
23559
  exports.defineProperty = defineProperty;
23560
+ exports._hasCachedComputedProperties = _hasCachedComputedProperties;
23531
23561
 
23532
23562
  // ..........................................................
23533
23563
  // DESCRIPTOR
@@ -23650,24 +23680,20 @@ enifed('ember-metal/properties', ['exports', 'ember-debug', 'ember-metal/meta',
23650
23680
  */
23651
23681
 
23652
23682
  function defineProperty(obj, keyName, desc, data, meta) {
23653
- var possibleDesc = undefined,
23654
- existingDesc = undefined,
23655
- watching = undefined,
23656
- value = undefined;
23657
-
23658
23683
  if (!meta) {
23659
23684
  meta = _emberMetalMeta.meta(obj);
23660
23685
  }
23661
23686
  var watchEntry = meta.peekWatching(keyName);
23662
- possibleDesc = obj[keyName];
23663
- existingDesc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined;
23687
+ var possibleDesc = obj[keyName];
23688
+ var existingDesc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined;
23664
23689
 
23665
- watching = watchEntry !== undefined && watchEntry > 0;
23690
+ var watching = watchEntry !== undefined && watchEntry > 0;
23666
23691
 
23667
23692
  if (existingDesc) {
23668
23693
  existingDesc.teardown(obj, keyName);
23669
23694
  }
23670
23695
 
23696
+ var value = undefined;
23671
23697
  if (desc instanceof Descriptor) {
23672
23698
  value = desc;
23673
23699
  if (true) {
@@ -23684,7 +23710,10 @@ enifed('ember-metal/properties', ['exports', 'ember-debug', 'ember-metal/meta',
23684
23710
  } else {
23685
23711
  obj[keyName] = value;
23686
23712
  }
23687
- if (desc.setup) {
23713
+
23714
+ didDefineComputedProperty(obj.constructor);
23715
+
23716
+ if (typeof desc.setup === 'function') {
23688
23717
  desc.setup(obj, keyName);
23689
23718
  }
23690
23719
  } else {
@@ -23729,13 +23758,30 @@ enifed('ember-metal/properties', ['exports', 'ember-debug', 'ember-metal/meta',
23729
23758
 
23730
23759
  // The `value` passed to the `didDefineProperty` hook is
23731
23760
  // either the descriptor or data, whichever was passed.
23732
- if (obj.didDefineProperty) {
23761
+ if (typeof obj.didDefineProperty === 'function') {
23733
23762
  obj.didDefineProperty(obj, keyName, value);
23734
23763
  }
23735
23764
 
23736
23765
  return this;
23737
23766
  }
23738
23767
 
23768
+ var hasCachedComputedProperties = false;
23769
+
23770
+ function _hasCachedComputedProperties() {
23771
+ hasCachedComputedProperties = true;
23772
+ }
23773
+
23774
+ function didDefineComputedProperty(constructor) {
23775
+ if (hasCachedComputedProperties === false) {
23776
+ return;
23777
+ }
23778
+ var cache = _emberMetalMeta.meta(constructor).readableCache();
23779
+
23780
+ if (cache && cache._computedProperties !== undefined) {
23781
+ cache._computedProperties = undefined;
23782
+ }
23783
+ }
23784
+
23739
23785
  function handleBrokenPhantomDefineProperty(obj, keyName, desc) {
23740
23786
  // https://github.com/ariya/phantomjs/issues/11856
23741
23787
  Object.defineProperty(obj, keyName, { configurable: true, writable: true, value: 'iCry' });
@@ -25664,8 +25710,18 @@ enifed('ember-routing/ext/controller', ['exports', 'ember-metal', 'ember-runtime
25664
25710
  Defines which query parameters the controller accepts.
25665
25711
  If you give the names `['category','page']` it will bind
25666
25712
  the values of these query parameters to the variables
25667
- `this.category` and `this.page`
25668
- @property queryParams
25713
+ `this.category` and `this.page`.
25714
+ By default, Ember coerces query parameter values using `toggleProperty`.
25715
+ This behavior may lead to unexpected results.
25716
+ To explicity configure a query parameter property so it coerces as expected, you must define a type property:
25717
+ ```javascript
25718
+ queryParams: [{
25719
+ category: {
25720
+ type: 'boolean'
25721
+ }
25722
+ }]
25723
+ ```
25724
+ @property queryParams
25669
25725
  @public
25670
25726
  */
25671
25727
  queryParams: null,
@@ -38353,7 +38409,6 @@ enifed('ember-runtime/system/core_object', ['exports', 'ember-utils', 'ember-met
38353
38409
  var applyMixin = _emberMetal.Mixin._apply;
38354
38410
  var finishPartial = _emberMetal.Mixin.finishPartial;
38355
38411
  var reopen = _emberMetal.Mixin.prototype.reopen;
38356
- var hasCachedComputedProperties = false;
38357
38412
 
38358
38413
  var POST_INIT = _emberUtils.symbol('POST_INIT');
38359
38414
 
@@ -38364,7 +38419,8 @@ enifed('ember-runtime/system/core_object', ['exports', 'ember-utils', 'ember-met
38364
38419
  // possible.
38365
38420
 
38366
38421
  var wasApplied = false;
38367
- var initProperties = undefined;
38422
+ var initProperties = undefined,
38423
+ initFactory = undefined;
38368
38424
 
38369
38425
  var Class = (function () {
38370
38426
  function Class() {
@@ -38382,6 +38438,11 @@ babelHelpers.classCallCheck(this, Class);
38382
38438
  var m = _emberMetal.meta(this);
38383
38439
  var proto = m.proto;
38384
38440
  m.proto = this;
38441
+
38442
+ if (initFactory) {
38443
+ m.factory = initFactory;
38444
+ initFactory = null;
38445
+ }
38385
38446
  if (initProperties) {
38386
38447
  // capture locally so we can clear the closed over variable
38387
38448
  var props = initProperties;
@@ -38463,7 +38524,7 @@ babelHelpers.classCallCheck(this, Class);
38463
38524
  this[POST_INIT]();
38464
38525
 
38465
38526
  m.proto = proto;
38466
- _emberMetal.finishChains(this);
38527
+ _emberMetal.finishChains(m);
38467
38528
  _emberMetal.sendEvent(this, 'init');
38468
38529
  }
38469
38530
 
@@ -38479,6 +38540,10 @@ babelHelpers.classCallCheck(this, Class);
38479
38540
  initProperties = args;
38480
38541
  };
38481
38542
 
38543
+ Class._initFactory = function _initFactory(factory) {
38544
+ initFactory = factory;
38545
+ };
38546
+
38482
38547
  Class.proto = function proto() {
38483
38548
  var superclass = Class.superclass;
38484
38549
  if (superclass) {
@@ -38601,7 +38666,8 @@ babelHelpers.classCallCheck(this, Class);
38601
38666
  }, _Mixin$create.toString = function () {
38602
38667
  var hasToStringExtension = typeof this.toStringExtension === 'function';
38603
38668
  var extension = hasToStringExtension ? ':' + this.toStringExtension() : '';
38604
- var ret = '<' + (this[_emberUtils.NAME_KEY] || this.constructor.toString()) + ':' + _emberUtils.guidFor(this) + extension + '>';
38669
+
38670
+ var ret = '<' + (this[_emberUtils.NAME_KEY] || _emberMetal.meta(this).factory || this.constructor.toString()) + ':' + _emberUtils.guidFor(this) + extension + '>';
38605
38671
 
38606
38672
  return ret;
38607
38673
  }, _Mixin$create));
@@ -38680,7 +38746,7 @@ babelHelpers.classCallCheck(this, Class);
38680
38746
  _emberDebug.assert('metaForProperty() could not find a computed property with key \'' + key + '\'.', !!desc && desc instanceof _emberMetal.ComputedProperty);
38681
38747
  return desc._meta || {};
38682
38748
  }, _ClassMixinProps._computedProperties = _emberMetal.computed(function () {
38683
- hasCachedComputedProperties = true;
38749
+ _emberMetal._hasCachedComputedProperties();
38684
38750
  var proto = this.proto();
38685
38751
  var property = undefined;
38686
38752
  var properties = [];
@@ -38752,22 +38818,6 @@ babelHelpers.classCallCheck(this, Class);
38752
38818
  CoreObject.ClassMixin = ClassMixin;
38753
38819
 
38754
38820
  ClassMixin.apply(CoreObject);
38755
-
38756
- CoreObject.reopen({
38757
- didDefineProperty: function (proto, key, value) {
38758
- if (hasCachedComputedProperties === false) {
38759
- return;
38760
- }
38761
- if (value instanceof _emberMetal.ComputedProperty) {
38762
- var cache = _emberMetal.meta(this.constructor).readableCache();
38763
-
38764
- if (cache && cache._computedProperties !== undefined) {
38765
- cache._computedProperties = undefined;
38766
- }
38767
- }
38768
- }
38769
- });
38770
-
38771
38821
  exports.default = CoreObject;
38772
38822
  });
38773
38823
  // Private, and only for didInitAttrs willRecieveAttrs
@@ -39760,6 +39810,11 @@ enifed('ember-runtime/system/object', ['exports', 'ember-utils', 'ember-metal',
39760
39810
 
39761
39811
  'use strict';
39762
39812
 
39813
+ var _CoreObject$extend;
39814
+
39815
+ var OVERRIDE_CONTAINER_KEY = _emberUtils.symbol('OVERRIDE_CONTAINER_KEY');
39816
+ var OVERRIDE_OWNER = _emberUtils.symbol('OVERRIDE_OWNER');
39817
+
39763
39818
  /**
39764
39819
  `Ember.Object` is the main base class for all Ember objects. It is a subclass
39765
39820
  of `Ember.CoreObject` with the `Ember.Observable` mixin applied. For details,
@@ -39771,7 +39826,47 @@ enifed('ember-runtime/system/object', ['exports', 'ember-utils', 'ember-metal',
39771
39826
  @uses Ember.Observable
39772
39827
  @public
39773
39828
  */
39774
- var EmberObject = _emberRuntimeSystemCore_object.default.extend(_emberRuntimeMixinsObservable.default);
39829
+ var EmberObject = _emberRuntimeSystemCore_object.default.extend(_emberRuntimeMixinsObservable.default, (_CoreObject$extend = {
39830
+ _debugContainerKey: _emberMetal.descriptor({
39831
+ enumerable: false,
39832
+ get: function () {
39833
+ if (this[OVERRIDE_CONTAINER_KEY]) {
39834
+ return this[OVERRIDE_CONTAINER_KEY];
39835
+ }
39836
+
39837
+ var meta = _emberMetal.meta(this);
39838
+ var factory = meta.factory;
39839
+
39840
+ return factory && factory.fullName;
39841
+ },
39842
+
39843
+ // we need a setter here largely to support the legacy
39844
+ // `owner._lookupFactory` and its double extend
39845
+ set: function (value) {
39846
+ this[OVERRIDE_CONTAINER_KEY] = value;
39847
+ }
39848
+ })
39849
+
39850
+ }, _CoreObject$extend[_emberUtils.OWNER] = _emberMetal.descriptor({
39851
+ enumerable: false,
39852
+ get: function () {
39853
+ if (this[OVERRIDE_OWNER]) {
39854
+ return this[OVERRIDE_OWNER];
39855
+ }
39856
+
39857
+ var meta = _emberMetal.meta(this);
39858
+ var factory = meta.factory;
39859
+
39860
+ return factory && factory.owner;
39861
+ },
39862
+
39863
+ // we need a setter here largely to support the legacy
39864
+ // `owner._lookupFactory` and its double extend
39865
+ set: function (value) {
39866
+ this[OVERRIDE_OWNER] = value;
39867
+ }
39868
+ }), _CoreObject$extend));
39869
+
39775
39870
  EmberObject.toString = function () {
39776
39871
  return 'Ember.Object';
39777
39872
  };
@@ -42783,13 +42878,40 @@ enifed('ember-utils/to-string', ['exports'], function (exports) {
42783
42878
  exports.default = toString;
42784
42879
  var objectToString = Object.prototype.toString;
42785
42880
 
42881
+ function isNone(obj) {
42882
+ return obj === null || obj === undefined;
42883
+ }
42884
+
42786
42885
  /*
42787
42886
  A `toString` util function that supports objects without a `toString`
42788
42887
  method, e.g. an object created with `Object.create(null)`.
42789
42888
  */
42790
42889
 
42791
42890
  function toString(obj) {
42792
- if (obj && typeof obj.toString === 'function') {
42891
+ var type = typeof obj;
42892
+ if (type === "string") {
42893
+ return obj;
42894
+ }
42895
+
42896
+ if (Array.isArray(obj)) {
42897
+ // Reimplement Array.prototype.join according to spec (22.1.3.13)
42898
+ // Changing ToString(element) with this safe version of ToString.
42899
+ var len = obj.length;
42900
+ var sep = ',';
42901
+ var r = '';
42902
+
42903
+ for (var k = 0; k < len; k++) {
42904
+ if (k > 0) {
42905
+ r += ',';
42906
+ }
42907
+
42908
+ if (!isNone(obj[k])) {
42909
+ r += toString(obj[k]);
42910
+ }
42911
+ }
42912
+
42913
+ return r;
42914
+ } else if (obj != null && typeof obj.toString === 'function') {
42793
42915
  return obj.toString();
42794
42916
  } else {
42795
42917
  return objectToString.call(obj);
@@ -45453,7 +45575,7 @@ enifed('ember/index', ['exports', 'require', 'ember-environment', 'ember-utils',
45453
45575
  enifed("ember/version", ["exports"], function (exports) {
45454
45576
  "use strict";
45455
45577
 
45456
- exports.default = "2.13.0-beta.2";
45578
+ exports.default = "2.13.0";
45457
45579
  });
45458
45580
  enifed('internal-test-helpers/apply-mixins', ['exports', 'ember-utils'], function (exports, _emberUtils) {
45459
45581
  'use strict';