ember-source 4.3.0-beta.1 → 4.4.0-alpha.3

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.
Files changed (98) hide show
  1. package/blueprints/acceptance-test/mocha-files/tests/acceptance/__name__-test.js +4 -4
  2. package/blueprints/acceptance-test/mocha-rfc-232-files/tests/acceptance/__name__-test.js +2 -2
  3. package/blueprints/acceptance-test/qunit-files/tests/acceptance/__name__-test.js +2 -2
  4. package/blueprints/acceptance-test/qunit-rfc-232-files/tests/acceptance/__name__-test.js +2 -2
  5. package/blueprints/component/index.js +2 -2
  6. package/blueprints/component-class/index.js +2 -2
  7. package/blueprints/component-test/mocha-0.12-files/__root__/__testType__/__path__/__test__.js +4 -4
  8. package/blueprints/component-test/mocha-files/__root__/__testType__/__path__/__test__.js +7 -5
  9. package/blueprints/component-test/mocha-rfc-232-files/__root__/__testType__/__path__/__test__.js +4 -4
  10. package/blueprints/component-test/qunit-files/__root__/__testType__/__path__/__test__.js +4 -4
  11. package/blueprints/component-test/qunit-rfc-232-files/__root__/__testType__/__path__/__test__.js +4 -4
  12. package/blueprints/controller/files/__root__/__path__/__name__.js +1 -2
  13. package/blueprints/controller-test/mocha-0.12-files/__root__/__testType__/__path__/__test__.js +2 -2
  14. package/blueprints/controller-test/mocha-files/__root__/__testType__/__path__/__test__.js +5 -3
  15. package/blueprints/controller-test/mocha-rfc-232-files/__root__/__testType__/__path__/__test__.js +2 -2
  16. package/blueprints/controller-test/qunit-files/__root__/__testType__/__path__/__test__.js +1 -1
  17. package/blueprints/controller-test/qunit-rfc-232-files/__root__/__testType__/__path__/__test__.js +2 -2
  18. package/blueprints/helper/files/__root__/__collection__/__name__.js +1 -1
  19. package/blueprints/helper/mu-files/__root__/__collection__/__name__.js +1 -1
  20. package/blueprints/helper-test/mocha-0.12-files/__root__/__testType__/__collection__/__name__-test.js +3 -3
  21. package/blueprints/helper-test/mocha-files/__root__/__testType__/__collection__/__name__-test.js +6 -4
  22. package/blueprints/helper-test/mocha-rfc-232-files/__root__/__testType__/__collection__/__name__-test.js +2 -2
  23. package/blueprints/helper-test/qunit-files/__root__/__testType__/__collection__/__name__-test.js +2 -2
  24. package/blueprints/helper-test/qunit-rfc-232-files/__root__/__testType__/__collection__/__name__-test.js +2 -2
  25. package/blueprints/initializer/files/__root__/initializers/__name__.js +2 -3
  26. package/blueprints/initializer-test/mocha-files/__root__/__testType__/__path__/__name__-test.js +6 -7
  27. package/blueprints/initializer-test/mocha-rfc-232-files/__root__/__testType__/__path__/__name__-test.js +5 -5
  28. package/blueprints/initializer-test/qunit-files/__root__/__testType__/__path__/__name__-test.js +3 -4
  29. package/blueprints/instance-initializer/files/__root__/instance-initializers/__name__.js +2 -3
  30. package/blueprints/instance-initializer-test/mocha-files/__root__/__testType__/__path__/__name__-test.js +5 -5
  31. package/blueprints/instance-initializer-test/mocha-rfc-232-files/__root__/__testType__/__path__/__name__-test.js +5 -5
  32. package/blueprints/instance-initializer-test/qunit-files/__root__/__testType__/__path__/__name__-test.js +2 -2
  33. package/blueprints/mixin/files/__root__/mixins/__name__.js +1 -2
  34. package/blueprints/mixin-test/mocha-files/__root__/__testType__/__name__-test.js +2 -2
  35. package/blueprints/mixin-test/mocha-rfc-232-files/__root__/__testType__/__name__-test.js +2 -2
  36. package/blueprints/mixin-test/qunit-files/__root__/__testType__/__name__-test.js +1 -1
  37. package/blueprints/mixin-test/qunit-rfc-232-files/__root__/__testType__/__name__-test.js +1 -1
  38. package/blueprints/route/files/__root__/__path__/__name__.js +2 -2
  39. package/blueprints/route-test/mocha-0.12-files/__root__/__testType__/__path__/__test__.js +2 -2
  40. package/blueprints/route-test/mocha-files/__root__/__testType__/__path__/__test__.js +5 -3
  41. package/blueprints/route-test/mocha-rfc-232-files/__root__/__testType__/__path__/__test__.js +2 -2
  42. package/blueprints/route-test/qunit-files/__root__/__testType__/__path__/__test__.js +1 -1
  43. package/blueprints/route-test/qunit-rfc-232-files/__root__/__testType__/__path__/__test__.js +2 -2
  44. package/blueprints/service/files/__root__/__path__/__name__.js +1 -2
  45. package/blueprints/service-test/mocha-0.12-files/__root__/__testType__/__path__/__test__.js +2 -2
  46. package/blueprints/service-test/mocha-files/__root__/__testType__/__path__/__test__.js +5 -3
  47. package/blueprints/service-test/mocha-rfc-232-files/__root__/__testType__/__path__/__test__.js +2 -2
  48. package/blueprints/service-test/qunit-files/__root__/__testType__/__path__/__test__.js +1 -1
  49. package/blueprints/service-test/qunit-rfc-232-files/__root__/__testType__/__path__/__test__.js +2 -2
  50. package/blueprints/util-test/mocha-files/__root__/__testType__/__name__-test.js +2 -2
  51. package/blueprints/util-test/mocha-rfc-232-files/__root__/__testType__/__name__-test.js +2 -2
  52. package/blueprints/util-test/qunit-files/__root__/__testType__/__name__-test.js +1 -1
  53. package/blueprints/util-test/qunit-rfc-232-files/__root__/__testType__/__name__-test.js +2 -3
  54. package/build-metadata.json +3 -3
  55. package/dist/dependencies/router_js.js +1 -1
  56. package/dist/ember-template-compiler.js +17 -144
  57. package/dist/ember-template-compiler.map +1 -1
  58. package/dist/ember-testing.js +4 -2
  59. package/dist/ember-testing.map +1 -1
  60. package/dist/ember.debug.js +843 -772
  61. package/dist/ember.debug.map +1 -1
  62. package/dist/header/license.js +1 -1
  63. package/dist/packages/@ember/-internals/container/index.js +3 -3
  64. package/dist/packages/@ember/-internals/glimmer/index.js +55 -29
  65. package/dist/packages/@ember/-internals/metal/index.js +18 -28
  66. package/dist/packages/@ember/-internals/routing/lib/location/hash_location.js +1 -1
  67. package/dist/packages/@ember/-internals/routing/lib/services/router.js +67 -12
  68. package/dist/packages/@ember/-internals/routing/lib/services/routing.js +2 -0
  69. package/dist/packages/@ember/-internals/routing/lib/system/generate_controller.js +3 -1
  70. package/dist/packages/@ember/-internals/routing/lib/system/route.js +16 -9
  71. package/dist/packages/@ember/-internals/routing/lib/system/router.js +15 -20
  72. package/dist/packages/@ember/-internals/routing/lib/utils.js +2 -1
  73. package/dist/packages/@ember/-internals/runtime/lib/compare.js +19 -5
  74. package/dist/packages/@ember/-internals/runtime/lib/mixins/comparable.js +4 -4
  75. package/dist/packages/@ember/-internals/runtime/lib/mixins/container_proxy.js +29 -29
  76. package/dist/packages/@ember/-internals/runtime/lib/mixins/registry_proxy.js +51 -50
  77. package/dist/packages/@ember/-internals/utils/index.js +1 -1
  78. package/dist/packages/@ember/application/instance.js +3 -3
  79. package/dist/packages/@ember/canary-features/index.js +6 -14
  80. package/dist/packages/@ember/debug/lib/capture-render-tree.js +2 -0
  81. package/dist/packages/@ember/debug/lib/handlers.js +1 -1
  82. package/dist/packages/@ember/runloop/index.js +31 -528
  83. package/dist/packages/@ember/runloop/type-tests.ts/begin-end.test.js +5 -0
  84. package/dist/packages/@ember/runloop/type-tests.ts/bind.test.js +59 -0
  85. package/dist/packages/@ember/runloop/type-tests.ts/cancel.test.js +5 -0
  86. package/dist/packages/@ember/runloop/type-tests.ts/debounce.test.js +77 -0
  87. package/dist/packages/@ember/runloop/type-tests.ts/join.test.js +38 -0
  88. package/dist/packages/@ember/runloop/type-tests.ts/later.test.js +38 -0
  89. package/dist/packages/@ember/runloop/type-tests.ts/next.test.js +38 -0
  90. package/dist/packages/@ember/runloop/type-tests.ts/once.test.js +38 -0
  91. package/dist/packages/@ember/runloop/type-tests.ts/run.test.js +38 -0
  92. package/dist/packages/@ember/runloop/type-tests.ts/schedule-once.test.js +39 -0
  93. package/dist/packages/@ember/runloop/type-tests.ts/schedule.test.js +39 -0
  94. package/dist/packages/@ember/runloop/type-tests.ts/throttle.test.js +77 -0
  95. package/dist/packages/ember/index.js +4 -14
  96. package/dist/packages/ember/version.js +1 -1
  97. package/docs/data.json +330 -245
  98. package/package.json +4 -4
