ember-source 4.8.0-alpha.5 → 4.8.0-beta.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.
Files changed (244) hide show
  1. package/CHANGELOG.md +11 -2
  2. package/blueprints/helper/files/__root__/{__collection__ → helpers}/__name__.ts +0 -0
  3. package/blueprints/helper/index.js +0 -15
  4. package/blueprints/helper-test/index.js +0 -3
  5. package/blueprints/helper-test/mocha-0.12-files/__root__/__testType__/{__collection__ → helpers}/__name__-test.js +0 -0
  6. package/blueprints/helper-test/mocha-files/__root__/__testType__/{__collection__ → helpers}/__name__-test.js +0 -0
  7. package/blueprints/helper-test/mocha-rfc-232-files/__root__/__testType__/{__collection__ → helpers}/__name__-test.ts +0 -0
  8. package/blueprints/helper-test/qunit-files/__root__/__testType__/{__collection__ → helpers}/__name__-test.js +0 -0
  9. package/blueprints/helper-test/qunit-rfc-232-files/__root__/__testType__/{__collection__ → helpers}/__name__-test.ts +0 -0
  10. package/blueprints-js/helper/files/__root__/{__collection__ → helpers}/__name__.js +0 -0
  11. package/blueprints-js/helper-test/mocha-0.12-files/__root__/__testType__/{__collection__ → helpers}/__name__-test.js +0 -0
  12. package/blueprints-js/helper-test/mocha-files/__root__/__testType__/{__collection__ → helpers}/__name__-test.js +0 -0
  13. package/blueprints-js/helper-test/mocha-rfc-232-files/__root__/__testType__/{__collection__ → helpers}/__name__-test.js +0 -0
  14. package/blueprints-js/helper-test/qunit-files/__root__/__testType__/{__collection__ → helpers}/__name__-test.js +0 -0
  15. package/blueprints-js/helper-test/qunit-rfc-232-files/__root__/__testType__/{__collection__ → helpers}/__name__-test.js +0 -0
  16. package/build-metadata.json +3 -3
  17. package/dist/dependencies/router_js.js +1 -1
  18. package/dist/ember-template-compiler.js +675 -18
  19. package/dist/ember-template-compiler.map +1 -1
  20. package/dist/ember-testing.js +11 -11
  21. package/dist/ember-testing.map +1 -1
  22. package/dist/ember.debug.js +19576 -20510
  23. package/dist/ember.debug.map +1 -1
  24. package/dist/header/license.js +1 -1
  25. package/dist/packages/@ember/-internals/glimmer/index.js +4 -2
  26. package/dist/packages/@ember/-internals/metal/index.js +214 -1094
  27. package/dist/packages/@ember/-internals/routing/index.js +1 -17
  28. package/dist/packages/@ember/-internals/runtime/index.js +3 -16
  29. package/dist/packages/@ember/-internals/runtime/lib/mixins/-proxy.js +2 -1
  30. package/dist/packages/@ember/-internals/runtime/lib/mixins/action_handler.js +4 -3
  31. package/dist/packages/@ember/-internals/runtime/lib/mixins/comparable.js +1 -1
  32. package/dist/packages/@ember/-internals/runtime/lib/mixins/container_proxy.js +1 -1
  33. package/dist/packages/@ember/-internals/runtime/lib/mixins/registry_proxy.js +1 -8
  34. package/dist/packages/@ember/-internals/runtime/lib/mixins/target_action_support.js +2 -1
  35. package/dist/packages/@ember/-internals/utils/index.js +3 -3
  36. package/dist/packages/@ember/-internals/views/lib/component_lookup.js +1 -1
  37. package/dist/packages/@ember/-internals/views/lib/mixins/action_support.js +2 -1
  38. package/dist/packages/@ember/-internals/views/lib/mixins/child_views_support.js +2 -1
  39. package/dist/packages/@ember/-internals/views/lib/mixins/class_names_support.js +2 -1
  40. package/dist/packages/@ember/-internals/views/lib/mixins/view_state_support.js +1 -1
  41. package/dist/packages/@ember/-internals/views/lib/mixins/view_support.js +2 -1
  42. package/dist/packages/@ember/-internals/views/lib/system/event_dispatcher.js +1 -1
  43. package/dist/packages/@ember/-internals/views/lib/views/core_view.js +3 -1
  44. package/dist/packages/@ember/application/index.js +876 -2
  45. package/dist/packages/@ember/application/instance.js +2 -2
  46. package/dist/packages/@ember/application/namespace.js +70 -1
  47. package/dist/packages/@ember/array/index.js +1503 -2
  48. package/dist/packages/@ember/array/mutable.js +1 -1
  49. package/dist/packages/@ember/array/proxy.js +307 -1
  50. package/dist/packages/@ember/canary-features/index.js +2 -2
  51. package/dist/packages/@ember/controller/index.js +260 -3
  52. package/dist/packages/@ember/debug/container-debug-adapter.js +99 -1
  53. package/dist/packages/@ember/debug/data-adapter.js +574 -1
  54. package/dist/packages/@ember/engine/index.js +5 -5
  55. package/dist/packages/@ember/engine/instance.js +4 -4
  56. package/dist/packages/@ember/enumerable/index.js +3 -1
  57. package/dist/packages/@ember/enumerable/mutable.js +4 -0
  58. package/dist/packages/@ember/{-internals/runtime/lib/system/object.js → object/-internals.js} +4 -17
  59. package/dist/packages/@ember/object/core.js +731 -1
  60. package/dist/packages/@ember/object/evented.js +93 -2
  61. package/dist/packages/@ember/object/index.js +76 -4
  62. package/dist/packages/@ember/object/internals.js +3 -2
  63. package/dist/packages/@ember/object/lib/computed/computed_macros.js +3 -1
  64. package/dist/packages/@ember/object/lib/computed/reduce_computed_macros.js +4 -3
  65. package/dist/packages/@ember/object/mixin.js +659 -1
  66. package/dist/packages/@ember/object/observable.js +341 -1
  67. package/dist/packages/@ember/object/promise-proxy-mixin.js +150 -1
  68. package/dist/packages/@ember/object/proxy.js +10 -1
  69. package/dist/packages/@ember/routing/-internals.js +7 -0
  70. package/dist/packages/@ember/routing/auto-location.js +249 -1
  71. package/dist/packages/@ember/routing/hash-location.js +169 -1
  72. package/dist/packages/@ember/routing/history-location.js +289 -1
  73. package/dist/packages/@ember/{-internals/routing/lib/system → routing/lib}/cache.js +0 -0
  74. package/dist/packages/@ember/{-internals/routing/lib/system → routing/lib}/controller_for.js +0 -0
  75. package/dist/packages/@ember/{-internals/routing/lib/system → routing/lib}/dsl.js +0 -0
  76. package/dist/packages/@ember/{-internals/routing/lib/system → routing/lib}/engines.js +0 -0
  77. package/dist/packages/@ember/{-internals/routing/lib/system → routing/lib}/generate_controller.js +0 -0
  78. package/dist/packages/@ember/{-internals/routing/lib/location/util.js → routing/lib/location-utils.js} +0 -0
  79. package/dist/packages/@ember/{-internals/routing/lib/system → routing/lib}/query_params.js +0 -0
  80. package/dist/packages/@ember/{-internals/routing/lib/system → routing/lib}/route-info.js +0 -0
  81. package/dist/packages/@ember/{-internals/routing/lib/system → routing/lib}/router_state.js +1 -1
  82. package/dist/packages/@ember/{-internals/routing/lib/services/routing.js → routing/lib/routing-service.js} +2 -2
  83. package/dist/packages/@ember/{-internals/routing/lib/system → routing/lib}/transition.js +0 -0
  84. package/dist/packages/@ember/{-internals/routing → routing}/lib/utils.js +0 -0
  85. package/dist/packages/@ember/routing/location.js +104 -1
  86. package/dist/packages/@ember/routing/none-location.js +123 -1
  87. package/dist/packages/@ember/routing/route.js +1700 -1
  88. package/dist/packages/@ember/routing/router-service.js +510 -1
  89. package/dist/packages/@ember/routing/router.js +1666 -1
  90. package/dist/packages/@ember/service/index.js +1 -1
  91. package/dist/packages/@ember/utils/index.js +7 -2
  92. package/dist/packages/@ember/{-internals/runtime → utils}/lib/compare.js +2 -2
  93. package/dist/packages/@ember/{-internals/runtime → utils}/lib/is-equal.js +0 -0
  94. package/dist/packages/@ember/utils/lib/is_blank.js +35 -0
  95. package/dist/packages/@ember/utils/lib/is_empty.js +68 -0
  96. package/dist/packages/@ember/utils/lib/is_none.js +27 -0
  97. package/dist/packages/@ember/utils/lib/is_present.js +38 -0
  98. package/dist/packages/@ember/{-internals/runtime → utils}/lib/type-of.js +2 -2
  99. package/dist/packages/ember/index.js +47 -28
  100. package/dist/packages/ember/version.js +1 -1
  101. package/dist/packages/ember-testing/lib/adapters/adapter.js +1 -1
  102. package/dist/packages/ember-testing/lib/helpers/current_path.js +2 -2
  103. package/dist/packages/ember-testing/lib/helpers/current_route_name.js +2 -2
  104. package/dist/packages/ember-testing/lib/helpers/current_url.js +1 -1
  105. package/docs/data.json +9428 -9189
  106. package/package.json +23 -8
  107. package/types/preview/@ember/-internals/resolver.d.ts +35 -0
  108. package/types/preview/@ember/application/-private/event-dispatcher.d.ts +18 -0
  109. package/types/preview/@ember/application/-private/registry.d.ts +15 -0
  110. package/types/preview/@ember/application/deprecations.d.ts +24 -0
  111. package/types/preview/@ember/application/index.d.ts +153 -0
  112. package/types/preview/@ember/application/instance.d.ts +9 -0
  113. package/types/preview/@ember/application/tsconfig.json +3 -0
  114. package/types/preview/@ember/application/types.d.ts +29 -0
  115. package/types/preview/@ember/array/-private/enumerable.d.ts +13 -0
  116. package/types/preview/@ember/array/-private/mutable-enumerable.d.ts +13 -0
  117. package/types/preview/@ember/array/-private/native-array.d.ts +23 -0
  118. package/types/preview/@ember/array/index.d.ts +243 -0
  119. package/types/preview/@ember/array/mutable.d.ts +94 -0
  120. package/types/preview/@ember/array/proxy.d.ts +29 -0
  121. package/types/preview/@ember/array/tsconfig.json +3 -0
  122. package/types/preview/@ember/component/-private/class-names-support.d.ts +27 -0
  123. package/types/preview/@ember/component/-private/core-view.d.ts +14 -0
  124. package/types/preview/@ember/component/-private/glimmer-interfaces.d.ts +45 -0
  125. package/types/preview/@ember/component/-private/signature-utils.d.ts +107 -0
  126. package/types/preview/@ember/component/-private/view-mixin.d.ts +59 -0
  127. package/types/preview/@ember/component/helper.d.ts +122 -0
  128. package/types/preview/@ember/component/index.d.ts +132 -0
  129. package/types/preview/@ember/component/template-only.d.ts +47 -0
  130. package/types/preview/@ember/component/tsconfig.json +3 -0
  131. package/types/preview/@ember/controller/index.d.ts +48 -0
  132. package/types/preview/@ember/controller/tsconfig.json +3 -0
  133. package/types/preview/@ember/debug/container-debug-adapter.d.ts +13 -0
  134. package/types/preview/@ember/debug/data-adapter.d.ts +64 -0
  135. package/types/preview/@ember/debug/index.d.ts +98 -0
  136. package/types/preview/@ember/debug/tsconfig.json +3 -0
  137. package/types/preview/@ember/destroyable/index.d.ts +23 -0
  138. package/types/preview/@ember/destroyable/tsconfig.json +3 -0
  139. package/types/preview/@ember/engine/-private/container-proxy-mixin.d.ts +17 -0
  140. package/types/preview/@ember/engine/-private/registry-proxy-mixin.d.ts +54 -0
  141. package/types/preview/@ember/engine/-private/types/initializer.d.ts +8 -0
  142. package/types/preview/@ember/engine/index.d.ts +45 -0
  143. package/types/preview/@ember/engine/instance.d.ts +24 -0
  144. package/types/preview/@ember/engine/tsconfig.json +3 -0
  145. package/types/preview/@ember/error/index.d.ts +6 -0
  146. package/types/preview/@ember/error/tsconfig.json +3 -0
  147. package/types/preview/@ember/helper/index.d.ts +49 -0
  148. package/types/preview/@ember/helper/tsconfig.json +3 -0
  149. package/types/preview/@ember/modifier/index.d.ts +33 -0
  150. package/types/preview/@ember/modifier/tsconfig.json +3 -0
  151. package/types/preview/@ember/object/-private/action-handler.d.ts +31 -0
  152. package/types/preview/@ember/object/-private/types.d.ts +63 -0
  153. package/types/preview/@ember/object/compat.d.ts +9 -0
  154. package/types/preview/@ember/object/computed.d.ts +263 -0
  155. package/types/preview/@ember/object/core.d.ts +89 -0
  156. package/types/preview/@ember/object/evented.d.ts +45 -0
  157. package/types/preview/@ember/object/events.d.ts +47 -0
  158. package/types/preview/@ember/object/index.d.ts +126 -0
  159. package/types/preview/@ember/object/internals.d.ts +17 -0
  160. package/types/preview/@ember/object/mixin.d.ts +19 -0
  161. package/types/preview/@ember/object/observable.d.ts +89 -0
  162. package/types/preview/@ember/object/observers.d.ts +34 -0
  163. package/types/preview/@ember/object/promise-proxy-mixin.d.ts +37 -0
  164. package/types/preview/@ember/object/proxy.d.ts +27 -0
  165. package/types/preview/@ember/object/tsconfig.json +3 -0
  166. package/types/preview/@ember/owner/index.d.ts +102 -0
  167. package/types/preview/@ember/owner/tsconfig.json +3 -0
  168. package/types/preview/@ember/polyfills/index.d.ts +23 -0
  169. package/types/preview/@ember/polyfills/tsconfig.json +3 -0
  170. package/types/preview/@ember/polyfills/types.d.ts +6 -0
  171. package/types/preview/@ember/routing/-private/router-dsl.d.ts +20 -0
  172. package/types/preview/@ember/routing/auto-location.d.ts +8 -0
  173. package/types/preview/@ember/routing/hash-location.d.ts +10 -0
  174. package/types/preview/@ember/routing/history-location.d.ts +9 -0
  175. package/types/preview/@ember/routing/index.d.ts +20 -0
  176. package/types/preview/@ember/routing/none-location.d.ts +11 -0
  177. package/types/preview/@ember/routing/route-info.d.ts +74 -0
  178. package/types/preview/@ember/routing/route.d.ts +533 -0
  179. package/types/preview/@ember/routing/router-service.d.ts +351 -0
  180. package/types/preview/@ember/routing/router.d.ts +49 -0
  181. package/types/preview/@ember/routing/transition.d.ts +126 -0
  182. package/types/preview/@ember/routing/tsconfig.json +3 -0
  183. package/types/preview/@ember/routing/types.d.ts +15 -0
  184. package/types/preview/@ember/runloop/-private/backburner.d.ts +43 -0
  185. package/types/preview/@ember/runloop/-private/types.d.ts +9 -0
  186. package/types/preview/@ember/runloop/index.d.ts +175 -0
  187. package/types/preview/@ember/runloop/tsconfig.json +3 -0
  188. package/types/preview/@ember/runloop/types.d.ts +5 -0
  189. package/types/preview/@ember/service/index.d.ts +25 -0
  190. package/types/preview/@ember/service/tsconfig.json +3 -0
  191. package/types/preview/@ember/string/index.d.ts +9 -0
  192. package/types/preview/@ember/string/tsconfig.json +3 -0
  193. package/types/preview/@ember/template/-private/handlebars.d.ts +7 -0
  194. package/types/preview/@ember/template/index.d.ts +5 -0
  195. package/types/preview/@ember/template/tsconfig.json +3 -0
  196. package/types/preview/@ember/test/adapter.d.ts +22 -0
  197. package/types/preview/@ember/test/index.d.ts +49 -0
  198. package/types/preview/@ember/test/tsconfig.json +3 -0
  199. package/types/preview/@ember/utils/-private/types.d.ts +39 -0
  200. package/types/preview/@ember/utils/index.d.ts +42 -0
  201. package/types/preview/@ember/utils/tsconfig.json +3 -0
  202. package/types/preview/ember/-private/type-utils.d.ts +54 -0
  203. package/types/preview/ember/index.d.ts +381 -0
  204. package/types/preview/ember/tsconfig.json +3 -0
  205. package/types/preview/index.d.ts +120 -0
  206. package/types/preview/tsconfig.json +6 -0
  207. package/blueprints/helper/mu-files/__root__/__collection__/__name__.js +0 -7
  208. package/blueprints-js/helper/mu-files/__root__/__collection__/__name__.js +0 -7
  209. package/dist/packages/@ember/-internals/extension-support/index.js +0 -2
  210. package/dist/packages/@ember/-internals/extension-support/lib/container_debug_adapter.js +0 -96
  211. package/dist/packages/@ember/-internals/extension-support/lib/data_adapter.js +0 -576
  212. package/dist/packages/@ember/-internals/routing/lib/ext/controller.js +0 -224
  213. package/dist/packages/@ember/-internals/routing/lib/location/api.js +0 -104
  214. package/dist/packages/@ember/-internals/routing/lib/location/auto_location.js +0 -250
  215. package/dist/packages/@ember/-internals/routing/lib/location/hash_location.js +0 -170
  216. package/dist/packages/@ember/-internals/routing/lib/location/history_location.js +0 -290
  217. package/dist/packages/@ember/-internals/routing/lib/location/none_location.js +0 -124
  218. package/dist/packages/@ember/-internals/routing/lib/services/router.js +0 -506
  219. package/dist/packages/@ember/-internals/routing/lib/system/route.js +0 -1696
  220. package/dist/packages/@ember/-internals/routing/lib/system/router.js +0 -1662
  221. package/dist/packages/@ember/-internals/runtime/lib/mixins/array.js +0 -1501
  222. package/dist/packages/@ember/-internals/runtime/lib/mixins/enumerable.js +0 -3
  223. package/dist/packages/@ember/-internals/runtime/lib/mixins/evented.js +0 -91
  224. package/dist/packages/@ember/-internals/runtime/lib/mixins/mutable_enumerable.js +0 -4
  225. package/dist/packages/@ember/-internals/runtime/lib/mixins/observable.js +0 -339
  226. package/dist/packages/@ember/-internals/runtime/lib/mixins/promise_proxy.js +0 -149
  227. package/dist/packages/@ember/-internals/runtime/lib/system/array_proxy.js +0 -305
  228. package/dist/packages/@ember/-internals/runtime/lib/system/core_object.js +0 -730
  229. package/dist/packages/@ember/-internals/runtime/lib/system/namespace.js +0 -69
  230. package/dist/packages/@ember/-internals/runtime/lib/system/object_proxy.js +0 -7
  231. package/dist/packages/@ember/application/lib/application.js +0 -870
  232. package/dist/packages/@ember/controller/lib/controller_mixin.js +0 -42
  233. package/dist/packages/@ember/runloop/type-tests.ts/begin-end.test.js +0 -5
  234. package/dist/packages/@ember/runloop/type-tests.ts/bind.test.js +0 -59
  235. package/dist/packages/@ember/runloop/type-tests.ts/cancel.test.js +0 -5
  236. package/dist/packages/@ember/runloop/type-tests.ts/debounce.test.js +0 -77
  237. package/dist/packages/@ember/runloop/type-tests.ts/join.test.js +0 -38
  238. package/dist/packages/@ember/runloop/type-tests.ts/later.test.js +0 -38
  239. package/dist/packages/@ember/runloop/type-tests.ts/next.test.js +0 -38
  240. package/dist/packages/@ember/runloop/type-tests.ts/once.test.js +0 -38
  241. package/dist/packages/@ember/runloop/type-tests.ts/run.test.js +0 -38
  242. package/dist/packages/@ember/runloop/type-tests.ts/schedule-once.test.js +0 -39
  243. package/dist/packages/@ember/runloop/type-tests.ts/schedule.test.js +0 -39
  244. package/dist/packages/@ember/runloop/type-tests.ts/throttle.test.js +0 -77
