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,5 +1,5 @@
1
1
  import { meta, peekMeta } from '@ember/-internals/meta';
2
- import { setListeners, isObject, setupMandatorySetter, symbol, toString, inspect, setWithMandatorySetter, Cache, isEmberArray, setProxy, lookupDescriptor, getName, setName, guidFor, makeArray, observerListenerMetaFor, ROOT, setObservers, wrap } from '@ember/-internals/utils';
2
+ import { setListeners, isObject, setupMandatorySetter, symbol, toString, inspect, setWithMandatorySetter, Cache, isEmberArray, setProxy, lookupDescriptor, getName, setName } from '@ember/-internals/utils';
3
3
  import { assert, deprecate, debug, warn } from '@ember/debug';
4
4
  import { ENV, context } from '@ember/-internals/environment';
5
5
  import { schedule } from '@ember/runloop';
@@ -11,7 +11,6 @@ import { getCustomTagFor } from '@glimmer/manager';
11
11
  import { _WeakSet } from '@glimmer/util';
12
12
  import EmberError from '@ember/error';
13
13
  import VERSION from 'ember/version';
14
- import { INIT_FACTORY } from '@ember/-internals/container';
15
14
  import { getOwner } from '@ember/-internals/owner';
16
15
 
17
16
  /*
@@ -2125,174 +2124,6 @@ function eachProxyArrayDidChange(array, idx, removedCnt, addedCnt) {
2125
2124
  }
2126
2125
  }
2127
2126
 
2128
- /**
2129
- @module @ember/utils
2130
- */
2131
-
2132
- /**
2133
- Returns true if the passed value is null or undefined. This avoids errors
2134
- from JSLint complaining about use of ==, which can be technically
2135
- confusing.
2136
-
2137
- ```javascript
2138
- isNone(null); // true
2139
- isNone(undefined); // true
2140
- isNone(''); // false
2141
- isNone([]); // false
2142
- isNone(function() {}); // false
2143
- ```
2144
-
2145
- @method isNone
2146
- @static
2147
- @for @ember/utils
2148
- @param {Object} obj Value to test
2149
- @return {Boolean}
2150
- @public
2151
- */
2152
- function isNone(obj) {
2153
- return obj === null || obj === undefined;
2154
- }
2155
-
2156
- /**
2157
- @module @ember/utils
2158
- */
2159
-
2160
- /**
2161
- Verifies that a value is `null` or `undefined`, an empty string, or an empty
2162
- array.
2163
-
2164
- Constrains the rules on `isNone` by returning true for empty strings and
2165
- empty arrays.
2166
-
2167
- If the value is an object with a `size` property of type number, it is used
2168
- to check emptiness.
2169
-
2170
- ```javascript
2171
- isEmpty(null); // true
2172
- isEmpty(undefined); // true
2173
- isEmpty(''); // true
2174
- isEmpty([]); // true
2175
- isEmpty({ size: 0}); // true
2176
- isEmpty({}); // false
2177
- isEmpty('Adam Hawkins'); // false
2178
- isEmpty([0,1,2]); // false
2179
- isEmpty('\n\t'); // false
2180
- isEmpty(' '); // false
2181
- isEmpty({ size: 1 }) // false
2182
- isEmpty({ size: () => 0 }) // false
2183
- ```
2184
-
2185
- @method isEmpty
2186
- @static
2187
- @for @ember/utils
2188
- @param {Object} obj Value to test
2189
- @return {Boolean}
2190
- @public
2191
- */
2192
-
2193
- function isEmpty(obj) {
2194
- if (obj === null || obj === undefined) {
2195
- return true;
2196
- }
2197
-
2198
- if (!hasUnknownProperty(obj) && typeof obj.size === 'number') {
2199
- return !obj.size;
2200
- }
2201
-
2202
- if (typeof obj === 'object') {
2203
- let size = get(obj, 'size');
2204
-
2205
- if (typeof size === 'number') {
2206
- return !size;
2207
- }
2208
-
2209
- let length = get(obj, 'length');
2210
-
2211
- if (typeof length === 'number') {
2212
- return !length;
2213
- }
2214
- }
2215
-
2216
- if (typeof obj.length === 'number' && typeof obj !== 'function') {
2217
- return !obj.length;
2218
- }
2219
-
2220
- return false;
2221
- }
2222
-
2223
- /**
2224
- @module @ember/utils
2225
- */
2226
-
2227
- /**
2228
- A value is blank if it is empty or a whitespace string.
2229
-
2230
- ```javascript
2231
- import { isBlank } from '@ember/utils';
2232
-
2233
- isBlank(null); // true
2234
- isBlank(undefined); // true
2235
- isBlank(''); // true
2236
- isBlank([]); // true
2237
- isBlank('\n\t'); // true
2238
- isBlank(' '); // true
2239
- isBlank({}); // false
2240
- isBlank('\n\t Hello'); // false
2241
- isBlank('Hello world'); // false
2242
- isBlank([1,2,3]); // false
2243
- ```
2244
-
2245
- @method isBlank
2246
- @static
2247
- @for @ember/utils
2248
- @param {Object} obj Value to test
2249
- @return {Boolean}
2250
- @since 1.5.0
2251
- @public
2252
- */
2253
-
2254
- function isBlank(obj) {
2255
- return isEmpty(obj) || typeof obj === 'string' && /\S/.test(obj) === false;
2256
- }
2257
-
2258
- /**
2259
- @module @ember/utils
2260
- */
2261
-
2262
- /**
2263
- A value is present if it not `isBlank`.
2264
-
2265
- ```javascript
2266
- isPresent(null); // false
2267
- isPresent(undefined); // false
2268
- isPresent(''); // false
2269
- isPresent(' '); // false
2270
- isPresent('\n\t'); // false
2271
- isPresent([]); // false
2272
- isPresent({ length: 0 }); // false
2273
- isPresent(false); // true
2274
- isPresent(true); // true
2275
- isPresent('string'); // true
2276
- isPresent(0); // true
2277
- isPresent(function() {}); // true
2278
- isPresent({}); // true
2279
- isPresent('\n\t Hello'); // true
2280
- isPresent([1, 2, 3]); // true
2281
- ```
2282
-
2283
- @method isPresent
2284
- @static
2285
- @for @ember/utils
2286
- @param {Object} obj Value to test
2287
- @return {Boolean}
2288
- @since 1.8.0
2289
- @public
2290
- */
2291
-
2292
- function isPresent(obj) {
2293
- return !isBlank(obj);
2294
- }
2295
-
2296
2127
  /**
2297
2128
  @module ember
2298
2129
  */
