ember-source 6.12.0 → 7.0.0-beta.1

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 (597) hide show
  1. package/blueprints/initializer-test/files/__root__/__testType__/__path__/__name__-test.ts +2 -2
  2. package/blueprints/instance-initializer-test/files/__root__/__testType__/__path__/__name__-test.ts +3 -3
  3. package/build-metadata.json +3 -3
  4. package/dist/{packages/shared-chunks/registry-XY5cfmbH.js → dev/packages/@ember/-internals/container/index.js} +28 -27
  5. package/dist/{packages → dev/packages}/@ember/-internals/deprecations/index.js +5 -16
  6. package/dist/{packages/shared-chunks/env-DEd6hPbj.js → dev/packages/@ember/-internals/environment/index.js} +31 -53
  7. package/dist/dev/packages/@ember/-internals/glimmer/index.js +42 -0
  8. package/dist/{packages → dev/packages}/@ember/-internals/meta/lib/meta.js +37 -38
  9. package/dist/dev/packages/@ember/-internals/metal/index.js +63 -0
  10. package/dist/{packages → dev/packages}/@ember/-internals/routing/index.js +7 -8
  11. package/dist/{packages → dev/packages}/@ember/-internals/runtime/lib/ext/rsvp.js +1 -2
  12. package/dist/{packages → dev/packages}/@ember/-internals/runtime/lib/mixins/-proxy.js +14 -15
  13. package/dist/{packages → dev/packages}/@ember/-internals/runtime/lib/mixins/action_handler.js +21 -9
  14. package/dist/{packages → dev/packages}/@ember/-internals/runtime/lib/mixins/registry_proxy.js +11 -2
  15. package/dist/{packages → dev/packages}/@ember/-internals/runtime/lib/mixins/target_action_support.js +22 -9
  16. package/dist/{packages → dev/packages}/@ember/-internals/string/index.js +1 -2
  17. package/dist/dev/packages/@ember/-internals/utils/index.js +34 -0
  18. package/dist/{packages → dev/packages}/@ember/-internals/views/lib/compat/fallback-view-registry.js +1 -2
  19. package/dist/{packages → dev/packages}/@ember/-internals/views/lib/mixins/action_support.js +16 -10
  20. package/dist/{packages → dev/packages}/@ember/-internals/views/lib/system/event_dispatcher.js +19 -20
  21. package/dist/{packages → dev/packages}/@ember/-internals/views/lib/system/utils.js +7 -23
  22. package/dist/{packages → dev/packages}/@ember/-internals/views/lib/views/core_view.js +6 -7
  23. package/dist/{packages → dev/packages}/@ember/-internals/views/lib/views/states.js +3 -4
  24. package/dist/{packages → dev/packages}/@ember/application/index.js +50 -121
  25. package/dist/{packages → dev/packages}/@ember/application/instance.js +17 -17
  26. package/dist/{packages → dev/packages}/@ember/application/namespace.js +27 -9
  27. package/dist/{packages → dev/packages}/@ember/array/index.js +34 -25
  28. package/dist/{packages → dev/packages}/@ember/array/proxy.js +19 -20
  29. package/dist/{packages → dev/packages}/@ember/canary-features/index.js +1 -1
  30. package/dist/dev/packages/@ember/component/helper.js +14 -0
  31. package/dist/{packages → dev/packages}/@ember/component/index.js +12 -12
  32. package/dist/{packages → dev/packages}/@ember/component/template-only.js +6 -6
  33. package/dist/{packages → dev/packages}/@ember/controller/index.js +7 -9
  34. package/dist/{packages → dev/packages}/@ember/debug/container-debug-adapter.js +6 -7
  35. package/dist/{packages → dev/packages}/@ember/debug/data-adapter.js +6 -7
  36. package/dist/{packages → dev/packages}/@ember/debug/index.js +4 -11
  37. package/dist/{packages → dev/packages}/@ember/debug/lib/assert.js +1 -3
  38. package/dist/{packages → dev/packages}/@ember/debug/lib/deprecate.js +7 -3
  39. package/dist/{packages → dev/packages}/@ember/debug/lib/handlers.js +1 -3
  40. package/dist/{packages → dev/packages}/@ember/debug/lib/warn.js +1 -2
  41. package/dist/{packages → dev/packages}/@ember/engine/index.js +22 -22
  42. package/dist/dev/packages/@ember/engine/instance.js +200 -0
  43. package/dist/{packages → dev/packages}/@ember/helper/index.js +12 -11
  44. package/dist/{packages → dev/packages}/@ember/instrumentation/index.js +3 -8
  45. package/dist/dev/packages/@ember/modifier/index.js +23 -0
  46. package/dist/{packages → dev/packages}/@ember/modifier/on.js +6 -6
  47. package/dist/dev/packages/@ember/object/-internals.js +49 -0
  48. package/dist/{packages → dev/packages}/@ember/object/compat.js +11 -12
  49. package/dist/{packages → dev/packages}/@ember/object/computed.js +7 -8
  50. package/dist/{packages → dev/packages}/@ember/object/core.js +28 -29
  51. package/dist/{packages → dev/packages}/@ember/object/evented.js +7 -8
  52. package/dist/dev/packages/@ember/object/events.js +11 -0
  53. package/dist/{packages → dev/packages}/@ember/object/index.js +18 -19
  54. package/dist/{packages → dev/packages}/@ember/object/internals.js +1 -1
  55. package/dist/{packages → dev/packages}/@ember/object/lib/computed/computed_macros.js +30 -27
  56. package/dist/{packages → dev/packages}/@ember/object/lib/computed/reduce_computed_macros.js +36 -37
  57. package/dist/{packages → dev/packages}/@ember/object/mixin.js +15 -23
  58. package/dist/dev/packages/@ember/object/observable.js +181 -0
  59. package/dist/dev/packages/@ember/object/observers.js +11 -0
  60. package/dist/{packages → dev/packages}/@ember/object/promise-proxy-mixin.js +7 -8
  61. package/dist/dev/packages/@ember/renderer/index.js +14 -0
  62. package/dist/dev/packages/@ember/routing/-internals.js +22 -0
  63. package/dist/{packages → dev/packages}/@ember/routing/hash-location.js +1 -1
  64. package/dist/{packages → dev/packages}/@ember/routing/history-location.js +9 -25
  65. package/dist/dev/packages/@ember/routing/index.js +14 -0
  66. package/dist/{packages → dev/packages}/@ember/routing/lib/dsl.js +5 -6
  67. package/dist/{packages → dev/packages}/@ember/routing/lib/generate_controller.js +22 -10
  68. package/dist/{packages → dev/packages}/@ember/routing/lib/location-utils.js +3 -16
  69. package/dist/{packages → dev/packages}/@ember/routing/lib/routing-service.js +19 -9
  70. package/dist/{packages → dev/packages}/@ember/routing/lib/utils.js +12 -13
  71. package/dist/{packages → dev/packages}/@ember/routing/none-location.js +2 -4
  72. package/dist/{packages → dev/packages}/@ember/routing/route.js +38 -39
  73. package/dist/{packages → dev/packages}/@ember/routing/router-service.js +13 -14
  74. package/dist/{packages → dev/packages}/@ember/routing/router.js +63 -71
  75. package/dist/{packages → dev/packages}/@ember/runloop/index.js +9 -8
  76. package/dist/{packages → dev/packages}/@ember/service/index.js +6 -7
  77. package/dist/dev/packages/@ember/template/index.js +14 -0
  78. package/dist/{packages → dev/packages}/@ember/template-compilation/index.js +3 -3
  79. package/dist/dev/packages/@ember/template-compiler/index.js +2 -0
  80. package/dist/{packages → dev/packages}/@ember/template-compiler/lib/compile-options.js +11 -6
  81. package/dist/{packages → dev/packages}/@ember/template-compiler/lib/dasherize-component-name.js +1 -2
  82. package/dist/dev/packages/@ember/template-compiler/lib/plugins/allowed-globals.js +56 -0
  83. package/dist/{packages → dev/packages}/@ember/template-compiler/lib/plugins/assert-against-attrs.js +19 -3
  84. package/dist/{packages → dev/packages}/@ember/template-compiler/lib/plugins/assert-against-named-outlets.js +11 -2
  85. package/dist/{packages → dev/packages}/@ember/template-compiler/lib/plugins/assert-input-helper-without-block.js +1 -2
  86. package/dist/{packages → dev/packages}/@ember/template-compiler/lib/plugins/assert-reserved-named-arguments.js +3 -4
  87. package/dist/dev/packages/@ember/template-compiler/lib/plugins/index.js +40 -0
  88. package/dist/{packages → dev/packages}/@ember/template-compiler/lib/plugins/transform-each-track-array.js +21 -2
  89. package/dist/dev/packages/@ember/template-compiler/lib/plugins/transform-in-element.js +50 -0
  90. package/dist/{packages → dev/packages}/@ember/template-compiler/lib/plugins/transform-resolutions.js +2 -3
  91. package/dist/dev/packages/@ember/template-compiler/lib/template.js +248 -0
  92. package/dist/dev/packages/@ember/template-factory/index.js +8 -0
  93. package/dist/dev/packages/@ember/test/index.js +18 -0
  94. package/dist/{packages → dev/packages}/@ember/utils/lib/compare.js +5 -6
  95. package/dist/{packages → dev/packages}/@ember/utils/lib/is_empty.js +6 -7
  96. package/dist/{packages → dev/packages}/@glimmer/destroyable/index.js +21 -16
  97. package/dist/{packages/shared-chunks/encoder-CT1wqYMF.js → dev/packages/@glimmer/encoder/index.js} +3 -4
  98. package/dist/{packages → dev/packages}/@glimmer/global-context/index.js +6 -5
  99. package/dist/{packages/shared-chunks/api-1B_9SjFR.js → dev/packages/@glimmer/manager/index.js} +17 -14
  100. package/dist/dev/packages/@glimmer/node/index.js +40 -0
  101. package/dist/{packages → dev/packages}/@glimmer/opcode-compiler/index.js +5 -6
  102. package/dist/dev/packages/@glimmer/program/index.js +12 -0
  103. package/dist/dev/packages/@glimmer/reference/index.js +208 -0
  104. package/dist/dev/packages/@glimmer/runtime/index.js +11 -0
  105. package/dist/dev/packages/@glimmer/tracking/index.js +137 -0
  106. package/dist/dev/packages/@glimmer/tracking/primitives/cache/index.js +11 -0
  107. package/dist/{packages → dev/packages}/@glimmer/util/index.js +2 -3
  108. package/dist/{packages → dev/packages}/@glimmer/validator/index.js +304 -372
  109. package/dist/{packages → dev/packages}/@glimmer/vm/index.js +1 -1
  110. package/dist/{packages → dev/packages}/ember/version.js +2 -2
  111. package/dist/dev/packages/ember-template-compiler/index.js +109 -0
  112. package/dist/{packages → dev/packages}/ember-testing/index.js +1 -3
  113. package/dist/dev/packages/ember-testing/lib/public-api.js +2 -0
  114. package/dist/dev/packages/ember-testing/lib/test/pending_requests.js +10 -0
  115. package/dist/dev/packages/ember-testing/lib/test.js +25 -0
  116. package/dist/{packages/shared-chunks/router-DSi8WnDi.js → dev/packages/router_js/index.js} +120 -58
  117. package/dist/{packages/shared-chunks/alias-BEMS3qgG.js → dev/packages/shared-chunks/alias-CSC0WIbj.js} +4 -5
  118. package/dist/{packages/shared-chunks/api-CkUl6KyJ.js → dev/packages/shared-chunks/api-BqXkkT0p.js} +14 -16
  119. package/dist/{packages/shared-chunks/args-proxy-B91L3LRK.js → dev/packages/shared-chunks/args-proxy-DgXMc9b5.js} +7 -8
  120. package/dist/{packages/shared-chunks/array-BqYCCatg.js → dev/packages/shared-chunks/array-D8PfjQHi.js} +3 -4
  121. package/dist/dev/packages/shared-chunks/capabilities-O_xc7Yqk.js +34 -0
  122. package/dist/{packages/shared-chunks/collections-B8me-ZlQ.js → dev/packages/shared-chunks/collections-D_nY_0UJ.js} +1 -2
  123. package/dist/{packages/@ember/template-compiler/lib/template.js → dev/packages/shared-chunks/compiler-CNj62pww.js} +22 -243
  124. package/dist/{packages/shared-chunks/constants-oDhF27qL.js → dev/packages/shared-chunks/constants-eoaL3OJQ.js} +9 -9
  125. package/dist/{packages/shared-chunks/debug-to-string-BsFOvUtQ.js → dev/packages/shared-chunks/debug-to-string-CFb7h0lY.js} +1 -3
  126. package/dist/{packages/shared-chunks/dynamic-CuBsUXX8.js → dev/packages/shared-chunks/dynamic-CFg3dljk.js} +108 -134
  127. package/dist/{packages/shared-chunks/element-builder-BuVym8EM.js → dev/packages/shared-chunks/element-builder-BOxP8emt.js} +4 -5
  128. package/dist/{packages/shared-chunks/flags-BsZlvEeR.js → dev/packages/shared-chunks/flags-B9qxc-pB.js} +1 -1
  129. package/dist/{packages/shared-chunks/capabilities-DHiXCCuB.js → dev/packages/shared-chunks/fragment-Cc5k9Oy4.js} +2 -33
  130. package/dist/{packages/shared-chunks/index-ByyoGpfz.js → dev/packages/shared-chunks/index-PxU6E7q8.js} +658 -214
  131. package/dist/{packages/shared-chunks/index-CQkjwqTv.js → dev/packages/shared-chunks/index-Q7JnrdBn.js} +20 -19
  132. package/dist/dev/packages/shared-chunks/invoke-DxRPE05O.js +67 -0
  133. package/dist/{packages/shared-chunks/is_proxy-C2q5rUMp.js → dev/packages/shared-chunks/is_proxy-B0smdQy8.js} +1 -1
  134. package/dist/{packages/shared-chunks/mandatory-setter-DLKyVs4Q.js → dev/packages/shared-chunks/mandatory-setter-DHZe7-kW.js} +47 -48
  135. package/dist/{packages/shared-chunks/name-DVtQREj6.js → dev/packages/shared-chunks/name-Z7dpqvzn.js} +1 -1
  136. package/dist/{packages/shared-chunks/namespace_search-ClQOZuFA.js → dev/packages/shared-chunks/namespace_search-uT8odThF.js} +3 -4
  137. package/dist/{packages/shared-chunks/observers-DhgQ6ba5.js → dev/packages/shared-chunks/observers-Bj9qLVau.js} +231 -87
  138. package/dist/{packages/shared-chunks/program-CcLlGnAU.js → dev/packages/shared-chunks/program-DfV0v8aa.js} +4 -6
  139. package/dist/{packages/shared-chunks/program-context-CZJnCFdo.js → dev/packages/shared-chunks/program-context-BRjCC_BA.js} +2 -2
  140. package/dist/{packages/shared-chunks/property_set-DrZnfGQ7.js → dev/packages/shared-chunks/property_set-DaoZXGM5.js} +11 -16
  141. package/dist/dev/packages/shared-chunks/public-api-C3KlJmEr.js +10 -0
  142. package/dist/{packages/shared-chunks/reference-B6HMX4y0.js → dev/packages/shared-chunks/reference-C3TKDRnP.js} +11 -12
  143. package/dist/{packages/@glimmer/runtime/index.js → dev/packages/shared-chunks/rehydrate-builder-DPImr9e9.js} +8 -16
  144. package/dist/{packages/shared-chunks/render-DTOhhssy.js → dev/packages/shared-chunks/render-sg8BuFaE.js} +16 -23
  145. package/dist/{packages/shared-chunks/serialize-builder-DEgRJgNQ.js → dev/packages/shared-chunks/serialize-builder-b_gSYCSS.js} +7 -7
  146. package/dist/{packages/shared-chunks/set_properties-Dag9Xz6u.js → dev/packages/shared-chunks/set_properties-kVGzZL_a.js} +2 -2
  147. package/dist/{packages/shared-chunks/setup-registry-Bbj8WQen.js → dev/packages/shared-chunks/setup-registry-DGdDOxrk.js} +12 -12
  148. package/dist/{packages/shared-chunks/simple-cast-BXTrayoV.js → dev/packages/shared-chunks/simple-cast-DCvJLSin.js} +1 -1
  149. package/dist/{packages/shared-chunks/template-CMHIG4cn.js → dev/packages/shared-chunks/template-kM-7TTcc.js} +3 -4
  150. package/dist/dev/packages/shared-chunks/to-string-C7M8LBLH.js +36 -0
  151. package/dist/{packages/shared-chunks/transform-resolutions-vHYYonpB.js → dev/packages/shared-chunks/transform-resolutions-fXGQKGsL.js} +331 -288
  152. package/dist/{packages/shared-chunks/unrecognized-url-error-BBMMZhBN.js → dev/packages/shared-chunks/unrecognized-url-error-B3wUTorp.js} +103 -39
  153. package/dist/prod/packages/@ember/-internals/browser-environment/index.js +2 -0
  154. package/dist/prod/packages/@ember/-internals/container/index.js +697 -0
  155. package/dist/prod/packages/@ember/-internals/deprecations/index.js +114 -0
  156. package/dist/prod/packages/@ember/-internals/environment/index.js +171 -0
  157. package/dist/prod/packages/@ember/-internals/error-handling/index.js +26 -0
  158. package/dist/prod/packages/@ember/-internals/glimmer/index.js +39 -0
  159. package/dist/prod/packages/@ember/-internals/meta/index.js +1 -0
  160. package/dist/prod/packages/@ember/-internals/meta/lib/meta.js +455 -0
  161. package/dist/prod/packages/@ember/-internals/metal/index.js +61 -0
  162. package/dist/prod/packages/@ember/-internals/owner/index.js +252 -0
  163. package/dist/prod/packages/@ember/-internals/routing/index.js +14 -0
  164. package/dist/prod/packages/@ember/-internals/runtime/index.js +9 -0
  165. package/dist/prod/packages/@ember/-internals/runtime/lib/ext/rsvp.js +51 -0
  166. package/dist/prod/packages/@ember/-internals/runtime/lib/mixins/-proxy.js +89 -0
  167. package/dist/prod/packages/@ember/-internals/runtime/lib/mixins/action_handler.js +187 -0
  168. package/dist/prod/packages/@ember/-internals/runtime/lib/mixins/comparable.js +37 -0
  169. package/dist/prod/packages/@ember/-internals/runtime/lib/mixins/container_proxy.js +44 -0
  170. package/dist/prod/packages/@ember/-internals/runtime/lib/mixins/registry_proxy.js +42 -0
  171. package/dist/prod/packages/@ember/-internals/runtime/lib/mixins/target_action_support.js +142 -0
  172. package/dist/prod/packages/@ember/-internals/string/index.js +93 -0
  173. package/dist/prod/packages/@ember/-internals/utility-types/index.js +12 -0
  174. package/dist/prod/packages/@ember/-internals/utils/index.js +75 -0
  175. package/dist/prod/packages/@ember/-internals/views/index.js +7 -0
  176. package/dist/prod/packages/@ember/-internals/views/lib/compat/attrs.js +3 -0
  177. package/dist/prod/packages/@ember/-internals/views/lib/compat/fallback-view-registry.js +7 -0
  178. package/dist/prod/packages/@ember/-internals/views/lib/component_lookup.js +14 -0
  179. package/dist/prod/packages/@ember/-internals/views/lib/mixins/action_support.js +35 -0
  180. package/dist/prod/packages/@ember/-internals/views/lib/system/event_dispatcher.js +227 -0
  181. package/dist/prod/packages/@ember/-internals/views/lib/system/utils.js +172 -0
  182. package/dist/prod/packages/@ember/-internals/views/lib/views/core_view.js +87 -0
  183. package/dist/prod/packages/@ember/-internals/views/lib/views/states.js +83 -0
  184. package/dist/prod/packages/@ember/application/index.js +899 -0
  185. package/dist/prod/packages/@ember/application/instance.js +438 -0
  186. package/dist/prod/packages/@ember/application/namespace.js +68 -0
  187. package/dist/prod/packages/@ember/array/-internals.js +9 -0
  188. package/dist/prod/packages/@ember/array/index.js +591 -0
  189. package/dist/prod/packages/@ember/array/lib/make-array.js +42 -0
  190. package/dist/prod/packages/@ember/array/make.js +1 -0
  191. package/dist/prod/packages/@ember/array/mutable.js +1 -0
  192. package/dist/prod/packages/@ember/array/proxy.js +267 -0
  193. package/dist/prod/packages/@ember/canary-features/index.js +67 -0
  194. package/dist/prod/packages/@ember/component/helper.js +12 -0
  195. package/dist/prod/packages/@ember/component/index.js +32 -0
  196. package/dist/prod/packages/@ember/component/template-only.js +39 -0
  197. package/dist/prod/packages/@ember/controller/index.js +177 -0
  198. package/dist/prod/packages/@ember/debug/container-debug-adapter.js +117 -0
  199. package/dist/prod/packages/@ember/debug/data-adapter.js +553 -0
  200. package/dist/prod/packages/@ember/debug/index.js +30 -0
  201. package/dist/prod/packages/@ember/debug/lib/assert.js +7 -0
  202. package/dist/prod/packages/@ember/debug/lib/capture-render-tree.js +28 -0
  203. package/dist/prod/packages/@ember/debug/lib/deprecate.js +56 -0
  204. package/dist/prod/packages/@ember/debug/lib/handlers.js +5 -0
  205. package/dist/prod/packages/@ember/debug/lib/inspect.js +120 -0
  206. package/dist/prod/packages/@ember/debug/lib/testing.js +9 -0
  207. package/dist/prod/packages/@ember/debug/lib/warn.js +6 -0
  208. package/dist/prod/packages/@ember/deprecated-features/index.js +7 -0
  209. package/dist/prod/packages/@ember/destroyable/index.js +251 -0
  210. package/dist/prod/packages/@ember/engine/index.js +450 -0
  211. package/dist/{packages → prod/packages}/@ember/engine/instance.js +24 -10
  212. package/dist/prod/packages/@ember/engine/lib/engine-parent.js +33 -0
  213. package/dist/prod/packages/@ember/engine/parent.js +1 -0
  214. package/dist/prod/packages/@ember/enumerable/index.js +20 -0
  215. package/dist/prod/packages/@ember/enumerable/mutable.js +22 -0
  216. package/dist/prod/packages/@ember/helper/index.js +489 -0
  217. package/dist/prod/packages/@ember/instrumentation/index.js +242 -0
  218. package/dist/prod/packages/@ember/modifier/index.js +21 -0
  219. package/dist/prod/packages/@ember/modifier/on.js +20 -0
  220. package/dist/prod/packages/@ember/object/-internals.js +28 -0
  221. package/dist/prod/packages/@ember/object/compat.js +128 -0
  222. package/dist/prod/packages/@ember/object/computed.js +10 -0
  223. package/dist/prod/packages/@ember/object/core.js +781 -0
  224. package/dist/prod/packages/@ember/object/evented.js +76 -0
  225. package/dist/prod/packages/@ember/object/events.js +6 -0
  226. package/dist/prod/packages/@ember/object/index.js +205 -0
  227. package/dist/prod/packages/@ember/object/internals.js +8 -0
  228. package/dist/prod/packages/@ember/object/lib/computed/computed_macros.js +776 -0
  229. package/dist/prod/packages/@ember/object/lib/computed/reduce_computed_macros.js +1032 -0
  230. package/dist/prod/packages/@ember/object/mixin.js +560 -0
  231. package/dist/{packages → prod/packages}/@ember/object/observable.js +80 -15
  232. package/dist/prod/packages/@ember/object/observers.js +6 -0
  233. package/dist/prod/packages/@ember/object/promise-proxy-mixin.js +138 -0
  234. package/dist/prod/packages/@ember/object/proxy.js +98 -0
  235. package/dist/prod/packages/@ember/owner/index.js +88 -0
  236. package/dist/prod/packages/@ember/reactive/collections.js +1 -0
  237. package/dist/prod/packages/@ember/reactive/index.js +12 -0
  238. package/dist/prod/packages/@ember/renderer/index.js +12 -0
  239. package/dist/prod/packages/@ember/routing/hash-location.js +153 -0
  240. package/dist/prod/packages/@ember/routing/history-location.js +250 -0
  241. package/dist/prod/packages/@ember/routing/index.js +12 -0
  242. package/dist/prod/packages/@ember/routing/lib/cache.js +37 -0
  243. package/dist/prod/packages/@ember/routing/lib/controller_for.js +16 -0
  244. package/dist/prod/packages/@ember/routing/lib/dsl.js +178 -0
  245. package/dist/prod/packages/@ember/routing/lib/generate_controller.js +62 -0
  246. package/dist/prod/packages/@ember/routing/lib/location-utils.js +48 -0
  247. package/dist/prod/packages/@ember/routing/lib/query_params.js +9 -0
  248. package/dist/prod/packages/@ember/routing/lib/router_state.js +26 -0
  249. package/dist/prod/packages/@ember/routing/lib/routing-service.js +125 -0
  250. package/dist/prod/packages/@ember/routing/lib/utils.js +236 -0
  251. package/dist/prod/packages/@ember/routing/none-location.js +120 -0
  252. package/dist/prod/packages/@ember/routing/route.js +1604 -0
  253. package/dist/prod/packages/@ember/routing/router-service.js +640 -0
  254. package/dist/prod/packages/@ember/routing/router.js +1335 -0
  255. package/dist/prod/packages/@ember/runloop/index.js +736 -0
  256. package/dist/prod/packages/@ember/service/index.js +124 -0
  257. package/dist/prod/packages/@ember/template/index.js +12 -0
  258. package/dist/prod/packages/@ember/template-compilation/index.js +20 -0
  259. package/dist/prod/packages/@ember/template-compiler/-internal-primitives.js +1 -0
  260. package/dist/prod/packages/@ember/template-compiler/-internal-utils.js +1 -0
  261. package/dist/prod/packages/@ember/template-compiler/index.js +2 -0
  262. package/dist/prod/packages/@ember/template-compiler/lib/-internal/primitives.js +1 -0
  263. package/dist/prod/packages/@ember/template-compiler/lib/compile-options.js +103 -0
  264. package/dist/prod/packages/@ember/template-compiler/lib/dasherize-component-name.js +21 -0
  265. package/dist/prod/packages/@ember/template-compiler/lib/plugins/allowed-globals.js +56 -0
  266. package/dist/prod/packages/@ember/template-compiler/lib/plugins/assert-against-attrs.js +49 -0
  267. package/dist/prod/packages/@ember/template-compiler/lib/plugins/assert-against-named-outlets.js +34 -0
  268. package/dist/prod/packages/@ember/template-compiler/lib/plugins/assert-input-helper-without-block.js +22 -0
  269. package/dist/prod/packages/@ember/template-compiler/lib/plugins/assert-reserved-named-arguments.js +37 -0
  270. package/dist/{packages → prod/packages}/@ember/template-compiler/lib/plugins/index.js +1 -1
  271. package/dist/prod/packages/@ember/template-compiler/lib/plugins/transform-action-syntax.js +65 -0
  272. package/dist/prod/packages/@ember/template-compiler/lib/plugins/transform-each-in-into-each.js +51 -0
  273. package/dist/prod/packages/@ember/template-compiler/lib/plugins/transform-each-track-array.js +50 -0
  274. package/dist/{packages → prod/packages}/@ember/template-compiler/lib/plugins/transform-in-element.js +20 -6
  275. package/dist/prod/packages/@ember/template-compiler/lib/plugins/transform-quoted-bindings-into-just-bindings.js +37 -0
  276. package/dist/prod/packages/@ember/template-compiler/lib/plugins/transform-resolutions.js +4 -0
  277. package/dist/prod/packages/@ember/template-compiler/lib/plugins/transform-wrap-mount-and-outlet.js +57 -0
  278. package/dist/prod/packages/@ember/template-compiler/lib/plugins/utils.js +55 -0
  279. package/dist/prod/packages/@ember/template-compiler/lib/public-api.js +1 -0
  280. package/dist/prod/packages/@ember/template-compiler/lib/runtime.js +1 -0
  281. package/dist/prod/packages/@ember/template-compiler/lib/system/calculate-location-display.js +28 -0
  282. package/dist/prod/packages/@ember/template-compiler/lib/template.js +245 -0
  283. package/dist/prod/packages/@ember/template-factory/index.js +5 -0
  284. package/dist/prod/packages/@ember/test/adapter.js +2 -0
  285. package/dist/prod/packages/@ember/test/index.js +18 -0
  286. package/dist/prod/packages/@ember/utils/index.js +7 -0
  287. package/dist/prod/packages/@ember/utils/lib/compare.js +159 -0
  288. package/dist/prod/packages/@ember/utils/lib/is-equal.js +60 -0
  289. package/dist/prod/packages/@ember/utils/lib/is_blank.js +36 -0
  290. package/dist/prod/packages/@ember/utils/lib/is_empty.js +67 -0
  291. package/dist/prod/packages/@ember/utils/lib/is_none.js +28 -0
  292. package/dist/prod/packages/@ember/utils/lib/is_present.js +39 -0
  293. package/dist/prod/packages/@ember/utils/lib/type-of.js +110 -0
  294. package/dist/prod/packages/@ember/version/index.js +1 -0
  295. package/dist/prod/packages/@glimmer/destroyable/index.js +128 -0
  296. package/dist/prod/packages/@glimmer/encoder/index.js +28 -0
  297. package/dist/prod/packages/@glimmer/env/index.js +4 -0
  298. package/dist/prod/packages/@glimmer/global-context/index.js +138 -0
  299. package/dist/prod/packages/@glimmer/manager/index.js +293 -0
  300. package/dist/{packages/shared-chunks/node-dom-helper-BYL7Plyj.js → prod/packages/@glimmer/node/index.js} +10 -12
  301. package/dist/prod/packages/@glimmer/opcode-compiler/index.js +40 -0
  302. package/dist/prod/packages/@glimmer/owner/index.js +19 -0
  303. package/dist/prod/packages/@glimmer/program/index.js +12 -0
  304. package/dist/{packages/shared-chunks/iterable-BKS7az3P.js → prod/packages/@glimmer/reference/index.js} +13 -12
  305. package/dist/prod/packages/@glimmer/runtime/index.js +9 -0
  306. package/dist/prod/packages/@glimmer/tracking/index.js +115 -0
  307. package/dist/prod/packages/@glimmer/tracking/primitives/cache/index.js +6 -0
  308. package/dist/prod/packages/@glimmer/util/index.js +129 -0
  309. package/dist/prod/packages/@glimmer/validator/index.js +1027 -0
  310. package/dist/prod/packages/@glimmer/vm/index.js +15 -0
  311. package/dist/prod/packages/@glimmer/wire-format/index.js +102 -0
  312. package/dist/prod/packages/@simple-dom/document/index.js +355 -0
  313. package/dist/prod/packages/backburner.js/index.js +939 -0
  314. package/dist/prod/packages/dag-map/index.js +202 -0
  315. package/dist/prod/packages/ember/version.js +4 -0
  316. package/dist/prod/packages/ember-template-compiler/index.js +100 -0
  317. package/dist/prod/packages/ember-testing/index.js +6 -0
  318. package/dist/prod/packages/ember-testing/lib/adapters/adapter.js +49 -0
  319. package/dist/prod/packages/ember-testing/lib/public-api.js +2 -0
  320. package/dist/prod/packages/ember-testing/lib/test/adapter.js +32 -0
  321. package/dist/prod/packages/ember-testing/lib/test/pending_requests.js +10 -0
  322. package/dist/prod/packages/ember-testing/lib/test/waiters.js +128 -0
  323. package/dist/prod/packages/ember-testing/lib/test.js +25 -0
  324. package/dist/prod/packages/route-recognizer/index.js +671 -0
  325. package/dist/prod/packages/router_js/index.js +1527 -0
  326. package/dist/prod/packages/rsvp/index.js +1 -0
  327. package/dist/prod/packages/shared-chunks/alias-BkT-0B1G.js +81 -0
  328. package/dist/prod/packages/shared-chunks/api-Co-k4HVs.js +200 -0
  329. package/dist/prod/packages/shared-chunks/args-proxy-Dl0A0YWI.js +131 -0
  330. package/dist/prod/packages/shared-chunks/array-EwekEvId.js +117 -0
  331. package/dist/prod/packages/shared-chunks/array-utils-CZQxrdD3.js +45 -0
  332. package/dist/prod/packages/shared-chunks/assert-CUCJBR2C.js +19 -0
  333. package/dist/prod/packages/shared-chunks/cache-qDyqAcpg.js +35 -0
  334. package/dist/prod/packages/shared-chunks/capabilities-DGmQ_mz4.js +26 -0
  335. package/dist/prod/packages/shared-chunks/chunk-3SQBS3Y5-Cj4eryg1.js +121 -0
  336. package/dist/prod/packages/shared-chunks/collections-GpG8lT2g.js +75 -0
  337. package/dist/prod/packages/shared-chunks/compiler-Ddfo5StE.js +6806 -0
  338. package/dist/prod/packages/shared-chunks/computed_cache-DmYKevAP.js +12 -0
  339. package/dist/prod/packages/shared-chunks/constants-b-2IVErl.js +210 -0
  340. package/dist/prod/packages/shared-chunks/debug-brand-B1TWjOCH.js +12 -0
  341. package/dist/prod/packages/shared-chunks/decorator-BdDDBUd2.js +123 -0
  342. package/dist/prod/packages/shared-chunks/dictionary-gc5gpyOG.js +13 -0
  343. package/dist/prod/packages/shared-chunks/element-builder-CiLTrXD6.js +776 -0
  344. package/dist/prod/packages/shared-chunks/flags-B9qxc-pB.js +24 -0
  345. package/dist/prod/packages/shared-chunks/fragment-EpVz5Xuc.js +910 -0
  346. package/dist/prod/packages/shared-chunks/get-debug-name-BDxIL2Y1.js +3 -0
  347. package/dist/prod/packages/shared-chunks/has-dom-DdQORPzI.js +4 -0
  348. package/dist/prod/packages/shared-chunks/index-CSVCFS_p.js +1904 -0
  349. package/dist/prod/packages/shared-chunks/index-Cc8WmrB-.js +21 -0
  350. package/dist/prod/packages/shared-chunks/index-DZLHQAlb.js +5842 -0
  351. package/dist/prod/packages/shared-chunks/injected_property-DL3vQoFA.js +58 -0
  352. package/dist/prod/packages/shared-chunks/invoke-DxL00a1D.js +53 -0
  353. package/dist/prod/packages/shared-chunks/is_proxy-Cr1qlMv_.js +16 -0
  354. package/dist/prod/packages/shared-chunks/lookup-descriptor-CwcVgaLv.js +13 -0
  355. package/dist/prod/packages/shared-chunks/name-C68GLLO3.js +11 -0
  356. package/dist/prod/packages/shared-chunks/namespace_search-Aog9nySA.js +1070 -0
  357. package/dist/prod/packages/shared-chunks/object-utils-AijlD-JH.js +12 -0
  358. package/dist/prod/packages/shared-chunks/observers-R1ZklwWy.js +714 -0
  359. package/dist/prod/packages/shared-chunks/on-CrTl7JQU.js +3329 -0
  360. package/dist/prod/packages/shared-chunks/program-B7SJZ5NF.js +176 -0
  361. package/dist/prod/packages/shared-chunks/program-context-C-JdYXRA.js +146 -0
  362. package/dist/prod/packages/shared-chunks/property_set-O080KTKZ.js +99 -0
  363. package/dist/prod/packages/shared-chunks/public-api-C3KlJmEr.js +10 -0
  364. package/dist/prod/packages/shared-chunks/reference-BNqcwZWH.js +151 -0
  365. package/dist/prod/packages/shared-chunks/registers-ylirb0dq.js +35 -0
  366. package/dist/prod/packages/shared-chunks/rehydrate-builder-CSn1aIO1.js +459 -0
  367. package/dist/prod/packages/shared-chunks/render-C1ZnScKH.js +1464 -0
  368. package/dist/prod/packages/shared-chunks/rsvp-CnCSY930.js +2306 -0
  369. package/dist/prod/packages/shared-chunks/serialize-builder-CVQ3q8rJ.js +124 -0
  370. package/dist/prod/packages/shared-chunks/set_properties-CjsDTRey.js +101 -0
  371. package/dist/prod/packages/shared-chunks/setup-registry-CMNYh2jY.js +53 -0
  372. package/dist/prod/packages/shared-chunks/simple-cast-DCvJLSin.js +33 -0
  373. package/dist/prod/packages/shared-chunks/super-Cm_a_cLQ.js +275 -0
  374. package/dist/prod/packages/shared-chunks/template-Dc_cBOoX.js +19 -0
  375. package/dist/prod/packages/shared-chunks/tracked-ChVNBE2f.js +131 -0
  376. package/dist/prod/packages/shared-chunks/transform-resolutions-C7wq_Q_c.js +6939 -0
  377. package/dist/prod/packages/shared-chunks/unrecognized-url-error-DDBwfzdm.js +537 -0
  378. package/docs/data.json +3009 -2358
  379. package/lib/index.js +157 -279
  380. package/package.json +30 -58
  381. package/types/stable/@ember/-internals/deprecations/index.d.ts +0 -6
  382. package/types/stable/@ember/-internals/environment/index.d.ts +0 -1
  383. package/types/stable/@ember/-internals/environment/lib/env.d.ts +0 -3
  384. package/types/stable/@ember/-internals/glimmer/lib/component-managers/curly.d.ts +3 -6
  385. package/types/stable/@ember/-internals/glimmer/lib/component-managers/root.d.ts +1 -2
  386. package/types/stable/@ember/-internals/glimmer/lib/helper.d.ts +22 -29
  387. package/types/stable/@ember/-internals/glimmer/lib/renderer.d.ts +2 -2
  388. package/types/stable/@ember/-internals/glimmer/lib/resolver.d.ts +0 -2
  389. package/types/stable/@ember/-internals/glimmer/lib/utils/bindings.d.ts +0 -1
  390. package/types/stable/@ember/-internals/meta/lib/meta.d.ts +1 -1
  391. package/types/stable/@ember/-internals/metal/lib/alias.d.ts +0 -11
  392. package/types/stable/@ember/-internals/metal/lib/decorator.d.ts +0 -1
  393. package/types/stable/@ember/-internals/metal/lib/each_proxy_events.d.ts +0 -1
  394. package/types/stable/@ember/-internals/metal/lib/observer.d.ts +0 -2
  395. package/types/stable/@ember/-internals/metal/lib/property_get.d.ts +4 -10
  396. package/types/stable/@ember/-internals/utils/index.d.ts +0 -1
  397. package/types/stable/@ember/-internals/views/lib/system/utils.d.ts +3 -15
  398. package/types/stable/@ember/application/index.d.ts +2 -63
  399. package/types/stable/@ember/routing/history-location.d.ts +0 -1
  400. package/types/stable/@ember/routing/lib/location-utils.d.ts +1 -2
  401. package/types/stable/@ember/routing/none-location.d.ts +1 -2
  402. package/types/stable/@ember/template-compiler/index.d.ts +1 -0
  403. package/types/stable/@ember/template-compiler/lib/plugins/allowed-globals.d.ts +26 -0
  404. package/types/stable/@ember/test/index.d.ts +0 -3
  405. package/types/stable/@glimmer/interfaces/lib/compile/wire-format/api.d.ts +1 -1
  406. package/types/stable/@glimmer/interfaces/lib/template.d.ts +1 -1
  407. package/types/stable/@glimmer/program/lib/program.d.ts +0 -1
  408. package/types/stable/@glimmer/validator/lib/collections/map.d.ts +1 -1
  409. package/types/stable/@handlebars/parser/types/ast.d.ts +148 -0
  410. package/types/stable/@handlebars/parser/types/index.d.ts +13 -0
  411. package/types/stable/ember-template-compiler/index.d.ts +0 -2
  412. package/types/stable/ember-template-compiler/lib/public-api.d.ts +0 -1
  413. package/types/stable/ember-testing/lib/public-api.d.ts +0 -6
  414. package/types/stable/ember-testing/lib/test/pending_requests.d.ts +0 -3
  415. package/types/stable/ember-testing/lib/test.d.ts +0 -23
  416. package/types/stable/index.d.ts +15 -32
  417. package/types/stable/router_js/index.d.ts +7 -0
  418. package/types/stable/router_js/lib/core.d.ts +9 -0
  419. package/types/stable/router_js/lib/route-info.d.ts +107 -0
  420. package/types/stable/router_js/lib/router.d.ts +245 -0
  421. package/types/stable/router_js/lib/transition-aborted-error.d.ts +15 -0
  422. package/types/stable/router_js/lib/transition-intent/named-transition-intent.d.ts +23 -0
  423. package/types/stable/router_js/lib/transition-intent/url-transition-intent.d.ts +12 -0
  424. package/types/stable/router_js/lib/transition-intent.d.ts +13 -0
  425. package/types/stable/router_js/lib/transition-state.d.ts +25 -0
  426. package/types/stable/router_js/lib/transition.d.ts +241 -0
  427. package/types/stable/router_js/lib/unrecognized-url-error.d.ts +11 -0
  428. package/types/stable/router_js/lib/utils.d.ts +41 -0
  429. package/dist/ember-template-compiler.js +0 -20631
  430. package/dist/ember-template-compiler.js.map +0 -1
  431. package/dist/ember-testing.js +0 -1351
  432. package/dist/ember-testing.js.map +0 -1
  433. package/dist/ember.debug.js +0 -52306
  434. package/dist/ember.debug.js.map +0 -1
  435. package/dist/ember.prod.js +0 -49369
  436. package/dist/ember.prod.js.map +0 -1
  437. package/dist/packages/@ember/-internals/container/index.js +0 -1
  438. package/dist/packages/@ember/-internals/environment/index.js +0 -1
  439. package/dist/packages/@ember/-internals/glimmer/index.js +0 -18
  440. package/dist/packages/@ember/-internals/metal/index.js +0 -51
  441. package/dist/packages/@ember/-internals/utils/index.js +0 -7
  442. package/dist/packages/@ember/application/lib/lazy_load.js +0 -68
  443. package/dist/packages/@ember/component/helper.js +0 -14
  444. package/dist/packages/@ember/modifier/index.js +0 -23
  445. package/dist/packages/@ember/object/-internals.js +0 -35
  446. package/dist/packages/@ember/object/events.js +0 -12
  447. package/dist/packages/@ember/object/observers.js +0 -12
  448. package/dist/packages/@ember/renderer/index.js +0 -14
  449. package/dist/packages/@ember/routing/index.js +0 -14
  450. package/dist/packages/@ember/template/index.js +0 -14
  451. package/dist/packages/@ember/template-factory/index.js +0 -8
  452. package/dist/packages/@ember/test/index.js +0 -27
  453. package/dist/packages/@glimmer/encoder/index.js +0 -1
  454. package/dist/packages/@glimmer/manager/index.js +0 -5
  455. package/dist/packages/@glimmer/node/index.js +0 -2
  456. package/dist/packages/@glimmer/program/index.js +0 -3
  457. package/dist/packages/@glimmer/reference/index.js +0 -2
  458. package/dist/packages/@glimmer/tracking/index.js +0 -48
  459. package/dist/packages/@glimmer/tracking/primitives/cache/index.js +0 -12
  460. package/dist/packages/ember/barrel.js +0 -511
  461. package/dist/packages/ember/index.js +0 -20
  462. package/dist/packages/ember-template-compiler/index.js +0 -17135
  463. package/dist/packages/ember-testing/lib/adapters/qunit.js +0 -53
  464. package/dist/packages/ember-testing/lib/ext/application.js +0 -174
  465. package/dist/packages/ember-testing/lib/ext/rsvp.js +0 -17
  466. package/dist/packages/ember-testing/lib/helpers/and_then.js +0 -11
  467. package/dist/packages/ember-testing/lib/helpers/current_path.js +0 -32
  468. package/dist/packages/ember-testing/lib/helpers/current_route_name.js +0 -32
  469. package/dist/packages/ember-testing/lib/helpers/current_url.js +0 -29
  470. package/dist/packages/ember-testing/lib/helpers/pause_test.js +0 -76
  471. package/dist/packages/ember-testing/lib/helpers/visit.js +0 -51
  472. package/dist/packages/ember-testing/lib/helpers/wait.js +0 -55
  473. package/dist/packages/ember-testing/lib/helpers.js +0 -17
  474. package/dist/packages/ember-testing/lib/initializers.js +0 -56
  475. package/dist/packages/ember-testing/lib/public-api.js +0 -8
  476. package/dist/packages/ember-testing/lib/setup_for_testing.js +0 -31
  477. package/dist/packages/ember-testing/lib/test/helpers.js +0 -133
  478. package/dist/packages/ember-testing/lib/test/on_inject_helpers.js +0 -39
  479. package/dist/packages/ember-testing/lib/test/pending_requests.js +0 -22
  480. package/dist/packages/ember-testing/lib/test/promise.js +0 -83
  481. package/dist/packages/ember-testing/lib/test/run.js +0 -11
  482. package/dist/packages/ember-testing/lib/test.js +0 -68
  483. package/dist/packages/router_js/index.js +0 -2
  484. package/dist/packages/shared-chunks/helpers-C1rIkuSd.js +0 -11
  485. package/dist/packages/shared-chunks/invoke-BjRgvK2V.js +0 -27
  486. package/dist/packages/shared-chunks/public-api-BQsJemZG.js +0 -20
  487. package/dist/packages/shared-chunks/template_registry-DigcUg9m.js +0 -24
  488. package/dist/packages/shared-chunks/to-string-CqD7_vQ4.js +0 -60
  489. package/types/stable/@ember/-internals/environment/lib/global.d.ts +0 -4
  490. package/types/stable/@ember/-internals/glimmer/lib/modifiers/internal.d.ts +0 -34
  491. package/types/stable/@ember/-internals/glimmer/lib/syntax/utils.d.ts +0 -5
  492. package/types/stable/@ember/-internals/glimmer/lib/templates/empty.d.ts +0 -4
  493. package/types/stable/@ember/-internals/glimmer/lib/utils/debug-render-message.d.ts +0 -4
  494. package/types/stable/@ember/-internals/metal/lib/dependent_keys.d.ts +0 -3
  495. package/types/stable/@ember/-internals/utils/lib/symbol.d.ts +0 -5
  496. package/types/stable/@ember/application/lib/lazy_load.d.ts +0 -38
  497. package/types/stable/@ember/template-compiler/lib/public-types.d.ts +0 -3
  498. package/types/stable/ember/barrel.d.ts +0 -358
  499. package/types/stable/ember/index.d.ts +0 -358
  500. package/types/stable/ember-template-compiler/lib/system/bootstrap.d.ts +0 -26
  501. package/types/stable/ember-template-compiler/lib/system/initializer.d.ts +0 -3
  502. package/types/stable/ember-testing/lib/adapters/qunit.d.ts +0 -22
  503. package/types/stable/ember-testing/lib/ext/application.d.ts +0 -12
  504. package/types/stable/ember-testing/lib/ext/rsvp.d.ts +0 -4
  505. package/types/stable/ember-testing/lib/helpers/and_then.d.ts +0 -4
  506. package/types/stable/ember-testing/lib/helpers/current_path.d.ts +0 -22
  507. package/types/stable/ember-testing/lib/helpers/current_route_name.d.ts +0 -21
  508. package/types/stable/ember-testing/lib/helpers/current_url.d.ts +0 -22
  509. package/types/stable/ember-testing/lib/helpers/pause_test.d.ts +0 -52
  510. package/types/stable/ember-testing/lib/helpers/visit.d.ts +0 -22
  511. package/types/stable/ember-testing/lib/helpers/wait.d.ts +0 -34
  512. package/types/stable/ember-testing/lib/helpers.d.ts +0 -3
  513. package/types/stable/ember-testing/lib/initializers.d.ts +0 -3
  514. package/types/stable/ember-testing/lib/setup_for_testing.d.ts +0 -15
  515. package/types/stable/ember-testing/lib/test/helpers.d.ts +0 -116
  516. package/types/stable/ember-testing/lib/test/on_inject_helpers.d.ts +0 -33
  517. package/types/stable/ember-testing/lib/test/promise.d.ts +0 -37
  518. package/types/stable/ember-testing/lib/test/run.d.ts +0 -3
  519. package/types/stable/loader/lib/index.d.ts +0 -4
  520. package/types/stable/require.d.ts +0 -4
  521. /package/dist/{packages → dev/packages}/@ember/-internals/browser-environment/index.js +0 -0
  522. /package/dist/{packages → dev/packages}/@ember/-internals/error-handling/index.js +0 -0
  523. /package/dist/{packages → dev/packages}/@ember/-internals/meta/index.js +0 -0
  524. /package/dist/{packages → dev/packages}/@ember/-internals/owner/index.js +0 -0
  525. /package/dist/{packages → dev/packages}/@ember/-internals/runtime/index.js +0 -0
  526. /package/dist/{packages → dev/packages}/@ember/-internals/runtime/lib/mixins/comparable.js +0 -0
  527. /package/dist/{packages → dev/packages}/@ember/-internals/runtime/lib/mixins/container_proxy.js +0 -0
  528. /package/dist/{packages → dev/packages}/@ember/-internals/utility-types/index.js +0 -0
  529. /package/dist/{packages → dev/packages}/@ember/-internals/views/index.js +0 -0
  530. /package/dist/{packages → dev/packages}/@ember/-internals/views/lib/compat/attrs.js +0 -0
  531. /package/dist/{packages → dev/packages}/@ember/-internals/views/lib/component_lookup.js +0 -0
  532. /package/dist/{packages → dev/packages}/@ember/array/-internals.js +0 -0
  533. /package/dist/{packages → dev/packages}/@ember/array/lib/make-array.js +0 -0
  534. /package/dist/{packages → dev/packages}/@ember/array/make.js +0 -0
  535. /package/dist/{packages → dev/packages}/@ember/array/mutable.js +0 -0
  536. /package/dist/{packages → dev/packages}/@ember/debug/lib/capture-render-tree.js +0 -0
  537. /package/dist/{packages → dev/packages}/@ember/debug/lib/inspect.js +0 -0
  538. /package/dist/{packages → dev/packages}/@ember/debug/lib/testing.js +0 -0
  539. /package/dist/{packages → dev/packages}/@ember/deprecated-features/index.js +0 -0
  540. /package/dist/{packages → dev/packages}/@ember/destroyable/index.js +0 -0
  541. /package/dist/{packages → dev/packages}/@ember/engine/lib/engine-parent.js +0 -0
  542. /package/dist/{packages → dev/packages}/@ember/engine/parent.js +0 -0
  543. /package/dist/{packages → dev/packages}/@ember/enumerable/index.js +0 -0
  544. /package/dist/{packages → dev/packages}/@ember/enumerable/mutable.js +0 -0
  545. /package/dist/{packages → dev/packages}/@ember/object/proxy.js +0 -0
  546. /package/dist/{packages → dev/packages}/@ember/owner/index.js +0 -0
  547. /package/dist/{packages → dev/packages}/@ember/reactive/collections.js +0 -0
  548. /package/dist/{packages → dev/packages}/@ember/reactive/index.js +0 -0
  549. /package/dist/{packages → dev/packages}/@ember/routing/lib/cache.js +0 -0
  550. /package/dist/{packages → dev/packages}/@ember/routing/lib/controller_for.js +0 -0
  551. /package/dist/{packages → dev/packages}/@ember/routing/lib/query_params.js +0 -0
  552. /package/dist/{packages → dev/packages}/@ember/routing/lib/router_state.js +0 -0
  553. /package/dist/{packages → dev/packages}/@ember/template-compiler/-internal-primitives.js +0 -0
  554. /package/dist/{packages → dev/packages}/@ember/template-compiler/-internal-utils.js +0 -0
  555. /package/dist/{packages → dev/packages}/@ember/template-compiler/lib/-internal/primitives.js +0 -0
  556. /package/dist/{packages → dev/packages}/@ember/template-compiler/lib/plugins/transform-action-syntax.js +0 -0
  557. /package/dist/{packages → dev/packages}/@ember/template-compiler/lib/plugins/transform-each-in-into-each.js +0 -0
  558. /package/dist/{packages → dev/packages}/@ember/template-compiler/lib/plugins/transform-quoted-bindings-into-just-bindings.js +0 -0
  559. /package/dist/{packages → dev/packages}/@ember/template-compiler/lib/plugins/transform-wrap-mount-and-outlet.js +0 -0
  560. /package/dist/{packages → dev/packages}/@ember/template-compiler/lib/plugins/utils.js +0 -0
  561. /package/dist/{packages → dev/packages}/@ember/template-compiler/lib/public-api.js +0 -0
  562. /package/dist/{packages → dev/packages}/@ember/template-compiler/lib/runtime.js +0 -0
  563. /package/dist/{packages → dev/packages}/@ember/template-compiler/lib/system/calculate-location-display.js +0 -0
  564. /package/dist/{packages → dev/packages}/@ember/template-compiler/runtime.js +0 -0
  565. /package/dist/{packages → dev/packages}/@ember/test/adapter.js +0 -0
  566. /package/dist/{packages → dev/packages}/@ember/utils/index.js +0 -0
  567. /package/dist/{packages → dev/packages}/@ember/utils/lib/is-equal.js +0 -0
  568. /package/dist/{packages → dev/packages}/@ember/utils/lib/is_blank.js +0 -0
  569. /package/dist/{packages → dev/packages}/@ember/utils/lib/is_none.js +0 -0
  570. /package/dist/{packages → dev/packages}/@ember/utils/lib/is_present.js +0 -0
  571. /package/dist/{packages → dev/packages}/@ember/utils/lib/type-of.js +0 -0
  572. /package/dist/{packages → dev/packages}/@ember/version/index.js +0 -0
  573. /package/dist/{packages → dev/packages}/@glimmer/env/index.js +0 -0
  574. /package/dist/{packages → dev/packages}/@glimmer/owner/index.js +0 -0
  575. /package/dist/{packages → dev/packages}/@glimmer/wire-format/index.js +0 -0
  576. /package/dist/{packages → dev/packages}/@simple-dom/document/index.js +0 -0
  577. /package/dist/{packages → dev/packages}/backburner.js/index.js +0 -0
  578. /package/dist/{packages → dev/packages}/dag-map/index.js +0 -0
  579. /package/dist/{packages → dev/packages}/ember-testing/lib/adapters/adapter.js +0 -0
  580. /package/dist/{packages → dev/packages}/ember-testing/lib/test/adapter.js +0 -0
  581. /package/dist/{packages → dev/packages}/ember-testing/lib/test/waiters.js +0 -0
  582. /package/dist/{packages → dev/packages}/route-recognizer/index.js +0 -0
  583. /package/dist/{packages → dev/packages}/rsvp/index.js +0 -0
  584. /package/dist/{packages → dev/packages}/shared-chunks/array-utils-CZQxrdD3.js +0 -0
  585. /package/dist/{packages → dev/packages}/shared-chunks/assert-CUCJBR2C.js +0 -0
  586. /package/dist/{packages → dev/packages}/shared-chunks/cache-qDyqAcpg.js +0 -0
  587. /package/dist/{packages → dev/packages}/shared-chunks/chunk-3SQBS3Y5-Cj4eryg1.js +0 -0
  588. /package/dist/{packages → dev/packages}/shared-chunks/computed_cache-DmYKevAP.js +0 -0
  589. /package/dist/{packages → dev/packages}/shared-chunks/debug-brand-B1TWjOCH.js +0 -0
  590. /package/dist/{packages → dev/packages}/shared-chunks/dictionary-gc5gpyOG.js +0 -0
  591. /package/dist/{packages → dev/packages}/shared-chunks/index-BGP1rw3B.js +0 -0
  592. /package/dist/{packages → dev/packages}/shared-chunks/object-utils-AijlD-JH.js +0 -0
  593. /package/dist/{packages → dev/packages}/shared-chunks/present-B1rrjAVM.js +0 -0
  594. /package/dist/{packages → dev/packages}/shared-chunks/registers-ylirb0dq.js +0 -0
  595. /package/dist/{packages → dev/packages}/shared-chunks/rsvp-CnCSY930.js +0 -0
  596. /package/dist/{packages → prod/packages}/@ember/routing/-internals.js +0 -0
  597. /package/dist/{packages/@ember/template-compiler/index.js → prod/packages/@ember/template-compiler/runtime.js} +0 -0
