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,305 +0,0 @@
1
- /**
2
- @module @ember/array
3
- */
4
- import { get, objectAt, alias, PROPERTY_DID_CHANGE, addArrayObserver, removeArrayObserver, replace, arrayContentDidChange, arrayContentWillChange, tagForProperty } from '@ember/-internals/metal';
5
- import { isObject } from '@ember/-internals/utils';
6
- import EmberObject from './object';
7
- import EmberArray, { MutableArray } from '../mixins/array';
8
- import { assert } from '@ember/debug';
9
- import { setCustomTagFor } from '@glimmer/manager';
10
- import { combine, consumeTag, validateTag, valueForTag, tagFor } from '@glimmer/validator';
11
-
12
- function isMutable(obj) {
13
- return Array.isArray(obj) || typeof obj.replace === 'function';
14
- }
15
-
16
- const ARRAY_OBSERVER_MAPPING = {
17
- willChange: '_arrangedContentArrayWillChange',
18
- didChange: '_arrangedContentArrayDidChange'
19
- };
20
-
21
- function customTagForArrayProxy(proxy, key) {
22
- assert('[BUG] Expected a proxy', proxy instanceof ArrayProxy);
23
-
24
- if (key === '[]') {
25
- proxy._revalidate();
26
-
27
- return proxy._arrTag;
28
- } else if (key === 'length') {
29
- proxy._revalidate();
30
-
31
- return proxy._lengthTag;
32
- }
33
-
34
- return tagFor(proxy, key);
35
- }
36
-
37
- class ArrayProxy extends EmberObject {
38
- constructor() {
39
- super(...arguments);
40
- /*
41
- `this._objectsDirtyIndex` determines which indexes in the `this._objects`
42
- cache are dirty.
43
- If `this._objectsDirtyIndex === -1` then no indexes are dirty.
44
- Otherwise, an index `i` is dirty if `i >= this._objectsDirtyIndex`.
45
- Calling `objectAt` with a dirty index will cause the `this._objects`
46
- cache to be recomputed.
47
- */
48
-
49
- /** @internal */
50
-
51
- this._objectsDirtyIndex = 0;
52
- /** @internal */
53
-
54
- this._objects = null;
55
- /** @internal */
56
-
57
- this._lengthDirty = true;
58
- /** @internal */
59
-
60
- this._length = 0;
61
- /** @internal */
62
-
63
- this._arrangedContent = null;
64
- /** @internal */
65
-
66
- this._arrangedContentIsUpdating = false;
67
- /** @internal */
68
-
69
- this._arrangedContentTag = null;
70
- /** @internal */
71
-
72
- this._arrangedContentRevision = null;
73
- /** @internal */
74
-
75
- this._lengthTag = null;
76
- /** @internal */
77
-
78
- this._arrTag = null;
79
- }
80
-
81
- init(props) {
82
- super.init(props);
83
- setCustomTagFor(this, customTagForArrayProxy);
84
- }
85
-
86
- [PROPERTY_DID_CHANGE]() {
87
- this._revalidate();
88
- }
89
-
90
- willDestroy() {
91
- this._removeArrangedContentArrayObserver();
92
- }
93
- /**
94
- Should actually retrieve the object at the specified index from the
95
- content. You can override this method in subclasses to transform the
96
- content item to something new.
97
- This method will only be called if content is non-`null`.
98
- @method objectAtContent
99
- @param {Number} idx The index to retrieve.
100
- @return {Object} the value or undefined if none found
101
- @public
102
- */
103
-
104
-
105
- objectAtContent(idx) {
106
- let arrangedContent = get(this, 'arrangedContent');
107
- assert('[BUG] Called objectAtContent without content', arrangedContent);
108
- return objectAt(arrangedContent, idx);
109
- } // See additional docs for `replace` from `MutableArray`:
110
- // https://api.emberjs.com/ember/release/classes/MutableArray/methods/replace?anchor=replace
111
-
112
-
113
- replace(idx, amt, objects) {
114
- assert('Mutating an arranged ArrayProxy is not allowed', get(this, 'arrangedContent') === get(this, 'content'));
115
- this.replaceContent(idx, amt, objects);
116
- }
117
- /**
118
- Should actually replace the specified objects on the content array.
119
- You can override this method in subclasses to transform the content item
120
- into something new.
121
- This method will only be called if content is non-`null`.
122
- @method replaceContent
123
- @param {Number} idx The starting index
124
- @param {Number} amt The number of items to remove from the content.
125
- @param {Array} objects Optional array of objects to insert.
126
- @return {void}
127
- @public
128
- */
129
-
130
-
131
- replaceContent(idx, amt, objects) {
132
- let content = get(this, 'content');
133
- assert('[BUG] Called replaceContent without content', content);
134
- assert('Mutating a non-mutable array is not allowed', isMutable(content));
135
- replace(content, idx, amt, objects);
136
- } // Overriding objectAt is not supported.
137
-
138
-
139
- objectAt(idx) {
140
- this._revalidate();
141
-
142
- if (this._objects === null) {
143
- this._objects = [];
144
- }
145
-
146
- if (this._objectsDirtyIndex !== -1 && idx >= this._objectsDirtyIndex) {
147
- let arrangedContent = get(this, 'arrangedContent');
148
-
149
- if (arrangedContent) {
150
- let length = this._objects.length = get(arrangedContent, 'length');
151
-
152
- for (let i = this._objectsDirtyIndex; i < length; i++) {
153
- // SAFETY: This is expected to only ever return an instance of T. In other words, there should
154
- // be no gaps in the array. Unfortunately, we can't actually assert for it since T could include
155
- // any types, including null or undefined.
156
- this._objects[i] = this.objectAtContent(i);
157
- }
158
- } else {
159
- this._objects.length = 0;
160
- }
161
-
162
- this._objectsDirtyIndex = -1;
163
- }
164
-
165
- return this._objects[idx];
166
- } // Overriding length is not supported.
167
-
168
-
169
- get length() {
170
- this._revalidate();
171
-
172
- if (this._lengthDirty) {
173
- let arrangedContent = get(this, 'arrangedContent');
174
- this._length = arrangedContent ? get(arrangedContent, 'length') : 0;
175
- this._lengthDirty = false;
176
- }
177
-
178
- assert('[BUG] _lengthTag is not set', this._lengthTag);
179
- consumeTag(this._lengthTag);
180
- return this._length;
181
- }
182
-
183
- set length(value) {
184
- let length = this.length;
185
- let removedCount = length - value;
186
- let added;
187
-
188
- if (removedCount === 0) {
189
- return;
190
- } else if (removedCount < 0) {
191
- added = new Array(-removedCount);
192
- removedCount = 0;
193
- }
194
-
195
- let content = get(this, 'content');
196
-
197
- if (content) {
198
- assert('Mutating a non-mutable array is not allowed', isMutable(content));
199
- replace(content, value, removedCount, added);
200
-
201
- this._invalidate();
202
- }
203
- }
204
-
205
- _updateArrangedContentArray(arrangedContent) {
206
- let oldLength = this._objects === null ? 0 : this._objects.length;
207
- let newLength = arrangedContent ? get(arrangedContent, 'length') : 0;
208
-
209
- this._removeArrangedContentArrayObserver();
210
-
211
- arrayContentWillChange(this, 0, oldLength, newLength);
212
-
213
- this._invalidate();
214
-
215
- arrayContentDidChange(this, 0, oldLength, newLength, false);
216
-
217
- this._addArrangedContentArrayObserver(arrangedContent);
218
- }
219
-
220
- _addArrangedContentArrayObserver(arrangedContent) {
221
- if (arrangedContent && !arrangedContent.isDestroyed) {
222
- // @ts-expect-error This check is still good for ensuring correctness
223
- assert("Can't set ArrayProxy's content to itself", arrangedContent !== this);
224
- assert(`ArrayProxy expects a native Array, EmberArray, or ArrayProxy, but you passed ${typeof arrangedContent}`, function (arr) {
225
- return Array.isArray(arr) || EmberArray.detect(arr);
226
- }(arrangedContent));
227
- assert('ArrayProxy expected its contents to not be destroyed', !arrangedContent.isDestroyed);
228
- addArrayObserver(arrangedContent, this, ARRAY_OBSERVER_MAPPING);
229
- this._arrangedContent = arrangedContent;
230
- }
231
- }
232
-
233
- _removeArrangedContentArrayObserver() {
234
- if (this._arrangedContent) {
235
- removeArrayObserver(this._arrangedContent, this, ARRAY_OBSERVER_MAPPING);
236
- }
237
- }
238
-
239
- _arrangedContentArrayWillChange() {}
240
-
241
- _arrangedContentArrayDidChange(_proxy, idx, removedCnt, addedCnt) {
242
- arrayContentWillChange(this, idx, removedCnt, addedCnt);
243
- let dirtyIndex = idx;
244
-
245
- if (dirtyIndex < 0) {
246
- let length = get(this._arrangedContent, 'length');
247
- dirtyIndex += length + removedCnt - addedCnt;
248
- }
249
-
250
- if (this._objectsDirtyIndex === -1 || this._objectsDirtyIndex > dirtyIndex) {
251
- this._objectsDirtyIndex = dirtyIndex;
252
- }
253
-
254
- this._lengthDirty = true;
255
- arrayContentDidChange(this, idx, removedCnt, addedCnt, false);
256
- }
257
-
258
- _invalidate() {
259
- this._objectsDirtyIndex = 0;
260
- this._lengthDirty = true;
261
- }
262
-
263
- _revalidate() {
264
- if (this._arrangedContentIsUpdating === true) return;
265
-
266
- if (this._arrangedContentTag === null || !validateTag(this._arrangedContentTag, this._arrangedContentRevision)) {
267
- let arrangedContent = this.get('arrangedContent');
268
-
269
- if (this._arrangedContentTag === null) {
270
- // This is the first time the proxy has been setup, only add the observer
271
- // don't trigger any events
272
- this._addArrangedContentArrayObserver(arrangedContent);
273
- } else {
274
- this._arrangedContentIsUpdating = true;
275
-
276
- this._updateArrangedContentArray(arrangedContent);
277
-
278
- this._arrangedContentIsUpdating = false;
279
- }
280
-
281
- let arrangedContentTag = this._arrangedContentTag = tagFor(this, 'arrangedContent');
282
- this._arrangedContentRevision = valueForTag(this._arrangedContentTag);
283
-
284
- if (isObject(arrangedContent)) {
285
- this._lengthTag = combine([arrangedContentTag, tagForProperty(arrangedContent, 'length')]);
286
- this._arrTag = combine([arrangedContentTag, tagForProperty(arrangedContent, '[]')]);
287
- } else {
288
- this._lengthTag = this._arrTag = arrangedContentTag;
289
- }
290
- }
291
- }
292
-
293
- }
294
-
295
- ArrayProxy.reopen(MutableArray, {
296
- /**
297
- The array that the proxy pretends to be. In the default `ArrayProxy`
298
- implementation, this and `content` are the same. Subclasses of `ArrayProxy`
299
- can override this property to provide things like sorting and filtering.
300
- @property arrangedContent
301
- @public
302
- */
303
- arrangedContent: alias('content')
304
- });
305
- export default ArrayProxy;