@@ -2333,972 +2164,116 @@ class Libraries {
2333
2164
  index = this._coreLibIndex++;
2334
2165
  }
2335
2166
 
2336
- this._registry.splice(index, 0, {
2337
- name,
2338
- version
2339
- });
2340
- } else {
2341
- warn(`Library "${name}" is already registered with Ember.`, false, {
2342
- id: 'ember-metal.libraries-register'
2343
- });
2344
- }
2345
- }
2346
-
2347
- registerCoreLibrary(name, version) {
2348
- this.register(name, version, true);
2349
- }
2350
-
2351
- deRegister(name) {
2352
- let lib = this._getLibraryByName(name);
2353
-
2354
- let index;
2355
-
2356
- if (lib) {
2357
- index = this._registry.indexOf(lib);
2358
-
2359
- this._registry.splice(index, 1);
2360
- }
2361
- }
2362
-
2363
- }
2364
-
2365
- if (DEBUG) {
2366
- Libraries.prototype.logVersions = function () {
2367
- let libs = this._registry;
2368
- let nameLengths = libs.map(item => get(item, 'name.length'));
2369
- assert('nameLengths is number array', nameLengths instanceof Array && nameLengths.every(n => typeof n === 'number'));
2370
- let maxNameLength = Math.max.apply(null, nameLengths);
2371
- debug('-------------------------------');
2372
-
2373
- for (let lib of libs) {
2374
- let spaces = new Array(maxNameLength - lib.name.length + 1).join(' ');
2375
- debug([lib.name, spaces, ' : ', lib.version].join(''));
2376
- }
2377
-
2378
- debug('-------------------------------');
2379
- };
2380
- }
2381
-
2382
- const LIBRARIES = new Libraries();
2383
- LIBRARIES.registerCoreLibrary('Ember', VERSION);
2384
-
2385
- function getProperties(obj, keys) {
2386
- let ret = {};
2387
- let propertyNames;
2388
- let i = 1;
2389
-
2390
- if (arguments.length === 2 && Array.isArray(keys)) {
2391
- i = 0;
2392
- propertyNames = arguments[1];
2393
- } else {
2394
- propertyNames = Array.from(arguments);
2395
- }
2396
-
2397
- for (; i < propertyNames.length; i++) {
2398
- ret[propertyNames[i]] = get(obj, propertyNames[i]);
2399
- }
2400
-
2401
- return ret;
2402
- }
2403
-
2404
- /**
2405
- @module @ember/object
2406
- */
2407
-
2408
- /**
2409
- Set a list of properties on an object. These properties are set inside
2410
- a single `beginPropertyChanges` and `endPropertyChanges` batch, so
2411
- observers will be buffered.
2412
-
2413
- ```javascript
2414
- import EmberObject from '@ember/object';
2415
- let anObject = EmberObject.create();
2416
-
2417
- anObject.setProperties({
2418
- firstName: 'Stanley',
2419
- lastName: 'Stuart',
2420
- age: 21
2421
- });
2422
- ```
2423
-
2424
- @method setProperties
2425
- @static
2426
- @for @ember/object
2427
- @param obj
2428
- @param {Object} properties
2429
- @return properties
2430
- @public
2431
- */
2432
-
2433
- function setProperties(obj, properties) {
2434
- if (properties === null || typeof properties !== 'object') {
2435
- return properties;
2436
- }
2437
-
2438
- changeProperties(() => {
2439
- let props = Object.keys(properties);
2440
-
2441
- for (let propertyName of props) {
2442
- set(obj, propertyName, properties[propertyName]);
2443
- }
2444
- });
2445
- return properties;
2446
- }
2447
-
2448
- const hasOwnProperty = Object.prototype.hasOwnProperty;
2449
- let searchDisabled = false;
2450
- const flags = {
2451
- _set: 0,
2452
- _unprocessedNamespaces: false,
2453
-
2454
- get unprocessedNamespaces() {
2455
- return this._unprocessedNamespaces;
2456
- },
2457
-
2458
- set unprocessedNamespaces(v) {
2459
- this._set++;
2460
- this._unprocessedNamespaces = v;
2461
- }
2462
-
2463
- };
2464
- let unprocessedMixins = false;
2465
- const NAMESPACES = [];
2466
- const NAMESPACES_BY_ID = Object.create(null);
2467
- function addNamespace(namespace) {
2468
- flags.unprocessedNamespaces = true;
2469
- NAMESPACES.push(namespace);
2470
- }
2471
- function removeNamespace(namespace) {
2472
- let name = getName(namespace);
2473
- delete NAMESPACES_BY_ID[name];
2474
- NAMESPACES.splice(NAMESPACES.indexOf(namespace), 1);
2475
-
2476
- if (name in context.lookup && namespace === context.lookup[name]) {
2477
- context.lookup[name] = undefined;
2478
- }
2479
- }
2480
- function findNamespaces() {
2481
- if (!flags.unprocessedNamespaces) {
2482
- return;
2483
- }
2484
-
2485
- let lookup = context.lookup;
2486
- let keys = Object.keys(lookup);
2487
-
2488
- for (let key of keys) {
2489
- // Only process entities that start with uppercase A-Z
2490
- if (!isUppercase(key.charCodeAt(0))) {
2491
- continue;
2492
- }
2493
-
2494
- let obj = tryIsNamespace(lookup, key);
2495
-
2496
- if (obj) {
2497
- setName(obj, key);
2498
- }
2499
- }
2500
- }
2501
- function findNamespace(name) {
2502
- if (!searchDisabled) {
2503
- processAllNamespaces();
2504
- }
2505
-
2506
- return NAMESPACES_BY_ID[name];
2507
- }
2508
- function processNamespace(namespace) {
2509
- _processNamespace([namespace.toString()], namespace, new Set());
2510
- }
2511
- function processAllNamespaces() {
2512
- let unprocessedNamespaces = flags.unprocessedNamespaces;
2513
-
2514
- if (unprocessedNamespaces) {
2515
- findNamespaces();
2516
- flags.unprocessedNamespaces = false;
2517
- }
2518
-
2519
- if (unprocessedNamespaces || unprocessedMixins) {
2520
- let namespaces = NAMESPACES;
2521
-
2522
- for (let namespace of namespaces) {
2523
- processNamespace(namespace);
2524
- }
2525
-
2526
- unprocessedMixins = false;
2527
- }
2528
- }
2529
- function isSearchDisabled() {
2530
- return searchDisabled;
2531
- }
2532
- function setSearchDisabled(flag) {
2533
- searchDisabled = Boolean(flag);
2534
- }
2535
- function setUnprocessedMixins() {
2536
- unprocessedMixins = true;
2537
- }
2538
-
2539
- function _processNamespace(paths, root, seen) {
2540
- let idx = paths.length;
2541
- let id = paths.join('.');
2542
- NAMESPACES_BY_ID[id] = root;
2543
- setName(root, id); // Loop over all of the keys in the namespace, looking for classes
2544
-
2545
- for (let key in root) {
2546
- if (!hasOwnProperty.call(root, key)) {
2547
- continue;
2548
- }
2549
-
2550
- let obj = root[key]; // If we are processing the `Ember` namespace, for example, the
2551
- // `paths` will start with `["Ember"]`. Every iteration through
2552
- // the loop will update the **second** element of this list with
2553
- // the key, so processing `Ember.View` will make the Array
2554
- // `['Ember', 'View']`.
2555
-
2556
- paths[idx] = key; // If we have found an unprocessed class
2557
-
2558
- if (obj && getName(obj) === void 0) {
2559
- // Replace the class' `toString` with the dot-separated path
2560
- setName(obj, paths.join('.')); // Support nested namespaces
2561
- } else if (obj && isNamespace(obj)) {
2562
- // Skip aliased namespaces
2563
- if (seen.has(obj)) {
2564
- continue;
2565
- }
2566
-
2567
- seen.add(obj); // Process the child namespace
2568
-
2569
- _processNamespace(paths, obj, seen);
2570
- }
2571
- }
2572
-
2573
- paths.length = idx; // cut out last item
2574
- }
2575
-
2576
- function isNamespace(obj) {
2577
- return obj != null && typeof obj === 'object' && obj.isNamespace;
2578
- }
2579
-
2580
- function isUppercase(code) {
2581
- return code >= 65 && code <= 90 // A
2582
- ; // Z
2583
- }
2584
-
2585
- function tryIsNamespace(lookup, prop) {
2586
- try {
2587
- let obj = lookup[prop];
2588
- return (obj !== null && typeof obj === 'object' || typeof obj === 'function') && obj.isNamespace && obj;
2589
- } catch (e) {// continue
2590
- }
2591
- }
2592
-
2593
- /**
2594
- @module @ember/object
2595
- */
2596
- const a_concat = Array.prototype.concat;
2597
- const {
2598
- isArray
2599
- } = Array;
2600
-
2601
- function extractAccessors(properties) {
2602
- if (properties !== undefined) {
2603
- for (let key of Object.keys(properties)) {
2604
- let desc = Object.getOwnPropertyDescriptor(properties, key);
2605
-
2606
- if (desc.get !== undefined || desc.set !== undefined) {
2607
- Object.defineProperty(properties, key, {
2608
- value: nativeDescDecorator(desc)
2609
- });
2610
- }
2611
- }
2612
- }
2613
-
2614
- return properties;
2615
- }
2616
-
2617
- function concatenatedMixinProperties(concatProp, props, values, base) {
2618
- // reset before adding each new mixin to pickup concats from previous
2619
- let concats = values[concatProp] || base[concatProp];
2620
-
2621
- if (props[concatProp]) {
2622
- concats = concats ? a_concat.call(concats, props[concatProp]) : props[concatProp];
2623
- }
2624
-
2625
- return concats;
2626
- }
2627
-
2628
- function giveDecoratorSuper(key, decorator, property, descs) {
2629
- if (property === true) {
2630
- return decorator;
2631
- }
2632
-
2633
- let originalGetter = property._getter;
2634
-
2635
- if (originalGetter === undefined) {
2636
- return decorator;
2637
- }
2638
-
2639
- let superDesc = descs[key]; // Check to see if the super property is a decorator first, if so load its descriptor
2640
-
2641
- let superProperty = typeof superDesc === 'function' ? descriptorForDecorator(superDesc) : superDesc;
2642
-
2643
- if (superProperty === undefined || superProperty === true) {
2644
- return decorator;
2645
- }
2646
-
2647
- let superGetter = superProperty._getter;
2648
-
2649
- if (superGetter === undefined) {
2650
- return decorator;
2651
- }
2652
-
2653
- let get = wrap(originalGetter, superGetter);
2654
- let set;
2655
- let originalSetter = property._setter;
2656
- let superSetter = superProperty._setter;
2657
-
2658
- if (superSetter !== undefined) {
2659
- if (originalSetter !== undefined) {
2660
- set = wrap(originalSetter, superSetter);
2661
- } else {
2662
- // If the super property has a setter, we default to using it no matter what.
2663
- // This is clearly very broken and weird, but it's what was here so we have
2664
- // to keep it until the next major at least.
2665
- //
2666
- // TODO: Add a deprecation here.
2667
- set = superSetter;
2668
- }
2669
- } else {
2670
- set = originalSetter;
2671
- } // only create a new CP if we must
2672
-
2673
-
2674
- if (get !== originalGetter || set !== originalSetter) {
2675
- // Since multiple mixins may inherit from the same parent, we need
2676
- // to clone the computed property so that other mixins do not receive
2677
- // the wrapped version.
2678
- let dependentKeys = property._dependentKeys || [];
2679
- let newProperty = new ComputedProperty([...dependentKeys, {
2680
- get,
2681
- set
2682
- }]);
2683
- newProperty._readOnly = property._readOnly;
2684
- newProperty._meta = property._meta;
2685
- newProperty.enumerable = property.enumerable; // SAFETY: We passed in the impl for this class
2686
-
2687
- return makeComputedDecorator(newProperty, ComputedProperty);
2688
- }
2689
-
2690
- return decorator;
2691
- }
2692
-
2693
- function giveMethodSuper(key, method, values, descs) {
2694
- // Methods overwrite computed properties, and do not call super to them.
2695
- if (descs[key] !== undefined) {
2696
- return method;
2697
- } // Find the original method in a parent mixin
2698
-
2699
-
2700
- let superMethod = values[key]; // Only wrap the new method if the original method was a function
2701
-
2702
- if (typeof superMethod === 'function') {
2703
- return wrap(method, superMethod);
2704
- }
2705
-
2706
- return method;
2707
- }
2708
-
2709
- function applyConcatenatedProperties(key, value, values) {
2710
- let baseValue = values[key];
2711
- let ret = makeArray(baseValue).concat(makeArray(value));
2712
-
2713
- if (DEBUG) {
2714
- // it is possible to use concatenatedProperties with strings (which cannot be frozen)
2715
- // only freeze objects...
2716
- if (typeof ret === 'object' && ret !== null) {
2717
- // prevent mutating `concatenatedProperties` array after it is applied
2718
- Object.freeze(ret);
2719
- }
2720
- }
2721
-
2722
- return ret;
2723
- }
2724
-
2725
- function applyMergedProperties(key, value, values) {
2726
- let baseValue = values[key];
2727
- assert(`You passed in \`${JSON.stringify(value)}\` as the value for \`${key}\` but \`${key}\` cannot be an Array`, !isArray(value));
2728
-
2729
- if (!baseValue) {
2730
- return value;
2731
- }
2732
-
2733
- let newBase = Object.assign({}, baseValue);
2734
- let hasFunction = false;
2735
- let props = Object.keys(value);
2736
-
2737
- for (let prop of props) {
2738
- let propValue = value[prop];
2739
-
2740
- if (typeof propValue === 'function') {
2741
- hasFunction = true;
2742
- newBase[prop] = giveMethodSuper(prop, propValue, baseValue, {});
2743
- } else {
2744
- newBase[prop] = propValue;
2745
- }
2746
- }
2747
-
2748
- if (hasFunction) {
2749
- newBase._super = ROOT;
2750
- }
2751
-
2752
- return newBase;
2753
- }
2754
-
2755
- function mergeMixins(mixins, meta$$1, descs, values, base, keys, keysWithSuper) {
2756
- let currentMixin;
2757
-
2758
- for (let i = 0; i < mixins.length; i++) {
2759
- currentMixin = mixins[i];
2760
- assert(`Expected hash or Mixin instance, got ${Object.prototype.toString.call(currentMixin)}`, typeof currentMixin === 'object' && currentMixin !== null && Object.prototype.toString.call(currentMixin) !== '[object Array]');
2761
-
2762
- if (MIXINS.has(currentMixin)) {
2763
- if (meta$$1.hasMixin(currentMixin)) {
2764
- continue;
2765
- }
2766
-
2767
- meta$$1.addMixin(currentMixin);
2768
- let {
2769
- properties,
2770
- mixins
2771
- } = currentMixin;
2772
-
2773
- if (properties !== undefined) {
2774
- mergeProps(meta$$1, properties, descs, values, base, keys, keysWithSuper);
2775
- } else if (mixins !== undefined) {
2776
- mergeMixins(mixins, meta$$1, descs, values, base, keys, keysWithSuper);
2777
-
2778
- if (currentMixin instanceof Mixin && currentMixin._without !== undefined) {
2779
- currentMixin._without.forEach(keyName => {
2780
- // deleting the key means we won't process the value
2781
- let index = keys.indexOf(keyName);
2782
-
2783
- if (index !== -1) {
2784
- keys.splice(index, 1);
2785
- }
2786
- });
2787
- }
2788
- }
2789
- } else {
2790
- mergeProps(meta$$1, currentMixin, descs, values, base, keys, keysWithSuper);
2791
- }
2792
- }
2793
- }
2794
-
2795
- function mergeProps(meta$$1, props, descs, values, base, keys, keysWithSuper) {
2796
- let concats = concatenatedMixinProperties('concatenatedProperties', props, values, base);
2797
- let mergings = concatenatedMixinProperties('mergedProperties', props, values, base);
2798
- let propKeys = Object.keys(props);
2799
-
2800
- for (let key of propKeys) {
2801
- let value = props[key];
2802
- if (value === undefined) continue;
2803
-
2804
- if (keys.indexOf(key) === -1) {
2805
- keys.push(key);
2806
- let desc = meta$$1.peekDescriptors(key);
2807
-
2808
- if (desc === undefined) {
2809
- // The superclass did not have a CP, which means it may have
2810
- // observers or listeners on that property.
2811
- let prev = values[key] = base[key];
2812
-
2813
- if (typeof prev === 'function') {
2814
- updateObserversAndListeners(base, key, prev, false);
2815
- }
2816
- } else {
2817
- descs[key] = desc; // The super desc will be overwritten on descs, so save off the fact that
2818
- // there was a super so we know to Object.defineProperty when writing
2819
- // the value
2820
-
2821
- keysWithSuper.push(key);
2822
- desc.teardown(base, key, meta$$1);
2823
- }
2824
- }
2825
-
2826
- let isFunction = typeof value === 'function';
2827
-
2828
- if (isFunction) {
2829
- let desc = descriptorForDecorator(value);
2830
-
2831
- if (desc !== undefined) {
2832
- // Wrap descriptor function to implement _super() if needed
2833
- descs[key] = giveDecoratorSuper(key, value, desc, descs);
2834
- values[key] = undefined;
2835
- continue;
2836
- }
2837
- }
2838
-
2839
- if (concats && concats.indexOf(key) >= 0 || key === 'concatenatedProperties' || key === 'mergedProperties') {
2840
- value = applyConcatenatedProperties(key, value, values);
2841
- } else if (mergings && mergings.indexOf(key) > -1) {
2842
- value = applyMergedProperties(key, value, values);
2843
- } else if (isFunction) {
2844
- value = giveMethodSuper(key, value, values, descs);
2845
- }
2846
-
2847
- values[key] = value;
2848
- descs[key] = undefined;
2849
- }
2850
- }
2851
-
2852
- function updateObserversAndListeners(obj, key, fn, add) {
2853
- let meta$$1 = observerListenerMetaFor(fn);
2854
- if (meta$$1 === undefined) return;
2855
- let {
2856
- observers,
2857
- listeners
2858
- } = meta$$1;
2859
-
2860
- if (observers !== undefined) {
2861
- let updateObserver = add ? addObserver : removeObserver;
2862
-
2863
- for (let path of observers.paths) {
2864
- updateObserver(obj, path, null, key, observers.sync);
2865
- }
2866
- }
2867
-
2868
- if (listeners !== undefined) {
2869
- let updateListener = add ? addListener : removeListener;
2870
-
2871
- for (let listener of listeners) {
2872
- updateListener(obj, listener, null, key);
2873
- }
2874
- }
2875
- }
2876
-
2877
- function applyMixin(obj, mixins, _hideKeys = false) {
2878
- let descs = Object.create(null);
2879
- let values = Object.create(null);
2880
- let meta$$1 = meta(obj);
2881
- let keys = [];
2882
- let keysWithSuper = [];
2883
- obj._super = ROOT; // Go through all mixins and hashes passed in, and:
2884
- //
2885
- // * Handle concatenated properties
2886
- // * Handle merged properties
2887
- // * Set up _super wrapping if necessary
2888
- // * Set up computed property descriptors
2889
- // * Copying `toString` in broken browsers
2890
-
2891
- mergeMixins(mixins, meta$$1, descs, values, obj, keys, keysWithSuper);
2892
-
2893
- for (let key of keys) {
2894
- let value = values[key];
2895
- let desc = descs[key];
2896
-
2897
- if (value !== undefined) {
2898
- if (typeof value === 'function') {
2899
- updateObserversAndListeners(obj, key, value, true);
2900
- }
2901
-
2902
- defineValue(obj, key, value, keysWithSuper.indexOf(key) !== -1, !_hideKeys);
2903
- } else if (desc !== undefined) {
2904
- defineDecorator(obj, key, desc, meta$$1);
2905
- }
2906
- }
2907
-
2908
- if (!meta$$1.isPrototypeMeta(obj)) {
2909
- revalidateObservers(obj);
2910
- }
2911
-
2912
- return obj;
2913
- }
2914
- /**
2915
- @method mixin
2916
- @param obj
2917
- @param mixins*
2918
- @return obj
2919
- @private
2920
- */
2921
-
2922
- function mixin(obj, ...args) {
2923
- applyMixin(obj, args);
2924
- return obj;
2925
- }
2926
- const MIXINS = new _WeakSet();
2927
- /**
2928
- The `Mixin` class allows you to create mixins, whose properties can be
2929
- added to other classes. For instance,
2930
-
2931
- ```javascript
2932
- import Mixin from '@ember/object/mixin';
2933
-
2934
- const EditableMixin = Mixin.create({
2935
- edit() {
2936
- console.log('starting to edit');
2937
- this.set('isEditing', true);
2938
- },
2939
- isEditing: false
2940
- });
2941
- ```
2942
-
2943
- ```javascript
2944
- import EmberObject from '@ember/object';
2945
- import EditableMixin from '../mixins/editable';
2946
-
2947
- // Mix mixins into classes by passing them as the first arguments to
2948
- // `.extend.`
2949
- const Comment = EmberObject.extend(EditableMixin, {
2950
- post: null
2951
- });
2952
-
2953
- let comment = Comment.create({
2954
- post: somePost
2955
- });
2956
-
2957
- comment.edit(); // outputs 'starting to edit'
2958
- ```
2959
-
2960
- Note that Mixins are created with `Mixin.create`, not
2961
- `Mixin.extend`.
2962
-
2963
- Note that mixins extend a constructor's prototype so arrays and object literals
2964
- defined as properties will be shared amongst objects that implement the mixin.
2965
- If you want to define a property in a mixin that is not shared, you can define
2966
- it either as a computed property or have it be created on initialization of the object.
2967
-
2968
- ```javascript
2969
- // filters array will be shared amongst any object implementing mixin
2970
- import Mixin from '@ember/object/mixin';
2971
- import { A } from '@ember/array';
2972
-
2973
- const FilterableMixin = Mixin.create({
2974
- filters: A()
2975
- });
2976
- ```
2977
-
2978
- ```javascript
2979
- import Mixin from '@ember/object/mixin';
2980
- import { A } from '@ember/array';
2981
- import { computed } from '@ember/object';
2982
-
2983
- // filters will be a separate array for every object implementing the mixin
2984
- const FilterableMixin = Mixin.create({
2985
- filters: computed(function() {
2986
- return A();
2987
- })
2988
- });
2989
- ```
2990
-
2991
- ```javascript
2992
- import Mixin from '@ember/object/mixin';
2993
- import { A } from '@ember/array';
2994
-
2995
- // filters will be created as a separate array during the object's initialization
2996
- const Filterable = Mixin.create({
2997
- filters: null,
2998
-
2999
- init() {
3000
- this._super(...arguments);
3001
- this.set("filters", A());
3002
- }
3003
- });
3004
- ```
3005
-
3006
- @class Mixin
3007
- @public
3008
- */
3009
-
3010
- class Mixin {
3011
- /** @internal */
3012
- constructor(mixins, properties) {
3013
- MIXINS.add(this);
3014
- this.properties = extractAccessors(properties);
3015
- this.mixins = buildMixinsArray(mixins);
3016
- this.ownerConstructor = undefined;
3017
- this._without = undefined;
3018
-
3019
- if (DEBUG) {
3020
- // Eagerly add INIT_FACTORY to avoid issues in DEBUG as a result of Object.seal(mixin)
3021
- this[INIT_FACTORY] = null;
3022
- /*
3023
- In debug builds, we seal mixins to help avoid performance pitfalls.
3024
- In IE11 there is a quirk that prevents sealed objects from being added
3025
- to a WeakMap. Unfortunately, the mixin system currently relies on
3026
- weak maps in `guidFor`, so we need to prime the guid cache weak map.
3027
- */
3028
-
3029
- guidFor(this);
3030
-
3031
- if (Mixin._disableDebugSeal !== true) {
3032
- Object.seal(this);
3033
- }
3034
- }
3035
- }
3036
- /**
3037
- @method create
3038
- @for @ember/object/mixin
3039
- @static
3040
- @param arguments*
3041
- @public
3042
- */
3043
-
3044
-
3045
- static create(...args) {
3046
- setUnprocessedMixins();
3047
- let M = this;
3048
- return new M(args, undefined);
3049
- } // returns the mixins currently applied to the specified object
3050
- // TODO: Make `mixin`
3051
-
3052
- /** @internal */
3053
-
3054
-
3055
- static mixins(obj) {
3056
- let meta$$1 = peekMeta(obj);
3057
- let ret = [];
3058
-
3059
- if (meta$$1 === null) {
3060
- return ret;
3061
- }
3062
-
3063
- meta$$1.forEachMixins(currentMixin => {
3064
- // skip primitive mixins since these are always anonymous
3065
- if (!currentMixin.properties) {
3066
- ret.push(currentMixin);
3067
- }
3068
- });
3069
- return ret;
3070
- }
3071
- /**
3072
- @method reopen
3073
- @param arguments*
3074
- @private
3075
- @internal
3076
- */
3077
-
3078
-
3079
- reopen(...args) {
3080
- if (args.length === 0) {
3081
- return;
3082
- }
3083
-
3084
- if (this.properties) {
3085
- let currentMixin = new Mixin(undefined, this.properties);
3086
- this.properties = undefined;
3087
- this.mixins = [currentMixin];
3088
- } else if (!this.mixins) {
3089
- this.mixins = [];
3090
- }
3091
-
3092
- this.mixins = this.mixins.concat(buildMixinsArray(args));
3093
- return this;
3094
- }
3095
- /**
3096
- @method apply
3097
- @param obj
3098
- @return applied object
3099
- @private
3100
- @internal
3101
- */
3102
-
3103
-
3104
- apply(obj, _hideKeys = false) {
3105
- // Ember.NativeArray is a normal Ember.Mixin that we mix into `Array.prototype` when prototype extensions are enabled
3106
- // mutating a native object prototype like this should _not_ result in enumerable properties being added (or we have significant
3107
- // issues with things like deep equality checks from test frameworks, or things like jQuery.extend(true, [], [])).
3108
- //
3109
- // _hideKeys disables enumerablity when applying the mixin. This is a hack, and we should stop mutating the array prototype by default 😫
3110
- return applyMixin(obj, [this], _hideKeys);
3111
- }
3112
- /** @internal */
3113
-
3114
-
3115
- applyPartial(obj) {
3116
- return applyMixin(obj, [this]);
3117
- }
3118
- /**
3119
- @method detect
3120
- @param obj
3121
- @return {Boolean}
3122
- @private
3123
- @internal
3124
- */
3125
-
3126
-
3127
- detect(obj) {
3128
- if (typeof obj !== 'object' || obj === null) {
3129
- return false;
3130
- }
3131
-
3132
- if (MIXINS.has(obj)) {
3133
- return _detect(obj, this);
3134
- }
3135
-
3136
- let meta$$1 = peekMeta(obj);
3137
-
3138
- if (meta$$1 === null) {
3139
- return false;
2167
+ this._registry.splice(index, 0, {
2168
+ name,
2169
+ version
2170
+ });
2171
+ } else {
2172
+ warn(`Library "${name}" is already registered with Ember.`, false, {
2173
+ id: 'ember-metal.libraries-register'
2174
+ });
3140
2175
  }
3141
-
3142
- return meta$$1.hasMixin(this);
3143
2176
  }
3144
- /** @internal */
3145
2177
 
3146
-
3147
- without(...args) {
3148
- let ret = new Mixin([this]);
3149
- ret._without = args;
3150
- return ret;
2178
+ registerCoreLibrary(name, version) {
2179
+ this.register(name, version, true);
3151
2180
  }
3152
- /** @internal */
3153
-
3154
2181
 
3155
- keys() {
3156
- let keys = _keys(this);
2182
+ deRegister(name) {
2183
+ let lib = this._getLibraryByName(name);
3157
2184
 
3158
- assert('[BUG] Missing keys for mixin!', keys);
3159
- return keys;
3160
- }
3161
- /** @internal */
2185
+ let index;
3162
2186
 
2187
+ if (lib) {
2188
+ index = this._registry.indexOf(lib);
3163
2189
 
3164
- toString() {
3165
- return '(unknown mixin)';
2190
+ this._registry.splice(index, 1);
2191
+ }
3166
2192
  }
3167
2193
 
3168
2194
  }
3169
2195
 
3170
2196
  if (DEBUG) {
3171
- Object.defineProperty(Mixin, '_disableDebugSeal', {
3172
- configurable: true,
3173
- enumerable: false,
3174
- writable: true,
3175
- value: false
3176
- });
3177
- }
3178
-
3179
- function buildMixinsArray(mixins) {
3180
- let length = mixins && mixins.length || 0;
3181
- let m = undefined;
3182
-
3183
- if (length > 0) {
3184
- m = new Array(length);
3185
-
3186
- for (let i = 0; i < length; i++) {
3187
- let x = mixins[i];
3188
- assert(`Expected hash or Mixin instance, got ${Object.prototype.toString.call(x)}`, typeof x === 'object' && x !== null && Object.prototype.toString.call(x) !== '[object Array]');
2197
+ Libraries.prototype.logVersions = function () {
2198
+ let libs = this._registry;
2199
+ let nameLengths = libs.map(item => get(item, 'name.length'));
2200
+ assert('nameLengths is number array', nameLengths instanceof Array && nameLengths.every(n => typeof n === 'number'));
2201
+ let maxNameLength = Math.max.apply(null, nameLengths);
2202
+ debug('-------------------------------');
3189
2203
 
3190
- if (MIXINS.has(x)) {
3191
- m[i] = x;
3192
- } else {
3193
- m[i] = new Mixin(undefined, x);
3194
- }
2204
+ for (let lib of libs) {
2205
+ let spaces = new Array(maxNameLength - lib.name.length + 1).join(' ');
2206
+ debug([lib.name, spaces, ' : ', lib.version].join(''));
3195
2207
  }
3196
- }
3197
-
3198
- return m;
3199
- }
3200
2208
 
3201
- if (DEBUG) {
3202
- Object.seal(Mixin.prototype);
2209
+ debug('-------------------------------');
2210
+ };
3203
2211
  }
3204
2212
 
3205
- function _detect(curMixin, targetMixin, seen = new Set()) {
3206
- if (seen.has(curMixin)) {
3207
- return false;
3208
- }
2213
+ const LIBRARIES = new Libraries();
2214
+ LIBRARIES.registerCoreLibrary('Ember', VERSION);
3209
2215
 
3210
- seen.add(curMixin);
2216
+ function getProperties(obj, keys) {
2217
+ let ret = {};
2218
+ let propertyNames;
2219
+ let i = 1;
3211
2220
 
3212
- if (curMixin === targetMixin) {
3213
- return true;
2221
+ if (arguments.length === 2 && Array.isArray(keys)) {
2222
+ i = 0;
2223
+ propertyNames = arguments[1];
2224
+ } else {
2225
+ propertyNames = Array.from(arguments);
3214
2226
  }
3215
2227
 
3216
- let mixins = curMixin.mixins;
3217
-
3218
- if (mixins) {
3219
- return mixins.some(mixin => _detect(mixin, targetMixin, seen));
2228
+ for (; i < propertyNames.length; i++) {
2229
+ ret[propertyNames[i]] = get(obj, propertyNames[i]);
3220
2230
  }
3221
2231
 
3222
- return false;
2232
+ return ret;
3223
2233
  }
3224
2234
 
3225
- function _keys(mixin, ret = new Set(), seen = new Set()) {
3226
- if (seen.has(mixin)) {
3227
- return;
3228
- }
3229
-
3230
- seen.add(mixin);
3231
-
3232
- if (mixin.properties) {
3233
- let props = Object.keys(mixin.properties);
3234
-
3235
- for (let prop of props) {
3236
- ret.add(prop);
3237
- }
3238
- } else if (mixin.mixins) {
3239
- mixin.mixins.forEach(x => _keys(x, ret, seen));
3240
- }
2235
+ /**
2236
+ @module @ember/object
2237
+ */
3241
2238
 
3242
- return ret;
3243
- }
3244
2239
  /**
3245
- Specify a method that observes property changes.
2240
+ Set a list of properties on an object. These properties are set inside
2241
+ a single `beginPropertyChanges` and `endPropertyChanges` batch, so
2242
+ observers will be buffered.
3246
2243
 
3247
2244
  ```javascript
3248
2245
  import EmberObject from '@ember/object';
3249
- import { observer } from '@ember/object';
2246
+ let anObject = EmberObject.create();
3250
2247
 
3251
- export default EmberObject.extend({
3252
- valueObserver: observer('value', function() {
3253
- // Executes whenever the "value" property changes
3254
- })
2248
+ anObject.setProperties({
2249
+ firstName: 'Stanley',
2250
+ lastName: 'Stuart',
2251
+ age: 21
3255
2252
  });
3256
2253
  ```
3257
2254
 
3258
- Also available as `Function.prototype.observes` if prototype extensions are
3259
- enabled.
3260
-
3261
- @method observer
2255
+ @method setProperties
2256
+ @static
3262
2257
  @for @ember/object
3263
- @param {String} propertyNames*
3264
- @param {Function} func
3265
- @return func
2258
+ @param obj
2259
+ @param {Object} properties
2260
+ @return properties
3266
2261
  @public
3267
- @static
3268
2262
  */
3269
2263
 
3270
-
3271
- function observer(...args) {
3272
- let funcOrDef = args.pop();
3273
- assert('observer must be provided a function or an observer definition', typeof funcOrDef === 'function' || typeof funcOrDef === 'object' && funcOrDef !== null);
3274
- let func;
3275
- let dependentKeys;
3276
- let sync;
3277
-
3278
- if (typeof funcOrDef === 'function') {
3279
- func = funcOrDef;
3280
- dependentKeys = args;
3281
- sync = !ENV._DEFAULT_ASYNC_OBSERVERS;
3282
- } else {
3283
- func = funcOrDef.fn;
3284
- dependentKeys = funcOrDef.dependentKeys;
3285
- sync = funcOrDef.sync;
2264
+ function setProperties(obj, properties) {
2265
+ if (properties === null || typeof properties !== 'object') {
2266
+ return properties;
3286
2267
  }
3287
2268
 
3288
- assert('observer called without a function', typeof func === 'function');
3289
- assert('observer called without valid path', Array.isArray(dependentKeys) && dependentKeys.length > 0 && dependentKeys.every(p => typeof p === 'string' && Boolean(p.length)));
3290
- assert('observer called without sync', typeof sync === 'boolean');
3291
- let paths = [];
3292
-
3293
- for (let dependentKey of dependentKeys) {
3294
- expandProperties(dependentKey, path => paths.push(path));
3295
- }
2269
+ changeProperties(() => {
2270
+ let props = Object.keys(properties);
3296
2271
 
3297
- setObservers(func, {
3298
- paths,
3299
- sync
2272
+ for (let propertyName of props) {
2273
+ set(obj, propertyName, properties[propertyName]);
2274
+ }
3300
2275
  });
3301
- return func;
2276
+ return properties;
3302
2277
  }
3303
2278
 
3304
2279
  let DEBUG_INJECTION_FUNCTIONS;
@@ -3598,4 +2573,149 @@ function throwCachedInvalidArgsError(args = []) {
3598
2573
  @public
3599
2574
  */
3600
2575
 
3601
- export { computed, autoComputed, isComputed, ComputedProperty, getCachedValueFor, alias, deprecateProperty, PROXY_CONTENT, _getPath, get, _getProp, hasUnknownProperty, set, _setProp, trySet, objectAt, replace, replaceInNativeArray, addArrayObserver, removeArrayObserver, arrayContentWillChange, arrayContentDidChange, eachProxyArrayWillChange, eachProxyArrayDidChange, addListener, hasListeners, on, removeListener, sendEvent, isNone, isEmpty, isBlank, isPresent, beginPropertyChanges, changeProperties, endPropertyChanges, notifyPropertyChange, PROPERTY_DID_CHANGE, defineProperty, isElementDescriptor, nativeDescDecorator, descriptorForDecorator, descriptorForProperty, isClassicDecorator, setClassicDecorator, LIBRARIES as libraries, Libraries, getProperties, setProperties, expandProperties, ASYNC_OBSERVERS, SYNC_OBSERVERS, addObserver, activateObserver, removeObserver, flushAsyncObservers, Mixin, mixin, observer, applyMixin, inject, DEBUG_INJECTION_FUNCTIONS, tagForProperty, tagForObject, markObjectAsDirty, tracked, TrackedDescriptor, cached, NAMESPACES, NAMESPACES_BY_ID, addNamespace, findNamespace, findNamespaces, processNamespace, processAllNamespaces, removeNamespace, isSearchDisabled as isNamespaceSearchDisabled, setSearchDisabled as setNamespaceSearchDisabled };
2576
+ const hasOwnProperty = Object.prototype.hasOwnProperty;
2577
+ let searchDisabled = false;
2578
+ const flags = {
2579
+ _set: 0,
2580
+ _unprocessedNamespaces: false,
2581
+
2582
+ get unprocessedNamespaces() {
2583
+ return this._unprocessedNamespaces;
2584
+ },
2585
+
2586
+ set unprocessedNamespaces(v) {
2587
+ this._set++;
2588
+ this._unprocessedNamespaces = v;
2589
+ }
2590
+
2591
+ };
2592
+ let unprocessedMixins = false;
2593
+ const NAMESPACES = [];
2594
+ const NAMESPACES_BY_ID = Object.create(null);
2595
+ function addNamespace(namespace) {
2596
+ flags.unprocessedNamespaces = true;
2597
+ NAMESPACES.push(namespace);
2598
+ }
2599
+ function removeNamespace(namespace) {
2600
+ let name = getName(namespace);
2601
+ delete NAMESPACES_BY_ID[name];
2602
+ NAMESPACES.splice(NAMESPACES.indexOf(namespace), 1);
2603
+
2604
+ if (name in context.lookup && namespace === context.lookup[name]) {
2605
+ context.lookup[name] = undefined;
2606
+ }
2607
+ }
2608
+ function findNamespaces() {
2609
+ if (!flags.unprocessedNamespaces) {
2610
+ return;
2611
+ }
2612
+
2613
+ let lookup = context.lookup;
2614
+ let keys = Object.keys(lookup);
2615
+
2616
+ for (let key of keys) {
2617
+ // Only process entities that start with uppercase A-Z
2618
+ if (!isUppercase(key.charCodeAt(0))) {
2619
+ continue;
2620
+ }
2621
+
2622
+ let obj = tryIsNamespace(lookup, key);
2623
+
2624
+ if (obj) {
2625
+ setName(obj, key);
2626
+ }
2627
+ }
2628
+ }
2629
+ function findNamespace(name) {
2630
+ if (!searchDisabled) {
2631
+ processAllNamespaces();
2632
+ }
2633
+
2634
+ return NAMESPACES_BY_ID[name];
2635
+ }
2636
+ function processNamespace(namespace) {
2637
+ _processNamespace([namespace.toString()], namespace, new Set());
2638
+ }
2639
+ function processAllNamespaces() {
2640
+ let unprocessedNamespaces = flags.unprocessedNamespaces;
2641
+
2642
+ if (unprocessedNamespaces) {
2643
+ findNamespaces();
2644
+ flags.unprocessedNamespaces = false;
2645
+ }
2646
+
2647
+ if (unprocessedNamespaces || unprocessedMixins) {
2648
+ let namespaces = NAMESPACES;
2649
+
2650
+ for (let namespace of namespaces) {
2651
+ processNamespace(namespace);
2652
+ }
2653
+
2654
+ unprocessedMixins = false;
2655
+ }
2656
+ }
2657
+ function isSearchDisabled() {
2658
+ return searchDisabled;
2659
+ }
2660
+ function setSearchDisabled(flag) {
2661
+ searchDisabled = Boolean(flag);
2662
+ }
2663
+ function setUnprocessedMixins() {
2664
+ unprocessedMixins = true;
2665
+ }
2666
+
2667
+ function _processNamespace(paths, root, seen) {
2668
+ let idx = paths.length;
2669
+ let id = paths.join('.');
2670
+ NAMESPACES_BY_ID[id] = root;
2671
+ setName(root, id); // Loop over all of the keys in the namespace, looking for classes
2672
+
2673
+ for (let key in root) {
2674
+ if (!hasOwnProperty.call(root, key)) {
2675
+ continue;
2676
+ }
2677
+
2678
+ let obj = root[key]; // If we are processing the `Ember` namespace, for example, the
2679
+ // `paths` will start with `["Ember"]`. Every iteration through
2680
+ // the loop will update the **second** element of this list with
2681
+ // the key, so processing `Ember.View` will make the Array
2682
+ // `['Ember', 'View']`.
2683
+
2684
+ paths[idx] = key; // If we have found an unprocessed class
2685
+
2686
+ if (obj && getName(obj) === void 0) {
2687
+ // Replace the class' `toString` with the dot-separated path
2688
+ setName(obj, paths.join('.')); // Support nested namespaces
2689
+ } else if (obj && isNamespace(obj)) {
2690
+ // Skip aliased namespaces
2691
+ if (seen.has(obj)) {
2692
+ continue;
2693
+ }
2694
+
2695
+ seen.add(obj); // Process the child namespace
2696
+
2697
+ _processNamespace(paths, obj, seen);
2698
+ }
2699
+ }
2700
+
2701
+ paths.length = idx; // cut out last item
2702
+ }
2703
+
2704
+ function isNamespace(obj) {
2705
+ return obj != null && typeof obj === 'object' && obj.isNamespace;
2706
+ }
2707
+
2708
+ function isUppercase(code) {
2709
+ return code >= 65 && code <= 90 // A
2710
+ ; // Z
2711
+ }
2712
+
2713
+ function tryIsNamespace(lookup, prop) {
2714
+ try {
2715
+ let obj = lookup[prop];
2716
+ return (obj !== null && typeof obj === 'object' || typeof obj === 'function') && obj.isNamespace && obj;
2717
+ } catch (e) {// continue
2718
+ }
2719
+ }
2720
+
2721
+ export { computed, autoComputed, isComputed, ComputedProperty, getCachedValueFor, alias, deprecateProperty, PROXY_CONTENT, _getPath, get, _getProp, hasUnknownProperty, set, _setProp, trySet, objectAt, replace, replaceInNativeArray, addArrayObserver, removeArrayObserver, arrayContentWillChange, arrayContentDidChange, eachProxyArrayWillChange, eachProxyArrayDidChange, addListener, hasListeners, on, removeListener, sendEvent, beginPropertyChanges, changeProperties, endPropertyChanges, notifyPropertyChange, PROPERTY_DID_CHANGE, defineProperty, defineDecorator, defineValue, ComputedDescriptor, isElementDescriptor, nativeDescDecorator, descriptorForDecorator, descriptorForProperty, isClassicDecorator, setClassicDecorator, makeComputedDecorator, LIBRARIES as libraries, Libraries, getProperties, setProperties, expandProperties, ASYNC_OBSERVERS, SYNC_OBSERVERS, addObserver, activateObserver, removeObserver, flushAsyncObservers, revalidateObservers, inject, DEBUG_INJECTION_FUNCTIONS, tagForProperty, tagForObject, markObjectAsDirty, tracked, TrackedDescriptor, cached, NAMESPACES, NAMESPACES_BY_ID, addNamespace, findNamespace, findNamespaces, processNamespace, processAllNamespaces, removeNamespace, isSearchDisabled as isNamespaceSearchDisabled, setSearchDisabled as setNamespaceSearchDisabled, setUnprocessedMixins };