@@ -0,0 +1,1604 @@
1
+ import { privatize } from '../-internals/container/index.js';
2
+ import { getOwner } from '../-internals/owner/index.js';
3
+ import '../../shared-chunks/super-Cm_a_cLQ.js';
4
+ import { l as lookupDescriptor } from '../../shared-chunks/lookup-descriptor-CwcVgaLv.js';
5
+ import { i as isProxy } from '../../shared-chunks/is_proxy-Cr1qlMv_.js';
6
+ import '../-internals/environment/index.js';
7
+ import { isTesting } from '../debug/lib/testing.js';
8
+ import { d as defineProperty, c as computed } from '../../shared-chunks/namespace_search-Aog9nySA.js';
9
+ import '../../@glimmer/validator/index.js';
10
+ import { b as hasInternalComponentManager } from '../../shared-chunks/api-Co-k4HVs.js';
11
+ import '../../shared-chunks/reference-BNqcwZWH.js';
12
+ import '../../shared-chunks/capabilities-DGmQ_mz4.js';
13
+ import { d as descriptorForProperty } from '../../shared-chunks/decorator-BdDDBUd2.js';
14
+ import { g as get, j as flushAsyncObservers, c as addObserver } from '../../shared-chunks/observers-R1ZklwWy.js';
15
+ import { s as set } from '../../shared-chunks/property_set-O080KTKZ.js';
16
+ import { g as getProperties, s as setProperties } from '../../shared-chunks/set_properties-CjsDTRey.js';
17
+ import EmberObject from '../object/index.js';
18
+ import Evented from '../object/evented.js';
19
+ import { A } from '../array/index.js';
20
+ import '../-internals/runtime/lib/mixins/registry_proxy.js';
21
+ import '../-internals/runtime/lib/mixins/container_proxy.js';
22
+ import '../-internals/runtime/lib/mixins/comparable.js';
23
+ import ActionHandler from '../-internals/runtime/lib/mixins/action_handler.js';
24
+ import '../-internals/runtime/lib/mixins/-proxy.js';
25
+ import '../enumerable/mutable.js';
26
+ import '../-internals/runtime/lib/mixins/target_action_support.js';
27
+ import '../-internals/runtime/lib/ext/rsvp.js';
28
+ import typeOf from '../utils/lib/type-of.js';
29
+ import '../controller/index.js';
30
+ import '../engine/instance.js';
31
+ import { dependentKeyCompat } from '../object/compat.js';
32
+ import { once } from '../runloop/index.js';
33
+ import '../../route-recognizer/index.js';
34
+ import '../../shared-chunks/rsvp-CnCSY930.js';
35
+ import { S as STATE_SYMBOL, P as PARAMS_SYMBOL } from '../../shared-chunks/unrecognized-url-error-DDBwfzdm.js';
36
+ import generateController from './lib/generate_controller.js';
37
+ import { prefixRouteNameArg, stashParamNames, calculateCacheKey, normalizeControllerQueryParams } from './lib/utils.js';
38
+ import { a as decorateMethodV2 } from '../../shared-chunks/chunk-3SQBS3Y5-Cj4eryg1.js';
39
+
40
+ const RENDER = Symbol('render');
41
+ const RENDER_STATE = Symbol('render-state');
42
+
43
+ /**
44
+ @module @ember/routing/route
45
+ */
46
+
47
+ /**
48
+ The `Route` class is used to define individual routes. Refer to
49
+ the [routing guide](https://guides.emberjs.com/release/routing/) for documentation.
50
+
51
+ @class Route
52
+ @extends EmberObject
53
+ @uses ActionHandler
54
+ @uses Evented
55
+ @since 1.0.0
56
+ @public
57
+ */
58
+
59
+ class Route extends EmberObject.extend(ActionHandler, Evented) {
60
+ static isRouteFactory = true;
61
+
62
+ // These properties will end up appearing in the public interface because we
63
+ // `implements IRoute` from `router.js`, which has them as part of *its*
64
+ // public contract. We mark them as `@internal` so they at least signal to
65
+ // people subclassing `Route` that they should not use them.
66
+ /** @internal */
67
+ context = {};
68
+ /** @internal */
69
+
70
+ /** @internal */
71
+ _bucketCache;
72
+ /** @internal */
73
+ _internalName;
74
+ _names;
75
+ _router;
76
+ constructor(owner) {
77
+ super(owner);
78
+ if (owner) {
79
+ let router = owner.lookup('router:main');
80
+ let bucketCache = owner.lookup(privatize`-bucket-cache:main`);
81
+ this._router = router;
82
+ this._bucketCache = bucketCache;
83
+ this._topLevelViewTemplate = owner.lookup('template:-outlet');
84
+ this._environment = owner.lookup('-environment:main');
85
+ }
86
+ }
87
+
88
+ /**
89
+ A hook you can implement to convert the route's model into parameters
90
+ for the URL.
91
+ ```app/router.js
92
+ // ...
93
+ Router.map(function() {
94
+ this.route('post', { path: '/posts/:post_id' });
95
+ });
96
+ ```
97
+ ```app/routes/post.js
98
+ import Route from '@ember/routing/route';
99
+ export default class PostRoute extends Route {
100
+ model({ post_id }) {
101
+ // the server returns `{ id: 12 }`
102
+ return fetch(`/posts/${post_id}`;
103
+ }
104
+ serialize(model) {
105
+ // this will make the URL `/posts/12`
106
+ return { post_id: model.id };
107
+ }
108
+ }
109
+ ```
110
+ The default `serialize` method will insert the model's `id` into the
111
+ route's dynamic segment (in this case, `:post_id`) if the segment contains '_id'.
112
+ If the route has multiple dynamic segments or does not contain '_id', `serialize`
113
+ will return `getProperties(model, params)`
114
+ This method is called when `transitionTo` is called with a context
115
+ in order to populate the URL.
116
+ @method serialize
117
+ @param {Object} model the routes model
118
+ @param {Array} params an Array of parameter names for the current
119
+ route (in the example, `['post_id']`.
120
+ @return {Object} the serialized parameters
121
+ @since 1.0.0
122
+ @public
123
+ */
124
+ serialize(model, params) {
125
+ if (params.length < 1 || !model) {
126
+ return;
127
+ }
128
+ let object = {};
129
+ if (params.length === 1) {
130
+ let [name] = params;
131
+ if (typeof model === 'object' && name in model) {
132
+ object[name] = get(model, name);
133
+ } else if (/_id$/.test(name)) {
134
+ object[name] = get(model, 'id');
135
+ } else if (isProxy(model)) {
136
+ object[name] = get(model, name);
137
+ }
138
+ } else {
139
+ object = getProperties(model, params);
140
+ }
141
+ return object;
142
+ }
143
+
144
+ /**
145
+ Configuration hash for this route's queryParams. The possible
146
+ configuration options and their defaults are as follows
147
+ (assuming a query param whose controller property is `page`):
148
+ ```javascript
149
+ queryParams = {
150
+ page: {
151
+ // By default, controller query param properties don't
152
+ // cause a full transition when they are changed, but
153
+ // rather only cause the URL to update. Setting
154
+ // `refreshModel` to true will cause an "in-place"
155
+ // transition to occur, whereby the model hooks for
156
+ // this route (and any child routes) will re-fire, allowing
157
+ // you to reload models (e.g., from the server) using the
158
+ // updated query param values.
159
+ refreshModel: false,
160
+ // By default, changes to controller query param properties
161
+ // cause the URL to update via `pushState`, which means an
162
+ // item will be added to the browser's history, allowing
163
+ // you to use the back button to restore the app to the
164
+ // previous state before the query param property was changed.
165
+ // Setting `replace` to true will use `replaceState` (or its
166
+ // hash location equivalent), which causes no browser history
167
+ // item to be added. This options name and default value are
168
+ // the same as the `link-to` helper's `replace` option.
169
+ replace: false,
170
+ // By default, the query param URL key is the same name as
171
+ // the controller property name. Use `as` to specify a
172
+ // different URL key.
173
+ as: 'page'
174
+ }
175
+ };
176
+ ```
177
+ @property queryParams
178
+ @for Route
179
+ @type Object
180
+ @since 1.6.0
181
+ @public
182
+ */
183
+ // Set in reopen so it can be overriden with extend
184
+
185
+ /**
186
+ The name of the template to use by default when rendering this route's
187
+ template.
188
+ ```app/routes/posts/list.js
189
+ import Route from '@ember/routing/route';
190
+ export default class PostsListRoute extends Route {
191
+ templateName = 'posts/list';
192
+ }
193
+ ```
194
+ ```app/routes/posts/index.js
195
+ import PostsListRoute from '../posts/list';
196
+ export default class PostsIndexRoute extends PostsListRoute {};
197
+ ```
198
+ ```app/routes/posts/archived.js
199
+ import PostsListRoute from '../posts/list';
200
+ export default class PostsArchivedRoute extends PostsListRoute {};
201
+ ```
202
+ @property templateName
203
+ @type String
204
+ @default null
205
+ @since 1.4.0
206
+ @public
207
+ */
208
+ // Set in reopen so it can be overriden with extend
209
+
210
+ /**
211
+ The name of the controller to associate with this route.
212
+ By default, Ember will lookup a route's controller that matches the name
213
+ of the route (i.e. `posts.new`). However,
214
+ if you would like to define a specific controller to use, you can do so
215
+ using this property.
216
+ This is useful in many ways, as the controller specified will be:
217
+ * passed to the `setupController` method.
218
+ * used as the controller for the template being rendered by the route.
219
+ * returned from a call to `controllerFor` for the route.
220
+ @property controllerName
221
+ @type String
222
+ @default null
223
+ @since 1.4.0
224
+ @public
225
+ */
226
+ // Set in reopen so it can be overriden with extend
227
+
228
+ /**
229
+ The controller associated with this route.
230
+ Example
231
+ ```app/routes/form.js
232
+ import Route from '@ember/routing/route';
233
+ import { action } from '@ember/object';
234
+ export default class FormRoute extends Route {
235
+ @action
236
+ willTransition(transition) {
237
+ if (this.controller.get('userHasEnteredData') &&
238
+ !confirm('Are you sure you want to abandon progress?')) {
239
+ transition.abort();
240
+ } else {
241
+ // Bubble the `willTransition` action so that
242
+ // parent routes can decide whether or not to abort.
243
+ return true;
244
+ }
245
+ }
246
+ }
247
+ ```
248
+ @property controller
249
+ @type Controller
250
+ @since 1.6.0
251
+ @public
252
+ */
253
+
254
+ /**
255
+ The name of the route, dot-delimited.
256
+ For example, a route found at `app/routes/posts/post.js` will have
257
+ a `routeName` of `posts.post`.
258
+ @property routeName
259
+ @for Route
260
+ @type String
261
+ @since 1.0.0
262
+ @public
263
+ */
264
+
265
+ /**
266
+ The name of the route, dot-delimited, including the engine prefix
267
+ if applicable.
268
+ For example, a route found at `addon/routes/posts/post.js` within an
269
+ engine named `admin` will have a `fullRouteName` of `admin.posts.post`.
270
+ @property fullRouteName
271
+ @for Route
272
+ @type String
273
+ @since 2.10.0
274
+ @public
275
+ */
276
+
277
+ /**
278
+ Sets the name for this route, including a fully resolved name for routes
279
+ inside engines.
280
+ @private
281
+ @method _setRouteName
282
+ @param {String} name
283
+ */
284
+ _setRouteName(name) {
285
+ this.routeName = name;
286
+ let owner = getOwner(this);
287
+ this.fullRouteName = getEngineRouteName(owner, name);
288
+ }
289
+
290
+ /**
291
+ @private
292
+ @method _stashNames
293
+ */
294
+ _stashNames(routeInfo, dynamicParent) {
295
+ if (this._names) {
296
+ return;
297
+ }
298
+ let names = this._names = routeInfo['_names'];
299
+ if (!names.length) {
300
+ routeInfo = dynamicParent;
301
+ names = routeInfo && routeInfo['_names'] || [];
302
+ }
303
+
304
+ // SAFETY: Since `_qp` is protected we can't infer the type
305
+ let qps = get(this, '_qp').qps;
306
+ let namePaths = new Array(names.length);
307
+ for (let a = 0; a < names.length; ++a) {
308
+ namePaths[a] = `${routeInfo.name}.${names[a]}`;
309
+ }
310
+ for (let qp of qps) {
311
+ if (qp.scope === 'model') {
312
+ qp.parts = namePaths;
313
+ }
314
+ }
315
+ }
316
+
317
+ /**
318
+ @private
319
+ @property _activeQPChanged
320
+ */
321
+ _activeQPChanged(qp, value) {
322
+ this._router._activeQPChanged(qp.scopedPropertyName, value);
323
+ }
324
+
325
+ /**
326
+ @private
327
+ @method _updatingQPChanged
328
+ */
329
+ _updatingQPChanged(qp) {
330
+ this._router._updatingQPChanged(qp.urlKey);
331
+ }
332
+
333
+ /**
334
+ Returns a hash containing the parameters of an ancestor route.
335
+ You may notice that `this.paramsFor` sometimes works when referring to a
336
+ child route, but this behavior should not be relied upon as only ancestor
337
+ routes are certain to be loaded in time.
338
+ Example
339
+ ```app/router.js
340
+ // ...
341
+ Router.map(function() {
342
+ this.route('member', { path: ':name' }, function() {
343
+ this.route('interest', { path: ':interest' });
344
+ });
345
+ });
346
+ ```
347
+ ```app/routes/member.js
348
+ import Route from '@ember/routing/route';
349
+ export default class MemberRoute extends Route {
350
+ queryParams = {
351
+ memberQp: { refreshModel: true }
352
+ }
353
+ }
354
+ ```
355
+ ```app/routes/member/interest.js
356
+ import Route from '@ember/routing/route';
357
+ export default class MemberInterestRoute extends Route {
358
+ queryParams = {
359
+ interestQp: { refreshModel: true }
360
+ }
361
+ model() {
362
+ return this.paramsFor('member');
363
+ }
364
+ }
365
+ ```
366
+ If we visit `/turing/maths?memberQp=member&interestQp=interest` the model for
367
+ the `member.interest` route is a hash with:
368
+ * `name`: `turing`
369
+ * `memberQp`: `member`
370
+ @method paramsFor
371
+ @param {String} name
372
+ @return {Object} hash containing the parameters of the route `name`
373
+ @since 1.4.0
374
+ @public
375
+ */
376
+ paramsFor(name) {
377
+ let owner = getOwner(this);
378
+ let route = owner.lookup(`route:${name}`);
379
+ if (route === undefined) {
380
+ return {};
381
+ }
382
+ let transition = this._router._routerMicrolib.activeTransition;
383
+ let state = transition ? transition[STATE_SYMBOL] : this._router._routerMicrolib.state;
384
+ let fullName = route.fullRouteName;
385
+ let params = {
386
+ ...state.params[fullName]
387
+ };
388
+ let queryParams = getQueryParamsFor(route, state);
389
+ return Object.entries(queryParams).reduce((params, [key, value]) => {
390
+ params[key] = value;
391
+ return params;
392
+ }, params);
393
+ }
394
+
395
+ /**
396
+ Serializes the query parameter key
397
+ @method serializeQueryParamKey
398
+ @param {String} controllerPropertyName
399
+ @private
400
+ */
401
+ serializeQueryParamKey(controllerPropertyName) {
402
+ return controllerPropertyName;
403
+ }
404
+
405
+ /**
406
+ Serializes value of the query parameter based on defaultValueType
407
+ @method serializeQueryParam
408
+ @param {Object} value
409
+ @param {String} urlKey
410
+ @param {String} defaultValueType
411
+ @private
412
+ */
413
+ serializeQueryParam(value, _urlKey, defaultValueType) {
414
+ // urlKey isn't used here, but anyone overriding
415
+ // can use it to provide serialization specific
416
+ // to a certain query param.
417
+ return this._router._serializeQueryParam(value, defaultValueType);
418
+ }
419
+
420
+ /**
421
+ Deserializes value of the query parameter based on defaultValueType
422
+ @method deserializeQueryParam
423
+ @param {Object} value
424
+ @param {String} urlKey
425
+ @param {String} defaultValueType
426
+ @private
427
+ */
428
+ deserializeQueryParam(value, _urlKey, defaultValueType) {
429
+ // urlKey isn't used here, but anyone overriding
430
+ // can use it to provide deserialization specific
431
+ // to a certain query param.
432
+ return this._router._deserializeQueryParam(value, defaultValueType);
433
+ }
434
+
435
+ /**
436
+ @private
437
+ @property _optionsForQueryParam
438
+ */
439
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type
440
+ _optionsForQueryParam(qp) {
441
+ const queryParams = get(this, 'queryParams');
442
+ return get(queryParams, qp.urlKey) || get(queryParams, qp.prop) || queryParams[qp.urlKey] || queryParams[qp.prop] || {};
443
+ }
444
+
445
+ /**
446
+ A hook you can use to reset controller values either when the model
447
+ changes or the route is exiting.
448
+ ```app/routes/articles.js
449
+ import Route from '@ember/routing/route';
450
+ export default class ArticlesRoute extends Route {
451
+ resetController(controller, isExiting, transition) {
452
+ if (isExiting && transition.targetName !== 'error') {
453
+ controller.set('page', 1);
454
+ }
455
+ }
456
+ }
457
+ ```
458
+ @method resetController
459
+ @param {Controller} controller instance
460
+ @param {Boolean} isExiting
461
+ @param {Object} transition
462
+ @since 1.7.0
463
+ @public
464
+ */
465
+ resetController(_controller, _isExiting, _transition) {
466
+ // We document that subclasses do not have to return *anything* and in fact
467
+ // do not even have to call super, so whiel we *do* return `this`, we need
468
+ // to be explicit in the types that our return type is *effectively* `void`.
469
+ return this;
470
+ }
471
+
472
+ /**
473
+ @private
474
+ @method exit
475
+ */
476
+ exit(transition) {
477
+ this.deactivate(transition);
478
+ this.trigger('deactivate', transition);
479
+ this.teardownViews();
480
+ }
481
+
482
+ /**
483
+ @private
484
+ @method _internalReset
485
+ @since 3.6.0
486
+ */
487
+ _internalReset(isExiting, transition) {
488
+ let controller = this.controller;
489
+ // SAFETY: Since `_qp` is protected we can't infer the type
490
+ controller['_qpDelegate'] = get(this, '_qp').states.inactive;
491
+ this.resetController(controller, isExiting, transition);
492
+ }
493
+
494
+ /**
495
+ @private
496
+ @method enter
497
+ */
498
+ enter(transition) {
499
+ this[RENDER_STATE] = undefined;
500
+ this.activate(transition);
501
+ this.trigger('activate', transition);
502
+ }
503
+
504
+ /**
505
+ This event is triggered when the router enters the route. It is
506
+ not executed when the model for the route changes.
507
+ ```app/routes/application.js
508
+ import { on } from '@ember/object/evented';
509
+ import Route from '@ember/routing/route';
510
+ export default Route.extend({
511
+ collectAnalytics: on('activate', function(){
512
+ collectAnalytics();
513
+ })
514
+ });
515
+ ```
516
+ @event activate
517
+ @since 1.9.0
518
+ @public
519
+ */
520
+
521
+ /**
522
+ This event is triggered when the router completely exits this
523
+ route. It is not executed when the model for the route changes.
524
+ ```app/routes/index.js
525
+ import { on } from '@ember/object/evented';
526
+ import Route from '@ember/routing/route';
527
+ export default Route.extend({
528
+ trackPageLeaveAnalytics: on('deactivate', function(){
529
+ trackPageLeaveAnalytics();
530
+ })
531
+ });
532
+ ```
533
+ @event deactivate
534
+ @since 1.9.0
535
+ @public
536
+ */
537
+
538
+ /**
539
+ This hook is executed when the router completely exits this route. It is
540
+ not executed when the model for the route changes.
541
+ @method deactivate
542
+ @param {Transition} transition
543
+ @since 1.0.0
544
+ @public
545
+ */
546
+ deactivate(_transition) {}
547
+
548
+ /**
549
+ This hook is executed when the router enters the route. It is not executed
550
+ when the model for the route changes.
551
+ @method activate
552
+ @param {Transition} transition
553
+ @since 1.0.0
554
+ @public
555
+ */
556
+ activate(_transition) {}
557
+
558
+ /**
559
+ Perform a synchronous transition into another route without attempting
560
+ to resolve promises, update the URL, or abort any currently active
561
+ asynchronous transitions (i.e. regular transitions caused by
562
+ `transitionTo` or URL changes).
563
+ This method is handy for performing intermediate transitions on the
564
+ way to a final destination route, and is called internally by the
565
+ default implementations of the `error` and `loading` handlers.
566
+ @method intermediateTransitionTo
567
+ @param {String} name the name of the route
568
+ @param {...Object} models the model(s) to be used while transitioning
569
+ to the route.
570
+ @since 1.2.0
571
+ @public
572
+ */
573
+ intermediateTransitionTo(...args) {
574
+ let [name, ...preparedArgs] = prefixRouteNameArg(this, args);
575
+ this._router.intermediateTransitionTo(name, ...preparedArgs);
576
+ }
577
+
578
+ /**
579
+ Refresh the model on this route and any child routes, firing the
580
+ `beforeModel`, `model`, and `afterModel` hooks in a similar fashion
581
+ to how routes are entered when transitioning in from other route.
582
+ The current route params (e.g. `article_id`) will be passed in
583
+ to the respective model hooks, and if a different model is returned,
584
+ `setupController` and associated route hooks will re-fire as well.
585
+ An example usage of this method is re-querying the server for the
586
+ latest information using the same parameters as when the route
587
+ was first entered.
588
+ Note that this will cause `model` hooks to fire even on routes
589
+ that were provided a model object when the route was initially
590
+ entered.
591
+ @method refresh
592
+ @return {Transition} the transition object associated with this
593
+ attempted transition
594
+ @since 1.4.0
595
+ @public
596
+ */
597
+ refresh() {
598
+ return this._router._routerMicrolib.refresh(this);
599
+ }
600
+
601
+ /**
602
+ This hook is the entry point for router.js
603
+ @private
604
+ @method setup
605
+ */
606
+ setup(context, transition) {
607
+ let controllerName = this.controllerName || this.routeName;
608
+ let definedController = this.controllerFor(controllerName, true);
609
+ let controller = definedController ?? this.generateController(controllerName);
610
+
611
+ // SAFETY: Since `_qp` is protected we can't infer the type
612
+ let queryParams = get(this, '_qp');
613
+
614
+ // Assign the route's controller so that it can more easily be
615
+ // referenced in action handlers. Side effects. Side effects everywhere.
616
+ if (!this.controller) {
617
+ let propNames = queryParams.propertyNames;
618
+ addQueryParamsObservers(controller, propNames);
619
+ this.controller = controller;
620
+ }
621
+ let states = queryParams.states;
622
+ controller._qpDelegate = states.allowOverrides;
623
+ if (transition) {
624
+ // Update the model dep values used to calculate cache keys.
625
+ stashParamNames(this._router, transition[STATE_SYMBOL].routeInfos);
626
+ let cache = this._bucketCache;
627
+ let params = transition[PARAMS_SYMBOL];
628
+ let allParams = queryParams.propertyNames;
629
+ allParams.forEach(prop => {
630
+ let aQp = queryParams.map[prop];
631
+ aQp.values = params;
632
+ let cacheKey = calculateCacheKey(aQp.route.fullRouteName, aQp.parts, aQp.values);
633
+ let value = cache.lookup(cacheKey, prop, aQp.undecoratedDefaultValue);
634
+ set(controller, prop, value);
635
+ });
636
+ let qpValues = getQueryParamsFor(this, transition[STATE_SYMBOL]);
637
+ setProperties(controller, qpValues);
638
+ }
639
+ this.setupController(controller, context, transition);
640
+ if (this._environment.options.shouldRender) {
641
+ this[RENDER]();
642
+ }
643
+
644
+ // Setup can cause changes to QPs which need to be propogated immediately in
645
+ // some situations. Eventually, we should work on making these async somehow.
646
+ flushAsyncObservers(false);
647
+ }
648
+
649
+ /*
650
+ Called when a query parameter for this route changes, regardless of whether the route
651
+ is currently part of the active route hierarchy. This will update the query parameter's
652
+ value in the cache so if this route becomes active, the cache value has been updated.
653
+ */
654
+ _qpChanged(prop, value, qp) {
655
+ if (!qp) {
656
+ return;
657
+ }
658
+
659
+ // Update model-dep cache
660
+ let cache = this._bucketCache;
661
+ let cacheKey = calculateCacheKey(qp.route.fullRouteName, qp.parts, qp.values);
662
+ cache.stash(cacheKey, prop, value);
663
+ }
664
+
665
+ /**
666
+ This hook is the first of the route entry validation hooks
667
+ called when an attempt is made to transition into a route
668
+ or one of its children. It is called before `model` and
669
+ `afterModel`, and is appropriate for cases when:
670
+ 1) A decision can be made to redirect elsewhere without
671
+ needing to resolve the model first.
672
+ 2) Any async operations need to occur first before the
673
+ model is attempted to be resolved.
674
+ This hook is provided the current `transition` attempt
675
+ as a parameter, which can be used to `.abort()` the transition,
676
+ save it for a later `.retry()`, or retrieve values set
677
+ on it from a previous hook. You can also just call
678
+ `router.transitionTo` to another route to implicitly
679
+ abort the `transition`.
680
+ You can return a promise from this hook to pause the
681
+ transition until the promise resolves (or rejects). This could
682
+ be useful, for instance, for retrieving async code from
683
+ the server that is required to enter a route.
684
+ @method beforeModel
685
+ @param {Transition} transition
686
+ @return {any | Promise<any>} if the value returned from this hook is
687
+ a promise, the transition will pause until the transition
688
+ resolves. Otherwise, non-promise return values are not
689
+ utilized in any way.
690
+ @since 1.0.0
691
+ @public
692
+ */
693
+
694
+ beforeModel(_transition) {}
695
+
696
+ /**
697
+ This hook is called after this route's model has resolved.
698
+ It follows identical async/promise semantics to `beforeModel`
699
+ but is provided the route's resolved model in addition to
700
+ the `transition`, and is therefore suited to performing
701
+ logic that can only take place after the model has already
702
+ resolved.
703
+ ```app/routes/posts.js
704
+ import Route from '@ember/routing/route';
705
+ import { service } from '@ember/service';
706
+ export default class PostsRoute extends Route {
707
+ @service router;
708
+ afterModel(posts, transition) {
709
+ if (posts.get('length') === 1) {
710
+ this.router.transitionTo('post.show', posts.get('firstObject'));
711
+ }
712
+ }
713
+ }
714
+ ```
715
+ Refer to documentation for `beforeModel` for a description
716
+ of transition-pausing semantics when a promise is returned
717
+ from this hook.
718
+ @method afterModel
719
+ @param {Object} resolvedModel the value returned from `model`,
720
+ or its resolved value if it was a promise
721
+ @param {Transition} transition
722
+ @return {any | Promise<any>} if the value returned from this hook is
723
+ a promise, the transition will pause until the transition
724
+ resolves. Otherwise, non-promise return values are not
725
+ utilized in any way.
726
+ @since 1.0.0
727
+ @public
728
+ */
729
+
730
+ afterModel(_resolvedModel, _transition) {}
731
+
732
+ /**
733
+ A hook you can implement to optionally redirect to another route.
734
+ Calling `this.router.transitionTo` from inside of the `redirect` hook will
735
+ abort the current transition (into the route that has implemented `redirect`).
736
+ `redirect` and `afterModel` behave very similarly and are
737
+ called almost at the same time, but they have an important
738
+ distinction when calling `this.router.transitionTo` to a child route
739
+ of the current route. From `afterModel`, this new transition
740
+ invalidates the current transition, causing `beforeModel`,
741
+ `model`, and `afterModel` hooks to be called again. But the
742
+ same transition started from `redirect` does _not_ invalidate
743
+ the current transition. In other words, by the time the `redirect`
744
+ hook has been called, both the resolved model and the attempted
745
+ entry into this route are considered fully validated.
746
+ @method redirect
747
+ @param {Object} model the model for this route
748
+ @param {Transition} transition the transition object associated with the current transition
749
+ @since 1.0.0
750
+ @public
751
+ */
752
+ redirect(_model, _transition) {}
753
+
754
+ /**
755
+ Called when the context is changed by router.js.
756
+ @private
757
+ @method contextDidChange
758
+ */
759
+ contextDidChange() {
760
+ this.currentModel = this.context;
761
+ }
762
+
763
+ /**
764
+ A hook you can implement to convert the URL into the model for
765
+ this route.
766
+ ```app/router.js
767
+ // ...
768
+ Router.map(function() {
769
+ this.route('post', { path: '/posts/:post_id' });
770
+ });
771
+ export default Router;
772
+ ```
773
+ Note that for routes with dynamic segments, this hook is not always
774
+ executed. If the route is entered through a transition (e.g. when
775
+ using the `link-to` Handlebars helper or the `transitionTo` method
776
+ of routes), and a model context is already provided this hook
777
+ is not called.
778
+ A model context does not include a primitive string or number,
779
+ which does cause the model hook to be called.
780
+ Routes without dynamic segments will always execute the model hook.
781
+ ```javascript
782
+ // no dynamic segment, model hook always called
783
+ this.router.transitionTo('posts');
784
+ // model passed in, so model hook not called
785
+ thePost = store.findRecord('post', 1);
786
+ this.router.transitionTo('post', thePost);
787
+ // integer passed in, model hook is called
788
+ this.router.transitionTo('post', 1);
789
+ // model id passed in, model hook is called
790
+ // useful for forcing the hook to execute
791
+ thePost = store.findRecord('post', 1);
792
+ this.router.transitionTo('post', thePost.id);
793
+ ```
794
+ This hook follows the asynchronous/promise semantics
795
+ described in the documentation for `beforeModel`. In particular,
796
+ if a promise returned from `model` fails, the error will be
797
+ handled by the `error` hook on `Route`.
798
+ Note that the legacy behavior of automatically defining a model
799
+ hook when a dynamic segment ending in `_id` is present is
800
+ [deprecated](https://deprecations.emberjs.com/v5.x#toc_deprecate-implicit-route-model).
801
+ You should explicitly define a model hook whenever any segments are
802
+ present.
803
+ Example
804
+ ```app/routes/post.js
805
+ import Route from '@ember/routing/route';
806
+ import { service } from '@ember/service';
807
+ export default class PostRoute extends Route {
808
+ @service store;
809
+ model(params) {
810
+ return this.store.findRecord('post', params.post_id);
811
+ }
812
+ }
813
+ ```
814
+ @method model
815
+ @param {Object} params the parameters extracted from the URL
816
+ @param {Transition} transition
817
+ @return {any | Promise<any>} the model for this route. If
818
+ a promise is returned, the transition will pause until
819
+ the promise resolves, and the resolved value of the promise
820
+ will be used as the model for this route.
821
+ @since 1.0.0
822
+ @public
823
+ */
824
+ model(params, transition) {
825
+ let name, sawParams;
826
+ // SAFETY: Since `_qp` is protected we can't infer the type
827
+ let queryParams = get(this, '_qp').map;
828
+ for (let prop in params) {
829
+ if (prop === 'queryParams' || queryParams && prop in queryParams) {
830
+ continue;
831
+ }
832
+ let match = prop.match(/^(.*)_id$/);
833
+ if (match !== null) {
834
+ name = match[1];
835
+ }
836
+ sawParams = true;
837
+ }
838
+ if (!name) {
839
+ if (sawParams) {
840
+ // SAFETY: This should be equivalent
841
+ return Object.assign({}, params);
842
+ } else {
843
+ if (transition.resolveIndex < 1) {
844
+ return;
845
+ }
846
+ // SAFETY: This should be correct, but TS is unable to infer this.
847
+ return transition[STATE_SYMBOL].routeInfos[transition.resolveIndex - 1].context;
848
+ }
849
+ }
850
+ return undefined;
851
+ }
852
+
853
+ /**
854
+ @private
855
+ @method deserialize
856
+ @param {Object} params the parameters extracted from the URL
857
+ @param {Transition} transition
858
+ @return {any | Promise<any>} the model for this route.
859
+ Router.js hook.
860
+ */
861
+ deserialize(_params, transition) {
862
+ return this.model(this._paramsFor(this.routeName, _params), transition);
863
+ }
864
+
865
+ /**
866
+ A hook you can use to setup the controller for the current route.
867
+ This method is called with the controller for the current route and the
868
+ model supplied by the `model` hook.
869
+ By default, the `setupController` hook sets the `model` property of
870
+ the controller to the specified `model` when it is not `undefined`.
871
+ If you implement the `setupController` hook in your Route, it will
872
+ prevent this default behavior. If you want to preserve that behavior
873
+ when implementing your `setupController` function, make sure to call
874
+ `super`:
875
+ ```app/routes/photos.js
876
+ import Route from '@ember/routing/route';
877
+ import { service } from '@ember/service';
878
+ export default class PhotosRoute extends Route {
879
+ @service store;
880
+ model() {
881
+ return this.store.findAll('photo');
882
+ }
883
+ setupController(controller, model) {
884
+ super.setupController(controller, model);
885
+ this.controllerFor('application').set('showingPhotos', true);
886
+ }
887
+ }
888
+ ```
889
+ The provided controller will be one resolved based on the name
890
+ of this route.
891
+ If no explicit controller is defined, Ember will automatically create one.
892
+ As an example, consider the router:
893
+ ```app/router.js
894
+ // ...
895
+ Router.map(function() {
896
+ this.route('post', { path: '/posts/:post_id' });
897
+ });
898
+ export default Router;
899
+ ```
900
+ If you have defined a file for the post controller,
901
+ the framework will use it.
902
+ If it is not defined, a basic `Controller` instance would be used.
903
+ @example Behavior of a basic Controller
904
+ ```app/routes/post.js
905
+ import Route from '@ember/routing/route';
906
+ export default class PostRoute extends Route {
907
+ setupController(controller, model) {
908
+ controller.set('model', model);
909
+ }
910
+ });
911
+ ```
912
+ @method setupController
913
+ @param {Controller} controller instance
914
+ @param {Object} model
915
+ @param {Transition} [transition]
916
+ @since 1.0.0
917
+ @public
918
+ */
919
+ setupController(controller, context, _transition) {
920
+ if (controller && context !== undefined) {
921
+ set(controller, 'model', context);
922
+ }
923
+ }
924
+
925
+ /**
926
+ Returns the controller of the current route, or a parent (or any ancestor)
927
+ route in a route hierarchy.
928
+ The controller instance must already have been created, either through entering the
929
+ associated route or using `generateController`.
930
+ ```app/routes/post.js
931
+ import Route from '@ember/routing/route';
932
+ export default class PostRoute extends Route {
933
+ setupController(controller, post) {
934
+ super.setupController(controller, post);
935
+ this.controllerFor('posts').set('currentPost', post);
936
+ }
937
+ }
938
+ ```
939
+ @method controllerFor
940
+ @param {String} name the name of the route or controller
941
+ @return {Controller | undefined}
942
+ @since 1.0.0
943
+ @public
944
+ */
945
+
946
+ controllerFor(name, _skipAssert = false) {
947
+ let owner = getOwner(this);
948
+ let route = owner.lookup(`route:${name}`);
949
+ if (route && route.controllerName) {
950
+ name = route.controllerName;
951
+ }
952
+ let controller = owner.lookup(`controller:${name}`);
953
+ return controller;
954
+ }
955
+
956
+ /**
957
+ Generates a controller for a route.
958
+ Example
959
+ ```app/routes/post.js
960
+ import Route from '@ember/routing/route';
961
+ export default class Post extends Route {
962
+ setupController(controller, post) {
963
+ super.setupController(controller, post);
964
+ this.generateController('posts');
965
+ }
966
+ }
967
+ ```
968
+ @method generateController
969
+ @param {String} name the name of the controller
970
+ @private
971
+ */
972
+ generateController(name) {
973
+ let owner = getOwner(this);
974
+ return generateController(owner, name);
975
+ }
976
+
977
+ /**
978
+ Returns the resolved model of a parent (or any ancestor) route
979
+ in a route hierarchy. During a transition, all routes
980
+ must resolve a model object, and if a route
981
+ needs access to a parent route's model in order to
982
+ resolve a model (or just reuse the model from a parent),
983
+ it can call `this.modelFor(theNameOfParentRoute)` to
984
+ retrieve it. If the ancestor route's model was a promise,
985
+ its resolved result is returned.
986
+ Example
987
+ ```app/router.js
988
+ // ...
989
+ Router.map(function() {
990
+ this.route('post', { path: '/posts/:post_id' }, function() {
991
+ this.route('comments');
992
+ });
993
+ });
994
+ export default Router;
995
+ ```
996
+ ```app/routes/post/comments.js
997
+ import Route from '@ember/routing/route';
998
+ export default class PostCommentsRoute extends Route {
999
+ model() {
1000
+ let post = this.modelFor('post');
1001
+ return post.comments;
1002
+ }
1003
+ }
1004
+ ```
1005
+ @method modelFor
1006
+ @param {String} name the name of the route
1007
+ @return {Object} the model object
1008
+ @since 1.0.0
1009
+ @public
1010
+ */
1011
+ modelFor(_name) {
1012
+ let name;
1013
+ let owner = getOwner(this);
1014
+ let transition = this._router && this._router._routerMicrolib ? this._router._routerMicrolib.activeTransition : undefined;
1015
+
1016
+ // Only change the route name when there is an active transition.
1017
+ // Otherwise, use the passed in route name.
1018
+ if (owner.routable && transition !== undefined) {
1019
+ name = getEngineRouteName(owner, _name);
1020
+ } else {
1021
+ name = _name;
1022
+ }
1023
+ let route = owner.lookup(`route:${name}`);
1024
+ // If we are mid-transition, we want to try and look up
1025
+ // resolved parent contexts on the current transitionEvent.
1026
+ if (transition !== undefined && transition !== null) {
1027
+ let modelLookupName = route && route.routeName || name;
1028
+ if (Object.prototype.hasOwnProperty.call(transition.resolvedModels, modelLookupName)) {
1029
+ return transition.resolvedModels[modelLookupName];
1030
+ }
1031
+ }
1032
+ return route?.currentModel;
1033
+ }
1034
+ [RENDER_STATE] = undefined;
1035
+
1036
+ /**
1037
+ `this[RENDER]` is used to set up the rendering option for the outlet state.
1038
+ @method this[RENDER]
1039
+ @private
1040
+ */
1041
+ [RENDER]() {
1042
+ this[RENDER_STATE] = buildRenderState(this);
1043
+ once(this._router, '_setOutlets');
1044
+ }
1045
+ willDestroy() {
1046
+ this.teardownViews();
1047
+ }
1048
+
1049
+ /**
1050
+ @private
1051
+ @method teardownViews
1052
+ */
1053
+ teardownViews() {
1054
+ if (this[RENDER_STATE]) {
1055
+ this[RENDER_STATE] = undefined;
1056
+ once(this._router, '_setOutlets');
1057
+ }
1058
+ }
1059
+
1060
+ /**
1061
+ Allows you to produce custom metadata for the route.
1062
+ The return value of this method will be attached to
1063
+ its corresponding RouteInfoWithAttributes object.
1064
+ Example
1065
+ ```app/routes/posts/index.js
1066
+ import Route from '@ember/routing/route';
1067
+ export default class PostsIndexRoute extends Route {
1068
+ buildRouteInfoMetadata() {
1069
+ return { title: 'Posts Page' }
1070
+ }
1071
+ }
1072
+ ```
1073
+ ```app/routes/application.js
1074
+ import Route from '@ember/routing/route';
1075
+ import { service } from '@ember/service';
1076
+ export default class ApplicationRoute extends Route {
1077
+ @service router
1078
+ constructor() {
1079
+ super(...arguments);
1080
+ this.router.on('routeDidChange', transition => {
1081
+ document.title = transition.to.metadata.title;
1082
+ // would update document's title to "Posts Page"
1083
+ });
1084
+ }
1085
+ }
1086
+ ```
1087
+ @method buildRouteInfoMetadata
1088
+ @return any
1089
+ @since 3.10.0
1090
+ @public
1091
+ */
1092
+
1093
+ buildRouteInfoMetadata() {}
1094
+ _paramsFor(routeName, params) {
1095
+ let transition = this._router._routerMicrolib.activeTransition;
1096
+ if (transition !== undefined) {
1097
+ return this.paramsFor(routeName);
1098
+ }
1099
+ return params;
1100
+ }
1101
+
1102
+ /** @deprecated Manually define your own store, such as with `@service store` */
1103
+ get _store() {
1104
+ const owner = getOwner(this);
1105
+ this.routeName;
1106
+ return {
1107
+ find(name, value) {
1108
+ let modelClass = owner.factoryFor(`model:${name}`);
1109
+ if (!modelClass) {
1110
+ return;
1111
+ }
1112
+ modelClass = modelClass.class;
1113
+ return modelClass.find(value);
1114
+ }
1115
+ };
1116
+ }
1117
+
1118
+ /**
1119
+ @private
1120
+ @property _qp
1121
+ */
1122
+ static {
1123
+ decorateMethodV2(this.prototype, "_store", [computed]);
1124
+ }
1125
+ get _qp() {
1126
+ let combinedQueryParameterConfiguration = {};
1127
+ let controllerName = this.controllerName || this.routeName;
1128
+ let owner = getOwner(this);
1129
+ let controller = owner.lookup(`controller:${controllerName}`);
1130
+ let queryParameterConfiguraton = get(this, 'queryParams');
1131
+ let hasRouterDefinedQueryParams = Object.keys(queryParameterConfiguraton).length > 0;
1132
+ if (controller) {
1133
+ // this route find its query params and normalize their object shape them
1134
+ // merge in the query params for the route. As a mergedProperty,
1135
+ // Route#queryParams is always at least `{}`
1136
+ let controllerDefinedQueryParameterConfiguration = get(controller, 'queryParams') || [];
1137
+ let normalizedControllerQueryParameterConfiguration = normalizeControllerQueryParams(controllerDefinedQueryParameterConfiguration);
1138
+ combinedQueryParameterConfiguration = mergeEachQueryParams(normalizedControllerQueryParameterConfiguration, queryParameterConfiguraton);
1139
+ } else if (hasRouterDefinedQueryParams) {
1140
+ // the developer has not defined a controller but *has* supplied route query params.
1141
+ // Generate a class for them so we can later insert default values
1142
+ controller = generateController(owner, controllerName);
1143
+ combinedQueryParameterConfiguration = queryParameterConfiguraton;
1144
+ }
1145
+ let qps = [];
1146
+ let map = {};
1147
+ let propertyNames = [];
1148
+ for (let propName in combinedQueryParameterConfiguration) {
1149
+ if (!Object.prototype.hasOwnProperty.call(combinedQueryParameterConfiguration, propName)) {
1150
+ continue;
1151
+ }
1152
+
1153
+ // to support the dubious feature of using unknownProperty
1154
+ // on queryParams configuration
1155
+ if (propName === 'unknownProperty' || propName === '_super') {
1156
+ // possible todo: issue deprecation warning?
1157
+ continue;
1158
+ }
1159
+ let desc = combinedQueryParameterConfiguration[propName];
1160
+ let scope = desc.scope || 'model';
1161
+ let parts = undefined;
1162
+ if (scope === 'controller') {
1163
+ parts = [];
1164
+ }
1165
+ let urlKey = desc.as || this.serializeQueryParamKey(propName);
1166
+ let defaultValue = get(controller, propName);
1167
+ defaultValue = copyDefaultValue(defaultValue);
1168
+ let type = desc.type || typeOf(defaultValue);
1169
+ let defaultValueSerialized = this.serializeQueryParam(defaultValue, urlKey, type);
1170
+ let scopedPropertyName = `${controllerName}:${propName}`;
1171
+ let qp = {
1172
+ undecoratedDefaultValue: get(controller, propName),
1173
+ defaultValue,
1174
+ serializedDefaultValue: defaultValueSerialized,
1175
+ serializedValue: defaultValueSerialized,
1176
+ type,
1177
+ urlKey,
1178
+ prop: propName,
1179
+ scopedPropertyName,
1180
+ controllerName,
1181
+ route: this,
1182
+ parts,
1183
+ // provided later when stashNames is called if 'model' scope
1184
+ values: null,
1185
+ // provided later when setup is called. no idea why.
1186
+ scope
1187
+ };
1188
+ map[propName] = map[urlKey] = map[scopedPropertyName] = qp;
1189
+ qps.push(qp);
1190
+ propertyNames.push(propName);
1191
+ }
1192
+ return {
1193
+ qps,
1194
+ map,
1195
+ propertyNames,
1196
+ states: {
1197
+ /*
1198
+ Called when a query parameter changes in the URL, this route cares
1199
+ about that query parameter, but the route is not currently
1200
+ in the active route hierarchy.
1201
+ */
1202
+ inactive: (prop, value) => {
1203
+ let qp = map[prop];
1204
+ this._qpChanged(prop, value, qp);
1205
+ },
1206
+ /*
1207
+ Called when a query parameter changes in the URL, this route cares
1208
+ about that query parameter, and the route is currently
1209
+ in the active route hierarchy.
1210
+ */
1211
+ active: (prop, value) => {
1212
+ let qp = map[prop];
1213
+ this._qpChanged(prop, value, qp);
1214
+ return this._activeQPChanged(qp, value);
1215
+ },
1216
+ /*
1217
+ Called when a value of a query parameter this route handles changes in a controller
1218
+ and the route is currently in the active route hierarchy.
1219
+ */
1220
+ allowOverrides: (prop, value) => {
1221
+ let qp = map[prop];
1222
+ this._qpChanged(prop, value, qp);
1223
+ return this._updatingQPChanged(qp);
1224
+ }
1225
+ }
1226
+ };
1227
+ }
1228
+
1229
+ // Set in reopen
1230
+ static {
1231
+ decorateMethodV2(this.prototype, "_qp", [computed]);
1232
+ }
1233
+ /**
1234
+ Sends an action to the router, which will delegate it to the currently
1235
+ active route hierarchy per the bubbling rules explained under `actions`.
1236
+ Example
1237
+ ```app/router.js
1238
+ // ...
1239
+ Router.map(function() {
1240
+ this.route('index');
1241
+ });
1242
+ export default Router;
1243
+ ```
1244
+ ```app/routes/application.js
1245
+ import Route from '@ember/routing/route';
1246
+ import { action } from '@ember/object';
1247
+ export default class ApplicationRoute extends Route {
1248
+ @action
1249
+ track(arg) {
1250
+ console.log(arg, 'was clicked');
1251
+ }
1252
+ }
1253
+ ```
1254
+ ```app/routes/index.js
1255
+ import Route from '@ember/routing/route';
1256
+ import { action } from '@ember/object';
1257
+ export default class IndexRoute extends Route {
1258
+ @action
1259
+ trackIfDebug(arg) {
1260
+ if (debug) {
1261
+ this.send('track', arg);
1262
+ }
1263
+ }
1264
+ }
1265
+ ```
1266
+ @method send
1267
+ @param {String} name the name of the action to trigger
1268
+ @param {...*} args
1269
+ @since 1.0.0
1270
+ @public
1271
+ */
1272
+ // Set with reopen to override parent behavior
1273
+ }
1274
+ function getRenderState(route) {
1275
+ return route[RENDER_STATE];
1276
+ }
1277
+ function buildRenderState(route) {
1278
+ let owner = getOwner(route);
1279
+ let name = route.routeName;
1280
+ let controller = owner.lookup(`controller:${route.controllerName || name}`);
1281
+ let model = route.currentModel;
1282
+ let templateFactoryOrComponent = owner.lookup(`template:${route.templateName || name}`);
1283
+
1284
+ // Now we support either a component or a template to be returned by this
1285
+ // resolver call, but if it's a `TemplateFactory`, we need to instantiate
1286
+ // it into a `Template`, since that's what `RenderState` wants. We can't
1287
+ // easily change it, it's intimate API used by @ember/test-helpers and the
1288
+ // like. We could compatibly allow `Template` | `TemplateFactory`, and that's
1289
+ // what it used to do but we _just_ went through deprecations to get that
1290
+ // removed. It's also not ideal since once you mix the two types, they are
1291
+ // not exactly easy to tell apart.
1292
+ //
1293
+ // It may also be tempting to just normalize `Template` into `RouteTemplate`
1294
+ // here, and we could. However, this is not the only entrypoint where this
1295
+ // `RenderState` is made – @ember/test-helpers punches through an impressive
1296
+ // amount of private API to set it directly, and this feature would also be
1297
+ // useful for them. So, even if we had normalized here, we'd still have to
1298
+ // check and do that again during render anyway.
1299
+ let template;
1300
+ if (templateFactoryOrComponent) {
1301
+ if (hasInternalComponentManager(templateFactoryOrComponent)) {
1302
+ template = templateFactoryOrComponent;
1303
+ } else {
1304
+ template = templateFactoryOrComponent(owner);
1305
+ }
1306
+ } else {
1307
+ // default `{{outlet}}`
1308
+ template = route._topLevelViewTemplate(owner);
1309
+ }
1310
+ let render = {
1311
+ owner,
1312
+ name,
1313
+ controller,
1314
+ model,
1315
+ template
1316
+ };
1317
+ return render;
1318
+ }
1319
+ function getFullQueryParams(router, state) {
1320
+ if (state.fullQueryParams) {
1321
+ return state.fullQueryParams;
1322
+ }
1323
+ let haveAllRouteInfosResolved = state.routeInfos.every(routeInfo => routeInfo.route);
1324
+ let fullQueryParamsState = {
1325
+ ...state.queryParams
1326
+ };
1327
+ router._deserializeQueryParams(state.routeInfos, fullQueryParamsState);
1328
+
1329
+ // only cache query params state if all routeinfos have resolved; it's possible
1330
+ // for lazy routes to not have resolved when `getFullQueryParams` is called, so
1331
+ // we wait until all routes have resolved prior to caching query params state
1332
+ if (haveAllRouteInfosResolved) {
1333
+ state.fullQueryParams = fullQueryParamsState;
1334
+ }
1335
+ return fullQueryParamsState;
1336
+ }
1337
+ function getQueryParamsFor(route, state) {
1338
+ state.queryParamsFor = state.queryParamsFor || {};
1339
+ let name = route.fullRouteName;
1340
+ let existing = state.queryParamsFor[name];
1341
+ if (existing) {
1342
+ return existing;
1343
+ }
1344
+ let fullQueryParams = getFullQueryParams(route._router, state);
1345
+ let params = state.queryParamsFor[name] = {};
1346
+
1347
+ // Copy over all the query params for this route/controller into params hash.
1348
+ // SAFETY: Since `_qp` is protected we can't infer the type
1349
+ let qps = get(route, '_qp').qps;
1350
+ for (let qp of qps) {
1351
+ // Put deserialized qp on params hash.
1352
+ let qpValueWasPassedIn = qp.prop in fullQueryParams;
1353
+ params[qp.prop] = qpValueWasPassedIn ? fullQueryParams[qp.prop] : copyDefaultValue(qp.defaultValue);
1354
+ }
1355
+ return params;
1356
+ }
1357
+
1358
+ // FIXME: This should probably actually return a `NativeArray` if the passed in value is an Array.
1359
+ function copyDefaultValue(value) {
1360
+ if (Array.isArray(value)) {
1361
+ // SAFETY: We lost the type data about the array if we don't cast.
1362
+ return A(value.slice());
1363
+ }
1364
+ return value;
1365
+ }
1366
+
1367
+ /*
1368
+ Merges all query parameters from a controller with those from
1369
+ a route, returning a new object and avoiding any mutations to
1370
+ the existing objects.
1371
+ */
1372
+ function mergeEachQueryParams(controllerQP, routeQP) {
1373
+ let qps = {};
1374
+ let keysAlreadyMergedOrSkippable = {
1375
+ defaultValue: true,
1376
+ type: true,
1377
+ scope: true,
1378
+ as: true
1379
+ };
1380
+
1381
+ // first loop over all controller qps, merging them with any matching route qps
1382
+ // into a new empty object to avoid mutating.
1383
+ for (let cqpName in controllerQP) {
1384
+ if (!Object.prototype.hasOwnProperty.call(controllerQP, cqpName)) {
1385
+ continue;
1386
+ }
1387
+ qps[cqpName] = {
1388
+ ...controllerQP[cqpName],
1389
+ ...routeQP[cqpName]
1390
+ };
1391
+
1392
+ // allows us to skip this QP when we check route QPs.
1393
+ keysAlreadyMergedOrSkippable[cqpName] = true;
1394
+ }
1395
+
1396
+ // loop over all route qps, skipping those that were merged in the first pass
1397
+ // because they also appear in controller qps
1398
+ for (let rqpName in routeQP) {
1399
+ if (!Object.prototype.hasOwnProperty.call(routeQP, rqpName) || keysAlreadyMergedOrSkippable[rqpName]) {
1400
+ continue;
1401
+ }
1402
+ qps[rqpName] = {
1403
+ ...routeQP[rqpName],
1404
+ ...controllerQP[rqpName]
1405
+ };
1406
+ }
1407
+ return qps;
1408
+ }
1409
+ function addQueryParamsObservers(controller, propNames) {
1410
+ propNames.forEach(prop => {
1411
+ if (descriptorForProperty(controller, prop) === undefined) {
1412
+ let desc = lookupDescriptor(controller, prop);
1413
+ if (desc !== null && (typeof desc.get === 'function' || typeof desc.set === 'function')) {
1414
+ defineProperty(controller, prop, dependentKeyCompat({
1415
+ get: desc.get,
1416
+ set: desc.set
1417
+ }));
1418
+ }
1419
+ }
1420
+ addObserver(controller, `${prop}.[]`, controller, controller._qpChanged, false);
1421
+ });
1422
+ }
1423
+ function getEngineRouteName(engine, routeName) {
1424
+ if (engine.routable) {
1425
+ let prefix = engine.mountPoint;
1426
+ if (routeName === 'application') {
1427
+ return prefix;
1428
+ } else {
1429
+ return `${prefix}.${routeName}`;
1430
+ }
1431
+ }
1432
+ return routeName;
1433
+ }
1434
+ const defaultSerialize = Route.prototype.serialize;
1435
+ function hasDefaultSerialize(route) {
1436
+ return route.serialize === defaultSerialize;
1437
+ }
1438
+
1439
+ // Set these here so they can be overridden with extend
1440
+ Route.reopen({
1441
+ mergedProperties: ['queryParams'],
1442
+ queryParams: {},
1443
+ templateName: null,
1444
+ controllerName: null,
1445
+ send(...args) {
1446
+ if (this._router && this._router._routerMicrolib || !isTesting()) {
1447
+ this._router.send(...args);
1448
+ } else {
1449
+ let name = args.shift();
1450
+ let action = this.actions[name];
1451
+ if (action) {
1452
+ return action.apply(this, args);
1453
+ }
1454
+ }
1455
+ },
1456
+ /**
1457
+ The controller associated with this route.
1458
+ Example
1459
+ ```app/routes/form.js
1460
+ import Route from '@ember/routing/route';
1461
+ import { action } from '@ember/object';
1462
+ export default class FormRoute extends Route {
1463
+ @action
1464
+ willTransition(transition) {
1465
+ if (this.controller.get('userHasEnteredData') &&
1466
+ !confirm('Are you sure you want to abandon progress?')) {
1467
+ transition.abort();
1468
+ } else {
1469
+ // Bubble the `willTransition` action so that
1470
+ // parent routes can decide whether or not to abort.
1471
+ return true;
1472
+ }
1473
+ }
1474
+ }
1475
+ ```
1476
+ @property controller
1477
+ @type Controller
1478
+ @since 1.6.0
1479
+ @public
1480
+ */
1481
+
1482
+ actions: {
1483
+ /**
1484
+ This action is called when one or more query params have changed. Bubbles.
1485
+ @method queryParamsDidChange
1486
+ @param changed {Object} Keys are names of query params that have changed.
1487
+ @param totalPresent {Object} Keys are names of query params that are currently set.
1488
+ @param removed {Object} Keys are names of query params that have been removed.
1489
+ @returns {boolean}
1490
+ @private
1491
+ */
1492
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type
1493
+ queryParamsDidChange(changed, _totalPresent, removed) {
1494
+ // SAFETY: Since `_qp` is protected we can't infer the type
1495
+ let qpMap = get(this, '_qp').map;
1496
+ let totalChanged = Object.keys(changed).concat(Object.keys(removed));
1497
+ for (let change of totalChanged) {
1498
+ let qp = qpMap[change];
1499
+ if (qp) {
1500
+ let options = this._optionsForQueryParam(qp);
1501
+ if (get(options, 'refreshModel') && this._router.currentState) {
1502
+ this.refresh();
1503
+ break;
1504
+ }
1505
+ }
1506
+ }
1507
+ return true;
1508
+ },
1509
+ finalizeQueryParamChange(params,
1510
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type
1511
+ finalParams, transition) {
1512
+ if (this.fullRouteName !== 'application') {
1513
+ return true;
1514
+ }
1515
+
1516
+ // Transition object is absent for intermediate transitions.
1517
+ if (!transition) {
1518
+ return;
1519
+ }
1520
+ let routeInfos = transition[STATE_SYMBOL].routeInfos;
1521
+ let router = this._router;
1522
+ let qpMeta = router._queryParamsFor(routeInfos);
1523
+ let changes = router._qpUpdates;
1524
+ let qpUpdated = false;
1525
+ let replaceUrl;
1526
+ stashParamNames(router, routeInfos);
1527
+ for (let qp of qpMeta.qps) {
1528
+ let route = qp.route;
1529
+ let controller = route.controller;
1530
+ let presentKey = qp.urlKey in params && qp.urlKey;
1531
+
1532
+ // Do a reverse lookup to see if the changed query
1533
+ // param URL key corresponds to a QP property on
1534
+ // this controller.
1535
+ let value;
1536
+ let svalue;
1537
+ if (changes.has(qp.urlKey)) {
1538
+ // Value updated in/before setupController
1539
+ value = get(controller, qp.prop);
1540
+ svalue = route.serializeQueryParam(value, qp.urlKey, qp.type);
1541
+ } else {
1542
+ if (presentKey) {
1543
+ svalue = params[presentKey];
1544
+ if (svalue !== undefined) {
1545
+ value = route.deserializeQueryParam(svalue, qp.urlKey, qp.type);
1546
+ }
1547
+ } else {
1548
+ // No QP provided; use default value.
1549
+ svalue = qp.serializedDefaultValue;
1550
+ value = copyDefaultValue(qp.defaultValue);
1551
+ }
1552
+ }
1553
+
1554
+ // SAFETY: Since `_qp` is protected we can't infer the type
1555
+ controller._qpDelegate = get(route, '_qp').states.inactive;
1556
+ let thisQueryParamChanged = svalue !== qp.serializedValue;
1557
+ if (thisQueryParamChanged) {
1558
+ if (transition.queryParamsOnly && replaceUrl !== false) {
1559
+ let options = route._optionsForQueryParam(qp);
1560
+ let replaceConfigValue = get(options, 'replace');
1561
+ if (replaceConfigValue) {
1562
+ replaceUrl = true;
1563
+ } else if (replaceConfigValue === false) {
1564
+ // Explicit pushState wins over any other replaceStates.
1565
+ replaceUrl = false;
1566
+ }
1567
+ }
1568
+ set(controller, qp.prop, value);
1569
+ qpUpdated = true;
1570
+ }
1571
+
1572
+ // Stash current serialized value of controller.
1573
+ qp.serializedValue = svalue;
1574
+ let thisQueryParamHasDefaultValue = qp.serializedDefaultValue === svalue;
1575
+ if (!thisQueryParamHasDefaultValue) {
1576
+ finalParams.push({
1577
+ value: svalue,
1578
+ visible: true,
1579
+ key: presentKey || qp.urlKey
1580
+ });
1581
+ }
1582
+ }
1583
+
1584
+ // Some QPs have been updated, and those changes need to be propogated
1585
+ // immediately. Eventually, we should work on making this async somehow.
1586
+ if (qpUpdated === true) {
1587
+ flushAsyncObservers(false);
1588
+ }
1589
+ if (replaceUrl) {
1590
+ transition.method('replace');
1591
+ }
1592
+ qpMeta.qps.forEach(qp => {
1593
+ // SAFETY: Since `_qp` is protected we can't infer the type
1594
+ let routeQpMeta = get(qp.route, '_qp');
1595
+ let finalizedController = qp.route.controller;
1596
+ finalizedController['_qpDelegate'] = get(routeQpMeta, 'states.active');
1597
+ });
1598
+ router._qpUpdates.clear();
1599
+ return;
1600
+ }
1601
+ }
1602
+ });
1603
+
1604
+ export { Route as default, defaultSerialize, getFullQueryParams, getRenderState, hasDefaultSerialize };