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,1527 @@
1
+ import RouteRecognizer from '../route-recognizer/index.js';
2
+ import { P as Promise$1 } from '../shared-chunks/rsvp-CnCSY930.js';
3
+ import { Q as QUERY_PARAMS_SYMBOL, m as merge, i as isTransition, a as isParam, t as throwIfAborted, P as PARAMS_SYMBOL, p as prepareResult, b as isPromise, f as forEach, c as promiseLabel, U as UnrecognizedURLError, T as Transition, S as STATE_SYMBOL, g as getChangelist, d as log, l as logAbort, e as isTransitionAborted, h as extractQueryParams } from '../shared-chunks/unrecognized-url-error-DDBwfzdm.js';
4
+
5
+ /* eslint-disable no-prototype-builtins */
6
+ let ROUTE_INFOS = new WeakMap();
7
+ function toReadOnlyRouteInfo(routeInfos, queryParams = {}, options = {
8
+ includeAttributes: false,
9
+ localizeMapUpdates: false
10
+ }) {
11
+ const LOCAL_ROUTE_INFOS = new WeakMap();
12
+ return routeInfos.map((info, i) => {
13
+ let {
14
+ name,
15
+ params,
16
+ paramNames,
17
+ context,
18
+ route
19
+ } = info;
20
+ // SAFETY: This should be safe since it is just for use as a key
21
+ let key = info;
22
+ if (ROUTE_INFOS.has(key) && options.includeAttributes) {
23
+ let routeInfo = ROUTE_INFOS.get(key);
24
+ routeInfo = attachMetadata(route, routeInfo);
25
+ let routeInfoWithAttribute = createRouteInfoWithAttributes(routeInfo, context);
26
+ LOCAL_ROUTE_INFOS.set(key, routeInfo);
27
+ if (!options.localizeMapUpdates) {
28
+ ROUTE_INFOS.set(key, routeInfoWithAttribute);
29
+ }
30
+ return routeInfoWithAttribute;
31
+ }
32
+ const routeInfosRef = options.localizeMapUpdates ? LOCAL_ROUTE_INFOS : ROUTE_INFOS;
33
+ let routeInfo = {
34
+ find(predicate, thisArg) {
35
+ let publicInfo;
36
+ let arr = [];
37
+ if (predicate.length === 3) {
38
+ arr = routeInfos.map(
39
+ // SAFETY: This should be safe since it is just for use as a key
40
+ info => routeInfosRef.get(info));
41
+ }
42
+ for (let i = 0; routeInfos.length > i; i++) {
43
+ // SAFETY: This should be safe since it is just for use as a key
44
+ publicInfo = routeInfosRef.get(routeInfos[i]);
45
+ if (predicate.call(thisArg, publicInfo, i, arr)) {
46
+ return publicInfo;
47
+ }
48
+ }
49
+ return undefined;
50
+ },
51
+ get name() {
52
+ return name;
53
+ },
54
+ get paramNames() {
55
+ return paramNames;
56
+ },
57
+ get metadata() {
58
+ return buildRouteInfoMetadata(info.route);
59
+ },
60
+ get parent() {
61
+ let parent = routeInfos[i - 1];
62
+ if (parent === undefined) {
63
+ return null;
64
+ }
65
+
66
+ // SAFETY: This should be safe since it is just for use as a key
67
+ return routeInfosRef.get(parent);
68
+ },
69
+ get child() {
70
+ let child = routeInfos[i + 1];
71
+ if (child === undefined) {
72
+ return null;
73
+ }
74
+
75
+ // SAFETY: This should be safe since it is just for use as a key
76
+ return routeInfosRef.get(child);
77
+ },
78
+ get localName() {
79
+ let parts = this.name.split('.');
80
+ return parts[parts.length - 1];
81
+ },
82
+ get params() {
83
+ return params;
84
+ },
85
+ get queryParams() {
86
+ return queryParams;
87
+ }
88
+ };
89
+ if (options.includeAttributes) {
90
+ routeInfo = createRouteInfoWithAttributes(routeInfo, context);
91
+ }
92
+
93
+ // SAFETY: This should be safe since it is just for use as a key
94
+ LOCAL_ROUTE_INFOS.set(info, routeInfo);
95
+ if (!options.localizeMapUpdates) {
96
+ // SAFETY: This should be safe since it is just for use as a key
97
+ ROUTE_INFOS.set(info, routeInfo);
98
+ }
99
+ return routeInfo;
100
+ });
101
+ }
102
+ function createRouteInfoWithAttributes(routeInfo, context) {
103
+ let attributes = {
104
+ get attributes() {
105
+ return context;
106
+ }
107
+ };
108
+ if (!Object.isExtensible(routeInfo) || routeInfo.hasOwnProperty('attributes')) {
109
+ return Object.freeze(Object.assign({}, routeInfo, attributes));
110
+ }
111
+ return Object.assign(routeInfo, attributes);
112
+ }
113
+ function buildRouteInfoMetadata(route) {
114
+ if (route !== undefined && route !== null && route.buildRouteInfoMetadata !== undefined) {
115
+ return route.buildRouteInfoMetadata();
116
+ }
117
+ return null;
118
+ }
119
+ function attachMetadata(route, routeInfo) {
120
+ let metadata = {
121
+ get metadata() {
122
+ return buildRouteInfoMetadata(route);
123
+ }
124
+ };
125
+ if (!Object.isExtensible(routeInfo) || routeInfo.hasOwnProperty('metadata')) {
126
+ return Object.freeze(Object.assign({}, routeInfo, metadata));
127
+ }
128
+ return Object.assign(routeInfo, metadata);
129
+ }
130
+ class InternalRouteInfo {
131
+ _routePromise = undefined;
132
+ _route = null;
133
+ router;
134
+ params = {};
135
+ isResolved = false;
136
+ constructor(router, name, paramNames, route) {
137
+ this.name = name;
138
+ this.paramNames = paramNames;
139
+ this.router = router;
140
+ if (route) {
141
+ this._processRoute(route);
142
+ }
143
+ }
144
+ getModel(_transition) {
145
+ return Promise$1.resolve(this.context);
146
+ }
147
+ serialize(_context) {
148
+ return this.params || {};
149
+ }
150
+ resolve(transition) {
151
+ return Promise$1.resolve(this.routePromise).then(route => {
152
+ throwIfAborted(transition);
153
+ return route;
154
+ }).then(() => this.runBeforeModelHook(transition)).then(() => throwIfAborted(transition)).then(() => this.getModel(transition)).then(resolvedModel => {
155
+ throwIfAborted(transition);
156
+ return resolvedModel;
157
+ }).then(resolvedModel => this.runAfterModelHook(transition, resolvedModel)).then(resolvedModel => this.becomeResolved(transition, resolvedModel));
158
+ }
159
+ becomeResolved(transition, resolvedContext) {
160
+ let params = this.serialize(resolvedContext);
161
+ if (transition) {
162
+ this.stashResolvedModel(transition, resolvedContext);
163
+ transition[PARAMS_SYMBOL] = transition[PARAMS_SYMBOL] || {};
164
+ transition[PARAMS_SYMBOL][this.name] = params;
165
+ }
166
+ let context;
167
+ let contextsMatch = resolvedContext === this.context;
168
+ if ('context' in this || !contextsMatch) {
169
+ context = resolvedContext;
170
+ }
171
+
172
+ // SAFETY: Since this is just for lookup, it should be safe
173
+ let cached = ROUTE_INFOS.get(this);
174
+ let resolved = new ResolvedRouteInfo(this.router, this.name, this.paramNames, params, this.route, context);
175
+ if (cached !== undefined) {
176
+ // SAFETY: This is potentially a bit risker, but for what we're doing, it should be ok.
177
+ ROUTE_INFOS.set(resolved, cached);
178
+ }
179
+ return resolved;
180
+ }
181
+ shouldSupersede(routeInfo) {
182
+ // Prefer this newer routeInfo over `other` if:
183
+ // 1) The other one doesn't exist
184
+ // 2) The names don't match
185
+ // 3) This route has a context that doesn't match
186
+ // the other one (or the other one doesn't have one).
187
+ // 4) This route has parameters that don't match the other.
188
+ if (!routeInfo) {
189
+ return true;
190
+ }
191
+ let contextsMatch = routeInfo.context === this.context;
192
+ return routeInfo.name !== this.name || 'context' in this && !contextsMatch || this.hasOwnProperty('params') && !paramsMatch(this.params, routeInfo.params);
193
+ }
194
+ get route() {
195
+ // _route could be set to either a route object or undefined, so we
196
+ // compare against null to know when it's been set
197
+ if (this._route !== null) {
198
+ return this._route;
199
+ }
200
+ return this.fetchRoute();
201
+ }
202
+ set route(route) {
203
+ this._route = route;
204
+ }
205
+ get routePromise() {
206
+ if (this._routePromise) {
207
+ return this._routePromise;
208
+ }
209
+ this.fetchRoute();
210
+ return this._routePromise;
211
+ }
212
+ set routePromise(routePromise) {
213
+ this._routePromise = routePromise;
214
+ }
215
+ log(transition, message) {
216
+ if (transition.log) {
217
+ transition.log(this.name + ': ' + message);
218
+ }
219
+ }
220
+ updateRoute(route) {
221
+ route._internalName = this.name;
222
+ return this.route = route;
223
+ }
224
+ runBeforeModelHook(transition) {
225
+ if (transition.trigger) {
226
+ transition.trigger(true, 'willResolveModel', transition, this.route);
227
+ }
228
+ let result;
229
+ if (this.route) {
230
+ if (this.route.beforeModel !== undefined) {
231
+ result = this.route.beforeModel(transition);
232
+ }
233
+ }
234
+ if (isTransition(result)) {
235
+ result = null;
236
+ }
237
+ return Promise$1.resolve(result);
238
+ }
239
+ runAfterModelHook(transition, resolvedModel) {
240
+ // Stash the resolved model on the payload.
241
+ // This makes it possible for users to swap out
242
+ // the resolved model in afterModel.
243
+ let name = this.name;
244
+ this.stashResolvedModel(transition, resolvedModel);
245
+ let result;
246
+ if (this.route !== undefined) {
247
+ if (this.route.afterModel !== undefined) {
248
+ result = this.route.afterModel(resolvedModel, transition);
249
+ }
250
+ }
251
+ result = prepareResult(result);
252
+ return Promise$1.resolve(result).then(() => {
253
+ // Ignore the fulfilled value returned from afterModel.
254
+ // Return the value stashed in resolvedModels, which
255
+ // might have been swapped out in afterModel.
256
+ // SAFTEY: We expect this to be of type T, though typing it as such is challenging.
257
+ return transition.resolvedModels[name];
258
+ });
259
+ }
260
+ stashResolvedModel(transition, resolvedModel) {
261
+ transition.resolvedModels = transition.resolvedModels || {};
262
+ // SAFETY: It's unfortunate that we have to do this cast. It should be safe though.
263
+ transition.resolvedModels[this.name] = resolvedModel;
264
+ }
265
+ fetchRoute() {
266
+ let route = this.router.getRoute(this.name);
267
+ return this._processRoute(route);
268
+ }
269
+ _processRoute(route) {
270
+ // Setup a routePromise so that we can wait for asynchronously loaded routes
271
+ this.routePromise = Promise$1.resolve(route);
272
+
273
+ // Wait until the 'route' property has been updated when chaining to a route
274
+ // that is a promise
275
+ if (isPromise(route)) {
276
+ this.routePromise = this.routePromise.then(r => {
277
+ return this.updateRoute(r);
278
+ });
279
+ // set to undefined to avoid recursive loop in the route getter
280
+ return this.route = undefined;
281
+ } else if (route) {
282
+ return this.updateRoute(route);
283
+ }
284
+ return undefined;
285
+ }
286
+ }
287
+ class ResolvedRouteInfo extends InternalRouteInfo {
288
+ isResolved;
289
+ context;
290
+ constructor(router, name, paramNames, params, route, context) {
291
+ super(router, name, paramNames, route);
292
+ this.params = params;
293
+ this.isResolved = true;
294
+ this.context = context;
295
+ }
296
+ resolve(transition) {
297
+ // A ResolvedRouteInfo just resolved with itself.
298
+ if (transition && transition.resolvedModels) {
299
+ transition.resolvedModels[this.name] = this.context;
300
+ }
301
+ return Promise$1.resolve(this);
302
+ }
303
+ }
304
+ class UnresolvedRouteInfoByParam extends InternalRouteInfo {
305
+ params = {};
306
+ constructor(router, name, paramNames, params, route) {
307
+ super(router, name, paramNames, route);
308
+ if (params) {
309
+ this.params = params;
310
+ }
311
+ }
312
+ getModel(transition) {
313
+ let fullParams = this.params;
314
+ if (transition && transition[QUERY_PARAMS_SYMBOL]) {
315
+ fullParams = {};
316
+ merge(fullParams, this.params);
317
+ fullParams['queryParams'] = transition[QUERY_PARAMS_SYMBOL];
318
+ }
319
+ let route = this.route;
320
+ let result;
321
+
322
+ // FIXME: Review these casts
323
+ if (route.deserialize) {
324
+ result = route.deserialize(fullParams, transition);
325
+ } else if (route.model) {
326
+ result = route.model(fullParams, transition);
327
+ }
328
+ if (result && isTransition(result)) {
329
+ result = undefined;
330
+ }
331
+ return Promise$1.resolve(result);
332
+ }
333
+ }
334
+ class UnresolvedRouteInfoByObject extends InternalRouteInfo {
335
+ serializer;
336
+ constructor(router, name, paramNames, context) {
337
+ super(router, name, paramNames);
338
+ this.context = context;
339
+ this.serializer = this.router.getSerializer(name);
340
+ }
341
+ getModel(transition) {
342
+ if (this.router.log !== undefined) {
343
+ this.router.log(this.name + ': resolving provided model');
344
+ }
345
+ return super.getModel(transition);
346
+ }
347
+
348
+ /**
349
+ @private
350
+ Serializes a route using its custom `serialize` method or
351
+ by a default that looks up the expected property name from
352
+ the dynamic segment.
353
+ @param {Object} model the model to be serialized for this route
354
+ */
355
+ serialize(model) {
356
+ let {
357
+ paramNames,
358
+ context
359
+ } = this;
360
+ if (!model) {
361
+ // SAFETY: By the time we serialize, we expect to be resolved.
362
+ // This may not be an entirely safe assumption though no tests fail.
363
+ model = context;
364
+ }
365
+ let object = {};
366
+ if (isParam(model)) {
367
+ object[paramNames[0]] = model;
368
+ return object;
369
+ }
370
+
371
+ // Use custom serialize if it exists.
372
+ if (this.serializer) {
373
+ // invoke this.serializer unbound (getSerializer returns a stateless function)
374
+ return this.serializer.call(null, model, paramNames);
375
+ } else if (this.route !== undefined) {
376
+ if (this.route.serialize) {
377
+ return this.route.serialize(model, paramNames);
378
+ }
379
+ }
380
+ if (paramNames.length !== 1) {
381
+ return;
382
+ }
383
+ let name = paramNames[0];
384
+ if (/_id$/.test(name)) {
385
+ // SAFETY: Model is supposed to extend IModel already
386
+ object[name] = model.id;
387
+ } else {
388
+ object[name] = model;
389
+ }
390
+ return object;
391
+ }
392
+ }
393
+ function paramsMatch(a, b) {
394
+ if (a === b) {
395
+ // Both are identical, may both be undefined
396
+ return true;
397
+ }
398
+ if (!a || !b) {
399
+ // Only one is undefined, already checked they aren't identical
400
+ return false;
401
+ }
402
+
403
+ // Note: this assumes that both params have the same
404
+ // number of keys, but since we're comparing the
405
+ // same routes, they should.
406
+ for (let k in a) {
407
+ if (a.hasOwnProperty(k) && a[k] !== b[k]) {
408
+ return false;
409
+ }
410
+ }
411
+ return true;
412
+ }
413
+
414
+ class TransitionIntent {
415
+ data;
416
+ router;
417
+ constructor(router, data = {}) {
418
+ this.router = router;
419
+ this.data = data;
420
+ }
421
+ preTransitionState;
422
+ }
423
+
424
+ function handleError(currentState, transition, error) {
425
+ // This is the only possible
426
+ // reject value of TransitionState#resolve
427
+ let routeInfos = currentState.routeInfos;
428
+ let errorHandlerIndex = transition.resolveIndex >= routeInfos.length ? routeInfos.length - 1 : transition.resolveIndex;
429
+ let wasAborted = transition.isAborted;
430
+ throw new TransitionError(error, currentState.routeInfos[errorHandlerIndex].route, wasAborted, currentState);
431
+ }
432
+ function resolveOneRouteInfo(currentState, transition) {
433
+ if (transition.resolveIndex === currentState.routeInfos.length) {
434
+ // This is is the only possible
435
+ // fulfill value of TransitionState#resolve
436
+ return;
437
+ }
438
+ let routeInfo = currentState.routeInfos[transition.resolveIndex];
439
+ let callback = proceed.bind(null, currentState, transition);
440
+ return routeInfo.resolve(transition).then(callback, null, currentState.promiseLabel('Proceed'));
441
+ }
442
+ function proceed(currentState, transition, resolvedRouteInfo) {
443
+ let wasAlreadyResolved = currentState.routeInfos[transition.resolveIndex].isResolved;
444
+
445
+ // Swap the previously unresolved routeInfo with
446
+ // the resolved routeInfo
447
+ currentState.routeInfos[transition.resolveIndex++] = resolvedRouteInfo;
448
+ if (!wasAlreadyResolved) {
449
+ // Call the redirect hook. The reason we call it here
450
+ // vs. afterModel is so that redirects into child
451
+ // routes don't re-run the model hooks for this
452
+ // already-resolved route.
453
+ let {
454
+ route
455
+ } = resolvedRouteInfo;
456
+ if (route !== undefined) {
457
+ if (route.redirect) {
458
+ route.redirect(resolvedRouteInfo.context, transition);
459
+ }
460
+ }
461
+ }
462
+
463
+ // Proceed after ensuring that the redirect hook
464
+ // didn't abort this transition by transitioning elsewhere.
465
+ throwIfAborted(transition);
466
+ return resolveOneRouteInfo(currentState, transition);
467
+ }
468
+ class TransitionState {
469
+ routeInfos = [];
470
+ queryParams = {};
471
+ params = {};
472
+ promiseLabel(label) {
473
+ let targetName = '';
474
+ forEach(this.routeInfos, function (routeInfo) {
475
+ if (targetName !== '') {
476
+ targetName += '.';
477
+ }
478
+ targetName += routeInfo.name;
479
+ return true;
480
+ });
481
+ return promiseLabel("'" + targetName + "': " + label);
482
+ }
483
+ resolve(transition) {
484
+ // First, calculate params for this state. This is useful
485
+ // information to provide to the various route hooks.
486
+ let params = this.params;
487
+ forEach(this.routeInfos, routeInfo => {
488
+ params[routeInfo.name] = routeInfo.params || {};
489
+ return true;
490
+ });
491
+ transition.resolveIndex = 0;
492
+ let callback = resolveOneRouteInfo.bind(null, this, transition);
493
+ let errorHandler = handleError.bind(null, this, transition);
494
+
495
+ // The prelude RSVP.resolve() async moves us into the promise land.
496
+ return Promise$1.resolve(null, this.promiseLabel('Start transition')).then(callback, null, this.promiseLabel('Resolve route')).catch(errorHandler, this.promiseLabel('Handle error')).then(() => this);
497
+ }
498
+ }
499
+ class TransitionError {
500
+ constructor(error, route, wasAborted, state) {
501
+ this.error = error;
502
+ this.route = route;
503
+ this.wasAborted = wasAborted;
504
+ this.state = state;
505
+ }
506
+ }
507
+
508
+ /* eslint-disable no-prototype-builtins */
509
+
510
+ class NamedTransitionIntent extends TransitionIntent {
511
+ name;
512
+ pivotHandler;
513
+ contexts;
514
+ queryParams;
515
+ preTransitionState = undefined;
516
+ constructor(router, name, pivotHandler, contexts = [], queryParams = {}, data) {
517
+ super(router, data);
518
+ this.name = name;
519
+ this.pivotHandler = pivotHandler;
520
+ this.contexts = contexts;
521
+ this.queryParams = queryParams;
522
+ }
523
+ applyToState(oldState, isIntermediate) {
524
+ let handlers = this.router.recognizer.handlersFor(this.name);
525
+ let targetRouteName = handlers[handlers.length - 1].handler;
526
+ return this.applyToHandlers(oldState, handlers, targetRouteName, isIntermediate, false);
527
+ }
528
+ applyToHandlers(oldState, parsedHandlers, targetRouteName, isIntermediate, checkingIfActive) {
529
+ let i, len;
530
+ let newState = new TransitionState();
531
+ let objects = this.contexts.slice(0);
532
+ let invalidateIndex = parsedHandlers.length;
533
+
534
+ // Pivot handlers are provided for refresh transitions
535
+ if (this.pivotHandler) {
536
+ for (i = 0, len = parsedHandlers.length; i < len; ++i) {
537
+ if (parsedHandlers[i].handler === this.pivotHandler._internalName) {
538
+ invalidateIndex = i;
539
+ break;
540
+ }
541
+ }
542
+ }
543
+ for (i = parsedHandlers.length - 1; i >= 0; --i) {
544
+ let result = parsedHandlers[i];
545
+ let name = result.handler;
546
+ let oldHandlerInfo = oldState.routeInfos[i];
547
+ let newHandlerInfo = null;
548
+ if (result.names.length > 0) {
549
+ if (i >= invalidateIndex) {
550
+ newHandlerInfo = this.createParamHandlerInfo(name, result.names, objects, oldHandlerInfo);
551
+ } else {
552
+ newHandlerInfo = this.getHandlerInfoForDynamicSegment(name, result.names, objects, oldHandlerInfo, targetRouteName, i);
553
+ }
554
+ } else {
555
+ // This route has no dynamic segment.
556
+ // Therefore treat as a param-based handlerInfo
557
+ // with empty params. This will cause the `model`
558
+ // hook to be called with empty params, which is desirable.
559
+ newHandlerInfo = this.createParamHandlerInfo(name, result.names, objects, oldHandlerInfo);
560
+ }
561
+ if (checkingIfActive) {
562
+ // If we're performing an isActive check, we want to
563
+ // serialize URL params with the provided context, but
564
+ // ignore mismatches between old and new context.
565
+ newHandlerInfo = newHandlerInfo.becomeResolved(null,
566
+ // SAFETY: This seems to imply that it would be resolved, but it's unclear if that's actually the case.
567
+ newHandlerInfo.context);
568
+ let oldContext = oldHandlerInfo && oldHandlerInfo.context;
569
+ if (result.names.length > 0 && oldHandlerInfo.context !== undefined && newHandlerInfo.context === oldContext) {
570
+ // If contexts match in isActive test, assume params also match.
571
+ // This allows for flexibility in not requiring that every last
572
+ // handler provide a `serialize` method
573
+ newHandlerInfo.params = oldHandlerInfo && oldHandlerInfo.params;
574
+ }
575
+ newHandlerInfo.context = oldContext;
576
+ }
577
+ let handlerToUse = oldHandlerInfo;
578
+ if (i >= invalidateIndex || newHandlerInfo.shouldSupersede(oldHandlerInfo)) {
579
+ invalidateIndex = Math.min(i, invalidateIndex);
580
+ handlerToUse = newHandlerInfo;
581
+ }
582
+ if (isIntermediate && !checkingIfActive) {
583
+ handlerToUse = handlerToUse.becomeResolved(null,
584
+ // SAFETY: This seems to imply that it would be resolved, but it's unclear if that's actually the case.
585
+ handlerToUse.context);
586
+ }
587
+ newState.routeInfos.unshift(handlerToUse);
588
+ }
589
+ if (objects.length > 0) {
590
+ throw new Error('More context objects were passed than there are dynamic segments for the route: ' + targetRouteName);
591
+ }
592
+ if (!isIntermediate) {
593
+ this.invalidateChildren(newState.routeInfos, invalidateIndex);
594
+ }
595
+ merge(newState.queryParams, this.queryParams || {});
596
+ if (isIntermediate && oldState.queryParams) {
597
+ merge(newState.queryParams, oldState.queryParams);
598
+ }
599
+ return newState;
600
+ }
601
+ invalidateChildren(handlerInfos, invalidateIndex) {
602
+ for (let i = invalidateIndex, l = handlerInfos.length; i < l; ++i) {
603
+ let handlerInfo = handlerInfos[i];
604
+ if (handlerInfo.isResolved) {
605
+ let {
606
+ name,
607
+ params,
608
+ route,
609
+ paramNames
610
+ } = handlerInfos[i];
611
+ handlerInfos[i] = new UnresolvedRouteInfoByParam(this.router, name, paramNames, params, route);
612
+ }
613
+ }
614
+ }
615
+ getHandlerInfoForDynamicSegment(name, names, objects, oldHandlerInfo, _targetRouteName, i) {
616
+ let objectToUse;
617
+ if (objects.length > 0) {
618
+ // Use the objects provided for this transition.
619
+ objectToUse = objects[objects.length - 1];
620
+ if (isParam(objectToUse)) {
621
+ return this.createParamHandlerInfo(name, names, objects, oldHandlerInfo);
622
+ } else {
623
+ objects.pop();
624
+ }
625
+ } else if (oldHandlerInfo && oldHandlerInfo.name === name) {
626
+ // Reuse the matching oldHandlerInfo
627
+ return oldHandlerInfo;
628
+ } else {
629
+ if (this.preTransitionState) {
630
+ let preTransitionHandlerInfo = this.preTransitionState.routeInfos[i];
631
+ objectToUse = preTransitionHandlerInfo?.context;
632
+ } else {
633
+ // Ideally we should throw this error to provide maximal
634
+ // information to the user that not enough context objects
635
+ // were provided, but this proves too cumbersome in Ember
636
+ // in cases where inner template helpers are evaluated
637
+ // before parent helpers un-render, in which cases this
638
+ // error somewhat prematurely fires.
639
+ //throw new Error("Not enough context objects were provided to complete a transition to " + targetRouteName + ". Specifically, the " + name + " route needs an object that can be serialized into its dynamic URL segments [" + names.join(', ') + "]");
640
+ return oldHandlerInfo;
641
+ }
642
+ }
643
+ return new UnresolvedRouteInfoByObject(this.router, name, names, objectToUse);
644
+ }
645
+ createParamHandlerInfo(name, names, objects, oldHandlerInfo) {
646
+ let params = {};
647
+
648
+ // Soak up all the provided string/numbers
649
+ let numNames = names.length;
650
+ let missingParams = [];
651
+ while (numNames--) {
652
+ // Only use old params if the names match with the new handler
653
+ let oldParams = oldHandlerInfo && name === oldHandlerInfo.name && oldHandlerInfo.params || {};
654
+ let peek = objects[objects.length - 1];
655
+ let paramName = names[numNames];
656
+ if (isParam(peek)) {
657
+ params[paramName] = String(objects.pop());
658
+ } else {
659
+ // If we're here, this means only some of the params
660
+ // were string/number params, so try and use a param
661
+ // value from a previous handler.
662
+ if (oldParams.hasOwnProperty(paramName)) {
663
+ params[paramName] = oldParams[paramName];
664
+ } else {
665
+ missingParams.push(paramName);
666
+ }
667
+ }
668
+ }
669
+ if (missingParams.length > 0) {
670
+ throw new Error(`You didn't provide enough string/numeric parameters to satisfy all of the dynamic segments for route ${name}.` + ` Missing params: ${missingParams}`);
671
+ }
672
+ return new UnresolvedRouteInfoByParam(this.router, name, names, params);
673
+ }
674
+ }
675
+
676
+ class URLTransitionIntent extends TransitionIntent {
677
+ preTransitionState;
678
+ url;
679
+ constructor(router, url, data) {
680
+ super(router, data);
681
+ this.url = url;
682
+ this.preTransitionState = undefined;
683
+ }
684
+ applyToState(oldState) {
685
+ let newState = new TransitionState();
686
+ let results = this.router.recognizer.recognize(this.url),
687
+ i,
688
+ len;
689
+ if (!results) {
690
+ throw new UnrecognizedURLError(this.url);
691
+ }
692
+ let statesDiffer = false;
693
+ let _url = this.url;
694
+
695
+ // Checks if a handler is accessible by URL. If it is not, an error is thrown.
696
+ // For the case where the handler is loaded asynchronously, the error will be
697
+ // thrown once it is loaded.
698
+ function checkHandlerAccessibility(handler) {
699
+ if (handler && handler.inaccessibleByURL) {
700
+ throw new UnrecognizedURLError(_url);
701
+ }
702
+ return handler;
703
+ }
704
+ for (i = 0, len = results.length; i < len; ++i) {
705
+ let result = results[i];
706
+ let name = result.handler;
707
+ let paramNames = [];
708
+ if (this.router.recognizer.hasRoute(name)) {
709
+ paramNames = this.router.recognizer.handlersFor(name)[i].names;
710
+ }
711
+ let newRouteInfo = new UnresolvedRouteInfoByParam(this.router, name, paramNames, result.params);
712
+ let route = newRouteInfo.route;
713
+ if (route) {
714
+ checkHandlerAccessibility(route);
715
+ } else {
716
+ // If the handler is being loaded asynchronously, check if we can
717
+ // access it after it has resolved
718
+ newRouteInfo.routePromise = newRouteInfo.routePromise.then(checkHandlerAccessibility);
719
+ }
720
+ let oldRouteInfo = oldState.routeInfos[i];
721
+ if (statesDiffer || newRouteInfo.shouldSupersede(oldRouteInfo)) {
722
+ statesDiffer = true;
723
+ newState.routeInfos[i] = newRouteInfo;
724
+ } else {
725
+ newState.routeInfos[i] = oldRouteInfo;
726
+ }
727
+ }
728
+ merge(newState.queryParams, results.queryParams);
729
+ return newState;
730
+ }
731
+ }
732
+
733
+ /* eslint-disable no-prototype-builtins */
734
+
735
+ class Router {
736
+ _lastQueryParams = {};
737
+ log;
738
+ state = undefined;
739
+ oldState = undefined;
740
+ activeTransition = undefined;
741
+ currentRouteInfos = undefined;
742
+ _changedQueryParams = undefined;
743
+ currentSequence = 0;
744
+ recognizer;
745
+ constructor(logger) {
746
+ this.log = logger;
747
+ this.recognizer = new RouteRecognizer();
748
+ this.reset();
749
+ }
750
+ /**
751
+ The main entry point into the router. The API is essentially
752
+ the same as the `map` method in `route-recognizer`.
753
+ This method extracts the String handler at the last `.to()`
754
+ call and uses it as the name of the whole route.
755
+ @param {Function} callback
756
+ */
757
+ map(callback) {
758
+ this.recognizer.map(callback, function (recognizer, routes) {
759
+ for (let i = routes.length - 1, proceed = true; i >= 0 && proceed; --i) {
760
+ let route = routes[i];
761
+ let handler = route.handler;
762
+ recognizer.add(routes, {
763
+ as: handler
764
+ });
765
+ proceed = route.path === '/' || route.path === '' || handler.slice(-6) === '.index';
766
+ }
767
+ });
768
+ }
769
+ hasRoute(route) {
770
+ return this.recognizer.hasRoute(route);
771
+ }
772
+ queryParamsTransition(changelist, wasTransitioning, oldState, newState) {
773
+ this.fireQueryParamDidChange(newState, changelist);
774
+ if (!wasTransitioning && this.activeTransition) {
775
+ // One of the routes in queryParamsDidChange
776
+ // caused a transition. Just return that transition.
777
+ return this.activeTransition;
778
+ } else {
779
+ // Running queryParamsDidChange didn't change anything.
780
+ // Just update query params and be on our way.
781
+
782
+ // We have to return a noop transition that will
783
+ // perform a URL update at the end. This gives
784
+ // the user the ability to set the url update
785
+ // method (default is replaceState).
786
+ let newTransition = new Transition(this, undefined, undefined);
787
+ newTransition.queryParamsOnly = true;
788
+ oldState.queryParams = this.finalizeQueryParamChange(newState.routeInfos, newState.queryParams, newTransition);
789
+ newTransition[QUERY_PARAMS_SYMBOL] = newState.queryParams;
790
+ this.toReadOnlyInfos(newTransition, newState);
791
+ this.routeWillChange(newTransition);
792
+ newTransition.promise = newTransition.promise.then(result => {
793
+ if (!newTransition.isAborted) {
794
+ this._updateURL(newTransition, oldState);
795
+ this.didTransition(this.currentRouteInfos);
796
+ this.toInfos(newTransition, newState.routeInfos, true);
797
+ this.routeDidChange(newTransition);
798
+ }
799
+ return result;
800
+ }, null, promiseLabel('Transition complete'));
801
+ return newTransition;
802
+ }
803
+ }
804
+ transitionByIntent(intent, isIntermediate) {
805
+ try {
806
+ return this.getTransitionByIntent(intent, isIntermediate);
807
+ } catch (e) {
808
+ return new Transition(this, intent, undefined, e, undefined);
809
+ }
810
+ }
811
+ recognize(url) {
812
+ let intent = new URLTransitionIntent(this, url);
813
+ let newState = this.generateNewState(intent);
814
+ if (newState === null) {
815
+ return newState;
816
+ }
817
+ let readonlyInfos = toReadOnlyRouteInfo(newState.routeInfos, newState.queryParams, {
818
+ includeAttributes: false,
819
+ localizeMapUpdates: true
820
+ });
821
+ return readonlyInfos[readonlyInfos.length - 1];
822
+ }
823
+ recognizeAndLoad(url) {
824
+ let intent = new URLTransitionIntent(this, url);
825
+ let newState = this.generateNewState(intent);
826
+ if (newState === null) {
827
+ return Promise$1.reject(`URL ${url} was not recognized`);
828
+ }
829
+ let newTransition = new Transition(this, intent, newState, undefined);
830
+ return newTransition.then(() => {
831
+ let routeInfosWithAttributes = toReadOnlyRouteInfo(newState.routeInfos, newTransition[QUERY_PARAMS_SYMBOL], {
832
+ includeAttributes: true,
833
+ localizeMapUpdates: false
834
+ });
835
+ return routeInfosWithAttributes[routeInfosWithAttributes.length - 1];
836
+ });
837
+ }
838
+ generateNewState(intent) {
839
+ try {
840
+ return intent.applyToState(this.state, false);
841
+ } catch (_e) {
842
+ return null;
843
+ }
844
+ }
845
+ getTransitionByIntent(intent, isIntermediate) {
846
+ let wasTransitioning = Boolean(this.activeTransition);
847
+ let oldState = wasTransitioning ? this.activeTransition[STATE_SYMBOL] : this.state;
848
+ let newTransition;
849
+ let newState = intent.applyToState(oldState, isIntermediate);
850
+ let queryParamChangelist = getChangelist(oldState.queryParams, newState.queryParams);
851
+ if (routeInfosEqual(newState.routeInfos, oldState.routeInfos)) {
852
+ // This is a no-op transition. See if query params changed.
853
+ if (queryParamChangelist) {
854
+ let newTransition = this.queryParamsTransition(queryParamChangelist, wasTransitioning, oldState, newState);
855
+ newTransition.queryParamsOnly = true;
856
+ // SAFETY: The returned OpaqueTransition should actually be this.
857
+ return newTransition;
858
+ }
859
+
860
+ // No-op. No need to create a new transition.
861
+ return this.activeTransition || new Transition(this, undefined, undefined);
862
+ }
863
+ if (isIntermediate) {
864
+ let transition = new Transition(this, undefined, newState);
865
+ transition.isIntermediate = true;
866
+ this.toReadOnlyInfos(transition, newState);
867
+ this.setupContexts(newState, transition);
868
+ this.routeWillChange(transition);
869
+ return this.activeTransition;
870
+ }
871
+
872
+ // Create a new transition to the destination route.
873
+ newTransition = new Transition(this, intent, newState, undefined, this.activeTransition);
874
+
875
+ // transition is to same route with same params, only query params differ.
876
+ // not caught above probably because refresh() has been used
877
+ if (routeInfosSameExceptQueryParams(newState.routeInfos, oldState.routeInfos)) {
878
+ newTransition.queryParamsOnly = true;
879
+ }
880
+ this.toReadOnlyInfos(newTransition, newState);
881
+ // Abort and usurp any previously active transition.
882
+ if (this.activeTransition) {
883
+ this.activeTransition.redirect(newTransition);
884
+ }
885
+ this.activeTransition = newTransition;
886
+
887
+ // Transition promises by default resolve with resolved state.
888
+ // For our purposes, swap out the promise to resolve
889
+ // after the transition has been finalized.
890
+ newTransition.promise = newTransition.promise.then(result => {
891
+ return this.finalizeTransition(newTransition, result);
892
+ }, null, promiseLabel('Settle transition promise when transition is finalized'));
893
+ if (!wasTransitioning) {
894
+ this.notifyExistingHandlers(newState, newTransition);
895
+ }
896
+ this.fireQueryParamDidChange(newState, queryParamChangelist);
897
+ return newTransition;
898
+ }
899
+
900
+ /**
901
+ @private
902
+ Begins and returns a Transition based on the provided
903
+ arguments. Accepts arguments in the form of both URL
904
+ transitions and named transitions.
905
+ @param {Router} router
906
+ @param {Array[Object]} args arguments passed to transitionTo,
907
+ replaceWith, or handleURL
908
+ */
909
+ doTransition(name, modelsArray = [], isIntermediate = false) {
910
+ let lastArg = modelsArray[modelsArray.length - 1];
911
+ let queryParams = {};
912
+ if (lastArg && Object.prototype.hasOwnProperty.call(lastArg, 'queryParams')) {
913
+ // We just checked this.
914
+ // TODO: Use an assertion?
915
+ queryParams = modelsArray.pop().queryParams;
916
+ }
917
+ let intent;
918
+ if (name === undefined) {
919
+ log(this, 'Updating query params');
920
+
921
+ // A query param update is really just a transition
922
+ // into the route you're already on.
923
+ let {
924
+ routeInfos
925
+ } = this.state;
926
+ intent = new NamedTransitionIntent(this, routeInfos[routeInfos.length - 1].name, undefined, [], queryParams);
927
+ } else if (name.charAt(0) === '/') {
928
+ log(this, 'Attempting URL transition to ' + name);
929
+ intent = new URLTransitionIntent(this, name);
930
+ } else {
931
+ log(this, 'Attempting transition to ' + name);
932
+ intent = new NamedTransitionIntent(this, name, undefined,
933
+ // SAFETY: We know this to be the case since we removed the last item if it was QPs
934
+ modelsArray, queryParams);
935
+ }
936
+ return this.transitionByIntent(intent, isIntermediate);
937
+ }
938
+
939
+ /**
940
+ @private
941
+ Updates the URL (if necessary) and calls `setupContexts`
942
+ to update the router's array of `currentRouteInfos`.
943
+ */
944
+ finalizeTransition(transition, newState) {
945
+ try {
946
+ log(transition.router, transition.sequence, 'Resolved all models on destination route; finalizing transition.');
947
+ let routeInfos = newState.routeInfos;
948
+
949
+ // Run all the necessary enter/setup/exit hooks
950
+ this.setupContexts(newState, transition);
951
+
952
+ // Check if a redirect occurred in enter/setup
953
+ if (transition.isAborted) {
954
+ // TODO: cleaner way? distinguish b/w targetRouteInfos?
955
+ this.state.routeInfos = this.currentRouteInfos;
956
+ return Promise$1.reject(logAbort(transition));
957
+ }
958
+ this._updateURL(transition, newState);
959
+ transition.isActive = false;
960
+ this.activeTransition = undefined;
961
+ this.triggerEvent(this.currentRouteInfos, true, 'didTransition', []);
962
+ this.didTransition(this.currentRouteInfos);
963
+ this.toInfos(transition, newState.routeInfos, true);
964
+ this.routeDidChange(transition);
965
+ log(this, transition.sequence, 'TRANSITION COMPLETE.');
966
+
967
+ // Resolve with the final route.
968
+ return routeInfos[routeInfos.length - 1].route;
969
+ } catch (e) {
970
+ if (!isTransitionAborted(e)) {
971
+ let infos = transition[STATE_SYMBOL].routeInfos;
972
+ transition.trigger(true, 'error', e, transition, infos[infos.length - 1].route);
973
+ transition.abort();
974
+ }
975
+ throw e;
976
+ }
977
+ }
978
+
979
+ /**
980
+ @private
981
+ Takes an Array of `RouteInfo`s, figures out which ones are
982
+ exiting, entering, or changing contexts, and calls the
983
+ proper route hooks.
984
+ For example, consider the following tree of routes. Each route is
985
+ followed by the URL segment it handles.
986
+ ```
987
+ |~index ("/")
988
+ | |~posts ("/posts")
989
+ | | |-showPost ("/:id")
990
+ | | |-newPost ("/new")
991
+ | | |-editPost ("/edit")
992
+ | |~about ("/about/:id")
993
+ ```
994
+ Consider the following transitions:
995
+ 1. A URL transition to `/posts/1`.
996
+ 1. Triggers the `*model` callbacks on the
997
+ `index`, `posts`, and `showPost` routes
998
+ 2. Triggers the `enter` callback on the same
999
+ 3. Triggers the `setup` callback on the same
1000
+ 2. A direct transition to `newPost`
1001
+ 1. Triggers the `exit` callback on `showPost`
1002
+ 2. Triggers the `enter` callback on `newPost`
1003
+ 3. Triggers the `setup` callback on `newPost`
1004
+ 3. A direct transition to `about` with a specified
1005
+ context object
1006
+ 1. Triggers the `exit` callback on `newPost`
1007
+ and `posts`
1008
+ 2. Triggers the `serialize` callback on `about`
1009
+ 3. Triggers the `enter` callback on `about`
1010
+ 4. Triggers the `setup` callback on `about`
1011
+ @param {Router} transition
1012
+ @param {TransitionState} newState
1013
+ */
1014
+ setupContexts(newState, transition) {
1015
+ let partition = this.partitionRoutes(this.state, newState);
1016
+ let i, l, route;
1017
+ for (i = 0, l = partition.exited.length; i < l; i++) {
1018
+ route = partition.exited[i].route;
1019
+ delete route.context;
1020
+ if (route !== undefined) {
1021
+ if (route._internalReset !== undefined) {
1022
+ route._internalReset(true, transition);
1023
+ }
1024
+ if (route.exit !== undefined) {
1025
+ route.exit(transition);
1026
+ }
1027
+ }
1028
+ }
1029
+ let oldState = this.oldState = this.state;
1030
+ this.state = newState;
1031
+ let currentRouteInfos = this.currentRouteInfos = partition.unchanged.slice();
1032
+ try {
1033
+ for (i = 0, l = partition.reset.length; i < l; i++) {
1034
+ route = partition.reset[i].route;
1035
+ if (route !== undefined) {
1036
+ if (route._internalReset !== undefined) {
1037
+ route._internalReset(false, transition);
1038
+ }
1039
+ }
1040
+ }
1041
+ for (i = 0, l = partition.updatedContext.length; i < l; i++) {
1042
+ this.routeEnteredOrUpdated(currentRouteInfos, partition.updatedContext[i], false, transition);
1043
+ }
1044
+ for (i = 0, l = partition.entered.length; i < l; i++) {
1045
+ this.routeEnteredOrUpdated(currentRouteInfos, partition.entered[i], true, transition);
1046
+ }
1047
+ } catch (e) {
1048
+ this.state = oldState;
1049
+ this.currentRouteInfos = oldState.routeInfos;
1050
+ throw e;
1051
+ }
1052
+ this.state.queryParams = this.finalizeQueryParamChange(currentRouteInfos, newState.queryParams, transition);
1053
+ }
1054
+
1055
+ /**
1056
+ @private
1057
+ Fires queryParamsDidChange event
1058
+ */
1059
+ fireQueryParamDidChange(newState, queryParamChangelist) {
1060
+ // If queryParams changed trigger event
1061
+ if (queryParamChangelist) {
1062
+ // This is a little hacky but we need some way of storing
1063
+ // changed query params given that no activeTransition
1064
+ // is guaranteed to have occurred.
1065
+ this._changedQueryParams = queryParamChangelist.all;
1066
+ this.triggerEvent(newState.routeInfos, true, 'queryParamsDidChange', [queryParamChangelist.changed, queryParamChangelist.all, queryParamChangelist.removed]);
1067
+ this._changedQueryParams = undefined;
1068
+ }
1069
+ }
1070
+
1071
+ /**
1072
+ @private
1073
+ Helper method used by setupContexts. Handles errors or redirects
1074
+ that may happen in enter/setup.
1075
+ */
1076
+ routeEnteredOrUpdated(currentRouteInfos, routeInfo, enter, transition) {
1077
+ let route = routeInfo.route,
1078
+ context = routeInfo.context;
1079
+ function _routeEnteredOrUpdated(route) {
1080
+ if (enter) {
1081
+ if (route.enter !== undefined) {
1082
+ route.enter(transition);
1083
+ }
1084
+ }
1085
+ throwIfAborted(transition);
1086
+ route.context = context;
1087
+ if (route.contextDidChange !== undefined) {
1088
+ route.contextDidChange();
1089
+ }
1090
+ if (route.setup !== undefined) {
1091
+ route.setup(context, transition);
1092
+ }
1093
+ throwIfAborted(transition);
1094
+ currentRouteInfos.push(routeInfo);
1095
+ return route;
1096
+ }
1097
+
1098
+ // If the route doesn't exist, it means we haven't resolved the route promise yet
1099
+ if (route === undefined) {
1100
+ routeInfo.routePromise = routeInfo.routePromise.then(_routeEnteredOrUpdated);
1101
+ } else {
1102
+ _routeEnteredOrUpdated(route);
1103
+ }
1104
+ return true;
1105
+ }
1106
+
1107
+ /**
1108
+ @private
1109
+ This function is called when transitioning from one URL to
1110
+ another to determine which routes are no longer active,
1111
+ which routes are newly active, and which routes remain
1112
+ active but have their context changed.
1113
+ Take a list of old routes and new routes and partition
1114
+ them into four buckets:
1115
+ * unchanged: the route was active in both the old and
1116
+ new URL, and its context remains the same
1117
+ * updated context: the route was active in both the
1118
+ old and new URL, but its context changed. The route's
1119
+ `setup` method, if any, will be called with the new
1120
+ context.
1121
+ * exited: the route was active in the old URL, but is
1122
+ no longer active.
1123
+ * entered: the route was not active in the old URL, but
1124
+ is now active.
1125
+ The PartitionedRoutes structure has four fields:
1126
+ * `updatedContext`: a list of `RouteInfo` objects that
1127
+ represent routes that remain active but have a changed
1128
+ context
1129
+ * `entered`: a list of `RouteInfo` objects that represent
1130
+ routes that are newly active
1131
+ * `exited`: a list of `RouteInfo` objects that are no
1132
+ longer active.
1133
+ * `unchanged`: a list of `RouteInfo` objects that remain active.
1134
+ @param {Array[InternalRouteInfo]} oldRoutes a list of the route
1135
+ information for the previous URL (or `[]` if this is the
1136
+ first handled transition)
1137
+ @param {Array[InternalRouteInfo]} newRoutes a list of the route
1138
+ information for the new URL
1139
+ @return {Partition}
1140
+ */
1141
+ partitionRoutes(oldState, newState) {
1142
+ let oldRouteInfos = oldState.routeInfos;
1143
+ let newRouteInfos = newState.routeInfos;
1144
+ let routes = {
1145
+ updatedContext: [],
1146
+ exited: [],
1147
+ entered: [],
1148
+ unchanged: [],
1149
+ reset: []
1150
+ };
1151
+ let routeChanged,
1152
+ contextChanged = false,
1153
+ i,
1154
+ l;
1155
+ for (i = 0, l = newRouteInfos.length; i < l; i++) {
1156
+ let oldRouteInfo = oldRouteInfos[i],
1157
+ newRouteInfo = newRouteInfos[i];
1158
+ if (!oldRouteInfo || oldRouteInfo.route !== newRouteInfo.route) {
1159
+ routeChanged = true;
1160
+ }
1161
+ if (routeChanged) {
1162
+ routes.entered.push(newRouteInfo);
1163
+ if (oldRouteInfo) {
1164
+ routes.exited.unshift(oldRouteInfo);
1165
+ }
1166
+ } else if (contextChanged || oldRouteInfo.context !== newRouteInfo.context) {
1167
+ contextChanged = true;
1168
+ routes.updatedContext.push(newRouteInfo);
1169
+ } else {
1170
+ routes.unchanged.push(oldRouteInfo);
1171
+ }
1172
+ }
1173
+ for (i = newRouteInfos.length, l = oldRouteInfos.length; i < l; i++) {
1174
+ routes.exited.unshift(oldRouteInfos[i]);
1175
+ }
1176
+ routes.reset = routes.updatedContext.slice();
1177
+ routes.reset.reverse();
1178
+ return routes;
1179
+ }
1180
+ _updateURL(transition, state) {
1181
+ let urlMethod = transition.urlMethod;
1182
+ if (!urlMethod) {
1183
+ return;
1184
+ }
1185
+ let {
1186
+ routeInfos
1187
+ } = state;
1188
+ let {
1189
+ name: routeName
1190
+ } = routeInfos[routeInfos.length - 1];
1191
+ let params = {};
1192
+ for (let i = routeInfos.length - 1; i >= 0; --i) {
1193
+ let routeInfo = routeInfos[i];
1194
+ merge(params, routeInfo.params);
1195
+ if (routeInfo.route.inaccessibleByURL) {
1196
+ urlMethod = null;
1197
+ }
1198
+ }
1199
+ if (urlMethod) {
1200
+ params['queryParams'] = transition._visibleQueryParams || state.queryParams;
1201
+ let url = this.recognizer.generate(routeName, params);
1202
+
1203
+ // transitions during the initial transition must always use replaceURL.
1204
+ // When the app boots, you are at a url, e.g. /foo. If some route
1205
+ // redirects to bar as part of the initial transition, you don't want to
1206
+ // add a history entry for /foo. If you do, pressing back will immediately
1207
+ // hit the redirect again and take you back to /bar, thus killing the back
1208
+ // button
1209
+ let initial = transition.isCausedByInitialTransition;
1210
+
1211
+ // say you are at / and you click a link to route /foo. In /foo's
1212
+ // route, the transition is aborted using replaceWith('/bar').
1213
+ // Because the current url is still /, the history entry for / is
1214
+ // removed from the history. Clicking back will take you to the page
1215
+ // you were on before /, which is often not even the app, thus killing
1216
+ // the back button. That's why updateURL is always correct for an
1217
+ // aborting transition that's not the initial transition
1218
+ let replaceAndNotAborting = urlMethod === 'replace' && !transition.isCausedByAbortingTransition;
1219
+
1220
+ // because calling refresh causes an aborted transition, this needs to be
1221
+ // special cased - if the initial transition is a replace transition, the
1222
+ // urlMethod should be honored here.
1223
+ let isQueryParamsRefreshTransition = transition.queryParamsOnly && urlMethod === 'replace';
1224
+
1225
+ // say you are at / and you a `replaceWith(/foo)` is called. Then, that
1226
+ // transition is aborted with `replaceWith(/bar)`. At the end, we should
1227
+ // end up with /bar replacing /. We are replacing the replace. We only
1228
+ // will replace the initial route if all subsequent aborts are also
1229
+ // replaces. However, there is some ambiguity around the correct behavior
1230
+ // here.
1231
+ let replacingReplace = urlMethod === 'replace' && transition.isCausedByAbortingReplaceTransition;
1232
+ if (initial || replaceAndNotAborting || isQueryParamsRefreshTransition || replacingReplace) {
1233
+ this.replaceURL(url);
1234
+ } else {
1235
+ this.updateURL(url);
1236
+ }
1237
+ }
1238
+ }
1239
+ finalizeQueryParamChange(resolvedHandlers, newQueryParams, transition) {
1240
+ // We fire a finalizeQueryParamChange event which
1241
+ // gives the new route hierarchy a chance to tell
1242
+ // us which query params it's consuming and what
1243
+ // their final values are. If a query param is
1244
+ // no longer consumed in the final route hierarchy,
1245
+ // its serialized segment will be removed
1246
+ // from the URL.
1247
+
1248
+ for (let k in newQueryParams) {
1249
+ if (newQueryParams.hasOwnProperty(k) && newQueryParams[k] === null) {
1250
+ delete newQueryParams[k];
1251
+ }
1252
+ }
1253
+ let finalQueryParamsArray = [];
1254
+ this.triggerEvent(resolvedHandlers, true, 'finalizeQueryParamChange', [newQueryParams, finalQueryParamsArray, transition]);
1255
+ if (transition) {
1256
+ transition._visibleQueryParams = {};
1257
+ }
1258
+ let finalQueryParams = {};
1259
+ for (let i = 0, len = finalQueryParamsArray.length; i < len; ++i) {
1260
+ let qp = finalQueryParamsArray[i];
1261
+ finalQueryParams[qp.key] = qp.value;
1262
+ if (transition && qp.visible !== false) {
1263
+ transition._visibleQueryParams[qp.key] = qp.value;
1264
+ }
1265
+ }
1266
+ return finalQueryParams;
1267
+ }
1268
+ toReadOnlyInfos(newTransition, newState) {
1269
+ let oldRouteInfos = this.state.routeInfos;
1270
+ this.fromInfos(newTransition, oldRouteInfos);
1271
+ this.toInfos(newTransition, newState.routeInfos);
1272
+ this._lastQueryParams = newState.queryParams;
1273
+ }
1274
+ fromInfos(newTransition, oldRouteInfos) {
1275
+ if (newTransition !== undefined && oldRouteInfos.length > 0) {
1276
+ let fromInfos = toReadOnlyRouteInfo(oldRouteInfos, Object.assign({}, this._lastQueryParams), {
1277
+ includeAttributes: true,
1278
+ localizeMapUpdates: false
1279
+ });
1280
+ newTransition.from = fromInfos[fromInfos.length - 1] || null;
1281
+ }
1282
+ }
1283
+ toInfos(newTransition, newRouteInfos, includeAttributes = false) {
1284
+ if (newTransition !== undefined && newRouteInfos.length > 0) {
1285
+ let toInfos = toReadOnlyRouteInfo(newRouteInfos, Object.assign({}, newTransition[QUERY_PARAMS_SYMBOL]), {
1286
+ includeAttributes,
1287
+ localizeMapUpdates: false
1288
+ });
1289
+ newTransition.to = toInfos[toInfos.length - 1] || null;
1290
+ }
1291
+ }
1292
+ notifyExistingHandlers(newState, newTransition) {
1293
+ let oldRouteInfos = this.state.routeInfos,
1294
+ i,
1295
+ oldRouteInfoLen,
1296
+ oldHandler,
1297
+ newRouteInfo;
1298
+ oldRouteInfoLen = oldRouteInfos.length;
1299
+ for (i = 0; i < oldRouteInfoLen; i++) {
1300
+ oldHandler = oldRouteInfos[i];
1301
+ newRouteInfo = newState.routeInfos[i];
1302
+ if (!newRouteInfo || oldHandler.name !== newRouteInfo.name) {
1303
+ break;
1304
+ }
1305
+ if (!newRouteInfo.isResolved) ;
1306
+ }
1307
+ this.triggerEvent(oldRouteInfos, true, 'willTransition', [newTransition]);
1308
+ this.routeWillChange(newTransition);
1309
+ this.willTransition(oldRouteInfos, newState.routeInfos, newTransition);
1310
+ }
1311
+
1312
+ /**
1313
+ Clears the current and target route routes and triggers exit
1314
+ on each of them starting at the leaf and traversing up through
1315
+ its ancestors.
1316
+ */
1317
+ reset() {
1318
+ if (this.state) {
1319
+ forEach(this.state.routeInfos.slice().reverse(), function (routeInfo) {
1320
+ let route = routeInfo.route;
1321
+ if (route !== undefined) {
1322
+ if (route.exit !== undefined) {
1323
+ route.exit();
1324
+ }
1325
+ }
1326
+ return true;
1327
+ });
1328
+ }
1329
+ this.oldState = undefined;
1330
+ this.state = new TransitionState();
1331
+ this.currentRouteInfos = undefined;
1332
+ }
1333
+
1334
+ /**
1335
+ let handler = routeInfo.handler;
1336
+ The entry point for handling a change to the URL (usually
1337
+ via the back and forward button).
1338
+ Returns an Array of handlers and the parameters associated
1339
+ with those parameters.
1340
+ @param {String} url a URL to process
1341
+ @return {Array} an Array of `[handler, parameter]` tuples
1342
+ */
1343
+ handleURL(url) {
1344
+ // Perform a URL-based transition, but don't change
1345
+ // the URL afterward, since it already happened.
1346
+ if (url.charAt(0) !== '/') {
1347
+ url = '/' + url;
1348
+ }
1349
+ return this.doTransition(url).method(null);
1350
+ }
1351
+
1352
+ /**
1353
+ Transition into the specified named route.
1354
+ If necessary, trigger the exit callback on any routes
1355
+ that are no longer represented by the target route.
1356
+ @param {String} name the name of the route
1357
+ */
1358
+ transitionTo(name, ...contexts) {
1359
+ if (typeof name === 'object') {
1360
+ contexts.push(name);
1361
+ return this.doTransition(undefined, contexts, false);
1362
+ }
1363
+ return this.doTransition(name, contexts);
1364
+ }
1365
+ intermediateTransitionTo(name, ...args) {
1366
+ return this.doTransition(name, args, true);
1367
+ }
1368
+ refresh(pivotRoute) {
1369
+ let previousTransition = this.activeTransition;
1370
+ let state = previousTransition ? previousTransition[STATE_SYMBOL] : this.state;
1371
+ let routeInfos = state.routeInfos;
1372
+ if (pivotRoute === undefined) {
1373
+ pivotRoute = routeInfos[0].route;
1374
+ }
1375
+ log(this, 'Starting a refresh transition');
1376
+ let name = routeInfos[routeInfos.length - 1].name;
1377
+ let intent = new NamedTransitionIntent(this, name, pivotRoute, [], this._changedQueryParams || state.queryParams);
1378
+ let newTransition = this.transitionByIntent(intent, false);
1379
+
1380
+ // if the previous transition is a replace transition, that needs to be preserved
1381
+ if (previousTransition && previousTransition.urlMethod === 'replace') {
1382
+ newTransition.method(previousTransition.urlMethod);
1383
+ }
1384
+ return newTransition;
1385
+ }
1386
+
1387
+ /**
1388
+ Identical to `transitionTo` except that the current URL will be replaced
1389
+ if possible.
1390
+ This method is intended primarily for use with `replaceState`.
1391
+ @param {String} name the name of the route
1392
+ */
1393
+ replaceWith(name) {
1394
+ return this.doTransition(name).method('replace');
1395
+ }
1396
+
1397
+ /**
1398
+ Take a named route and context objects and generate a
1399
+ URL.
1400
+ @param {String} name the name of the route to generate
1401
+ a URL for
1402
+ @param {...Object} objects a list of objects to serialize
1403
+ @return {String} a URL
1404
+ */
1405
+ generate(routeName, ...args) {
1406
+ let partitionedArgs = extractQueryParams(args),
1407
+ suppliedParams = partitionedArgs[0],
1408
+ queryParams = partitionedArgs[1];
1409
+
1410
+ // Construct a TransitionIntent with the provided params
1411
+ // and apply it to the present state of the router.
1412
+ let intent = new NamedTransitionIntent(this, routeName, undefined, suppliedParams);
1413
+ let state = intent.applyToState(this.state, false);
1414
+ let params = {};
1415
+ for (let i = 0, len = state.routeInfos.length; i < len; ++i) {
1416
+ let routeInfo = state.routeInfos[i];
1417
+ let routeParams = routeInfo.serialize();
1418
+ merge(params, routeParams);
1419
+ }
1420
+ params.queryParams = queryParams;
1421
+ return this.recognizer.generate(routeName, params);
1422
+ }
1423
+ applyIntent(routeName, contexts) {
1424
+ let intent = new NamedTransitionIntent(this, routeName, undefined, contexts);
1425
+ let state = this.activeTransition && this.activeTransition[STATE_SYMBOL] || this.state;
1426
+ return intent.applyToState(state, false);
1427
+ }
1428
+ isActiveIntent(routeName, contexts, queryParams, _state) {
1429
+ let state = _state || this.state,
1430
+ targetRouteInfos = state.routeInfos,
1431
+ routeInfo,
1432
+ len;
1433
+ if (!targetRouteInfos.length) {
1434
+ return false;
1435
+ }
1436
+ let targetHandler = targetRouteInfos[targetRouteInfos.length - 1].name;
1437
+ let recognizerHandlers = this.recognizer.handlersFor(targetHandler);
1438
+ let index = 0;
1439
+ for (len = recognizerHandlers.length; index < len; ++index) {
1440
+ routeInfo = targetRouteInfos[index];
1441
+ if (routeInfo.name === routeName) {
1442
+ break;
1443
+ }
1444
+ }
1445
+ if (index === recognizerHandlers.length) {
1446
+ // The provided route name isn't even in the route hierarchy.
1447
+ return false;
1448
+ }
1449
+ let testState = new TransitionState();
1450
+ testState.routeInfos = targetRouteInfos.slice(0, index + 1);
1451
+ recognizerHandlers = recognizerHandlers.slice(0, index + 1);
1452
+ let intent = new NamedTransitionIntent(this, targetHandler, undefined, contexts);
1453
+ let newState = intent.applyToHandlers(testState, recognizerHandlers, targetHandler, true, true);
1454
+ let routesEqual = routeInfosEqual(newState.routeInfos, testState.routeInfos);
1455
+ if (!queryParams || !routesEqual) {
1456
+ return routesEqual;
1457
+ }
1458
+
1459
+ // Get a hash of QPs that will still be active on new route
1460
+ let activeQPsOnNewHandler = {};
1461
+ merge(activeQPsOnNewHandler, queryParams);
1462
+ let activeQueryParams = state.queryParams;
1463
+ for (let key in activeQueryParams) {
1464
+ if (activeQueryParams.hasOwnProperty(key) && activeQPsOnNewHandler.hasOwnProperty(key)) {
1465
+ activeQPsOnNewHandler[key] = activeQueryParams[key];
1466
+ }
1467
+ }
1468
+ return routesEqual && !getChangelist(activeQPsOnNewHandler, queryParams);
1469
+ }
1470
+ isActive(routeName, ...args) {
1471
+ let [contexts, queryParams] = extractQueryParams(args);
1472
+ return this.isActiveIntent(routeName, contexts, queryParams);
1473
+ }
1474
+ trigger(name, ...args) {
1475
+ this.triggerEvent(this.currentRouteInfos, false, name, args);
1476
+ }
1477
+ }
1478
+ function routeInfosEqual(routeInfos, otherRouteInfos) {
1479
+ if (routeInfos.length !== otherRouteInfos.length) {
1480
+ return false;
1481
+ }
1482
+ for (let i = 0, len = routeInfos.length; i < len; ++i) {
1483
+ // SAFETY: Just casting for comparison
1484
+ if (routeInfos[i] !== otherRouteInfos[i]) {
1485
+ return false;
1486
+ }
1487
+ }
1488
+ return true;
1489
+ }
1490
+ function routeInfosSameExceptQueryParams(routeInfos, otherRouteInfos) {
1491
+ if (routeInfos.length !== otherRouteInfos.length) {
1492
+ return false;
1493
+ }
1494
+ for (let i = 0, len = routeInfos.length; i < len; ++i) {
1495
+ if (routeInfos[i].name !== otherRouteInfos[i].name) {
1496
+ return false;
1497
+ }
1498
+ if (!paramsEqual(routeInfos[i].params, otherRouteInfos[i].params)) {
1499
+ return false;
1500
+ }
1501
+ }
1502
+ return true;
1503
+ }
1504
+ function paramsEqual(params, otherParams) {
1505
+ if (params === otherParams) {
1506
+ // Both identical or both undefined
1507
+ return true;
1508
+ }
1509
+ if (!params || !otherParams) {
1510
+ // One is falsy but other is not
1511
+ return false;
1512
+ }
1513
+ let keys = Object.keys(params);
1514
+ let otherKeys = Object.keys(otherParams);
1515
+ if (keys.length !== otherKeys.length) {
1516
+ return false;
1517
+ }
1518
+ for (let i = 0, len = keys.length; i < len; ++i) {
1519
+ let key = keys[i];
1520
+ if (params[key] !== otherParams[key]) {
1521
+ return false;
1522
+ }
1523
+ }
1524
+ return true;
1525
+ }
1526
+
1527
+ export { InternalRouteInfo, Transition as InternalTransition, PARAMS_SYMBOL, QUERY_PARAMS_SYMBOL, STATE_SYMBOL, TransitionError, TransitionState, Router as default, logAbort };