@@ -1 +1 @@
1
- export { MutableArray as default } from '@ember/-internals/runtime';
1
+ export { MutableArray as default } from '@ember/array';
@@ -1 +1,307 @@
1
- export { ArrayProxy as default } from '@ember/-internals/runtime';
1
+ /**
2
+ @module @ember/array/proxy
3
+ */
4
+ import { objectAt, alias, PROPERTY_DID_CHANGE, addArrayObserver, removeArrayObserver, replace, arrayContentDidChange, arrayContentWillChange, tagForProperty } from '@ember/-internals/metal';
5
+ import { get } from '@ember/object';
6
+ import { isObject } from '@ember/-internals/utils';
7
+ import EmberObject from '@ember/object';
8
+ import EmberArray from '@ember/array';
9
+ import MutableArray from '@ember/array/mutable';
10
+ import { assert } from '@ember/debug';
11
+ import { setCustomTagFor } from '@glimmer/manager';
12
+ import { combine, consumeTag, validateTag, valueForTag, tagFor } from '@glimmer/validator';
13
+
14
+ function isMutable(obj) {
15
+ return Array.isArray(obj) || typeof obj.replace === 'function';
16
+ }
17
+
18
+ const ARRAY_OBSERVER_MAPPING = {
19
+ willChange: '_arrangedContentArrayWillChange',
20
+ didChange: '_arrangedContentArrayDidChange'
21
+ };
22
+
23
+ function customTagForArrayProxy(proxy, key) {
24
+ assert('[BUG] Expected a proxy', proxy instanceof ArrayProxy);
25
+
26
+ if (key === '[]') {
27
+ proxy._revalidate();
28
+
29
+ return proxy._arrTag;
30
+ } else if (key === 'length') {
31
+ proxy._revalidate();
32
+
33
+ return proxy._lengthTag;
34
+ }
35
+
36
+ return tagFor(proxy, key);
37
+ }
38
+
39
+ class ArrayProxy extends EmberObject {
40
+ constructor() {
41
+ super(...arguments);
42
+ /*
43
+ `this._objectsDirtyIndex` determines which indexes in the `this._objects`
44
+ cache are dirty.
45
+ If `this._objectsDirtyIndex === -1` then no indexes are dirty.
46
+ Otherwise, an index `i` is dirty if `i >= this._objectsDirtyIndex`.
47
+ Calling `objectAt` with a dirty index will cause the `this._objects`
48
+ cache to be recomputed.
49
+ */
50
+
51
+ /** @internal */
52
+
53
+ this._objectsDirtyIndex = 0;
54
+ /** @internal */
55
+
56
+ this._objects = null;
57
+ /** @internal */
58
+
59
+ this._lengthDirty = true;
60
+ /** @internal */
61
+
62
+ this._length = 0;
63
+ /** @internal */
64
+
65
+ this._arrangedContent = null;
66
+ /** @internal */
67
+
68
+ this._arrangedContentIsUpdating = false;
69
+ /** @internal */
70
+
71
+ this._arrangedContentTag = null;
72
+ /** @internal */
73
+
74
+ this._arrangedContentRevision = null;
75
+ /** @internal */
76
+
77
+ this._lengthTag = null;
78
+ /** @internal */
79
+
80
+ this._arrTag = null;
81
+ }
82
+
83
+ init(props) {
84
+ super.init(props);
85
+ setCustomTagFor(this, customTagForArrayProxy);
86
+ }
87
+
88
+ [PROPERTY_DID_CHANGE]() {
89
+ this._revalidate();
90
+ }
91
+
92
+ willDestroy() {
93
+ this._removeArrangedContentArrayObserver();
94
+ }
95
+ /**
96
+ Should actually retrieve the object at the specified index from the
97
+ content. You can override this method in subclasses to transform the
98
+ content item to something new.
99
+ This method will only be called if content is non-`null`.
100
+ @method objectAtContent
101
+ @param {Number} idx The index to retrieve.
102
+ @return {Object} the value or undefined if none found
103
+ @public
104
+ */
105
+
106
+
107
+ objectAtContent(idx) {
108
+ let arrangedContent = get(this, 'arrangedContent');
109
+ assert('[BUG] Called objectAtContent without content', arrangedContent);
110
+ return objectAt(arrangedContent, idx);
111
+ } // See additional docs for `replace` from `MutableArray`:
112
+ // https://api.emberjs.com/ember/release/classes/MutableArray/methods/replace?anchor=replace
113
+
114
+
115
+ replace(idx, amt, objects) {
116
+ assert('Mutating an arranged ArrayProxy is not allowed', get(this, 'arrangedContent') === get(this, 'content'));
117
+ this.replaceContent(idx, amt, objects);
118
+ }
119
+ /**
120
+ Should actually replace the specified objects on the content array.
121
+ You can override this method in subclasses to transform the content item
122
+ into something new.
123
+ This method will only be called if content is non-`null`.
124
+ @method replaceContent
125
+ @param {Number} idx The starting index
126
+ @param {Number} amt The number of items to remove from the content.
127
+ @param {Array} objects Optional array of objects to insert.
128
+ @return {void}
129
+ @public
130
+ */
131
+
132
+
133
+ replaceContent(idx, amt, objects) {
134
+ let content = get(this, 'content');
135
+ assert('[BUG] Called replaceContent without content', content);
136
+ assert('Mutating a non-mutable array is not allowed', isMutable(content));
137
+ replace(content, idx, amt, objects);
138
+ } // Overriding objectAt is not supported.
139
+
140
+
141
+ objectAt(idx) {
142
+ this._revalidate();
143
+
144
+ if (this._objects === null) {
145
+ this._objects = [];
146
+ }
147
+
148
+ if (this._objectsDirtyIndex !== -1 && idx >= this._objectsDirtyIndex) {
149
+ let arrangedContent = get(this, 'arrangedContent');
150
+
151
+ if (arrangedContent) {
152
+ let length = this._objects.length = get(arrangedContent, 'length');
153
+
154
+ for (let i = this._objectsDirtyIndex; i < length; i++) {
155
+ // SAFETY: This is expected to only ever return an instance of T. In other words, there should
156
+ // be no gaps in the array. Unfortunately, we can't actually assert for it since T could include
157
+ // any types, including null or undefined.
158
+ this._objects[i] = this.objectAtContent(i);
159
+ }
160
+ } else {
161
+ this._objects.length = 0;
162
+ }
163
+
164
+ this._objectsDirtyIndex = -1;
165
+ }
166
+
167
+ return this._objects[idx];
168
+ } // Overriding length is not supported.
169
+
170
+
171
+ get length() {
172
+ this._revalidate();
173
+
174
+ if (this._lengthDirty) {
175
+ let arrangedContent = get(this, 'arrangedContent');
176
+ this._length = arrangedContent ? get(arrangedContent, 'length') : 0;
177
+ this._lengthDirty = false;
178
+ }
179
+
180
+ assert('[BUG] _lengthTag is not set', this._lengthTag);
181
+ consumeTag(this._lengthTag);
182
+ return this._length;
183
+ }
184
+
185
+ set length(value) {
186
+ let length = this.length;
187
+ let removedCount = length - value;
188
+ let added;
189
+
190
+ if (removedCount === 0) {
191
+ return;
192
+ } else if (removedCount < 0) {
193
+ added = new Array(-removedCount);
194
+ removedCount = 0;
195
+ }
196
+
197
+ let content = get(this, 'content');
198
+
199
+ if (content) {
200
+ assert('Mutating a non-mutable array is not allowed', isMutable(content));
201
+ replace(content, value, removedCount, added);
202
+
203
+ this._invalidate();
204
+ }
205
+ }
206
+
207
+ _updateArrangedContentArray(arrangedContent) {
208
+ let oldLength = this._objects === null ? 0 : this._objects.length;
209
+ let newLength = arrangedContent ? get(arrangedContent, 'length') : 0;
210
+
211
+ this._removeArrangedContentArrayObserver();
212
+
213
+ arrayContentWillChange(this, 0, oldLength, newLength);
214
+
215
+ this._invalidate();
216
+
217
+ arrayContentDidChange(this, 0, oldLength, newLength, false);
218
+
219
+ this._addArrangedContentArrayObserver(arrangedContent);
220
+ }
221
+
222
+ _addArrangedContentArrayObserver(arrangedContent) {
223
+ if (arrangedContent && !arrangedContent.isDestroyed) {
224
+ // @ts-expect-error This check is still good for ensuring correctness
225
+ assert("Can't set ArrayProxy's content to itself", arrangedContent !== this);
226
+ assert(`ArrayProxy expects a native Array, EmberArray, or ArrayProxy, but you passed ${typeof arrangedContent}`, function (arr) {
227
+ return Array.isArray(arr) || EmberArray.detect(arr);
228
+ }(arrangedContent));
229
+ assert('ArrayProxy expected its contents to not be destroyed', !arrangedContent.isDestroyed);
230
+ addArrayObserver(arrangedContent, this, ARRAY_OBSERVER_MAPPING);
231
+ this._arrangedContent = arrangedContent;
232
+ }
233
+ }
234
+
235
+ _removeArrangedContentArrayObserver() {
236
+ if (this._arrangedContent) {
237
+ removeArrayObserver(this._arrangedContent, this, ARRAY_OBSERVER_MAPPING);
238
+ }
239
+ }
240
+
241
+ _arrangedContentArrayWillChange() {}
242
+
243
+ _arrangedContentArrayDidChange(_proxy, idx, removedCnt, addedCnt) {
244
+ arrayContentWillChange(this, idx, removedCnt, addedCnt);
245
+ let dirtyIndex = idx;
246
+
247
+ if (dirtyIndex < 0) {
248
+ let length = get(this._arrangedContent, 'length');
249
+ dirtyIndex += length + removedCnt - addedCnt;
250
+ }
251
+
252
+ if (this._objectsDirtyIndex === -1 || this._objectsDirtyIndex > dirtyIndex) {
253
+ this._objectsDirtyIndex = dirtyIndex;
254
+ }
255
+
256
+ this._lengthDirty = true;
257
+ arrayContentDidChange(this, idx, removedCnt, addedCnt, false);
258
+ }
259
+
260
+ _invalidate() {
261
+ this._objectsDirtyIndex = 0;
262
+ this._lengthDirty = true;
263
+ }
264
+
265
+ _revalidate() {
266
+ if (this._arrangedContentIsUpdating === true) return;
267
+
268
+ if (this._arrangedContentTag === null || !validateTag(this._arrangedContentTag, this._arrangedContentRevision)) {
269
+ let arrangedContent = this.get('arrangedContent');
270
+
271
+ if (this._arrangedContentTag === null) {
272
+ // This is the first time the proxy has been setup, only add the observer
273
+ // don't trigger any events
274
+ this._addArrangedContentArrayObserver(arrangedContent);
275
+ } else {
276
+ this._arrangedContentIsUpdating = true;
277
+
278
+ this._updateArrangedContentArray(arrangedContent);
279
+
280
+ this._arrangedContentIsUpdating = false;
281
+ }
282
+
283
+ let arrangedContentTag = this._arrangedContentTag = tagFor(this, 'arrangedContent');
284
+ this._arrangedContentRevision = valueForTag(this._arrangedContentTag);
285
+
286
+ if (isObject(arrangedContent)) {
287
+ this._lengthTag = combine([arrangedContentTag, tagForProperty(arrangedContent, 'length')]);
288
+ this._arrTag = combine([arrangedContentTag, tagForProperty(arrangedContent, '[]')]);
289
+ } else {
290
+ this._lengthTag = this._arrTag = arrangedContentTag;
291
+ }
292
+ }
293
+ }
294
+
295
+ }
296
+
297
+ ArrayProxy.reopen(MutableArray, {
298
+ /**
299
+ The array that the proxy pretends to be. In the default `ArrayProxy`
300
+ implementation, this and `content` are the same. Subclasses of `ArrayProxy`
301
+ can override this property to provide things like sorting and filtering.
302
+ @property arrangedContent
303
+ @public
304
+ */
305
+ arrangedContent: alias('content')
306
+ });
307
+ export default ArrayProxy;
@@ -11,8 +11,8 @@ import { ENV } from '@ember/-internals/environment';
11
11
  */