@@ -1,6 +1,7 @@
1
1
  import { privatize as P } from '@ember/-internals/container';
2
2
  import { computed, get, set } from '@ember/-internals/metal';
3
3
  import { getOwner } from '@ember/-internals/owner';
4
+ import { BucketCache } from '@ember/-internals/routing';
4
5
  import { A as emberA, Evented, Object as EmberObject, typeOf } from '@ember/-internals/runtime';
5
6
  import { assert, deprecate, info } from '@ember/debug';
6
7
  import EmberError from '@ember/error';
@@ -16,6 +17,7 @@ import RouterState from './router_state';
16
17
  */
17
18
 
18
19
  import Router, { logAbort, STATE_SYMBOL } from 'router_js';
20
+ import EngineInstance from '@ember/engine/instance';
19
21
 
20
22
  function defaultDidTransition(infos) {
21
23
  updatePaths(this);
@@ -77,7 +79,7 @@ const {
77
79
 
78
80
  class EmberRouter extends EmberObject.extend(Evented) {
79
81
  constructor(owner) {
80
- super(...arguments);
82
+ super(owner);
81
83
  this._didSetupRouter = false;
82
84
  this._initialTransitionStarted = false;
83
85
  this.currentURL = null;
@@ -92,6 +94,7 @@ class EmberRouter extends EmberObject.extend(Evented) {
92
94
  this._handledErrors = new Set();
93
95
  this._engineInstances = Object.create(null);
94
96
  this._engineInfoByRoute = Object.create(null);
97
+ this._slowTransitionTimer = null;
95
98
  this.currentState = null;
96
99
  this.targetState = null;
97
100
 
@@ -99,7 +102,7 @@ class EmberRouter extends EmberObject.extend(Evented) {
99
102
 
100
103
  this.namespace = owner.lookup('application:main');
101
104
  let bucketCache = owner.lookup(P`-bucket-cache:main`);
102
- assert('BUG: BucketCache should always be present', bucketCache !== undefined);
105
+ assert('BUG: BucketCache should always be present', bucketCache instanceof BucketCache);
103
106
  this._bucketCache = bucketCache;
104
107
  let routerService = owner.lookup('service:router');
105
108
  assert('BUG: RouterService should always be present', routerService !== undefined);
@@ -699,11 +702,13 @@ class EmberRouter extends EmberObject.extend(Evented) {
699
702
  let instances = this._engineInstances;
700
703
 
701
704
  for (let name in instances) {
702
- let instance = instances[name];
703
- assert('has instance', instance);
705
+ let instanceMap = instances[name];
706
+ assert('has instanceMap', instanceMap);
704
707
 
705
- for (let id in instance) {
706
- run(instance[id], 'destroy');
708
+ for (let id in instanceMap) {
709
+ let instance = instanceMap[id];
710
+ assert('has instance', instance);
711
+ run(instance, 'destroy');
707
712
  }
708
713
  }
709
714
  }
@@ -916,7 +921,7 @@ class EmberRouter extends EmberObject.extend(Evented) {
916
921
  }
917
922
  }
918
923
 
919
- _doTransition(_targetRouteName, models, _queryParams, _keepDefaultQueryParamValues) {
924
+ _doTransition(_targetRouteName, models, _queryParams, _fromRouterService) {
920
925
  let targetRouteName = _targetRouteName || getActiveTargetName(this._routerMicrolib);
921
926
 
922
927
  assert(`The route ${targetRouteName} was not found`, Boolean(targetRouteName) && this._routerMicrolib.hasRoute(targetRouteName));
@@ -927,7 +932,7 @@ class EmberRouter extends EmberObject.extend(Evented) {
927
932
 
928
933
  Object.assign(queryParams, _queryParams);
929
934
 
930
- this._prepareQueryParams(targetRouteName, models, queryParams, Boolean(_keepDefaultQueryParamValues));
935
+ this._prepareQueryParams(targetRouteName, models, queryParams, Boolean(_fromRouterService));
931
936
 
932
937
  let transition = this._routerMicrolib.transitionTo(targetRouteName, ...models, {
933
938
  queryParams
@@ -1165,7 +1170,7 @@ class EmberRouter extends EmberObject.extend(Evented) {
1165
1170
  _scheduleLoadingEvent(transition, originRoute) {
1166
1171
  this._cancelSlowTransitionTimer();
1167
1172
 
1168
- this._slowTransitionTimer = scheduleOnce('routerTransitions', this, '_handleSlowTransition', transition, originRoute);
1173
+ this._slowTransitionTimer = scheduleOnce('routerTransitions', this, this._handleSlowTransition, transition, originRoute);
1169
1174
  }
1170
1175
 
1171
1176
  _handleSlowTransition(transition, originRoute) {
@@ -1221,7 +1226,7 @@ class EmberRouter extends EmberObject.extend(Evented) {
1221
1226
 
1222
1227
  if (!engineInstance) {
1223
1228
  let owner = getOwner(this);
1224
- assert('Router is unexpectedly missing an owner', owner);
1229
+ assert('Expected router to have EngineInstance as owner', owner instanceof EngineInstance);
1225
1230
  assert(`You attempted to mount the engine '${name}' in your router map, but the engine can not be found.`, owner.hasRegistration(`engine:${name}`));
1226
1231
  engineInstance = owner.buildChildEngineInstance(name, {
1227
1232
  routable: true,
@@ -1526,16 +1531,6 @@ function updatePaths(router) {
1526
1531
  set(router, 'currentPath', path);
1527
1532
  set(router, 'currentRouteName', currentRouteName);
1528
1533
  set(router, 'currentURL', currentURL);
1529
- let owner = getOwner(router);
1530
- assert('Router is unexpectedly missing an owner', owner);
1531
- let appController = owner.lookup('controller:application');
1532
-
1533
- if (!appController) {
1534
- // appController might not exist when top-level loading/error
1535
- // substates have been entered since ApplicationRoute hasn't
1536
- // actually been entered at that point.
1537
- return;
1538
- }
1539
1534
  }
1540
1535
 
1541
1536
  function didBeginTransition(transition, router) {
@@ -1,6 +1,7 @@
1
1
  import { get } from '@ember/-internals/metal';
2
2
  import { getOwner } from '@ember/-internals/owner';
3
3
  import { assert, deprecate } from '@ember/debug';
4
+ import EngineInstance from '@ember/engine/instance';
4
5
  import EmberError from '@ember/error';
5
6
  import { STATE_SYMBOL } from 'router_js';
6
7
  const ALL_PERIODS_REGEX = /\./g;
@@ -219,7 +220,7 @@ export function resemblesURL(str) {
219
220
  export function prefixRouteNameArg(route, args) {
220
221
  let routeName;
221
222
  let owner = getOwner(route);
222
- assert('Route is unexpectedly missing an owner', owner);
223
+ assert('Expected route to have EngineInstance as owner', owner instanceof EngineInstance);
223
224
  let prefix = owner.mountPoint; // only alter the routeName if it's actually referencing a route.
224
225
 
225
226
  if (owner.routable && typeof args[0] === 'string') {
@@ -1,5 +1,6 @@
1
1
  import { typeOf } from './type-of';
2
2
  import Comparable from './mixins/comparable';
3
+ import { assert } from '@ember/debug';
3
4
  const TYPE_ORDER = {
4
5
  undefined: 0,
5
6
  null: 1,
@@ -31,8 +32,9 @@ const TYPE_ORDER = {
31
32
  // SSt `------'`
32
33
 
33
34
  function spaceship(a, b) {
34
- let diff = a - b;
35
- return (diff > 0) - (diff < 0);
35
+ let diff = a - b; // SAFETY: Number casts true into 1 and false into 0. Therefore, this must end up as one of the Compare values.
36
+
37
+ return Number(diff > 0) - Number(diff < 0);
36
38
  }
37
39
  /**
38
40
  @module @ember/utils
@@ -94,11 +96,12 @@ export default function compare(v, w) {
94
96
  let type1 = typeOf(v);
95
97
  let type2 = typeOf(w);
96
98
 
97
- if (type1 === 'instance' && Comparable.detect(v) && v.constructor.compare) {
99
+ if (type1 === 'instance' && isComparable(v) && v.constructor.compare) {
98
100
  return v.constructor.compare(v, w);
99
101
  }
100
102
 
101
- if (type2 === 'instance' && Comparable.detect(w) && w.constructor.compare) {
103
+ if (type2 === 'instance' && isComparable(w) && w.constructor.compare) {
104
+ // SAFETY: Multiplying by a negative just changes the sign
102
105
  return w.constructor.compare(w, v) * -1;
103
106
  }
104
107
 
@@ -111,14 +114,20 @@ export default function compare(v, w) {
111
114
 
112
115
  switch (type1) {
113
116
  case 'boolean':
117
+ assert('both are boolean', typeof v === 'boolean' && typeof w === 'boolean');
118
+ return spaceship(Number(v), Number(w));
119
+
114
120
  case 'number':
121
+ assert('both are numbers', typeof v === 'number' && typeof w === 'number');
115
122
  return spaceship(v, w);
116
123
 
117
124
  case 'string':
125
+ assert('both are strings', typeof v === 'string' && typeof w === 'string');
118
126
  return spaceship(v.localeCompare(w), 0);
119
127
 
120
128
  case 'array':
121
129
  {
130
+ assert('both are arrays', Array.isArray(v) && Array.isArray(w));
122
131
  let vLen = v.length;
123
132
  let wLen = w.length;
124
133
  let len = Math.min(vLen, wLen);
@@ -137,16 +146,21 @@ export default function compare(v, w) {
137
146
  }
138
147
 
139
148
  case 'instance':
140
- if (Comparable.detect(v)) {
149
+ if (isComparable(v) && v.compare) {
141
150
  return v.compare(v, w);
142
151
  }
143
152
 
144
153
  return 0;
145
154
 
146
155
  case 'date':
156
+ assert('both are dates', v instanceof Date && w instanceof Date);
147
157
  return spaceship(v.getTime(), w.getTime());
148
158
 
149
159
  default:
150
160
  return 0;
151
161
  }
162
+ }
163
+
164
+ function isComparable(value) {
165
+ return Comparable.detect(value);
152
166
  }
@@ -18,13 +18,13 @@ import { Mixin } from '@ember/-internals/metal';
18
18
  export default Mixin.create({
19
19
  /**
20
20
  __Required.__ You must implement this method to apply this mixin.
21
- Override to return the result of the comparison of the two parameters. The
21
+ Override to return the result of the comparison of the two parameters. The
22
22
  compare method should return:
23
- - `-1` if `a < b`
23
+ - `-1` if `a < b`
24
24
  - `0` if `a == b`
25
25
  - `1` if `a > b`
26
- Default implementation raises an exception.
27
- @method compare
26
+ Default implementation raises an exception.
27
+ @method compare
28
28
  @param a {Object} the first object to compare
29
29
  @param b {Object} the second object to compare
30
30
  @return {Number} the result of the comparison
@@ -15,7 +15,7 @@ import { Mixin } from '@ember/-internals/metal';
15
15
  let containerProxyMixin = {
16
16
  /**
17
17
  The container stores state.
18
- @private
18
+ @private
19
19
  @property {Ember.Container} __container__
20
20
  */
21
21
  __container__: null,
@@ -23,16 +23,16 @@ let containerProxyMixin = {
23
23
  /**
24
24
  Returns an object that can be used to provide an owner to a
25
25
  manually created instance.
26
- Example:
27
- ```
26
+ Example:
27
+ ```
28
28
  import { getOwner } from '@ember/application';
29
- let owner = getOwner(this);
30
- User.create(
29
+ let owner = getOwner(this);
30
+ User.create(
31
31
  owner.ownerInjection(),
32
32
  { username: 'rwjblue' }
33
33
  )
34
34
  ```
35
- @public
35
+ @public
36
36
  @method ownerInjection
37
37
  @since 2.3.0
38
38
  @return {Object}
@@ -43,30 +43,30 @@ let containerProxyMixin = {
43
43
 
44
44
  /**
45
45
  Given a fullName return a corresponding instance.
46
- The default behavior is for lookup to return a singleton instance.
46
+ The default behavior is for lookup to return a singleton instance.
47
47
  The singleton is scoped to the container, allowing multiple containers
48
48
  to all have their own locally scoped singletons.
49
- ```javascript
49
+ ```javascript
50
50
  let registry = new Registry();
51
51
  let container = registry.container();
52
- registry.register('api:twitter', Twitter);
53
- let twitter = container.lookup('api:twitter');
54
- twitter instanceof Twitter; // => true
55
- // by default the container will return singletons
52
+ registry.register('api:twitter', Twitter);
53
+ let twitter = container.lookup('api:twitter');
54
+ twitter instanceof Twitter; // => true
55
+ // by default the container will return singletons
56
56
  let twitter2 = container.lookup('api:twitter');
57
57
  twitter2 instanceof Twitter; // => true
58
- twitter === twitter2; //=> true
58
+ twitter === twitter2; //=> true
59
59
  ```
60
- If singletons are not wanted an optional flag can be provided at lookup.
61
- ```javascript
60
+ If singletons are not wanted an optional flag can be provided at lookup.
61
+ ```javascript
62
62
  let registry = new Registry();
63
63
  let container = registry.container();
64
- registry.register('api:twitter', Twitter);
65
- let twitter = container.lookup('api:twitter', { singleton: false });
64
+ registry.register('api:twitter', Twitter);
65
+ let twitter = container.lookup('api:twitter', { singleton: false });
66
66
  let twitter2 = container.lookup('api:twitter', { singleton: false });
67
- twitter === twitter2; //=> false
67
+ twitter === twitter2; //=> false
68
68
  ```
69
- @public
69
+ @public
70
70
  @method lookup
71
71
  @param {String} fullName
72
72
  @param {Object} options
@@ -91,32 +91,32 @@ let containerProxyMixin = {
91
91
 
92
92
  /**
93
93
  Given a fullName return a factory manager.
94
- This method returns a manager which can be used for introspection of the
94
+ This method returns a manager which can be used for introspection of the
95
95
  factory's class or for the creation of factory instances with initial
96
96
  properties. The manager is an object with the following properties:
97
- * `class` - The registered or resolved class.
97
+ * `class` - The registered or resolved class.
98
98
  * `create` - A function that will create an instance of the class with
99
99
  any dependencies injected.
100
- For example:
101
- ```javascript
100
+ For example:
101
+ ```javascript
102
102
  import { getOwner } from '@ember/application';
103
- let owner = getOwner(otherInstance);
103
+ let owner = getOwner(otherInstance);
104
104
  // the owner is commonly the `applicationInstance`, and can be accessed via
105
105
  // an instance initializer.
106
- let factory = owner.factoryFor('service:bespoke');
107
- factory.class;
106
+ let factory = owner.factoryFor('service:bespoke');
107
+ factory.class;
108
108
  // The registered or resolved class. For example when used with an Ember-CLI
109
109
  // app, this would be the default export from `app/services/bespoke.js`.
110
- let instance = factory.create({
110
+ let instance = factory.create({
111
111
  someProperty: 'an initial property value'
112
112
  });
113
113
  // Create an instance with any injections and the passed options as
114
114
  // initial properties.
115
115
  ```
116
- Any instances created via the factory's `.create()` method *must* be destroyed
116
+ Any instances created via the factory's `.create()` method *must* be destroyed
117
117
  manually by the caller of `.create()`. Typically, this is done during the creating
118
118
  objects own `destroy` or `willDestroy` methods.
119
- @public
119
+ @public
120
120
  @method factoryFor
121
121
  @param {String} fullName
122
122
  @param {Object} options
@@ -16,62 +16,62 @@ export default Mixin.create({
16
16
 
17
17
  /**
18
18
  Given a fullName return the corresponding factory.
19
- @public
19
+ @public
20
20
  @method resolveRegistration
21
21
  @param {String} fullName
22
22
  @return {Function} fullName's factory
23
23
  */
24
- resolveRegistration(fullName, options) {
24
+ resolveRegistration(fullName) {
25
25
  assert('fullName must be a proper full name', this.__registry__.isValidFullName(fullName));
26
- return this.__registry__.resolve(fullName, options);
26
+ return this.__registry__.resolve(fullName);
27
27
  },
28
28
 
29
29
  /**
30
30
  Registers a factory that can be used for dependency injection (with
31
31
  `inject`) or for service lookup. Each factory is registered with
32
32
  a full name including two parts: `type:name`.
33
- A simple example:
34
- ```javascript
33
+ A simple example:
34
+ ```javascript
35
35
  import Application from '@ember/application';
36
36
  import EmberObject from '@ember/object';
37
- let App = Application.create();
38
- App.Orange = EmberObject.extend();
37
+ let App = Application.create();
38
+ App.Orange = EmberObject.extend();
39
39
  App.register('fruit:favorite', App.Orange);
40
40
  ```
41
- Ember will resolve factories from the `App` namespace automatically.
41
+ Ember will resolve factories from the `App` namespace automatically.
42
42
  For example `App.CarsController` will be discovered and returned if
43
43
  an application requests `controller:cars`.
44
- An example of registering a controller with a non-standard name:
45
- ```javascript
44
+ An example of registering a controller with a non-standard name:
45
+ ```javascript
46
46
  import Application from '@ember/application';
47
47
  import Controller from '@ember/controller';
48
- let App = Application.create();
48
+ let App = Application.create();
49
49
  let Session = Controller.extend();
50
- App.register('controller:session', Session);
51
- // The Session controller can now be treated like a normal controller,
50
+ App.register('controller:session', Session);
51
+ // The Session controller can now be treated like a normal controller,
52
52
  // despite its non-standard name.
53
53
  App.ApplicationController = Controller.extend({
54
54
  needs: ['session']
55
55
  });
56
56
  ```
57
- Registered factories are **instantiated** by having `create`
57
+ Registered factories are **instantiated** by having `create`
58
58
  called on them. Additionally they are **singletons**, each time
59
59
  they are looked up they return the same instance.
60
- Some examples modifying that default behavior:
61
- ```javascript
60
+ Some examples modifying that default behavior:
61
+ ```javascript
62
62
  import Application from '@ember/application';
63
63
  import EmberObject from '@ember/object';
64
- let App = Application.create();
65
- App.Person = EmberObject.extend();
64
+ let App = Application.create();
65
+ App.Person = EmberObject.extend();
66
66
  App.Orange = EmberObject.extend();
67
67
  App.Email = EmberObject.extend();
68
68
  App.session = EmberObject.create();
69
- App.register('model:user', App.Person, { singleton: false });
69
+ App.register('model:user', App.Person, { singleton: false });
70
70
  App.register('fruit:favorite', App.Orange);
71
71
  App.register('communication:main', App.Email, { singleton: false });
72
72
  App.register('session', App.session, { instantiate: false });
73
73
  ```
74
- @method register
74
+ @method register
75
75
  @param fullName {String} type:name (e.g., 'model:user')
76
76
  @param factory {any} (e.g., App.Person)
77
77
  @param options {Object} (optional) disable instantiation or singleton usage
@@ -81,17 +81,17 @@ export default Mixin.create({
81
81
 
82
82
  /**
83
83
  Unregister a factory.
84
- ```javascript
84
+ ```javascript
85
85
  import Application from '@ember/application';
86
86
  import EmberObject from '@ember/object';
87
- let App = Application.create();
87
+ let App = Application.create();
88
88
  let User = EmberObject.extend();
89
89
  App.register('model:user', User);
90
- App.resolveRegistration('model:user').create() instanceof User //=> true
91
- App.unregister('model:user')
90
+ App.resolveRegistration('model:user').create() instanceof User //=> true
91
+ App.unregister('model:user')
92
92
  App.resolveRegistration('model:user') === undefined //=> true
93
93
  ```
94
- @public
94
+ @public
95
95
  @method unregister
96
96
  @param {String} fullName
97
97
  */
@@ -99,7 +99,7 @@ export default Mixin.create({
99
99
 
100
100
  /**
101
101
  Check if a factory is registered.
102
- @public
102
+ @public
103
103
  @method hasRegistration
104
104
  @param {String} fullName
105
105
  @return {Boolean}
@@ -108,7 +108,7 @@ export default Mixin.create({
108
108
 
109
109
  /**
110
110
  Return a specific registered option for a particular factory.
111
- @public
111
+ @public
112
112
  @method registeredOption
113
113
  @param {String} fullName
114
114
  @param {String} optionName
@@ -118,7 +118,7 @@ export default Mixin.create({
118
118
 
119
119
  /**
120
120
  Register options for a particular factory.
121
- @public
121
+ @public
122
122
  @method registerOptions
123
123
  @param {String} fullName
124
124
  @param {Object} options
@@ -127,7 +127,7 @@ export default Mixin.create({
127
127
 
128
128
  /**
129
129
  Return registered options for a particular factory.
130
- @public
130
+ @public
131
131
  @method registeredOptions
132
132
  @param {String} fullName
133
133
  @return {Object} options
@@ -136,22 +136,22 @@ export default Mixin.create({
136
136
 
137
137
  /**
138
138
  Allow registering options for all factories of a type.
139
- ```javascript
139
+ ```javascript
140
140
  import Application from '@ember/application';
141
- let App = Application.create();
141
+ let App = Application.create();
142
142
  let appInstance = App.buildInstance();
143
- // if all of type `connection` must not be singletons
143
+ // if all of type `connection` must not be singletons
144
144
  appInstance.registerOptionsForType('connection', { singleton: false });
145
- appInstance.register('connection:twitter', TwitterConnection);
145
+ appInstance.register('connection:twitter', TwitterConnection);
146
146
  appInstance.register('connection:facebook', FacebookConnection);
147
- let twitter = appInstance.lookup('connection:twitter');
147
+ let twitter = appInstance.lookup('connection:twitter');
148
148
  let twitter2 = appInstance.lookup('connection:twitter');
149
- twitter === twitter2; // => false
150
- let facebook = appInstance.lookup('connection:facebook');
149
+ twitter === twitter2; // => false
150
+ let facebook = appInstance.lookup('connection:facebook');
151
151
  let facebook2 = appInstance.lookup('connection:facebook');
152
- facebook === facebook2; // => false
152
+ facebook === facebook2; // => false
153
153
  ```
154
- @public
154
+ @public
155
155
  @method registerOptionsForType
156
156
  @param {String} type
157
157
  @param {Object} options
@@ -160,7 +160,7 @@ export default Mixin.create({
160
160
 
161
161
  /**
162
162
  Return the registered options for all factories of a type.
163
- @public
163
+ @public
164
164
  @method registeredOptionsForType
165
165
  @param {String} type
166
166
  @return {Object} options
@@ -170,41 +170,42 @@ export default Mixin.create({
170
170
  /**
171
171
  Define a dependency injection onto a specific factory or all factories
172
172
  of a type.
173
- When Ember instantiates a controller, view, or other framework component
173
+ When Ember instantiates a controller, view, or other framework component
174
174
  it can attach a dependency to that component. This is often used to
175
175
  provide services to a set of framework components.
176
- An example of providing a session object to all controllers:
177
- ```javascript
176
+ An example of providing a session object to all controllers:
177
+ ```javascript
178
178
  import { alias } from '@ember/object/computed';
179
179
  import Application from '@ember/application';
180
180
  import Controller from '@ember/controller';
181
181
  import EmberObject from '@ember/object';
182
- let App = Application.create();
182
+ let App = Application.create();
183
183
  let Session = EmberObject.extend({ isAuthenticated: false });
184
- // A factory must be registered before it can be injected
184
+ // A factory must be registered before it can be injected
185
185
  App.register('session:main', Session);
186
- // Inject 'session:main' onto all factories of the type 'controller'
186
+ // Inject 'session:main' onto all factories of the type 'controller'
187
187
  // with the name 'session'
188
188
  App.inject('controller', 'session', 'session:main');
189
- App.IndexController = Controller.extend({
189
+ App.IndexController = Controller.extend({
190
190
  isLoggedIn: alias('session.isAuthenticated')
191
191
  });
192
192
  ```
193
- Injections can also be performed on specific factories.
194
- ```javascript
193
+ Injections can also be performed on specific factories.
194
+ ```javascript
195
195
  App.inject(<full_name or type>, <property name>, <full_name>)
196
196
  App.inject('route', 'source', 'source:main')
197
197
  App.inject('route:application', 'email', 'model:email')
198
198
  ```
199
- It is important to note that injections can only be performed on
199
+ It is important to note that injections can only be performed on
200
200
  classes that are instantiated by Ember itself. Instantiating a class
201
201
  directly (via `create` or `new`) bypasses the dependency injection
202
202
  system.
203
- @public
203
+ @public
204
204
  @method inject
205
205
  @param factoryNameOrType {String}
206
206
  @param property {String}
207
207
  @param injectionName {String}
208
+ @deprecated
208
209
  **/
209
210
  inject: registryAlias('injection')
210
211
  });
@@ -573,7 +573,7 @@ function lookupDescriptor(obj, keyName) {
573
573
  @private
574
574
  */
575
575
  function canInvoke(obj, methodName) {
576
- return obj !== null && obj !== undefined && typeof obj[methodName] === 'function';
576
+ return obj != null && typeof obj[methodName] === 'function';
577
577
  }
578
578
  /**
579
579
  @module @ember/utils
@@ -308,12 +308,12 @@ class BootOptions {
308
308
  @default auto-detected
309
309
  @private
310
310
  */
311
- this.isInteractive = environment.hasDOM; // This default is overridable below
311
+ this.isInteractive = Boolean(environment.hasDOM); // This default is overridable below
312
312
 
313
313
  /**
314
314
  @property _renderMode
315
315
  @type string
316
- @default false
316
+ @default undefined
317
317
  @private
318
318
  */
319
319
 
@@ -340,7 +340,7 @@ class BootOptions {
340
340
  if (options.isBrowser !== undefined) {
341
341
  this.isBrowser = Boolean(options.isBrowser);
342
342
  } else {
343
- this.isBrowser = environment.hasDOM;
343
+ this.isBrowser = Boolean(environment.hasDOM);
344
344
  }
345
345
 
346
346
  if (!this.isBrowser) {
@@ -11,15 +11,11 @@ import { ENV } from '@ember/-internals/environment';
11
11
  */
12
12
 
13
13
  export const DEFAULT_FEATURES = {
14
- EMBER_LIBRARIES_ISREGISTERED: false,
15
- EMBER_IMPROVED_INSTRUMENTATION: false,
16
- EMBER_NAMED_BLOCKS: true,
17
- EMBER_GLIMMER_HELPER_MANAGER: true,
18
- EMBER_GLIMMER_INVOKE_HELPER: true,
19
- EMBER_STRICT_MODE: true,
20
- EMBER_DYNAMIC_HELPERS_AND_MODIFIERS: true,
14
+ EMBER_LIBRARIES_ISREGISTERED: null,
15
+ EMBER_IMPROVED_INSTRUMENTATION: null,
21
16
  EMBER_ROUTING_ROUTER_SERVICE_REFRESH: true,
22
- EMBER_CACHED: true
17
+ EMBER_CACHED: true,
18
+ EMBER_UNIQUE_ID_HELPER: null
23
19
  };
24
20
  /**
25
21
  The hash of enabled Canary features. Add to this, any canary features
@@ -70,10 +66,6 @@ function featureValue(value) {
70
66
 
71
67
  export const EMBER_LIBRARIES_ISREGISTERED = featureValue(FEATURES.EMBER_LIBRARIES_ISREGISTERED);
72
68
  export const EMBER_IMPROVED_INSTRUMENTATION = featureValue(FEATURES.EMBER_IMPROVED_INSTRUMENTATION);
73
- export const EMBER_NAMED_BLOCKS = featureValue(FEATURES.EMBER_NAMED_BLOCKS);
74
- export const EMBER_GLIMMER_HELPER_MANAGER = featureValue(FEATURES.EMBER_GLIMMER_HELPER_MANAGER);
75
- export const EMBER_GLIMMER_INVOKE_HELPER = featureValue(FEATURES.EMBER_GLIMMER_INVOKE_HELPER);
76
- export const EMBER_STRICT_MODE = featureValue(FEATURES.EMBER_STRICT_MODE);
77
- export const EMBER_DYNAMIC_HELPERS_AND_MODIFIERS = featureValue(FEATURES.EMBER_DYNAMIC_HELPERS_AND_MODIFIERS);
78
69
  export const EMBER_ROUTING_ROUTER_SERVICE_REFRESH = featureValue(FEATURES.EMBER_ROUTING_ROUTER_SERVICE_REFRESH);
79
- export const EMBER_CACHED = featureValue(FEATURES.EMBER_CACHED);
70
+ export const EMBER_CACHED = featureValue(FEATURES.EMBER_CACHED);
71
+ export const EMBER_UNIQUE_ID_HELPER = featureValue(FEATURES.EMBER_UNIQUE_ID_HELPER);
@@ -18,6 +18,8 @@ import { expect } from '@glimmer/util';
18
18
  */
19
19
 
20
20
  export default function captureRenderTree(app) {
21
+ // SAFETY: Ideally we'd assert here but that causes awkward circular requires since this is also in @ember/debug.
22
+ // This is only for debug stuff so not very risky.
21
23
  let renderer = expect(app.lookup('renderer:-dom'), `BUG: owner is missing renderer`);
22
24
  return renderer.debugRenderTree.capture();
23
25
  }
@@ -1,7 +1,7 @@
1
1
  import { DEBUG } from '@glimmer/env';
2
2
  export let HANDLERS = {};
3
3
 
4
- let registerHandler = () => {};
4
+ let registerHandler = function registerHandler(_type, _callback) {};
5
5
 
6
6
  let invoke = () => {};
7
7