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,3 +0,0 @@
1
- import { Mixin } from '@ember/-internals/metal';
2
- const Enumerable = Mixin.create();
3
- export default Enumerable;
@@ -1,91 +0,0 @@
1
- import { Mixin, addListener, removeListener, hasListeners, sendEvent } from '@ember/-internals/metal';
2
- const Evented = Mixin.create({
3
- /**
4
- Subscribes to a named event with given function.
5
- ```javascript
6
- person.on('didLoad', function() {
7
- // fired once the person has loaded
8
- });
9
- ```
10
- An optional target can be passed in as the 2nd argument that will
11
- be set as the "this" for the callback. This is a good way to give your
12
- function access to the object triggering the event. When the target
13
- parameter is used the callback method becomes the third argument.
14
- @method on
15
- @param {String} name The name of the event
16
- @param {Object} [target] The "this" binding for the callback
17
- @param {Function|String} method A function or the name of a function to be called on `target`
18
- @return this
19
- @public
20
- */
21
- on(name, target, method) {
22
- addListener(this, name, target, method);
23
- return this;
24
- },
25
-
26
- /**
27
- Subscribes a function to a named event and then cancels the subscription
28
- after the first time the event is triggered. It is good to use ``one`` when
29
- you only care about the first time an event has taken place.
30
- This function takes an optional 2nd argument that will become the "this"
31
- value for the callback. When the target parameter is used the callback method
32
- becomes the third argument.
33
- @method one
34
- @param {String} name The name of the event
35
- @param {Object} [target] The "this" binding for the callback
36
- @param {Function|String} method A function or the name of a function to be called on `target`
37
- @return this
38
- @public
39
- */
40
- one(name, target, method) {
41
- addListener(this, name, target, method, true);
42
- return this;
43
- },
44
-
45
- /**
46
- Triggers a named event for the object. Any additional arguments
47
- will be passed as parameters to the functions that are subscribed to the
48
- event.
49
- ```javascript
50
- person.on('didEat', function(food) {
51
- console.log('person ate some ' + food);
52
- });
53
- person.trigger('didEat', 'broccoli');
54
- // outputs: person ate some broccoli
55
- ```
56
- @method trigger
57
- @param {String} name The name of the event
58
- @param {Object...} args Optional arguments to pass on
59
- @public
60
- */
61
- trigger(name, ...args) {
62
- sendEvent(this, name, args);
63
- },
64
-
65
- /**
66
- Cancels subscription for given name, target, and method.
67
- @method off
68
- @param {String} name The name of the event
69
- @param {Object} target The target of the subscription
70
- @param {Function|String} method The function or the name of a function of the subscription
71
- @return this
72
- @public
73
- */
74
- off(name, target, method) {
75
- removeListener(this, name, target, method);
76
- return this;
77
- },
78
-
79
- /**
80
- Checks to see if object has any subscriptions for named event.
81
- @method has
82
- @param {String} name The name of the event
83
- @return {Boolean} does the object have a subscription for event
84
- @public
85
- */
86
- has(name) {
87
- return hasListeners(this, name);
88
- }
89
-
90
- });
91
- export default Evented;
@@ -1,4 +0,0 @@
1
- import Enumerable from './enumerable';
2
- import { Mixin } from '@ember/-internals/metal';
3
- const MutableEnumerable = Mixin.create(Enumerable);
4
- export default MutableEnumerable;
@@ -1,339 +0,0 @@
1
- /**
2
- @module @ember/object
3
- */
4
- import { peekMeta } from '@ember/-internals/meta';
5
- import { get, set, getProperties, setProperties, Mixin, hasListeners, beginPropertyChanges, notifyPropertyChange, endPropertyChanges, addObserver, removeObserver } from '@ember/-internals/metal';
6
- import { assert } from '@ember/debug';
7
- const Observable = Mixin.create({
8
- /**
9
- Retrieves the value of a property from the object.
10
- This method is usually similar to using `object[keyName]` or `object.keyName`,
11
- however it supports both computed properties and the unknownProperty
12
- handler.
13
- Because `get` unifies the syntax for accessing all these kinds
14
- of properties, it can make many refactorings easier, such as replacing a
15
- simple property with a computed property, or vice versa.
16
- ### Computed Properties
17
- Computed properties are methods defined with the `property` modifier
18
- declared at the end, such as:
19
- ```javascript
20
- import { computed } from '@ember/object';
21
- fullName: computed('firstName', 'lastName', function() {
22
- return this.get('firstName') + ' ' + this.get('lastName');
23
- })
24
- ```
25
- When you call `get` on a computed property, the function will be
26
- called and the return value will be returned instead of the function
27
- itself.
28
- ### Unknown Properties
29
- Likewise, if you try to call `get` on a property whose value is
30
- `undefined`, the `unknownProperty()` method will be called on the object.
31
- If this method returns any value other than `undefined`, it will be returned
32
- instead. This allows you to implement "virtual" properties that are
33
- not defined upfront.
34
- @method get
35
- @param {String} keyName The property to retrieve
36
- @return {Object} The property value or undefined.
37
- @public
38
- */
39
- get(keyName) {
40
- return get(this, keyName);
41
- },
42
-
43
- /**
44
- To get the values of multiple properties at once, call `getProperties`
45
- with a list of strings or an array:
46
- ```javascript
47
- record.getProperties('firstName', 'lastName', 'zipCode');
48
- // { firstName: 'John', lastName: 'Doe', zipCode: '10011' }
49
- ```
50
- is equivalent to:
51
- ```javascript
52
- record.getProperties(['firstName', 'lastName', 'zipCode']);
53
- // { firstName: 'John', lastName: 'Doe', zipCode: '10011' }
54
- ```
55
- @method getProperties
56
- @param {String...|Array} list of keys to get
57
- @return {Object}
58
- @public
59
- */
60
- getProperties(...args) {
61
- return getProperties(this, ...args);
62
- },
63
-
64
- /**
65
- Sets the provided key or path to the value.
66
- ```javascript
67
- record.set("key", value);
68
- ```
69
- This method is generally very similar to calling `object["key"] = value` or
70
- `object.key = value`, except that it provides support for computed
71
- properties, the `setUnknownProperty()` method and property observers.
72
- ### Computed Properties
73
- If you try to set a value on a key that has a computed property handler
74
- defined (see the `get()` method for an example), then `set()` will call
75
- that method, passing both the value and key instead of simply changing
76
- the value itself. This is useful for those times when you need to
77
- implement a property that is composed of one or more member
78
- properties.
79
- ### Unknown Properties
80
- If you try to set a value on a key that is undefined in the target
81
- object, then the `setUnknownProperty()` handler will be called instead. This
82
- gives you an opportunity to implement complex "virtual" properties that
83
- are not predefined on the object. If `setUnknownProperty()` returns
84
- undefined, then `set()` will simply set the value on the object.
85
- ### Property Observers
86
- In addition to changing the property, `set()` will also register a property
87
- change with the object. Unless you have placed this call inside of a
88
- `beginPropertyChanges()` and `endPropertyChanges(),` any "local" observers
89
- (i.e. observer methods declared on the same object), will be called
90
- immediately. Any "remote" observers (i.e. observer methods declared on
91
- another object) will be placed in a queue and called at a later time in a
92
- coalesced manner.
93
- @method set
94
- @param {String} keyName The property to set
95
- @param {Object} value The value to set or `null`.
96
- @return {Object} The passed value
97
- @public
98
- */
99
- set(keyName, value) {
100
- return set(this, keyName, value);
101
- },
102
-
103
- /**
104
- Sets a list of properties at once. These properties are set inside
105
- a single `beginPropertyChanges` and `endPropertyChanges` batch, so
106
- observers will be buffered.
107
- ```javascript
108
- record.setProperties({ firstName: 'Charles', lastName: 'Jolley' });
109
- ```
110
- @method setProperties
111
- @param {Object} hash the hash of keys and values to set
112
- @return {Object} The passed in hash
113
- @public
114
- */
115
- setProperties(hash) {
116
- return setProperties(this, hash);
117
- },
118
-
119
- /**
120
- Begins a grouping of property changes.
121
- You can use this method to group property changes so that notifications
122
- will not be sent until the changes are finished. If you plan to make a
123
- large number of changes to an object at one time, you should call this
124
- method at the beginning of the changes to begin deferring change
125
- notifications. When you are done making changes, call
126
- `endPropertyChanges()` to deliver the deferred change notifications and end
127
- deferring.
128
- @method beginPropertyChanges
129
- @return {Observable}
130
- @private
131
- */
132
- beginPropertyChanges() {
133
- beginPropertyChanges();
134
- return this;
135
- },
136
-
137
- /**
138
- Ends a grouping of property changes.
139
- You can use this method to group property changes so that notifications
140
- will not be sent until the changes are finished. If you plan to make a
141
- large number of changes to an object at one time, you should call
142
- `beginPropertyChanges()` at the beginning of the changes to defer change
143
- notifications. When you are done making changes, call this method to
144
- deliver the deferred change notifications and end deferring.
145
- @method endPropertyChanges
146
- @return {Observable}
147
- @private
148
- */
149
- endPropertyChanges() {
150
- endPropertyChanges();
151
- return this;
152
- },
153
-
154
- /**
155
- Notify the observer system that a property has just changed.
156
- Sometimes you need to change a value directly or indirectly without
157
- actually calling `get()` or `set()` on it. In this case, you can use this
158
- method instead. Calling this method will notify all observers that the
159
- property has potentially changed value.
160
- @method notifyPropertyChange
161
- @param {String} keyName The property key to be notified about.
162
- @return {Observable}
163
- @public
164
- */
165
- notifyPropertyChange(keyName) {
166
- notifyPropertyChange(this, keyName);
167
- return this;
168
- },
169
-
170
- /**
171
- Adds an observer on a property.
172
- This is the core method used to register an observer for a property.
173
- Once you call this method, any time the key's value is set, your observer
174
- will be notified. Note that the observers are triggered any time the
175
- value is set, regardless of whether it has actually changed. Your
176
- observer should be prepared to handle that.
177
- There are two common invocation patterns for `.addObserver()`:
178
- - Passing two arguments:
179
- - the name of the property to observe (as a string)
180
- - the function to invoke (an actual function)
181
- - Passing three arguments:
182
- - the name of the property to observe (as a string)
183
- - the target object (will be used to look up and invoke a
184
- function on)
185
- - the name of the function to invoke on the target object
186
- (as a string).
187
- ```app/components/my-component.js
188
- import Component from '@ember/component';
189
- export default Component.extend({
190
- init() {
191
- this._super(...arguments);
192
- // the following are equivalent:
193
- // using three arguments
194
- this.addObserver('foo', this, 'fooDidChange');
195
- // using two arguments
196
- this.addObserver('foo', (...args) => {
197
- this.fooDidChange(...args);
198
- });
199
- },
200
- fooDidChange() {
201
- // your custom logic code
202
- }
203
- });
204
- ```
205
- ### Observer Methods
206
- Observer methods have the following signature:
207
- ```app/components/my-component.js
208
- import Component from '@ember/component';
209
- export default Component.extend({
210
- init() {
211
- this._super(...arguments);
212
- this.addObserver('foo', this, 'fooDidChange');
213
- },
214
- fooDidChange(sender, key, value, rev) {
215
- // your code
216
- }
217
- });
218
- ```
219
- The `sender` is the object that changed. The `key` is the property that
220
- changes. The `value` property is currently reserved and unused. The `rev`
221
- is the last property revision of the object when it changed, which you can
222
- use to detect if the key value has really changed or not.
223
- Usually you will not need the value or revision parameters at
224
- the end. In this case, it is common to write observer methods that take
225
- only a sender and key value as parameters or, if you aren't interested in
226
- any of these values, to write an observer that has no parameters at all.
227
- @method addObserver
228
- @param {String} key The key to observe
229
- @param {Object} target The target object to invoke
230
- @param {String|Function} method The method to invoke
231
- @param {Boolean} sync Whether the observer is sync or not
232
- @return {Observable}
233
- @public
234
- */
235
- addObserver(key, target, method, sync) {
236
- addObserver(this, key, target, method, sync);
237
- return this;
238
- },
239
-
240
- /**
241
- Remove an observer you have previously registered on this object. Pass
242
- the same key, target, and method you passed to `addObserver()` and your
243
- target will no longer receive notifications.
244
- @method removeObserver
245
- @param {String} key The key to observe
246
- @param {Object} target The target object to invoke
247
- @param {String|Function} method The method to invoke
248
- @param {Boolean} sync Whether the observer is async or not
249
- @return {Observable}
250
- @public
251
- */
252
- removeObserver(key, target, method, sync) {
253
- removeObserver(this, key, target, method, sync);
254
- return this;
255
- },
256
-
257
- /**
258
- Returns `true` if the object currently has observers registered for a
259
- particular key. You can use this method to potentially defer performing
260
- an expensive action until someone begins observing a particular property
261
- on the object.
262
- @method hasObserverFor
263
- @param {String} key Key to check
264
- @return {Boolean}
265
- @private
266
- */
267
- hasObserverFor(key) {
268
- return hasListeners(this, `${key}:change`);
269
- },
270
-
271
- /**
272
- Set the value of a property to the current value plus some amount.
273
- ```javascript
274
- person.incrementProperty('age');
275
- team.incrementProperty('score', 2);
276
- ```
277
- @method incrementProperty
278
- @param {String} keyName The name of the property to increment
279
- @param {Number} increment The amount to increment by. Defaults to 1
280
- @return {Number} The new property value
281
- @public
282
- */
283
- incrementProperty(keyName, increment = 1) {
284
- assert('Must pass a numeric value to incrementProperty', !isNaN(parseFloat(String(increment))) && isFinite(increment));
285
- return set(this, keyName, (parseFloat(get(this, keyName)) || 0) + increment);
286
- },
287
-
288
- /**
289
- Set the value of a property to the current value minus some amount.
290
- ```javascript
291
- player.decrementProperty('lives');
292
- orc.decrementProperty('health', 5);
293
- ```
294
- @method decrementProperty
295
- @param {String} keyName The name of the property to decrement
296
- @param {Number} decrement The amount to decrement by. Defaults to 1
297
- @return {Number} The new property value
298
- @public
299
- */
300
- decrementProperty(keyName, decrement = 1) {
301
- assert('Must pass a numeric value to decrementProperty', (typeof decrement === 'number' || !isNaN(parseFloat(decrement))) && isFinite(decrement));
302
- return set(this, keyName, (get(this, keyName) || 0) - decrement);
303
- },
304
-
305
- /**
306
- Set the value of a boolean property to the opposite of its
307
- current value.
308
- ```javascript
309
- starship.toggleProperty('warpDriveEngaged');
310
- ```
311
- @method toggleProperty
312
- @param {String} keyName The name of the property to toggle
313
- @return {Boolean} The new property value
314
- @public
315
- */
316
- toggleProperty(keyName) {
317
- return set(this, keyName, !get(this, keyName));
318
- },
319
-
320
- /**
321
- Returns the cached value of a computed property, if it exists.
322
- This allows you to inspect the value of a computed property
323
- without accidentally invoking it if it is intended to be
324
- generated lazily.
325
- @method cacheFor
326
- @param {String} keyName
327
- @return {Object} The cached value of the computed property, if any
328
- @public
329
- */
330
- cacheFor(keyName) {
331
- let meta = peekMeta(this);
332
-
333
- if (meta !== null) {
334
- return meta.valueFor(keyName);
335
- }
336
- }
337
-
338
- });
339
- export default Observable;
@@ -1,149 +0,0 @@
1
- import { get, setProperties, computed, Mixin } from '@ember/-internals/metal';
2
- import EmberError from '@ember/error';
3
- /**
4
- @module @ember/object
5
- */
6
-
7
- function tap(proxy, promise) {
8
- setProperties(proxy, {
9
- isFulfilled: false,
10
- isRejected: false
11
- });
12
- return promise.then(value => {
13
- if (!proxy.isDestroyed && !proxy.isDestroying) {
14
- setProperties(proxy, {
15
- content: value,
16
- isFulfilled: true
17
- });
18
- }
19
-
20
- return value;
21
- }, reason => {
22
- if (!proxy.isDestroyed && !proxy.isDestroying) {
23
- setProperties(proxy, {
24
- reason,
25
- isRejected: true
26
- });
27
- }
28
-
29
- throw reason;
30
- }, 'Ember: PromiseProxy');
31
- }
32
-
33
- const PromiseProxyMixin = Mixin.create({
34
- /**
35
- If the proxied promise is rejected this will contain the reason
36
- provided.
37
- @property reason
38
- @default null
39
- @public
40
- */
41
- reason: null,
42
-
43
- /**
44
- Once the proxied promise has settled this will become `false`.
45
- @property isPending
46
- @default true
47
- @public
48
- */
49
- isPending: computed('isSettled', function () {
50
- return !get(this, 'isSettled');
51
- }).readOnly(),
52
-
53
- /**
54
- Once the proxied promise has settled this will become `true`.
55
- @property isSettled
56
- @default false
57
- @public
58
- */
59
- isSettled: computed('isRejected', 'isFulfilled', function () {
60
- return get(this, 'isRejected') || get(this, 'isFulfilled');
61
- }).readOnly(),
62
-
63
- /**
64
- Will become `true` if the proxied promise is rejected.
65
- @property isRejected
66
- @default false
67
- @public
68
- */
69
- isRejected: false,
70
-
71
- /**
72
- Will become `true` if the proxied promise is fulfilled.
73
- @property isFulfilled
74
- @default false
75
- @public
76
- */
77
- isFulfilled: false,
78
-
79
- /**
80
- The promise whose fulfillment value is being proxied by this object.
81
- This property must be specified upon creation, and should not be
82
- changed once created.
83
- Example:
84
- ```javascript
85
- import ObjectProxy from '@ember/object/proxy';
86
- import PromiseProxyMixin from '@ember/object/promise-proxy-mixin';
87
- ObjectProxy.extend(PromiseProxyMixin).create({
88
- promise: <thenable>
89
- });
90
- ```
91
- @property promise
92
- @public
93
- */
94
- promise: computed({
95
- get() {
96
- throw new EmberError("PromiseProxy's promise must be set");
97
- },
98
-
99
- set(_key, promise) {
100
- return tap(this, promise);
101
- }
102
-
103
- }),
104
-
105
- /**
106
- An alias to the proxied promise's `then`.
107
- See RSVP.Promise.then.
108
- @method then
109
- @param {Function} callback
110
- @return {RSVP.Promise}
111
- @public
112
- */
113
- then: promiseAlias('then'),
114
-
115
- /**
116
- An alias to the proxied promise's `catch`.
117
- See RSVP.Promise.catch.
118
- @method catch
119
- @param {Function} callback
120
- @return {RSVP.Promise}
121
- @since 1.3.0
122
- @public
123
- */
124
- catch: promiseAlias('catch'),
125
-
126
- /**
127
- An alias to the proxied promise's `finally`.
128
- See RSVP.Promise.finally.
129
- @method finally
130
- @param {Function} callback
131
- @return {RSVP.Promise}
132
- @since 1.3.0
133
- @public
134
- */
135
- finally: promiseAlias('finally')
136
- });
137
-
138
- function promiseAlias(name) {
139
- return function (...args) {
140
- let promise = get(this, 'promise'); // We need this cast because `Parameters` is deferred so that it is not
141
- // possible for TS to see it will always produce the right type. However,
142
- // since `AnyFn` has a rest type, it is allowed. See discussion on [this
143
- // issue](https://github.com/microsoft/TypeScript/issues/47615).
144
-
145
- return promise[name](...args);
146
- };
147
- }
148
-
149
- export default PromiseProxyMixin;