12
12
 
13
13
  export const DEFAULT_FEATURES = {
14
- EMBER_LIBRARIES_ISREGISTERED: null,
15
- EMBER_IMPROVED_INSTRUMENTATION: null,
14
+ EMBER_LIBRARIES_ISREGISTERED: false,
15
+ EMBER_IMPROVED_INSTRUMENTATION: false,
16
16
  EMBER_UNIQUE_ID_HELPER: true,
17
17
  EMBER_DEFAULT_HELPER_MANAGER: true
18
18
  };
@@ -1,10 +1,267 @@
1
- import { FrameworkObject } from '@ember/-internals/runtime';
1
+ import { getOwner } from '@ember/-internals/owner'; // This is imported from -internals to avoid circularity
2
+
3
+ import { computed, get } from '@ember/object';
4
+ import { FrameworkObject } from '@ember/object/-internals';
2
5
  import { inject as metalInject } from '@ember/-internals/metal';
3
- import ControllerMixin from './lib/controller_mixin';
6
+ import Mixin from '@ember/object/mixin';
7
+ import { deprecateTransitionMethods, prefixRouteNameArg } from '@ember/routing/-internals';
8
+ import { ActionHandler } from '@ember/-internals/runtime';
9
+ import { symbol } from '@ember/-internals/utils';
10
+ const MODEL = symbol('MODEL');
11
+ const ControllerMixin = Mixin.create(ActionHandler, {
12
+ /* ducktype as a controller */
13
+ isController: true,
14
+ concatenatedProperties: ['queryParams'],
15
+
16
+ /**
17
+ The object to which actions from the view should be sent.
18
+ For example, when a Handlebars template uses the `{{action}}` helper,
19
+ it will attempt to send the action to the view's controller's `target`.
20
+ By default, the value of the target property is set to the router, and
21
+ is injected when a controller is instantiated. This injection is applied
22
+ as part of the application's initialization process. In most cases the
23
+ `target` property will automatically be set to the logical consumer of
24
+ actions for the controller.
25
+ @property target
26
+ @default null
27
+ @public
28
+ */
29
+ target: null,
30
+ store: null,
31
+
32
+ init() {
33
+ this._super(...arguments);
34
+
35
+ let owner = getOwner(this);
36
+
37
+ if (owner) {
38
+ this.namespace = owner.lookup('application:main');
39
+ this.target = owner.lookup('router:main');
40
+ }
41
+ },
42
+
43
+ /**
44
+ The controller's current model. When retrieving or modifying a controller's
45
+ model, this property should be used instead of the `content` property.
46
+ @property model
47
+ @public
48
+ */
49
+ model: computed({
50
+ get() {
51
+ return this[MODEL];
52
+ },
53
+
54
+ set(_key, value) {
55
+ return this[MODEL] = value;
56
+ }
57
+
58
+ }),
59
+
60
+ /**
61
+ Defines which query parameters the controller accepts.
62
+ If you give the names `['category','page']` it will bind
63
+ the values of these query parameters to the variables
64
+ `this.category` and `this.page`.
65
+ By default, query parameters are parsed as strings. This
66
+ may cause unexpected behavior if a query parameter is used with `toggleProperty`,
67
+ because the initial value set for `param=false` will be the string `"false"`, which is truthy.
68
+ To avoid this, you may specify that the query parameter should be parsed as a boolean
69
+ by using the following verbose form with a `type` property:
70
+ ```javascript
71
+ queryParams: [{
72
+ category: {
73
+ type: 'boolean'
74
+ }
75
+ }]
76
+ ```
77
+ Available values for the `type` parameter are `'boolean'`, `'number'`, `'array'`, and `'string'`.
78
+ If query param type is not specified, it will default to `'string'`.
79
+ @for Ember.ControllerMixin
80
+ @property queryParams
81
+ @public
82
+ */
83
+ queryParams: null,
84
+
85
+ /**
86
+ This property is updated to various different callback functions depending on
87
+ the current "state" of the backing route. It is used by
88
+ `Controller.prototype._qpChanged`.
89
+ The methods backing each state can be found in the `Route.prototype._qp` computed
90
+ property return value (the `.states` property). The current values are listed here for
91
+ the sanity of future travelers:
92
+ * `inactive` - This state is used when this controller instance is not part of the active
93
+ route hierarchy. Set in `Route.prototype._reset` (a `router.js` microlib hook) and
94
+ `Route.prototype.actions.finalizeQueryParamChange`.
95
+ * `active` - This state is used when this controller instance is part of the active
96
+ route hierarchy. Set in `Route.prototype.actions.finalizeQueryParamChange`.
97
+ * `allowOverrides` - This state is used in `Route.prototype.setup` (`route.js` microlib hook).
98
+ @method _qpDelegate
99
+ @private
100
+ */
101
+ _qpDelegate: null,
102
+
103
+ /**
104
+ During `Route#setup` observers are created to invoke this method
105
+ when any of the query params declared in `Controller#queryParams` property
106
+ are changed.
107
+ When invoked this method uses the currently active query param update delegate
108
+ (see `Controller.prototype._qpDelegate` for details) and invokes it with
109
+ the QP key/value being changed.
110
+ @method _qpChanged
111
+ @private
112
+ */
113
+ _qpChanged(controller, _prop) {
114
+ let dotIndex = _prop.indexOf('.[]');
115
+
116
+ let prop = dotIndex === -1 ? _prop : _prop.slice(0, dotIndex);
117
+ let delegate = controller._qpDelegate;
118
+ let value = get(controller, prop);
119
+ delegate(prop, value);
120
+ },
121
+
122
+ /**
123
+ Transition the application into another route. The route may
124
+ be either a single route or route path:
125
+ ```javascript
126
+ aController.transitionToRoute('blogPosts');
127
+ aController.transitionToRoute('blogPosts.recentEntries');
128
+ ```
129
+ Optionally supply a model for the route in question. The model
130
+ will be serialized into the URL using the `serialize` hook of
131
+ the route:
132
+ ```javascript
133
+ aController.transitionToRoute('blogPost', aPost);
134
+ ```
135
+ If a literal is passed (such as a number or a string), it will
136
+ be treated as an identifier instead. In this case, the `model`
137
+ hook of the route will be triggered:
138
+ ```javascript
139
+ aController.transitionToRoute('blogPost', 1);
140
+ ```
141
+ Multiple models will be applied last to first recursively up the
142
+ route tree.
143
+ ```app/router.js
144
+ Router.map(function() {
145
+ this.route('blogPost', { path: ':blogPostId' }, function() {
146
+ this.route('blogComment', { path: ':blogCommentId', resetNamespace: true });
147
+ });
148
+ });
149
+ ```
150
+ ```javascript
151
+ aController.transitionToRoute('blogComment', aPost, aComment);
152
+ aController.transitionToRoute('blogComment', 1, 13);
153
+ ```
154
+ It is also possible to pass a URL (a string that starts with a
155
+ `/`).
156
+ ```javascript
157
+ aController.transitionToRoute('/');
158
+ aController.transitionToRoute('/blog/post/1/comment/13');
159
+ aController.transitionToRoute('/blog/posts?sort=title');
160
+ ```
161
+ An options hash with a `queryParams` property may be provided as
162
+ the final argument to add query parameters to the destination URL.
163
+ ```javascript
164
+ aController.transitionToRoute('blogPost', 1, {
165
+ queryParams: { showComments: 'true' }
166
+ });
167
+ // if you just want to transition the query parameters without changing the route
168
+ aController.transitionToRoute({ queryParams: { sort: 'date' } });
169
+ ```
170
+ See also [replaceRoute](/ember/release/classes/Ember.ControllerMixin/methods/replaceRoute?anchor=replaceRoute).
171
+ @for Ember.ControllerMixin
172
+ @method transitionToRoute
173
+ @deprecated Use transitionTo from the Router service instead.
174
+ @param {String} [name] the name of the route or a URL
175
+ @param {...Object} models the model(s) or identifier(s) to be used
176
+ while transitioning to the route.
177
+ @param {Object} [options] optional hash with a queryParams property
178
+ containing a mapping of query parameters
179
+ @return {Transition} the transition object associated with this
180
+ attempted transition
181
+ @public
182
+ */
183
+ transitionToRoute(...args) {
184
+ var _a;
185
+
186
+ deprecateTransitionMethods('controller', 'transitionToRoute'); // target may be either another controller or a router
187
+
188
+ let target = get(this, 'target'); // SAFETY: We can't actually assert that this is a full Controller or Router since some tests
189
+ // mock out an object that only has the single method. Since this is deprecated, I think it's
190
+ // ok to be a little less than proper here.
191
+
192
+ let method = (_a = target.transitionToRoute) !== null && _a !== void 0 ? _a : target.transitionTo;
193
+ return method.apply(target, prefixRouteNameArg(this, args));
194
+ },
195
+
196
+ /**
197
+ Transition into another route while replacing the current URL, if possible.
198
+ This will replace the current history entry instead of adding a new one.
199
+ Beside that, it is identical to `transitionToRoute` in all other respects.
200
+ ```javascript
201
+ aController.replaceRoute('blogPosts');
202
+ aController.replaceRoute('blogPosts.recentEntries');
203
+ ```
204
+ Optionally supply a model for the route in question. The model
205
+ will be serialized into the URL using the `serialize` hook of
206
+ the route:
207
+ ```javascript
208
+ aController.replaceRoute('blogPost', aPost);
209
+ ```
210
+ If a literal is passed (such as a number or a string), it will
211
+ be treated as an identifier instead. In this case, the `model`
212
+ hook of the route will be triggered:
213
+ ```javascript
214
+ aController.replaceRoute('blogPost', 1);
215
+ ```
216
+ Multiple models will be applied last to first recursively up the
217
+ route tree.
218
+ ```app/router.js
219
+ Router.map(function() {
220
+ this.route('blogPost', { path: ':blogPostId' }, function() {
221
+ this.route('blogComment', { path: ':blogCommentId', resetNamespace: true });
222
+ });
223
+ });
224
+ ```
225
+ ```
226
+ aController.replaceRoute('blogComment', aPost, aComment);
227
+ aController.replaceRoute('blogComment', 1, 13);
228
+ ```
229
+ It is also possible to pass a URL (a string that starts with a
230
+ `/`).
231
+ ```javascript
232
+ aController.replaceRoute('/');
233
+ aController.replaceRoute('/blog/post/1/comment/13');
234
+ ```
235
+ @for Ember.ControllerMixin
236
+ @method replaceRoute
237
+ @deprecated Use replaceWith from the Router service instead.
238
+ @param {String} [name] the name of the route or a URL
239
+ @param {...Object} models the model(s) or identifier(s) to be used
240
+ while transitioning to the route.
241
+ @param {Object} [options] optional hash with a queryParams property
242
+ containing a mapping of query parameters
243
+ @return {Transition} the transition object associated with this
244
+ attempted transition
245
+ @public
246
+ */
247
+ replaceRoute(...args) {
248
+ var _a;
249
+
250
+ deprecateTransitionMethods('controller', 'replaceRoute'); // target may be either another controller or a router
251
+
252
+ let target = get(this, 'target'); // SAFETY: We can't actually assert that this is a full Controller or Router since some tests
253
+ // mock out an object that only has the single method. Since this is deprecated, I think it's
254
+ // ok to be a little less than proper here.
255
+
256
+ let method = (_a = target.replaceRoute) !== null && _a !== void 0 ? _a : target.replaceWith;
257
+ return method.apply(target, prefixRouteNameArg(this, args));
258
+ }
259
+
260
+ });
4
261
 
