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