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,574 @@
1
- export { DataAdapter as default } from '@ember/-internals/extension-support';
1
+ import { getOwner } from '@ember/-internals/owner';
2
+ import { _backburner } from '@ember/runloop';
3
+ import { get } from '@ember/object';
4
+ import { dasherize } from '@ember/string';
5
+ import Namespace from '@ember/application/namespace';
6
+ import EmberObject from '@ember/object';
7
+ import { A as emberA } from '@ember/array';
8
+ import { consumeTag, createCache, getValue, tagFor, untrack } from '@glimmer/validator';
9
+
10
+ function iterate(arr, fn) {
11
+ if (Symbol.iterator in arr) {
12
+ for (let item of arr) {
13
+ fn(item);
14
+ }
15
+ } else {
16
+ arr.forEach(fn);
17
+ }
18
+ }
19
+
20
+ class RecordsWatcher {
21
+ constructor(records, recordsAdded, recordsUpdated, recordsRemoved, wrapRecord, release) {
22
+ this.wrapRecord = wrapRecord;
23
+ this.release = release;
24
+ this.recordCaches = new Map();
25
+ this.added = [];
26
+ this.updated = [];
27
+ this.removed = [];
28
+ this.recordArrayCache = createCache(() => {
29
+ let seen = new Set(); // Track `[]` for legacy support
30
+
31
+ consumeTag(tagFor(records, '[]'));
32
+ iterate(records, record => {
33
+ getValue(this.getCacheForItem(record));
34
+ seen.add(record);
35
+ }); // Untrack this operation because these records are being removed, they
36
+ // should not be polled again in the future
37
+
38
+ untrack(() => {
39
+ this.recordCaches.forEach((_cache, record) => {
40
+ if (!seen.has(record)) {
41
+ this.removed.push(wrapRecord(record));
42
+ this.recordCaches.delete(record);
43
+ }
44
+ });
45
+ });
46
+
47
+ if (this.added.length > 0) {
48
+ recordsAdded(this.added);
49
+ this.added = [];
50
+ }
51
+
52
+ if (this.updated.length > 0) {
53
+ recordsUpdated(this.updated);
54
+ this.updated = [];
55
+ }
56
+
57
+ if (this.removed.length > 0) {
58
+ recordsRemoved(this.removed);
59
+ this.removed = [];
60
+ }
61
+ });
62
+ }
63
+
64
+ getCacheForItem(record) {
65
+ let recordCache = this.recordCaches.get(record);
66
+
67
+ if (!recordCache) {
68
+ let hasBeenAdded = false;
69
+ recordCache = createCache(() => {
70
+ if (!hasBeenAdded) {
71
+ this.added.push(this.wrapRecord(record));
72
+ hasBeenAdded = true;
73
+ } else {
74
+ this.updated.push(this.wrapRecord(record));
75
+ }
76
+ });
77
+ this.recordCaches.set(record, recordCache);
78
+ }
79
+
80
+ return recordCache;
81
+ }
82
+
83
+ revalidate() {
84
+ getValue(this.recordArrayCache);
85
+ }
86
+
87
+ }
88
+
89
+ class TypeWatcher {
90
+ constructor(records, onChange, release) {
91
+ this.release = release;
92
+ let hasBeenAccessed = false;
93
+ this.cache = createCache(() => {
94
+ // Empty iteration, we're doing this just
95
+ // to track changes to the records array
96
+ iterate(records, () => {}); // Also track `[]` for legacy support
97
+
98
+ consumeTag(tagFor(records, '[]'));
99
+
100
+ if (hasBeenAccessed === true) {
101
+ onChange();
102
+ } else {
103
+ hasBeenAccessed = true;
104
+ }
105
+ });
106
+ this.release = release;
107
+ }
108
+
109
+ revalidate() {
110
+ getValue(this.cache);
111
+ }
112
+
113
+ }
114
+ /**
115
+ The `DataAdapter` helps a data persistence library
116
+ interface with tools that debug Ember such
117
+ as the [Ember Inspector](https://github.com/emberjs/ember-inspector)
118
+ for Chrome and Firefox.
119
+
120
+ This class will be extended by a persistence library
121
+ which will override some of the methods with
122
+ library-specific code.
123
+
124
+ The methods likely to be overridden are:
125
+
126
+ * `getFilters`
127
+ * `detect`
128
+ * `columnsForType`
129
+ * `getRecords`
130
+ * `getRecordColumnValues`
131
+ * `getRecordKeywords`
132
+ * `getRecordFilterValues`
133
+ * `getRecordColor`
134
+
135
+ The adapter will need to be registered
136
+ in the application's container as `dataAdapter:main`.
137
+
138
+ Example:
139
+
140
+ ```javascript
141
+ Application.initializer({
142
+ name: "data-adapter",
143
+
144
+ initialize: function(application) {
145
+ application.register('data-adapter:main', DS.DataAdapter);
146
+ }
147
+ });
148
+ ```
149
+
150
+ @class DataAdapter
151
+ @extends EmberObject
152
+ @public
153
+ */
154
+
155
+
156
+ export default class DataAdapter extends EmberObject {
157
+ constructor(owner) {
158
+ super(owner);
159
+ this.releaseMethods = emberA();
160
+ this.recordsWatchers = new Map();
161
+ this.typeWatchers = new Map();
162
+ this.flushWatchers = null;
163
+ /**
164
+ The container-debug-adapter which is used
165
+ to list all models.
166
+ @property containerDebugAdapter
167
+ @default undefined
168
+ @since 1.5.0
169
+ @public
170
+ **/
171
+
172
+ /**
173
+ The number of attributes to send
174
+ as columns. (Enough to make the record
175
+ identifiable).
176
+ @private
177
+ @property attributeLimit
178
+ @default 3
179
+ @since 1.3.0
180
+ */
181
+
182
+ this.attributeLimit = 3;
183
+ /**
184
+ Ember Data > v1.0.0-beta.18
185
+ requires string model names to be passed
186
+ around instead of the actual factories.
187
+ This is a stamp for the Ember Inspector
188
+ to differentiate between the versions
189
+ to be able to support older versions too.
190
+ @public
191
+ @property acceptsModelName
192
+ */
193
+
194
+ this.acceptsModelName = true;
195
+ this.containerDebugAdapter = getOwner(this).lookup('container-debug-adapter:main');
196
+ }
197
+ /**
198
+ Map from records arrays to RecordsWatcher instances
199
+ @private
200
+ @property recordsWatchers
201
+ @since 3.26.0
202
+ */
203
+
204
+ /**
205
+ Map from records arrays to TypeWatcher instances
206
+ @private
207
+ @property typeWatchers
208
+ @since 3.26.0
209
+ */
210
+
211
+ /**
212
+ Callback that is currently scheduled on backburner end to flush and check
213
+ all active watchers.
214
+ @private
215
+ @property flushWatchers
216
+ @since 3.26.0
217
+ */
218
+
219
+ /**
220
+ Stores all methods that clear observers.
221
+ These methods will be called on destruction.
222
+ @private
223
+ @property releaseMethods
224
+ @since 1.3.0
225
+ */
226
+
227
+ /**
228
+ Specifies how records can be filtered.
229
+ Records returned will need to have a `filterValues`
230
+ property with a key for every name in the returned array.
231
+ @public
232
+ @method getFilters
233
+ @return {Array} List of objects defining filters.
234
+ The object should have a `name` and `desc` property.
235
+ */
236
+
237
+
238
+ getFilters() {
239
+ return emberA();
240
+ }
241
+ /**
242
+ Fetch the model types and observe them for changes.
243
+ @public
244
+ @method watchModelTypes
245
+ @param {Function} typesAdded Callback to call to add types.
246
+ Takes an array of objects containing wrapped types (returned from `wrapModelType`).
247
+ @param {Function} typesUpdated Callback to call when a type has changed.
248
+ Takes an array of objects containing wrapped types.
249
+ @return {Function} Method to call to remove all observers
250
+ */
251
+
252
+
253
+ watchModelTypes(typesAdded, typesUpdated) {
254
+ let modelTypes = this.getModelTypes();
255
+ let releaseMethods = emberA();
256
+ let typesToSend;
257
+ typesToSend = modelTypes.map(type => {
258
+ let klass = type.klass;
259
+ let wrapped = this.wrapModelType(klass, type.name);
260
+ releaseMethods.push(this.observeModelType(type.name, typesUpdated));
261
+ return wrapped;
262
+ });
263
+ typesAdded(typesToSend);
264
+
265
+ let release = () => {
266
+ releaseMethods.forEach(fn => fn());
267
+ this.releaseMethods.removeObject(release);
268
+ };
269
+
270
+ this.releaseMethods.pushObject(release);
271
+ return release;
272
+ }
273
+
274
+ _nameToClass(type) {
275
+ if (typeof type === 'string') {
276
+ let owner = getOwner(this);
277
+ let Factory = owner.factoryFor(`model:${type}`);
278
+ type = Factory && Factory.class;
279
+ }
280
+
281
+ return type;
282
+ }
283
+ /**
284
+ Fetch the records of a given type and observe them for changes.
285
+ @public
286
+ @method watchRecords
287
+ @param {String} modelName The model name.
288
+ @param {Function} recordsAdded Callback to call to add records.
289
+ Takes an array of objects containing wrapped records.
290
+ The object should have the following properties:
291
+ columnValues: {Object} The key and value of a table cell.
292
+ object: {Object} The actual record object.
293
+ @param {Function} recordsUpdated Callback to call when a record has changed.
294
+ Takes an array of objects containing wrapped records.
295
+ @param {Function} recordsRemoved Callback to call when a record has removed.
296
+ Takes an array of objects containing wrapped records.
297
+ @return {Function} Method to call to remove all observers.
298
+ */
299
+
300
+
301
+ watchRecords(modelName, recordsAdded, recordsUpdated, recordsRemoved) {
302
+ let klass = this._nameToClass(modelName);
303
+
304
+ let records = this.getRecords(klass, modelName);
305
+ let {
306
+ recordsWatchers
307
+ } = this;
308
+ let recordsWatcher = recordsWatchers.get(records);
309
+
310
+ if (!recordsWatcher) {
311
+ recordsWatcher = new RecordsWatcher(records, recordsAdded, recordsUpdated, recordsRemoved, record => this.wrapRecord(record), () => {
312
+ recordsWatchers.delete(records);
313
+ this.updateFlushWatchers();
314
+ });
315
+ recordsWatchers.set(records, recordsWatcher);
316
+ this.updateFlushWatchers();
317
+ recordsWatcher.revalidate();
318
+ }
319
+
320
+ return recordsWatcher.release;
321
+ }
322
+
323
+ updateFlushWatchers() {
324
+ if (this.flushWatchers === null) {
325
+ if (this.typeWatchers.size > 0 || this.recordsWatchers.size > 0) {
326
+ this.flushWatchers = () => {
327
+ this.typeWatchers.forEach(watcher => watcher.revalidate());
328
+ this.recordsWatchers.forEach(watcher => watcher.revalidate());
329
+ };
330
+
331
+ _backburner.on('end', this.flushWatchers);
332
+ }
333
+ } else if (this.typeWatchers.size === 0 && this.recordsWatchers.size === 0) {
334
+ _backburner.off('end', this.flushWatchers);
335
+
336
+ this.flushWatchers = null;
337
+ }
338
+ }
339
+ /**
340
+ Clear all observers before destruction
341
+ @private
342
+ @method willDestroy
343
+ */
344
+
345
+
346
+ willDestroy() {
347
+ this._super(...arguments);
348
+
349
+ this.typeWatchers.forEach(watcher => watcher.release());
350
+ this.recordsWatchers.forEach(watcher => watcher.release());
351
+ this.releaseMethods.forEach(fn => fn());
352
+
353
+ if (this.flushWatchers) {
354
+ _backburner.off('end', this.flushWatchers);
355
+ }
356
+ }
357
+ /**
358
+ Detect whether a class is a model.
359
+ Test that against the model class
360
+ of your persistence library.
361
+ @public
362
+ @method detect
363
+ @return boolean Whether the class is a model class or not.
364
+ */
365
+
366
+
367
+ detect(_klass) {
368
+ return false;
369
+ }
370
+ /**
371
+ Get the columns for a given model type.
372
+ @public
373
+ @method columnsForType
374
+ @return {Array} An array of columns of the following format:
375
+ name: {String} The name of the column.
376
+ desc: {String} Humanized description (what would show in a table column name).
377
+ */
378
+
379
+
380
+ columnsForType(_klass) {
381
+ return emberA();
382
+ }
383
+ /**
384
+ Adds observers to a model type class.
385
+ @private
386
+ @method observeModelType
387
+ @param {String} modelName The model type name.
388
+ @param {Function} typesUpdated Called when a type is modified.
389
+ @return {Function} The function to call to remove observers.
390
+ */
391
+
392
+
393
+ observeModelType(modelName, typesUpdated) {
394
+ let klass = this._nameToClass(modelName);
395
+
396
+ let records = this.getRecords(klass, modelName);
397
+
398
+ let onChange = () => {
399
+ typesUpdated([this.wrapModelType(klass, modelName)]);
400
+ };
401
+
402
+ let {
403
+ typeWatchers
404
+ } = this;
405
+ let typeWatcher = typeWatchers.get(records);
406
+
407
+ if (!typeWatcher) {
408
+ typeWatcher = new TypeWatcher(records, onChange, () => {
409
+ typeWatchers.delete(records);
410
+ this.updateFlushWatchers();
411
+ });
412
+ typeWatchers.set(records, typeWatcher);
413
+ this.updateFlushWatchers();
414
+ typeWatcher.revalidate();
415
+ }
416
+
417
+ return typeWatcher.release;
418
+ }
419
+ /**
420
+ Wraps a given model type and observes changes to it.
421
+ @private
422
+ @method wrapModelType
423
+ @param {Class} klass A model class.
424
+ @param {String} modelName Name of the class.
425
+ @return {Object} The wrapped type has the following format:
426
+ name: {String} The name of the type.
427
+ count: {Integer} The number of records available.
428
+ columns: {Columns} An array of columns to describe the record.
429
+ object: {Class} The actual Model type class.
430
+ */
431
+
432
+
433
+ wrapModelType(klass, name) {
434
+ let records = this.getRecords(klass, name);
435
+ return {
436
+ name,
437
+ count: get(records, 'length'),
438
+ columns: this.columnsForType(klass),
439
+ object: klass
440
+ };
441
+ }
442
+ /**
443
+ Fetches all models defined in the application.
444
+ @private
445
+ @method getModelTypes
446
+ @return {Array} Array of model types.
447
+ */
448
+
449
+
450
+ getModelTypes() {
451
+ let containerDebugAdapter = this.containerDebugAdapter;
452
+ let stringTypes = containerDebugAdapter.canCatalogEntriesByType('model') ? containerDebugAdapter.catalogEntriesByType('model') : this._getObjectsOnNamespaces(); // New adapters return strings instead of classes.
453
+
454
+ let klassTypes = emberA(stringTypes).map(name => {
455
+ return {
456
+ klass: this._nameToClass(name),
457
+ name
458
+ };
459
+ });
460
+ return emberA(klassTypes).filter(type => this.detect(type.klass));
461
+ }
462
+ /**
463
+ Loops over all namespaces and all objects
464
+ attached to them.
465
+ @private
466
+ @method _getObjectsOnNamespaces
467
+ @return {Array} Array of model type strings.
468
+ */
469
+
470
+
471
+ _getObjectsOnNamespaces() {
472
+ let namespaces = emberA(Namespace.NAMESPACES);
473
+ let types = emberA();
474
+ namespaces.forEach(namespace => {
475
+ for (let key in namespace) {
476
+ if (!Object.prototype.hasOwnProperty.call(namespace, key)) {
477
+ continue;
478
+ } // Even though we will filter again in `getModelTypes`,
479
+ // we should not call `lookupFactory` on non-models
480
+
481
+
482
+ if (!this.detect(namespace[key])) {
483
+ continue;
484
+ }
485
+
486
+ let name = dasherize(key);
487
+ types.push(name);
488
+ }
489
+ });
490
+ return types;
491
+ }
492
+ /**
493
+ Fetches all loaded records for a given type.
494
+ @public
495
+ @method getRecords
496
+ @return {Array} An array of records.
497
+ This array will be observed for changes,
498
+ so it should update when new records are added/removed.
499
+ */
500
+
501
+
502
+ getRecords(_klass, _name) {
503
+ return emberA();
504
+ }
505
+ /**
506
+ Wraps a record and observers changes to it.
507
+ @private
508
+ @method wrapRecord
509
+ @param {Object} record The record instance.
510
+ @return {Object} The wrapped record. Format:
511
+ columnValues: {Array}
512
+ searchKeywords: {Array}
513
+ */
514
+
515
+
516
+ wrapRecord(record) {
517
+ return {
518
+ object: record,
519
+ columnValues: this.getRecordColumnValues(record),
520
+ searchKeywords: this.getRecordKeywords(record),
521
+ filterValues: this.getRecordFilterValues(record),
522
+ color: this.getRecordColor(record)
523
+ };
524
+ }
525
+ /**
526
+ Gets the values for each column.
527
+ @public
528
+ @method getRecordColumnValues
529
+ @return {Object} Keys should match column names defined
530
+ by the model type.
531
+ */
532
+
533
+
534
+ getRecordColumnValues(_record) {
535
+ return {};
536
+ }
537
+ /**
538
+ Returns keywords to match when searching records.
539
+ @public
540
+ @method getRecordKeywords
541
+ @return {Array} Relevant keywords for search.
542
+ */
543
+
544
+
545
+ getRecordKeywords(_record) {
546
+ return emberA();
547
+ }
548
+ /**
549
+ Returns the values of filters defined by `getFilters`.
550
+ @public
551
+ @method getRecordFilterValues
552
+ @param {Object} record The record instance.
553
+ @return {Object} The filter values.
554
+ */
555
+
556
+
557
+ getRecordFilterValues(_record) {
558
+ return {};
559
+ }
560
+ /**
561
+ Each record can have a color that represents its state.
562
+ @public
563
+ @method getRecordColor
564
+ @param {Object} record The record instance
565
+ @return {String} The records color.
566
+ Possible options: black, red, blue, green.
567
+ */
568
+
569
+
570
+ getRecordColor(_record) {
571
+ return null;
572
+ }
573
+
574
+ }
@@ -1,17 +1,17 @@
1
1
  export { getEngineParent, setEngineParent } from './lib/engine-parent';