5
262
  class Controller extends FrameworkObject.extend(ControllerMixin) {}
6
263
 
7
264
  export function inject(...args) {
8
265
  return metalInject('controller', ...args);
9
266
  }
10
- export default Controller;
267
+ export { Controller as default, ControllerMixin };
@@ -1 +1,99 @@
1
- export { ContainerDebugAdapter as default } from '@ember/-internals/extension-support';
1
+ import { classify, dasherize } from '@ember/string';
2
+ import EmberObject from '@ember/object';
3
+ import { A as emberA } from '@ember/array';
4
+ import { typeOf } from '@ember/utils';
5
+ import { getOwner } from '@ember/-internals/owner';
6
+ import Namespace from '@ember/application/namespace';
7
+ /**
8
+ @module @ember/debug/container-debug-adapter
9
+ */
10
+
11
+ /**
12
+ The `ContainerDebugAdapter` helps the container and resolver interface
13
+ with tools that debug Ember such as the
14
+ [Ember Inspector](https://github.com/emberjs/ember-inspector)
15
+ for Chrome and Firefox.
16
+
17
+ This class can be extended by a custom resolver implementer
18
+ to override some of the methods with library-specific code.
19
+
20
+ The methods likely to be overridden are:
21
+
22
+ * `canCatalogEntriesByType`
23
+ * `catalogEntriesByType`
24
+
25
+ The adapter will need to be registered
26
+ in the application's container as `container-debug-adapter:main`.
27
+
28
+ Example:
29
+
30
+ ```javascript
31
+ Application.initializer({
32
+ name: "containerDebugAdapter",
33
+
34
+ initialize(application) {
35
+ application.register('container-debug-adapter:main', require('app/container-debug-adapter'));
36
+ }
37
+ });
38
+ ```
39
+
40
+ @class ContainerDebugAdapter
41
+ @extends EmberObject
42
+ @since 1.5.0
43
+ @public
44
+ */
45
+
46
+ export default class ContainerDebugAdapter extends EmberObject {
47
+ constructor(owner) {
48
+ super(owner);
49
+ this.resolver = getOwner(this).lookup('resolver-for-debugging:main');
50
+ }
51
+ /**
52
+ Returns true if it is possible to catalog a list of available
53
+ classes in the resolver for a given type.
54
+ @method canCatalogEntriesByType
55
+ @param {String} type The type. e.g. "model", "controller", "route".
56
+ @return {boolean} whether a list is available for this type.
57
+ @public
58
+ */
59
+
60
+
61
+ canCatalogEntriesByType(type) {
62
+ if (type === 'model' || type === 'template') {
63
+ return false;
64
+ }
65
+
66
+ return true;
67
+ }
68
+ /**
69
+ Returns the available classes a given type.
70
+ @method catalogEntriesByType
71
+ @param {String} type The type. e.g. "model", "controller", "route".
72
+ @return {Array} An array of strings.
73
+ @public
74
+ */
75
+
76
+
77
+ catalogEntriesByType(type) {
78
+ let namespaces = emberA(Namespace.NAMESPACES);
79
+ let types = emberA();
80
+ let typeSuffixRegex = new RegExp(`${classify(type)}$`);
81
+ namespaces.forEach(namespace => {
82
+ for (let key in namespace) {
83
+ if (!Object.prototype.hasOwnProperty.call(namespace, key)) {
84
+ continue;
85
+ }
86
+
87
+ if (typeSuffixRegex.test(key)) {
88
+ let klass = namespace[key];
89
+
90
+ if (typeOf(klass) === 'class') {
91
+ types.push(dasherize(key.replace(typeSuffixRegex, '')));
92
+ }
93
+ }
94
+ }
95
+ });
96
+ return types;
97
+ }
98
+
99
+ }