ember-source 2.13.0.beta.2 → 2.13.0

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.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';