2
2
  import { canInvoke } from '@ember/-internals/utils';
3
3
  import Controller from '@ember/controller';
4
- import { Namespace } from '@ember/-internals/runtime';
4
+ import Namespace from '@ember/application/namespace';
5
5
  import { Registry } from '@ember/-internals/container';
6
6
  import DAG from 'dag-map';
7
7
  import { assert } from '@ember/debug';
8
- import { get, set } from '@ember/-internals/metal';
8
+ import ContainerDebugAdapter from '@ember/debug/container-debug-adapter';
9
+ import { get, set } from '@ember/object';
9
10
  import EngineInstance from '@ember/engine/instance';
10
- import { RoutingService } from '@ember/-internals/routing';
11
- import { ContainerDebugAdapter } from '@ember/-internals/extension-support';
11
+ import { RoutingService } from '@ember/routing/-internals';
12
12
  import { ComponentLookup } from '@ember/-internals/views';
13
13
  import { setupEngineRegistry } from '@ember/-internals/glimmer';
14
- import RegistryProxyMixin from '@ember/-internals/runtime/lib/mixins/registry_proxy';
14
+ import { RegistryProxyMixin } from '@ember/-internals/runtime';
15
15
 
16
16
  function props(obj) {
17
17
  let properties = [];
@@ -1,16 +1,16 @@
1
1
  /**
2
2
  @module @ember/engine
3
3
  */
4
- import { Object as EmberObject, RSVP } from '@ember/-internals/runtime';
4
+ import EmberObject from '@ember/object';
5
+ import { RSVP } from '@ember/-internals/runtime';
5
6
  import { assert } from '@ember/debug';
6
7
  import EmberError from '@ember/error';
7
8
  import { Registry, privatize as P } from '@ember/-internals/container';
8
9
  import { guidFor } from '@ember/-internals/utils';
9
10
  import { ENGINE_PARENT, getEngineParent, setEngineParent } from './lib/engine-parent';
10
- import RegistryProxyMixin from '@ember/-internals/runtime/lib/mixins/registry_proxy';
11
- import ContainerProxyMixin from '@ember/-internals/runtime/lib/mixins/container_proxy';
11
+ import { ContainerProxyMixin, RegistryProxyMixin } from '@ember/-internals/runtime';
12
12
  import { isFactory } from '@ember/-internals/owner';
13
- import Engine from '.';
13
+ import Engine from '@ember/engine';
14
14
  const CEngine = Engine;
15
15
 
16
16
  class EngineInstance extends EmberObject.extend(RegistryProxyMixin, ContainerProxyMixin) {
@@ -1 +1,3 @@
1
- export { Enumerable as default } from '@ember/-internals/runtime';
1
+ import Mixin from '@ember/object/mixin';
2
+ const Enumerable = Mixin.create();
3
+ export default Enumerable;
@@ -0,0 +1,4 @@
1
+ import Enumerable from '@ember/enumerable';
2
+ import Mixin from '@ember/object/mixin';
3
+ const MutableEnumerable = Mixin.create(Enumerable);
4
+ export default MutableEnumerable;
@@ -1,25 +1,12 @@
1
- /**
2
- @module @ember/object
3
- */
4
1
  var _a;
5
2
 
6
- import { getFactoryFor } from '@ember/-internals/container';
7
- import { symbol } from '@ember/-internals/utils';
3
+ export { getCachedValueFor as cacheFor } from '@ember/-internals/metal';
4
+ export { guidFor } from '@ember/-internals/utils';
8
5
  import { addListener } from '@ember/-internals/metal';
9
- import CoreObject from './core_object';
10
- import Observable from '../mixins/observable';
11
6
  import { assert } from '@ember/debug';
7
+ import { symbol } from '@ember/-internals/utils';
12
8
  import { DEBUG } from '@glimmer/env';
13
-
14
- class EmberObject extends CoreObject.extend(Observable) {
15
- get _debugContainerKey() {
16
- let factory = getFactoryFor(this);
17
- return factory !== undefined && factory.fullName;
18
- }
19
-
20
- }
21
-
22
- export default EmberObject;
9
+ import EmberObject from '.';
23
10
  let FrameworkObject = class FrameworkObject extends EmberObject {};
24
11
 
25
12
  if (DEBUG) {