ember-source 7.1.0-alpha.4 → 7.1.0-alpha.5

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 (481) hide show
  1. package/build-metadata.json +3 -3
  2. package/dist/dev/packages/@ember/-internals/container/index.js +4 -401
  3. package/dist/dev/packages/@ember/-internals/deprecations/index.js +1 -1
  4. package/dist/dev/packages/@ember/-internals/environment/index.js +3 -161
  5. package/dist/dev/packages/@ember/-internals/glimmer/index.js +14 -15
  6. package/dist/dev/packages/@ember/-internals/meta/lib/meta.js +0 -1
  7. package/dist/dev/packages/@ember/-internals/metal/index.js +18 -9
  8. package/dist/dev/packages/@ember/-internals/routing/index.js +1 -10
  9. package/dist/dev/packages/@ember/-internals/runtime/lib/mixins/-proxy.js +10 -12
  10. package/dist/dev/packages/@ember/-internals/runtime/lib/mixins/action_handler.js +1 -10
  11. package/dist/dev/packages/@ember/-internals/runtime/lib/mixins/target_action_support.js +3 -10
  12. package/dist/dev/packages/@ember/-internals/string/index.js +0 -1
  13. package/dist/dev/packages/@ember/-internals/utils/index.js +8 -3
  14. package/dist/dev/packages/@ember/-internals/views/lib/compat/fallback-view-registry.js +0 -1
  15. package/dist/dev/packages/@ember/-internals/views/lib/mixins/action_support.js +3 -12
  16. package/dist/dev/packages/@ember/-internals/views/lib/system/event_dispatcher.js +2 -11
  17. package/dist/dev/packages/@ember/-internals/views/lib/system/utils.js +1 -1
  18. package/dist/dev/packages/@ember/-internals/views/lib/views/core_view.js +1 -18
  19. package/dist/dev/packages/@ember/-internals/views/lib/views/states.js +1 -1
  20. package/dist/dev/packages/@ember/application/index.js +5 -28
  21. package/dist/dev/packages/@ember/application/instance.js +3 -22
  22. package/dist/dev/packages/@ember/application/namespace.js +4 -11
  23. package/dist/dev/packages/@ember/array/index.js +7 -15
  24. package/dist/dev/packages/@ember/array/proxy.js +10 -14
  25. package/dist/dev/packages/@ember/canary-features/index.js +1 -1
  26. package/dist/dev/packages/@ember/component/helper.js +1 -14
  27. package/dist/dev/packages/@ember/component/index.js +1355 -16
  28. package/dist/dev/packages/@ember/component/template-only.js +1 -9
  29. package/dist/dev/packages/@ember/controller/index.js +3 -19
  30. package/dist/dev/packages/@ember/debug/container-debug-adapter.js +0 -19
  31. package/dist/dev/packages/@ember/debug/data-adapter.js +4 -11
  32. package/dist/dev/packages/@ember/debug/index.js +1 -1
  33. package/dist/dev/packages/@ember/debug/lib/deprecate.js +1 -1
  34. package/dist/dev/packages/@ember/engine/index.js +3 -29
  35. package/dist/dev/packages/@ember/engine/instance.js +3 -8
  36. package/dist/dev/packages/@ember/helper/index.js +169 -21
  37. package/dist/dev/packages/@ember/instrumentation/index.js +1 -1
  38. package/dist/dev/packages/@ember/modifier/index.js +2 -16
  39. package/dist/dev/packages/@ember/modifier/on.js +1 -9
  40. package/dist/dev/packages/@ember/object/-internals.js +3 -11
  41. package/dist/dev/packages/@ember/object/compat.js +3 -10
  42. package/dist/dev/packages/@ember/object/computed.js +2 -12
  43. package/dist/dev/packages/@ember/object/core.js +10 -18
  44. package/dist/dev/packages/@ember/object/evented.js +2 -12
  45. package/dist/dev/packages/@ember/object/events.js +1 -11
  46. package/dist/dev/packages/@ember/object/index.js +10 -14
  47. package/dist/dev/packages/@ember/object/internals.js +1 -1
  48. package/dist/dev/packages/@ember/object/lib/computed/computed_macros.js +6 -23
  49. package/dist/dev/packages/@ember/object/lib/computed/reduce_computed_macros.js +3 -12
  50. package/dist/dev/packages/@ember/object/mixin.js +7 -10
  51. package/dist/dev/packages/@ember/object/observable.js +8 -12
  52. package/dist/dev/packages/@ember/object/observers.js +1 -11
  53. package/dist/dev/packages/@ember/object/promise-proxy-mixin.js +3 -13
  54. package/dist/dev/packages/@ember/object/proxy.js +0 -7
  55. package/dist/dev/packages/@ember/reactive/collections.js +589 -1
  56. package/dist/dev/packages/@ember/renderer/index.js +1 -14
  57. package/dist/dev/packages/@ember/routing/-internals.js +1 -10
  58. package/dist/dev/packages/@ember/routing/index.js +614 -14
  59. package/dist/dev/packages/@ember/routing/lib/generate_controller.js +2 -11
  60. package/dist/dev/packages/@ember/routing/lib/routing-service.js +7 -17
  61. package/dist/dev/packages/@ember/routing/lib/utils.js +2 -11
  62. package/dist/dev/packages/@ember/routing/route.js +12 -23
  63. package/dist/dev/packages/@ember/routing/router-service.js +8 -17
  64. package/dist/dev/packages/@ember/routing/router.js +5 -21
  65. package/dist/dev/packages/@ember/runloop/index.js +1 -10
  66. package/dist/dev/packages/@ember/service/index.js +1 -11
  67. package/dist/dev/packages/@ember/template/index.js +1 -14
  68. package/dist/dev/packages/@ember/template-compiler/lib/compile-options.js +12 -15
  69. package/dist/dev/packages/@ember/template-compiler/lib/dasherize-component-name.js +0 -1
  70. package/dist/dev/packages/@ember/template-compiler/lib/plugins/auto-import-builtins.js +13 -60
  71. package/dist/dev/packages/@ember/template-compiler/lib/plugins/index.js +1 -1
  72. package/dist/dev/packages/@ember/template-compiler/lib/plugins/transform-resolutions.js +1 -3
  73. package/dist/dev/packages/@ember/template-compiler/lib/template.js +2 -10
  74. package/dist/dev/packages/@ember/template-factory/index.js +1 -8
  75. package/dist/dev/packages/@ember/utils/lib/compare.js +0 -7
  76. package/dist/dev/packages/@ember/utils/lib/is_empty.js +1 -12
  77. package/dist/dev/packages/@glimmer/manager/index.js +4 -314
  78. package/dist/dev/packages/@glimmer/node/index.js +3 -11
  79. package/dist/dev/packages/@glimmer/opcode-compiler/index.js +5 -7
  80. package/dist/dev/packages/@glimmer/program/index.js +194 -3
  81. package/dist/dev/packages/@glimmer/reference/index.js +4 -5
  82. package/dist/dev/packages/@glimmer/runtime/index.js +17 -10
  83. package/dist/dev/packages/@glimmer/tracking/index.js +2 -11
  84. package/dist/dev/packages/@glimmer/tracking/primitives/cache/index.js +1 -11
  85. package/dist/dev/packages/@glimmer/util/index.js +1 -2
  86. package/dist/dev/packages/@glimmer/validator/index.js +4 -1253
  87. package/dist/dev/packages/@glimmer/vm/index.js +1 -1
  88. package/dist/dev/packages/@glimmer/wire-format/index.js +3 -65
  89. package/dist/dev/packages/ember/version.js +1 -1
  90. package/dist/dev/packages/ember-template-compiler/index.js +7 -7
  91. package/dist/dev/packages/shared-chunks/{alias-CSC0WIbj.js → alias-ZcMQckQV.js} +8 -4
  92. package/dist/dev/packages/shared-chunks/api-AYt3zE12.js +310 -0
  93. package/dist/dev/packages/shared-chunks/{api-BQMslHhq.js → api-WvJPuo9z.js} +4 -5
  94. package/dist/dev/packages/shared-chunks/{args-proxy-DgXMc9b5.js → args-proxy-BNLuRFlO.js} +2 -4
  95. package/dist/dev/packages/shared-chunks/{array-D8PfjQHi.js → array-Bh_kUjzy.js} +2 -1
  96. package/dist/dev/packages/shared-chunks/cache-B7dqAS38.js +596 -0
  97. package/dist/dev/packages/shared-chunks/{capabilities-O_xc7Yqk.js → capabilities-CZkuOqqC.js} +0 -5
  98. package/dist/dev/packages/shared-chunks/chain-tags-D6tuFUj_.js +190 -0
  99. package/dist/dev/packages/shared-chunks/{collections-D_nY_0UJ.js → collections-DPkjqeA3.js} +0 -1
  100. package/dist/dev/packages/shared-chunks/{compiler-D1leQ3Gl.js → compiler-CXB_8GdR.js} +7043 -234
  101. package/dist/dev/packages/shared-chunks/computed-CJnghmXC.js +980 -0
  102. package/dist/dev/packages/shared-chunks/container-BzzHmCNj.js +404 -0
  103. package/dist/dev/packages/shared-chunks/curly-CvC8E_4-.js +617 -0
  104. package/dist/dev/packages/shared-chunks/{fragment-Cc5k9Oy4.js → curried-BVwSNqpf.js} +5 -288
  105. package/dist/dev/packages/shared-chunks/decorator-B5Uh5NFI.js +135 -0
  106. package/dist/dev/packages/shared-chunks/element-C-QcIABg.js +109 -0
  107. package/dist/dev/packages/shared-chunks/element-builder-kHVx0F__.js +812 -0
  108. package/dist/dev/packages/shared-chunks/env-g-kaAFLN.js +161 -0
  109. package/dist/dev/packages/shared-chunks/events-6aFVjD4k.js +180 -0
  110. package/dist/dev/packages/shared-chunks/get-CpJjYeJO.js +138 -0
  111. package/dist/dev/packages/shared-chunks/get-debug-name-CSniHBsn.js +45 -0
  112. package/dist/dev/packages/shared-chunks/get_properties-CIm8IAtP.js +55 -0
  113. package/dist/dev/packages/shared-chunks/guid-Cbq2sNV_.js +123 -0
  114. package/dist/dev/packages/shared-chunks/hash-D3BENmhU.js +192 -0
  115. package/dist/dev/packages/shared-chunks/helper-DlC4YesW.js +314 -0
  116. package/dist/dev/packages/shared-chunks/index-CTxkmV78.js +2500 -0
  117. package/dist/dev/packages/shared-chunks/index-D-xTBV4B.js +220 -0
  118. package/dist/dev/packages/shared-chunks/{index-BUPd6pkm.js → index-DmGmwWPJ.js} +29 -29
  119. package/dist/dev/packages/shared-chunks/injected_property-B4T-FzZZ.js +70 -0
  120. package/dist/dev/packages/shared-chunks/intern-zquhAEIg.js +51 -0
  121. package/dist/dev/packages/shared-chunks/internal-CbQSKXEm.js +140 -0
  122. package/dist/dev/packages/shared-chunks/internal-helper-Dsl9_7H_.js +7 -0
  123. package/dist/dev/packages/shared-chunks/{neq-DujMPv1k.js → invoke-B6j6DdDz.js} +4 -32
  124. package/dist/{prod/packages/shared-chunks/is_proxy-Cr1qlMv_.js → dev/packages/shared-chunks/is_proxy-Bzg0d4m4.js} +1 -1
  125. package/dist/dev/packages/shared-chunks/libraries-CHBwbR72.js +79 -0
  126. package/dist/dev/packages/shared-chunks/mandatory-setter-BpbAMTzV.js +107 -0
  127. package/dist/dev/packages/shared-chunks/meta-BmRXesrk.js +46 -0
  128. package/dist/{prod/packages/shared-chunks/name-C68GLLO3.js → dev/packages/shared-chunks/name-Clp4Vsod.js} +1 -1
  129. package/dist/dev/packages/shared-chunks/{namespace_search-uT8odThF.js → namespace_search-BfvzEQzN.js} +1 -2
  130. package/dist/dev/packages/shared-chunks/normalize-CKySQVU7.js +84 -0
  131. package/dist/dev/packages/shared-chunks/observers-C2DurkLG.js +199 -0
  132. package/dist/dev/packages/shared-chunks/on-D8QwT-eN.js +253 -0
  133. package/dist/dev/packages/shared-chunks/opcode-metadata-9iSW5JGP.js +285 -0
  134. package/dist/dev/packages/shared-chunks/opcodes-CplRyHl_.js +50 -0
  135. package/dist/dev/packages/shared-chunks/or-DBU9Ge4r.js +118 -0
  136. package/dist/{prod/packages/shared-chunks/program-B7SJZ5NF.js → dev/packages/shared-chunks/program-DzAfcWFj.js} +1 -1
  137. package/dist/{prod/packages/shared-chunks/program-context-DFiwaPMR.js → dev/packages/shared-chunks/program-context-CqcQMsfa.js} +3 -3
  138. package/dist/dev/packages/shared-chunks/property_get-CIBS9umw.js +139 -0
  139. package/dist/dev/packages/shared-chunks/{property_set-DaoZXGM5.js → property_set-D3PKyisF.js} +4 -2
  140. package/dist/dev/packages/shared-chunks/props-fiqxqhAH.js +85 -0
  141. package/dist/dev/packages/shared-chunks/{reference-C3TKDRnP.js → reference-BoPB2LfI.js} +3 -4
  142. package/dist/dev/packages/shared-chunks/{registers-ylirb0dq.js → registers-DoamZwaG.js} +1 -1
  143. package/dist/{prod/packages/shared-chunks/rehydrate-builder-D3t52iGR.js → dev/packages/shared-chunks/rehydrate-builder-DdzXTaJk.js} +7 -4
  144. package/dist/dev/packages/shared-chunks/{render-DCchifOK.js → render-DDdabL30.js} +510 -15
  145. package/dist/{prod/packages/shared-chunks/serialize-builder-iXiRs1Pg.js → dev/packages/shared-chunks/serialize-builder-B3u9Wr3n.js} +2 -7
  146. package/dist/dev/packages/shared-chunks/set_properties-BghuuGJx.js +48 -0
  147. package/dist/dev/packages/shared-chunks/{setup-registry-DxchCIL2.js → setup-registry-XxD0xvgf.js} +34 -14
  148. package/dist/dev/packages/shared-chunks/spec-BXl1reqK.js +16 -0
  149. package/dist/dev/packages/shared-chunks/super-BBBjgF69.js +91 -0
  150. package/dist/dev/packages/shared-chunks/template-BRrQR6KS.js +16 -0
  151. package/dist/dev/packages/shared-chunks/template-only-Yluyu0DY.js +78 -0
  152. package/dist/dev/packages/shared-chunks/textarea-C0Us0PNJ.js +468 -0
  153. package/dist/dev/packages/shared-chunks/tracked-CKE4wnE6.js +148 -0
  154. package/dist/dev/packages/shared-chunks/tracked-data-CGnA4ytZ.js +31 -0
  155. package/dist/dev/packages/shared-chunks/transform-resolutions-h1ik8gqW.js +645 -0
  156. package/dist/dev/packages/shared-chunks/unique-id-A83bjEE-.js +32 -0
  157. package/dist/{prod/packages/shared-chunks/on-CersD7PL.js → dev/packages/shared-chunks/untouchable-this-cH6_N2LJ.js} +215 -1397
  158. package/dist/dev/packages/shared-chunks/well-known-_EVO9RaV.js +17 -0
  159. package/dist/prod/packages/@ember/-internals/container/index.js +5 -315
  160. package/dist/prod/packages/@ember/-internals/deprecations/index.js +1 -1
  161. package/dist/prod/packages/@ember/-internals/environment/index.js +3 -158
  162. package/dist/prod/packages/@ember/-internals/glimmer/index.js +14 -13
  163. package/dist/prod/packages/@ember/-internals/meta/lib/meta.js +1 -2
  164. package/dist/prod/packages/@ember/-internals/metal/index.js +19 -13
  165. package/dist/prod/packages/@ember/-internals/routing/index.js +2 -6
  166. package/dist/prod/packages/@ember/-internals/runtime/lib/ext/rsvp.js +1 -1
  167. package/dist/prod/packages/@ember/-internals/runtime/lib/mixins/-proxy.js +10 -10
  168. package/dist/prod/packages/@ember/-internals/runtime/lib/mixins/action_handler.js +2 -6
  169. package/dist/prod/packages/@ember/-internals/runtime/lib/mixins/registry_proxy.js +1 -1
  170. package/dist/prod/packages/@ember/-internals/runtime/lib/mixins/target_action_support.js +3 -6
  171. package/dist/prod/packages/@ember/-internals/string/index.js +0 -2
  172. package/dist/prod/packages/@ember/-internals/utils/index.js +33 -30
  173. package/dist/prod/packages/@ember/-internals/views/lib/compat/fallback-view-registry.js +0 -2
  174. package/dist/prod/packages/@ember/-internals/views/lib/mixins/action_support.js +2 -6
  175. package/dist/prod/packages/@ember/-internals/views/lib/system/event_dispatcher.js +3 -7
  176. package/dist/prod/packages/@ember/-internals/views/lib/system/utils.js +2 -2
  177. package/dist/prod/packages/@ember/-internals/views/lib/views/core_view.js +1 -14
  178. package/dist/prod/packages/@ember/-internals/views/lib/views/states.js +1 -2
  179. package/dist/prod/packages/@ember/application/index.js +5 -24
  180. package/dist/prod/packages/@ember/application/instance.js +6 -18
  181. package/dist/prod/packages/@ember/application/namespace.js +5 -8
  182. package/dist/prod/packages/@ember/array/index.js +8 -12
  183. package/dist/prod/packages/@ember/array/proxy.js +10 -10
  184. package/dist/prod/packages/@ember/canary-features/index.js +1 -1
  185. package/dist/prod/packages/@ember/component/helper.js +1 -12
  186. package/dist/prod/packages/@ember/component/index.js +1292 -15
  187. package/dist/prod/packages/@ember/component/template-only.js +1 -6
  188. package/dist/prod/packages/@ember/controller/index.js +3 -16
  189. package/dist/prod/packages/@ember/debug/container-debug-adapter.js +1 -15
  190. package/dist/prod/packages/@ember/debug/data-adapter.js +5 -7
  191. package/dist/prod/packages/@ember/debug/index.js +1 -1
  192. package/dist/prod/packages/@ember/debug/lib/deprecate.js +1 -1
  193. package/dist/prod/packages/@ember/engine/index.js +4 -25
  194. package/dist/prod/packages/@ember/engine/instance.js +4 -9
  195. package/dist/prod/packages/@ember/helper/index.js +169 -19
  196. package/dist/prod/packages/@ember/instrumentation/index.js +1 -1
  197. package/dist/prod/packages/@ember/modifier/index.js +2 -14
  198. package/dist/prod/packages/@ember/modifier/on.js +1 -6
  199. package/dist/prod/packages/@ember/object/-internals.js +3 -6
  200. package/dist/prod/packages/@ember/object/compat.js +4 -7
  201. package/dist/prod/packages/@ember/object/computed.js +2 -8
  202. package/dist/prod/packages/@ember/object/core.js +9 -15
  203. package/dist/prod/packages/@ember/object/evented.js +2 -7
  204. package/dist/prod/packages/@ember/object/events.js +1 -6
  205. package/dist/prod/packages/@ember/object/index.js +10 -12
  206. package/dist/prod/packages/@ember/object/internals.js +3 -6
  207. package/dist/prod/packages/@ember/object/lib/computed/computed_macros.js +6 -20
  208. package/dist/prod/packages/@ember/object/lib/computed/reduce_computed_macros.js +3 -9
  209. package/dist/prod/packages/@ember/object/mixin.js +7 -9
  210. package/dist/prod/packages/@ember/object/observable.js +8 -9
  211. package/dist/prod/packages/@ember/object/observers.js +1 -6
  212. package/dist/prod/packages/@ember/object/promise-proxy-mixin.js +3 -9
  213. package/dist/prod/packages/@ember/object/proxy.js +0 -7
  214. package/dist/prod/packages/@ember/reactive/collections.js +589 -1
  215. package/dist/prod/packages/@ember/renderer/index.js +1 -12
  216. package/dist/prod/packages/@ember/routing/history-location.js +1 -1
  217. package/dist/prod/packages/@ember/routing/index.js +581 -12
  218. package/dist/prod/packages/@ember/routing/lib/dsl.js +1 -1
  219. package/dist/prod/packages/@ember/routing/lib/generate_controller.js +2 -6
  220. package/dist/prod/packages/@ember/routing/lib/routing-service.js +5 -14
  221. package/dist/prod/packages/@ember/routing/lib/utils.js +2 -6
  222. package/dist/prod/packages/@ember/routing/none-location.js +1 -1
  223. package/dist/prod/packages/@ember/routing/route.js +12 -21
  224. package/dist/prod/packages/@ember/routing/router-service.js +6 -14
  225. package/dist/prod/packages/@ember/routing/router.js +5 -17
  226. package/dist/prod/packages/@ember/runloop/index.js +2 -6
  227. package/dist/prod/packages/@ember/service/index.js +1 -7
  228. package/dist/prod/packages/@ember/template/index.js +1 -12
  229. package/dist/prod/packages/@ember/template-compiler/lib/compile-options.js +13 -14
  230. package/dist/prod/packages/@ember/template-compiler/lib/dasherize-component-name.js +0 -2
  231. package/dist/prod/packages/@ember/template-compiler/lib/plugins/assert-against-attrs.js +1 -1
  232. package/dist/prod/packages/@ember/template-compiler/lib/plugins/assert-against-named-outlets.js +1 -1
  233. package/dist/prod/packages/@ember/template-compiler/lib/plugins/assert-input-helper-without-block.js +1 -1
  234. package/dist/prod/packages/@ember/template-compiler/lib/plugins/assert-reserved-named-arguments.js +1 -1
  235. package/dist/prod/packages/@ember/template-compiler/lib/plugins/auto-import-builtins.js +13 -60
  236. package/dist/prod/packages/@ember/template-compiler/lib/plugins/index.js +1 -1
  237. package/dist/prod/packages/@ember/template-compiler/lib/plugins/transform-each-track-array.js +1 -1
  238. package/dist/prod/packages/@ember/template-compiler/lib/plugins/transform-in-element.js +1 -1
  239. package/dist/prod/packages/@ember/template-compiler/lib/plugins/transform-resolutions.js +127 -4
  240. package/dist/prod/packages/@ember/template-compiler/lib/template.js +2 -7
  241. package/dist/prod/packages/@ember/template-factory/index.js +1 -5
  242. package/dist/prod/packages/@ember/utils/lib/compare.js +1 -8
  243. package/dist/prod/packages/@ember/utils/lib/is_empty.js +1 -7
  244. package/dist/prod/packages/@glimmer/manager/index.js +4 -292
  245. package/dist/prod/packages/@glimmer/node/index.js +3 -8
  246. package/dist/prod/packages/@glimmer/opcode-compiler/index.js +5 -5
  247. package/dist/prod/packages/@glimmer/program/index.js +194 -3
  248. package/dist/prod/packages/@glimmer/reference/index.js +4 -4
  249. package/dist/prod/packages/@glimmer/runtime/index.js +16 -8
  250. package/dist/prod/packages/@glimmer/tracking/index.js +2 -7
  251. package/dist/prod/packages/@glimmer/tracking/primitives/cache/index.js +1 -6
  252. package/dist/prod/packages/@glimmer/util/index.js +2 -2
  253. package/dist/prod/packages/@glimmer/validator/index.js +5 -1016
  254. package/dist/prod/packages/@glimmer/vm/index.js +1 -1
  255. package/dist/prod/packages/@glimmer/wire-format/index.js +3 -65
  256. package/dist/prod/packages/ember/version.js +1 -1
  257. package/dist/prod/packages/ember-template-compiler/index.js +5 -7
  258. package/dist/prod/packages/shared-chunks/{alias-BLBQkche.js → alias-CLuFeKoV.js} +8 -6
  259. package/dist/prod/packages/shared-chunks/api-CM1trl_4.js +289 -0
  260. package/dist/prod/packages/shared-chunks/{api-B5UrgITK.js → api-zh_k31vb.js} +4 -5
  261. package/dist/prod/packages/shared-chunks/{args-proxy-Dl0A0YWI.js → args-proxy-BDXbXCF9.js} +2 -2
  262. package/dist/prod/packages/shared-chunks/{array-kVQfzrQn.js → array-DHdr4__s.js} +3 -3
  263. package/dist/prod/packages/shared-chunks/assert-CUCJBR2C.js +19 -0
  264. package/dist/prod/packages/shared-chunks/cache-BIlOoPA7.js +371 -0
  265. package/dist/prod/packages/shared-chunks/{capabilities-DXA-L0iT.js → capabilities-_5e35539.js} +0 -3
  266. package/dist/prod/packages/shared-chunks/chain-tags-BJqcuCM1.js +179 -0
  267. package/dist/prod/packages/shared-chunks/{compiler-Bbki2GT_.js → compiler-DjQtTQGk.js} +7045 -193
  268. package/dist/prod/packages/shared-chunks/{namespace_search-Dcdalhj6.js → computed-2Udcmflw.js} +109 -239
  269. package/dist/prod/packages/shared-chunks/container-D5NwW5Fd.js +316 -0
  270. package/dist/prod/packages/shared-chunks/curly-BsqvV8G0.js +546 -0
  271. package/dist/prod/packages/shared-chunks/{fragment-D7nBU9ae.js → curried-BVwSNqpf.js} +6 -303
  272. package/dist/prod/packages/shared-chunks/debug-render-tree-BLtnOSbb.js +2049 -0
  273. package/dist/prod/packages/shared-chunks/{decorator-BdDDBUd2.js → decorator-DBCISop4.js} +1 -1
  274. package/dist/prod/packages/shared-chunks/element-BjFr0tO0.js +101 -0
  275. package/dist/prod/packages/shared-chunks/{element-builder-CzXb9l1W.js → element-builder-BPjq0rxK.js} +109 -88
  276. package/dist/prod/packages/shared-chunks/env-DXxsTFkM.js +158 -0
  277. package/dist/prod/packages/shared-chunks/events-970OxD6Q.js +175 -0
  278. package/dist/prod/packages/shared-chunks/get-D5wxdTkY.js +138 -0
  279. package/dist/prod/packages/shared-chunks/get_properties-BcAC5sGx.js +55 -0
  280. package/dist/prod/packages/shared-chunks/guid-Cbq2sNV_.js +123 -0
  281. package/dist/prod/packages/shared-chunks/hash-DcUe-meU.js +192 -0
  282. package/dist/prod/packages/shared-chunks/helper-Da672z4a.js +299 -0
  283. package/dist/prod/packages/shared-chunks/{index-CjaDF9kC.js → index--2U-v2nf.js} +18 -10
  284. package/dist/prod/packages/shared-chunks/index-D-xTBV4B.js +220 -0
  285. package/dist/prod/packages/shared-chunks/index-D87qoERP.js +2322 -0
  286. package/dist/prod/packages/shared-chunks/{injected_property-CTVs5FPh.js → injected_property-D9B-fPiH.js} +3 -3
  287. package/dist/prod/packages/shared-chunks/intern-zquhAEIg.js +51 -0
  288. package/dist/prod/packages/shared-chunks/internal-DidurjJB.js +137 -0
  289. package/dist/prod/packages/shared-chunks/internal-helper-DIbr1RgC.js +7 -0
  290. package/dist/prod/packages/shared-chunks/{neq-BqdovTuC.js → invoke-Dr_CRwA_.js} +4 -24
  291. package/dist/{dev/packages/shared-chunks/is_proxy-B0smdQy8.js → prod/packages/shared-chunks/is_proxy-Bzg0d4m4.js} +1 -1
  292. package/dist/prod/packages/shared-chunks/libraries-DaXpIDYN.js +60 -0
  293. package/dist/prod/packages/shared-chunks/meta-B9mldqPL.js +36 -0
  294. package/dist/{dev/packages/shared-chunks/name-Z7dpqvzn.js → prod/packages/shared-chunks/name-Clp4Vsod.js} +1 -1
  295. package/dist/prod/packages/shared-chunks/namespace_search-BfvzEQzN.js +134 -0
  296. package/dist/prod/packages/shared-chunks/normalize-D9jDJVGg.js +84 -0
  297. package/dist/prod/packages/shared-chunks/observers-Co4JALkS.js +199 -0
  298. package/dist/prod/packages/shared-chunks/on-C3ZQiUUD.js +228 -0
  299. package/dist/prod/packages/shared-chunks/opcode-metadata-9iSW5JGP.js +285 -0
  300. package/dist/prod/packages/shared-chunks/opcodes-CplRyHl_.js +50 -0
  301. package/dist/prod/packages/shared-chunks/or-oTVMuHc8.js +91 -0
  302. package/dist/{dev/packages/shared-chunks/program-DfV0v8aa.js → prod/packages/shared-chunks/program-B7CWdS8W.js} +1 -2
  303. package/dist/{dev/packages/shared-chunks/program-context-sJz0oHOA.js → prod/packages/shared-chunks/program-context-CGMN-aQM.js} +3 -3
  304. package/dist/prod/packages/shared-chunks/property_get-hWJ0nGhW.js +122 -0
  305. package/dist/prod/packages/shared-chunks/{property_set-B2sZxeCw.js → property_set-Dj5-ScWk.js} +4 -5
  306. package/dist/prod/packages/shared-chunks/props-fiqxqhAH.js +85 -0
  307. package/dist/prod/packages/shared-chunks/{reference-BNqcwZWH.js → reference-BshxG6wn.js} +3 -3
  308. package/dist/prod/packages/shared-chunks/{registers-ylirb0dq.js → registers-DoamZwaG.js} +1 -1
  309. package/dist/{dev/packages/shared-chunks/rehydrate-builder-BRH0p0wA.js → prod/packages/shared-chunks/rehydrate-builder-BKg2X6Lo.js} +7 -7
  310. package/dist/prod/packages/shared-chunks/{render-D78XHdek.js → render-nx5-PsDW.js} +487 -12
  311. package/dist/{dev/packages/shared-chunks/serialize-builder-DiO7Ak9_.js → prod/packages/shared-chunks/serialize-builder-BGbC30SN.js} +2 -10
  312. package/dist/prod/packages/shared-chunks/set_properties-oPyURk67.js +48 -0
  313. package/dist/prod/packages/shared-chunks/{setup-registry-Cs-7NIJU.js → setup-registry-TiaKLj5k.js} +35 -13
  314. package/dist/prod/packages/shared-chunks/spec-BXl1reqK.js +16 -0
  315. package/dist/prod/packages/shared-chunks/super-BBBjgF69.js +91 -0
  316. package/dist/prod/packages/shared-chunks/template-BRrQR6KS.js +16 -0
  317. package/dist/prod/packages/shared-chunks/template-only-BtLl0uH0.js +78 -0
  318. package/dist/prod/packages/shared-chunks/textarea-CPKZ1c_O.js +455 -0
  319. package/dist/prod/packages/shared-chunks/{tracked-Cl5l4v8b.js → tracked-CffAABMz.js} +6 -4
  320. package/dist/prod/packages/shared-chunks/tracked-data-C83f5V5S.js +31 -0
  321. package/dist/prod/packages/shared-chunks/unique-id-CfHImDRV.js +32 -0
  322. package/dist/prod/packages/shared-chunks/well-known-_EVO9RaV.js +17 -0
  323. package/docs/data.json +1263 -1029
  324. package/package.json +1 -1
  325. package/types/stable/@ember/-internals/container/lib/registry.d.ts +1 -1
  326. package/types/stable/@ember/-internals/deprecations/index.d.ts +1 -1
  327. package/types/stable/@ember/-internals/glimmer/index.d.ts +1 -1
  328. package/types/stable/@ember/-internals/glimmer/lib/component-managers/curly.d.ts +1 -1
  329. package/types/stable/@ember/-internals/glimmer/lib/component-managers/mount.d.ts +1 -1
  330. package/types/stable/@ember/-internals/glimmer/lib/component-managers/outlet.d.ts +1 -1
  331. package/types/stable/@ember/-internals/glimmer/lib/component-managers/route-template.d.ts +2 -2
  332. package/types/stable/@ember/-internals/glimmer/lib/component.d.ts +9 -7
  333. package/types/stable/@ember/-internals/glimmer/lib/components/abstract-input.d.ts +1 -1
  334. package/types/stable/@ember/-internals/glimmer/lib/dom.d.ts +6 -2
  335. package/types/stable/@ember/-internals/glimmer/lib/environment.d.ts +1 -1
  336. package/types/stable/@ember/-internals/glimmer/lib/helper.d.ts +1 -1
  337. package/types/stable/@ember/-internals/glimmer/lib/renderer.d.ts +3 -3
  338. package/types/stable/@ember/-internals/glimmer/lib/setup-registry.d.ts +1 -1
  339. package/types/stable/@ember/-internals/glimmer/lib/utils/bindings.d.ts +1 -1
  340. package/types/stable/@ember/-internals/glimmer/lib/utils/curly-component-state-bucket.d.ts +3 -2
  341. package/types/stable/@ember/-internals/glimmer/lib/utils/iterator.d.ts +1 -1
  342. package/types/stable/@ember/-internals/glimmer/lib/utils/managers.d.ts +2 -1
  343. package/types/stable/@ember/-internals/glimmer/lib/utils/serialization-first-node-helpers.d.ts +1 -1
  344. package/types/stable/@ember/-internals/glimmer/lib/utils/string.d.ts +1 -1
  345. package/types/stable/@ember/-internals/meta/lib/meta.d.ts +3 -2
  346. package/types/stable/@ember/-internals/metal/lib/cache.d.ts +1 -1
  347. package/types/stable/@ember/-internals/metal/lib/chain-tags.d.ts +3 -2
  348. package/types/stable/@ember/-internals/metal/lib/computed.d.ts +1 -1
  349. package/types/stable/@ember/-internals/metal/lib/decorator.d.ts +1 -1
  350. package/types/stable/@ember/-internals/metal/lib/deprecate_property.d.ts +1 -1
  351. package/types/stable/@ember/-internals/metal/lib/events.d.ts +1 -1
  352. package/types/stable/@ember/-internals/metal/lib/observer.d.ts +1 -1
  353. package/types/stable/@ember/-internals/metal/lib/properties.d.ts +1 -1
  354. package/types/stable/@ember/-internals/metal/lib/property_events.d.ts +1 -1
  355. package/types/stable/@ember/-internals/metal/lib/tags.d.ts +2 -1
  356. package/types/stable/@ember/-internals/runtime/lib/mixins/container_proxy.d.ts +1 -1
  357. package/types/stable/@ember/-internals/runtime/lib/mixins/registry_proxy.d.ts +1 -1
  358. package/types/stable/@ember/-internals/utils/lib/is_proxy.d.ts +1 -1
  359. package/types/stable/@ember/-internals/utils/lib/mandatory-setter.d.ts +1 -1
  360. package/types/stable/@ember/-internals/views/lib/system/utils.d.ts +1 -1
  361. package/types/stable/@ember/-internals/views/lib/views/core_view.d.ts +2 -2
  362. package/types/stable/@ember/-internals/views/lib/views/states.d.ts +1 -1
  363. package/types/stable/@ember/application/index.d.ts +5 -4
  364. package/types/stable/@ember/application/instance.d.ts +4 -3
  365. package/types/stable/@ember/application/namespace.d.ts +1 -1
  366. package/types/stable/@ember/array/proxy.d.ts +4 -3
  367. package/types/stable/@ember/component/helper.d.ts +1 -1
  368. package/types/stable/@ember/component/index.d.ts +6 -3
  369. package/types/stable/@ember/controller/index.d.ts +2 -2
  370. package/types/stable/@ember/debug/container-debug-adapter.d.ts +1 -1
  371. package/types/stable/@ember/engine/index.d.ts +3 -3
  372. package/types/stable/@ember/engine/instance.d.ts +4 -3
  373. package/types/stable/@ember/helper/index.d.ts +177 -5
  374. package/types/stable/@ember/modifier/index.d.ts +1 -1
  375. package/types/stable/@ember/object/-internals.d.ts +2 -2
  376. package/types/stable/@ember/object/compat.d.ts +2 -2
  377. package/types/stable/@ember/object/computed.d.ts +3 -1
  378. package/types/stable/@ember/object/evented.d.ts +1 -1
  379. package/types/stable/@ember/object/events.d.ts +1 -1
  380. package/types/stable/@ember/object/index.d.ts +8 -2
  381. package/types/stable/@ember/object/lib/computed/computed_macros.d.ts +1 -1
  382. package/types/stable/@ember/object/mixin.d.ts +1 -1
  383. package/types/stable/@ember/object/observers.d.ts +1 -1
  384. package/types/stable/@ember/object/proxy.d.ts +1 -1
  385. package/types/stable/@ember/reactive/collections.d.ts +6 -6
  386. package/types/stable/@ember/renderer/index.d.ts +2 -2
  387. package/types/stable/@ember/routing/index.d.ts +1 -1
  388. package/types/stable/@ember/routing/lib/controller_for.d.ts +2 -2
  389. package/types/stable/@ember/routing/route.d.ts +2 -2
  390. package/types/stable/@ember/routing/router.d.ts +2 -2
  391. package/types/stable/@ember/service/index.d.ts +1 -1
  392. package/types/stable/@ember/template/index.d.ts +1 -1
  393. package/types/stable/@ember/template-compiler/lib/dasherize-component-name.d.ts +1 -1
  394. package/types/stable/@ember/template-compiler/lib/plugins/assert-against-attrs.d.ts +1 -1
  395. package/types/stable/@ember/template-compiler/lib/plugins/assert-against-named-outlets.d.ts +1 -1
  396. package/types/stable/@ember/template-compiler/lib/plugins/assert-input-helper-without-block.d.ts +1 -1
  397. package/types/stable/@ember/template-compiler/lib/plugins/assert-reserved-named-arguments.d.ts +1 -1
  398. package/types/stable/@ember/template-compiler/lib/plugins/auto-import-builtins.d.ts +1 -4
  399. package/types/stable/@ember/template-compiler/lib/plugins/transform-action-syntax.d.ts +1 -1
  400. package/types/stable/@ember/template-compiler/lib/plugins/transform-each-in-into-each.d.ts +1 -1
  401. package/types/stable/@ember/template-compiler/lib/plugins/transform-each-track-array.d.ts +1 -1
  402. package/types/stable/@ember/template-compiler/lib/plugins/transform-in-element.d.ts +1 -1
  403. package/types/stable/@ember/template-compiler/lib/plugins/transform-quoted-bindings-into-just-bindings.d.ts +1 -1
  404. package/types/stable/@ember/template-compiler/lib/plugins/transform-resolutions.d.ts +1 -1
  405. package/types/stable/@ember/template-compiler/lib/plugins/transform-wrap-mount-and-outlet.d.ts +1 -1
  406. package/types/stable/@ember/template-compiler/lib/plugins/utils.d.ts +1 -1
  407. package/types/stable/@ember/template-compiler/lib/system/calculate-location-display.d.ts +1 -1
  408. package/types/stable/@ember/template-compiler/lib/types.d.ts +2 -1
  409. package/types/stable/@ember/template-factory/index.d.ts +1 -1
  410. package/types/stable/@glimmer/compiler/lib/builder/builder-interface.d.ts +2 -2
  411. package/types/stable/@glimmer/compiler/lib/builder/builder.d.ts +2 -2
  412. package/types/stable/@glimmer/compiler/lib/compiler.d.ts +1 -1
  413. package/types/stable/@glimmer/compiler/lib/passes/1-normalization/context.d.ts +2 -1
  414. package/types/stable/@glimmer/compiler/lib/passes/1-normalization/index.d.ts +2 -1
  415. package/types/stable/@glimmer/compiler/lib/passes/1-normalization/keywords/impl.d.ts +2 -1
  416. package/types/stable/@glimmer/compiler/lib/passes/1-normalization/keywords/utils/curry.d.ts +1 -1
  417. package/types/stable/@glimmer/compiler/lib/passes/1-normalization/keywords/utils/dynamic-vars.d.ts +1 -1
  418. package/types/stable/@glimmer/compiler/lib/passes/1-normalization/keywords/utils/has-block.d.ts +2 -1
  419. package/types/stable/@glimmer/compiler/lib/passes/1-normalization/keywords/utils/if-unless.d.ts +1 -1
  420. package/types/stable/@glimmer/compiler/lib/passes/1-normalization/keywords/utils/log.d.ts +1 -1
  421. package/types/stable/@glimmer/compiler/lib/passes/1-normalization/visitors/element/classified.d.ts +1 -1
  422. package/types/stable/@glimmer/compiler/lib/passes/1-normalization/visitors/element/component.d.ts +1 -1
  423. package/types/stable/@glimmer/compiler/lib/passes/1-normalization/visitors/element/simple-element.d.ts +2 -1
  424. package/types/stable/@glimmer/compiler/lib/passes/1-normalization/visitors/expressions.d.ts +1 -1
  425. package/types/stable/@glimmer/compiler/lib/passes/1-normalization/visitors/statements.d.ts +1 -1
  426. package/types/stable/@glimmer/compiler/lib/passes/1-normalization/visitors/strict-mode.d.ts +1 -1
  427. package/types/stable/@glimmer/compiler/lib/passes/2-encoding/expressions.d.ts +1 -1
  428. package/types/stable/@glimmer/compiler/lib/passes/2-encoding/mir.d.ts +3 -1
  429. package/types/stable/@glimmer/compiler/lib/shared/result.d.ts +1 -1
  430. package/types/stable/@glimmer/manager/lib/public/component.d.ts +1 -1
  431. package/types/stable/@glimmer/manager/lib/util/args-proxy.d.ts +1 -1
  432. package/types/stable/@glimmer/manager/lib/util/capabilities.d.ts +1 -1
  433. package/types/stable/@glimmer/node/lib/node-dom-helper.d.ts +1 -1
  434. package/types/stable/@glimmer/opcode-compiler/lib/opcode-builder/helpers/components.d.ts +1 -1
  435. package/types/stable/@glimmer/runtime/index.d.ts +7 -4
  436. package/types/stable/@glimmer/runtime/lib/compiled/expressions/concat.d.ts +1 -1
  437. package/types/stable/@glimmer/runtime/lib/compiled/opcodes/-debug-strip.d.ts +4 -3
  438. package/types/stable/@glimmer/runtime/lib/compiled/opcodes/component.d.ts +1 -1
  439. package/types/stable/@glimmer/runtime/lib/compiled/opcodes/dom.d.ts +2 -2
  440. package/types/stable/@glimmer/runtime/lib/compiled/opcodes/vm.d.ts +2 -2
  441. package/types/stable/@glimmer/runtime/lib/component/template-only.d.ts +1 -1
  442. package/types/stable/@glimmer/runtime/lib/curried-value.d.ts +1 -1
  443. package/types/stable/@glimmer/runtime/lib/helpers/and.d.ts +3 -0
  444. package/types/stable/@glimmer/runtime/lib/helpers/gt.d.ts +8 -0
  445. package/types/stable/@glimmer/runtime/lib/helpers/gte.d.ts +8 -0
  446. package/types/stable/@glimmer/runtime/lib/helpers/invoke.d.ts +1 -1
  447. package/types/stable/@glimmer/runtime/lib/helpers/lt.d.ts +8 -0
  448. package/types/stable/@glimmer/runtime/lib/helpers/lte.d.ts +8 -0
  449. package/types/stable/@glimmer/runtime/lib/helpers/not.d.ts +3 -0
  450. package/types/stable/@glimmer/runtime/lib/helpers/or.d.ts +3 -0
  451. package/types/stable/@glimmer/runtime/lib/opcodes.d.ts +2 -2
  452. package/types/stable/@glimmer/runtime/lib/references/class-list.d.ts +1 -1
  453. package/types/stable/@glimmer/runtime/lib/references/curry-value.d.ts +1 -1
  454. package/types/stable/@glimmer/runtime/lib/render.d.ts +1 -1
  455. package/types/stable/@glimmer/runtime/lib/scope.d.ts +1 -1
  456. package/types/stable/@glimmer/runtime/lib/vm/append.d.ts +3 -2
  457. package/types/stable/@glimmer/runtime/lib/vm/arguments.d.ts +2 -2
  458. package/types/stable/@glimmer/runtime/lib/vm/content/text.d.ts +1 -1
  459. package/types/stable/@glimmer/runtime/lib/vm/element-builder.d.ts +1 -1
  460. package/types/stable/@glimmer/runtime/lib/vm/low-level.d.ts +2 -1
  461. package/types/stable/@glimmer/runtime/lib/vm/rehydrate-builder.d.ts +1 -1
  462. package/types/stable/@glimmer/runtime/lib/vm/update.d.ts +2 -1
  463. package/types/stable/@glimmer/syntax/lib/keywords.d.ts +2 -2
  464. package/types/stable/@glimmer/tracking/index.d.ts +2 -1
  465. package/types/stable/@glimmer/tracking/primitives/cache.d.ts +1 -1
  466. package/types/stable/index.d.ts +7 -0
  467. package/dist/dev/packages/shared-chunks/constants-BbdWMvgs.js +0 -213
  468. package/dist/dev/packages/shared-chunks/dynamic-CgX8M02_.js +0 -3823
  469. package/dist/dev/packages/shared-chunks/element-builder-BpJIoi99.js +0 -404
  470. package/dist/dev/packages/shared-chunks/index-RzG0Jvjx.js +0 -6306
  471. package/dist/dev/packages/shared-chunks/mandatory-setter-DHZe7-kW.js +0 -425
  472. package/dist/dev/packages/shared-chunks/observers-Bj9qLVau.js +0 -2062
  473. package/dist/dev/packages/shared-chunks/set_properties-kVGzZL_a.js +0 -100
  474. package/dist/dev/packages/shared-chunks/transform-resolutions-D-YtZ0_g.js +0 -7458
  475. package/dist/prod/packages/shared-chunks/constants-DThhT5fu.js +0 -210
  476. package/dist/prod/packages/shared-chunks/index-r-Dz_hzt.js +0 -5931
  477. package/dist/prod/packages/shared-chunks/observers-tZ2aOzr4.js +0 -714
  478. package/dist/prod/packages/shared-chunks/set_properties-C1T46IiN.js +0 -101
  479. package/dist/prod/packages/shared-chunks/super-Cm_a_cLQ.js +0 -275
  480. package/dist/prod/packages/shared-chunks/transform-resolutions-DR4GLmR2.js +0 -6936
  481. package/dist/prod/packages/shared-chunks/{collections-GpG8lT2g.js → collections-C3Y8z_9v.js} +9 -9
@@ -0,0 +1,2049 @@
1
+ import { u as unwrap, e as expect, c as isIndexable, d as dict, S as StackImpl } from './collections-C3Y8z_9v.js';
2
+ import { a as assign } from './object-utils-AijlD-JH.js';
3
+ import { a as $v0, b as $t1, c as $t0, h as $pc, g as $ra, f as $fp, e as $sp, d as $s1, $ as $s0 } from './registers-DoamZwaG.js';
4
+ import { s as setLocalDebugType } from './debug-brand-B1TWjOCH.js';
5
+ import { a as createComputeRef, v as valueForRef, c as createConstRef, e as createPrimitiveRef, b as isConstRef, U as UNDEFINED_REFERENCE, N as NULL_REFERENCE, T as TRUE_REFERENCE, F as FALSE_REFERENCE, R as REFERENCE } from './reference-BshxG6wn.js';
6
+ import { b as EMPTY_STRING_ARRAY, e as enumerate, c as emptyArray } from './array-utils-CZQxrdD3.js';
7
+ import { C as CONSTANT_TAG, I as INITIAL, v as validateTag, a as consumeTag, d as valueForTag, m as beginTrackFrame, q as endTrackFrame, i as CURRENT_TAG } from './cache-BIlOoPA7.js';
8
+ import { C as CURRIED_MODIFIER, b as CURRIED_COMPONENT } from './curried-BVwSNqpf.js';
9
+ import { k as VM_SYSCALL_SIZE, l as VM_CHILD_SCOPE_OP, m as VM_POP_SCOPE_OP, n as VM_PUSH_DYNAMIC_SCOPE_OP, o as VM_POP_DYNAMIC_SCOPE_OP, p as VM_CONSTANT_OP, q as decodeHandle, r as VM_CONSTANT_REFERENCE_OP, s as VM_PRIMITIVE_OP, t as isHandle, u as decodeImmediate, v as VM_PRIMITIVE_REFERENCE_OP, w as VM_DUP_OP, x as VM_POP_OP, y as VM_LOAD_OP, z as VM_FETCH_OP, A as VM_BIND_DYNAMIC_SCOPE_OP, B as VM_ENTER_OP, C as VM_EXIT_OP, D as VM_PUSH_SYMBOL_TABLE_OP, E as VM_PUSH_BLOCK_SCOPE_OP, F as VM_COMPILE_BLOCK_OP, G as VM_INVOKE_YIELD_OP, H as VM_JUMP_IF_OP, I as VM_JUMP_UNLESS_OP, J as VM_JUMP_EQ_OP, b as VM_ASSERT_SAME_OP, K as VM_TO_BOOLEAN_OP, L as VM_TEXT_OP, M as VM_COMMENT_OP, N as VM_OPEN_ELEMENT_OP, O as VM_OPEN_DYNAMIC_ELEMENT_OP, P as VM_PUSH_REMOTE_ELEMENT_OP, Q as VM_POP_REMOTE_ELEMENT_OP, R as VM_FLUSH_ELEMENT_OP, S as VM_CLOSE_ELEMENT_OP, T as VM_MODIFIER_OP, U as VM_DYNAMIC_MODIFIER_OP, W as VM_STATIC_ATTR_OP, X as VM_DYNAMIC_ATTR_OP, Y as VM_PUSH_COMPONENT_DEFINITION_OP, Z as VM_RESOLVE_DYNAMIC_COMPONENT_OP, e as VM_RESOLVE_CURRIED_COMPONENT_OP, f as VM_PUSH_DYNAMIC_COMPONENT_INSTANCE_OP, _ as VM_PUSH_ARGS_OP, $ as VM_PUSH_EMPTY_ARGS_OP, a0 as VM_CAPTURE_ARGS_OP, a1 as VM_PREPARE_ARGS_OP, a2 as VM_CREATE_COMPONENT_OP, a3 as VM_REGISTER_COMPONENT_DESTRUCTOR_OP, a4 as VM_BEGIN_COMPONENT_TRANSACTION_OP, a5 as VM_PUT_COMPONENT_OPERATIONS_OP, a6 as VM_COMPONENT_ATTR_OP, a7 as VM_STATIC_COMPONENT_ATTR_OP, a8 as VM_DID_CREATE_ELEMENT_OP, a9 as VM_GET_COMPONENT_SELF_OP, aa as VM_GET_COMPONENT_TAG_NAME_OP, ab as VM_GET_COMPONENT_LAYOUT_OP, V as VM_MAIN_OP, ac as VM_POPULATE_LAYOUT_OP, ad as VM_VIRTUAL_ROOT_SCOPE_OP, ae as VM_SET_NAMED_VARIABLES_OP, af as VM_SET_BLOCKS_OP, ag as VM_INVOKE_COMPONENT_LAYOUT_OP, ah as VM_DID_RENDER_LAYOUT_OP, ai as VM_COMMIT_COMPONENT_TRANSACTION_OP } from './opcode-metadata-9iSW5JGP.js';
10
+ import { a as assert } from './assert-CUCJBR2C.js';
11
+ import { u as unwrapTemplate } from './template-BRrQR6KS.js';
12
+ import { registerDestructor, destroy, associateDestroyableChild } from '../@glimmer/destroyable/index.js';
13
+ import { m as managerHasCapability } from './capabilities-_5e35539.js';
14
+ import { I as InternalComponentCapabilities } from './flags-B9qxc-pB.js';
15
+ import { n as normalizeStringValue, C as ConcreteBounds } from './normalize-D9jDJVGg.js';
16
+ import { b as getInternalModifierManager } from './api-zh_k31vb.js';
17
+ import { toBool } from '../@glimmer/global-context/index.js';
18
+
19
+ function CheckInstanceof(Class) {
20
+ }
21
+ const CheckRegister = new class {
22
+ validate(value) {
23
+ switch (value) {
24
+ case $s0:
25
+ case $s1:
26
+ case $sp:
27
+ case $fp:
28
+ case $ra:
29
+ case $pc:
30
+ case $t0:
31
+ case $t1:
32
+ case $v0:
33
+ return true;
34
+ default:
35
+ return false;
36
+ }
37
+ }
38
+ expected() {
39
+ return `Register`;
40
+ }
41
+ }();
42
+
43
+ /*@__NO_SIDE_EFFECTS__*/
44
+
45
+ function check(value, checker, message) {
46
+ {
47
+ return value;
48
+ }
49
+ }
50
+
51
+ class AppendOpcodes {
52
+ // This code is intentionally putting unsafe `null`s into the array that it
53
+ // will intentionally overwrite before anyone can see them.
54
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
55
+ evaluateOpcode = new Array(VM_SYSCALL_SIZE).fill(null);
56
+ constructor() {
57
+ }
58
+ add(name, evaluate, kind = 'syscall') {
59
+ this.evaluateOpcode[name] = {
60
+ syscall: kind !== 'machine',
61
+ evaluate
62
+ };
63
+ }
64
+ evaluate(vm, opcode, type) {
65
+ let operation = unwrap(this.evaluateOpcode[type]);
66
+ if (operation.syscall) {
67
+ assert(!opcode.isMachine, `BUG: Mismatch between operation.syscall (${operation.syscall}) and opcode.isMachine (${opcode.isMachine}) for ${opcode.type}`);
68
+ operation.evaluate(vm, opcode);
69
+ } else {
70
+ assert(opcode.isMachine, `BUG: Mismatch between operation.syscall (${operation.syscall}) and opcode.isMachine (${opcode.isMachine}) for ${opcode.type}`);
71
+ operation.evaluate(vm.lowlevel, opcode);
72
+ }
73
+ }
74
+ }
75
+ function externs(vm) {
76
+ return undefined;
77
+ }
78
+ const APPEND_OPCODES = new AppendOpcodes();
79
+
80
+ const TYPE = Symbol('TYPE');
81
+ const INNER = Symbol('INNER');
82
+ const OWNER = Symbol('OWNER');
83
+ const ARGS = Symbol('ARGS');
84
+ const RESOLVED = Symbol('RESOLVED');
85
+ const CURRIED_VALUES = new WeakSet();
86
+ function isCurriedValue(value) {
87
+ return CURRIED_VALUES.has(value);
88
+ }
89
+ function isCurriedType(value, type) {
90
+ return isCurriedValue(value) && value[TYPE] === type;
91
+ }
92
+ class CurriedValue {
93
+ [TYPE];
94
+ [INNER];
95
+ [OWNER];
96
+ [ARGS];
97
+ [RESOLVED];
98
+
99
+ /** @internal */
100
+ constructor(type, inner, owner, args, resolved = false) {
101
+ CURRIED_VALUES.add(this);
102
+ this[TYPE] = type;
103
+ this[INNER] = inner;
104
+ this[OWNER] = owner;
105
+ this[ARGS] = args;
106
+ this[RESOLVED] = resolved;
107
+ }
108
+ }
109
+ function resolveCurriedValue(curriedValue) {
110
+ let currentWrapper = curriedValue;
111
+ let positional;
112
+ let named;
113
+ let definition, owner, resolved;
114
+ while (true) {
115
+ let {
116
+ [ARGS]: curriedArgs,
117
+ [INNER]: inner
118
+ } = currentWrapper;
119
+ if (curriedArgs !== null) {
120
+ let {
121
+ named: curriedNamed,
122
+ positional: curriedPositional
123
+ } = curriedArgs;
124
+ if (curriedPositional.length > 0) {
125
+ positional = positional === undefined ? curriedPositional : curriedPositional.concat(positional);
126
+ }
127
+ if (named === undefined) {
128
+ named = [];
129
+ }
130
+ named.unshift(curriedNamed);
131
+ }
132
+ if (!isCurriedValue(inner)) {
133
+ // Save off the owner that this helper was curried with. Later on,
134
+ // we'll fetch the value of this register and set it as the owner on the
135
+ // new root scope.
136
+ definition = inner;
137
+ owner = currentWrapper[OWNER];
138
+ resolved = currentWrapper[RESOLVED];
139
+ break;
140
+ }
141
+ currentWrapper = inner;
142
+ }
143
+ return {
144
+ definition,
145
+ owner,
146
+ resolved,
147
+ positional,
148
+ named
149
+ };
150
+ }
151
+ function curry(type, spec, owner, args, resolved = false) {
152
+ return new CurriedValue(type, spec, owner, args, resolved);
153
+ }
154
+
155
+ /** @internal */
156
+ function hasCustomDebugRenderTreeLifecycle(manager) {
157
+ return 'getDebugCustomRenderTree' in manager;
158
+ }
159
+
160
+ function resolveComponent(resolver, constants, name, owner) {
161
+ let definition = resolver?.lookupComponent?.(name, expect(owner)) ?? null;
162
+
163
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- @fixme
164
+ return constants.resolvedComponent(definition, name);
165
+ }
166
+
167
+ function createClassListRef(list) {
168
+ return createComputeRef(() => {
169
+ let ret = [];
170
+ for (const ref of list) {
171
+ let value = normalizeStringValue(typeof ref === 'string' ? ref : valueForRef(ref));
172
+ if (value) ret.push(value);
173
+ }
174
+ return ret.length === 0 ? null : ret.join(' ');
175
+ });
176
+ }
177
+
178
+ APPEND_OPCODES.add(VM_CHILD_SCOPE_OP, vm => vm.pushChildScope());
179
+ APPEND_OPCODES.add(VM_POP_SCOPE_OP, vm => vm.popScope());
180
+ APPEND_OPCODES.add(VM_PUSH_DYNAMIC_SCOPE_OP, vm => vm.pushDynamicScope());
181
+ APPEND_OPCODES.add(VM_POP_DYNAMIC_SCOPE_OP, vm => vm.popDynamicScope());
182
+ APPEND_OPCODES.add(VM_CONSTANT_OP, (vm, {
183
+ op1: other
184
+ }) => {
185
+ vm.stack.push(vm.constants.getValue(decodeHandle(other)));
186
+ });
187
+ APPEND_OPCODES.add(VM_CONSTANT_REFERENCE_OP, (vm, {
188
+ op1: other
189
+ }) => {
190
+ vm.stack.push(createConstRef(vm.constants.getValue(decodeHandle(other))));
191
+ });
192
+ APPEND_OPCODES.add(VM_PRIMITIVE_OP, (vm, {
193
+ op1: primitive
194
+ }) => {
195
+ let stack = vm.stack;
196
+ if (isHandle(primitive)) {
197
+ // it is a handle which does not already exist on the stack
198
+ let value = vm.constants.getValue(decodeHandle(primitive));
199
+ stack.push(value);
200
+ } else {
201
+ // is already an encoded immediate or primitive handle
202
+ stack.push(decodeImmediate(primitive));
203
+ }
204
+ });
205
+ APPEND_OPCODES.add(VM_PRIMITIVE_REFERENCE_OP, vm => {
206
+ let stack = vm.stack;
207
+ let value = check(stack.pop());
208
+ let ref;
209
+ if (value === undefined) {
210
+ ref = UNDEFINED_REFERENCE;
211
+ } else if (value === null) {
212
+ ref = NULL_REFERENCE;
213
+ } else if (value === true) {
214
+ ref = TRUE_REFERENCE;
215
+ } else if (value === false) {
216
+ ref = FALSE_REFERENCE;
217
+ } else {
218
+ ref = createPrimitiveRef(value);
219
+ }
220
+ stack.push(ref);
221
+ });
222
+ APPEND_OPCODES.add(VM_DUP_OP, (vm, {
223
+ op1: register,
224
+ op2: offset
225
+ }) => {
226
+ let position = check(vm.fetchValue(check(register, CheckRegister))) - offset;
227
+ vm.stack.dup(position);
228
+ });
229
+ APPEND_OPCODES.add(VM_POP_OP, (vm, {
230
+ op1: count
231
+ }) => {
232
+ vm.stack.pop(count);
233
+ });
234
+ APPEND_OPCODES.add(VM_LOAD_OP, (vm, {
235
+ op1: register
236
+ }) => {
237
+ vm.load(check(register));
238
+ });
239
+ APPEND_OPCODES.add(VM_FETCH_OP, (vm, {
240
+ op1: register
241
+ }) => {
242
+ vm.fetch(check(register));
243
+ });
244
+ APPEND_OPCODES.add(VM_BIND_DYNAMIC_SCOPE_OP, (vm, {
245
+ op1: _names
246
+ }) => {
247
+ let names = vm.constants.getArray(_names);
248
+ vm.bindDynamicScope(names);
249
+ });
250
+ APPEND_OPCODES.add(VM_ENTER_OP, (vm, {
251
+ op1: args
252
+ }) => {
253
+ vm.enter(args);
254
+ });
255
+ APPEND_OPCODES.add(VM_EXIT_OP, vm => {
256
+ vm.exit();
257
+ });
258
+ APPEND_OPCODES.add(VM_PUSH_SYMBOL_TABLE_OP, (vm, {
259
+ op1: _table
260
+ }) => {
261
+ let stack = vm.stack;
262
+ stack.push(vm.constants.getValue(_table));
263
+ });
264
+ APPEND_OPCODES.add(VM_PUSH_BLOCK_SCOPE_OP, vm => {
265
+ let stack = vm.stack;
266
+ stack.push(vm.scope());
267
+ });
268
+ APPEND_OPCODES.add(VM_COMPILE_BLOCK_OP, vm => {
269
+ let stack = vm.stack;
270
+ let block = stack.pop();
271
+ if (block) {
272
+ stack.push(vm.compile(block));
273
+ } else {
274
+ stack.push(null);
275
+ }
276
+ });
277
+ APPEND_OPCODES.add(VM_INVOKE_YIELD_OP, vm => {
278
+ let {
279
+ stack
280
+ } = vm;
281
+ let handle = check(stack.pop());
282
+ let scope = check(stack.pop());
283
+ let table = check(stack.pop());
284
+ let args = check(stack.pop());
285
+ if (table === null || handle === null) {
286
+ // To balance the pop{Frame,Scope}
287
+ vm.lowlevel.pushFrame();
288
+ vm.pushScope(scope ?? vm.scope());
289
+ return;
290
+ }
291
+ let invokingScope = expect(scope);
292
+
293
+ // If necessary, create a child scope
294
+ {
295
+ let locals = table.parameters;
296
+ let localsCount = locals.length;
297
+ if (localsCount > 0) {
298
+ invokingScope = invokingScope.child();
299
+ for (let i = 0; i < localsCount; i++) {
300
+ invokingScope.bindSymbol(unwrap(locals[i]), args.at(i));
301
+ }
302
+ }
303
+ }
304
+ vm.lowlevel.pushFrame();
305
+ vm.pushScope(invokingScope);
306
+ vm.call(handle);
307
+ });
308
+ APPEND_OPCODES.add(VM_JUMP_IF_OP, (vm, {
309
+ op1: target
310
+ }) => {
311
+ let reference = check(vm.stack.pop());
312
+ let value = Boolean(valueForRef(reference));
313
+ if (isConstRef(reference)) {
314
+ if (value) {
315
+ vm.lowlevel.goto(target);
316
+ }
317
+ } else {
318
+ if (value) {
319
+ vm.lowlevel.goto(target);
320
+ }
321
+ vm.updateWith(new Assert(reference));
322
+ }
323
+ });
324
+ APPEND_OPCODES.add(VM_JUMP_UNLESS_OP, (vm, {
325
+ op1: target
326
+ }) => {
327
+ let reference = check(vm.stack.pop());
328
+ let value = Boolean(valueForRef(reference));
329
+ if (isConstRef(reference)) {
330
+ if (!value) {
331
+ vm.lowlevel.goto(target);
332
+ }
333
+ } else {
334
+ if (!value) {
335
+ vm.lowlevel.goto(target);
336
+ }
337
+ vm.updateWith(new Assert(reference));
338
+ }
339
+ });
340
+ APPEND_OPCODES.add(VM_JUMP_EQ_OP, (vm, {
341
+ op1: target,
342
+ op2: comparison
343
+ }) => {
344
+ let other = check(vm.stack.peek());
345
+ if (other === comparison) {
346
+ vm.lowlevel.goto(target);
347
+ }
348
+ });
349
+ APPEND_OPCODES.add(VM_ASSERT_SAME_OP, vm => {
350
+ let reference = check(vm.stack.peek());
351
+ if (!isConstRef(reference)) {
352
+ vm.updateWith(new Assert(reference));
353
+ }
354
+ });
355
+ APPEND_OPCODES.add(VM_TO_BOOLEAN_OP, vm => {
356
+ let {
357
+ stack
358
+ } = vm;
359
+ let valueRef = check(stack.pop());
360
+ stack.push(createComputeRef(() => toBool(valueForRef(valueRef))));
361
+ });
362
+ class Assert {
363
+ last;
364
+ constructor(ref) {
365
+ this.ref = ref;
366
+ this.last = valueForRef(ref);
367
+ }
368
+ evaluate(vm) {
369
+ let {
370
+ last,
371
+ ref
372
+ } = this;
373
+ let current = valueForRef(ref);
374
+ if (last !== current) {
375
+ vm.throw();
376
+ }
377
+ }
378
+ }
379
+ class AssertFilter {
380
+ last;
381
+ constructor(ref, filter) {
382
+ this.ref = ref;
383
+ this.filter = filter;
384
+ this.last = filter(valueForRef(ref));
385
+ }
386
+ evaluate(vm) {
387
+ let {
388
+ last,
389
+ ref,
390
+ filter
391
+ } = this;
392
+ let current = filter(valueForRef(ref));
393
+ if (last !== current) {
394
+ vm.throw();
395
+ }
396
+ }
397
+ }
398
+ class JumpIfNotModifiedOpcode {
399
+ tag = CONSTANT_TAG;
400
+ lastRevision = INITIAL;
401
+ target;
402
+ finalize(tag, target) {
403
+ this.target = target;
404
+ this.didModify(tag);
405
+ }
406
+ evaluate(vm) {
407
+ let {
408
+ tag,
409
+ target,
410
+ lastRevision
411
+ } = this;
412
+ if (!vm.alwaysRevalidate && validateTag(tag, lastRevision)) {
413
+ consumeTag(tag);
414
+ vm.goto(expect(target));
415
+ }
416
+ }
417
+ didModify(tag) {
418
+ this.tag = tag;
419
+ this.lastRevision = valueForTag(this.tag);
420
+ consumeTag(tag);
421
+ }
422
+ }
423
+ class BeginTrackFrameOpcode {
424
+ constructor(debugLabel) {
425
+ this.debugLabel = debugLabel;
426
+ }
427
+ evaluate() {
428
+ beginTrackFrame(this.debugLabel);
429
+ }
430
+ }
431
+ class EndTrackFrameOpcode {
432
+ constructor(target) {
433
+ this.target = target;
434
+ }
435
+ evaluate() {
436
+ let tag = endTrackFrame();
437
+ this.target.didModify(tag);
438
+ }
439
+ }
440
+
441
+ APPEND_OPCODES.add(VM_TEXT_OP, (vm, {
442
+ op1: text
443
+ }) => {
444
+ vm.tree().appendText(vm.constants.getValue(text));
445
+ });
446
+ APPEND_OPCODES.add(VM_COMMENT_OP, (vm, {
447
+ op1: text
448
+ }) => {
449
+ vm.tree().appendComment(vm.constants.getValue(text));
450
+ });
451
+ APPEND_OPCODES.add(VM_OPEN_ELEMENT_OP, (vm, {
452
+ op1: tag
453
+ }) => {
454
+ vm.tree().openElement(vm.constants.getValue(tag));
455
+ });
456
+ APPEND_OPCODES.add(VM_OPEN_DYNAMIC_ELEMENT_OP, vm => {
457
+ let tagName = check(valueForRef(check(vm.stack.pop(), CheckReference)));
458
+ vm.tree().openElement(tagName);
459
+ });
460
+ APPEND_OPCODES.add(VM_PUSH_REMOTE_ELEMENT_OP, vm => {
461
+ let elementRef = check(vm.stack.pop());
462
+ let insertBeforeRef = check(vm.stack.pop());
463
+ let guidRef = check(vm.stack.pop());
464
+ let element = check(valueForRef(elementRef));
465
+ let insertBefore = check(valueForRef(insertBeforeRef));
466
+ let guid = valueForRef(guidRef);
467
+ if (!isConstRef(elementRef)) {
468
+ vm.updateWith(new Assert(elementRef));
469
+ }
470
+ if (insertBefore !== undefined && !isConstRef(insertBeforeRef)) {
471
+ vm.updateWith(new Assert(insertBeforeRef));
472
+ }
473
+ let block = vm.tree().pushRemoteElement(element, guid, insertBefore);
474
+ vm.associateDestroyable(block);
475
+ if (vm.env.debugRenderTree !== undefined) {
476
+ // Note that there is nothing to update – when the args for an
477
+ // {{#in-element}} changes it gets torn down and a new one is
478
+ // re-created/rendered in its place (see the `Assert`s above)
479
+ let args = createCapturedArgs(insertBefore === undefined ? {} : {
480
+ insertBefore: insertBeforeRef
481
+ }, [elementRef]);
482
+ vm.env.debugRenderTree.create(block, {
483
+ type: 'keyword',
484
+ name: 'in-element',
485
+ args,
486
+ instance: null
487
+ });
488
+ registerDestructor(block, () => {
489
+ vm.env.debugRenderTree?.willDestroy(block);
490
+ });
491
+ }
492
+ });
493
+ APPEND_OPCODES.add(VM_POP_REMOTE_ELEMENT_OP, vm => {
494
+ let bounds = vm.tree().popRemoteElement();
495
+ if (vm.env.debugRenderTree !== undefined) {
496
+ // The RemoteBlock is also its bounds
497
+ vm.env.debugRenderTree.didRender(bounds, bounds);
498
+ }
499
+ });
500
+ APPEND_OPCODES.add(VM_FLUSH_ELEMENT_OP, vm => {
501
+ let operations = check(vm.fetchValue($t0));
502
+ let modifiers = null;
503
+ if (operations) {
504
+ modifiers = operations.flush(vm);
505
+ vm.loadValue($t0, null);
506
+ }
507
+ vm.tree().flushElement(modifiers);
508
+ });
509
+ APPEND_OPCODES.add(VM_CLOSE_ELEMENT_OP, vm => {
510
+ let modifiers = vm.tree().closeElement();
511
+ if (modifiers !== null) {
512
+ modifiers.forEach(modifier => {
513
+ vm.env.scheduleInstallModifier(modifier);
514
+ const d = modifier.manager.getDestroyable(modifier.state);
515
+ if (d !== null) {
516
+ vm.associateDestroyable(d);
517
+ }
518
+ });
519
+ }
520
+ });
521
+ APPEND_OPCODES.add(VM_MODIFIER_OP, (vm, {
522
+ op1: handle
523
+ }) => {
524
+ let args = check(vm.stack.pop());
525
+ if (!vm.env.isInteractive) {
526
+ return;
527
+ }
528
+ let owner = vm.getOwner();
529
+ let definition = vm.constants.getValue(handle);
530
+ let {
531
+ manager
532
+ } = definition;
533
+ let {
534
+ constructing
535
+ } = vm.tree();
536
+ let capturedArgs = args.capture();
537
+ let state = manager.create(owner, expect(constructing), definition.state, capturedArgs);
538
+ let instance = {
539
+ manager,
540
+ state,
541
+ definition
542
+ };
543
+ let operations = expect(check(vm.fetchValue($t0)));
544
+ operations.addModifier(vm, instance, capturedArgs);
545
+ let tag = manager.getTag(state);
546
+ if (tag !== null) {
547
+ consumeTag(tag);
548
+ return vm.updateWith(new UpdateModifierOpcode(tag, instance));
549
+ }
550
+ });
551
+ APPEND_OPCODES.add(VM_DYNAMIC_MODIFIER_OP, vm => {
552
+ let {
553
+ stack
554
+ } = vm;
555
+ let ref = check(stack.pop());
556
+ let args = check(stack.pop());
557
+ if (!vm.env.isInteractive) {
558
+ return;
559
+ }
560
+ let capturedArgs = args.capture();
561
+ let {
562
+ positional: outerPositional,
563
+ named: outerNamed
564
+ } = capturedArgs;
565
+ let {
566
+ constructing
567
+ } = vm.tree();
568
+ let initialOwner = vm.getOwner();
569
+ let instanceRef = createComputeRef(() => {
570
+ let value = valueForRef(ref);
571
+ let owner;
572
+ if (!isIndexable(value)) {
573
+ return;
574
+ }
575
+ let hostDefinition;
576
+ if (isCurriedType(value, CURRIED_MODIFIER)) {
577
+ let {
578
+ definition: resolvedDefinition,
579
+ owner: curriedOwner,
580
+ positional,
581
+ named
582
+ } = resolveCurriedValue(value);
583
+ hostDefinition = resolvedDefinition;
584
+ owner = curriedOwner;
585
+ if (positional !== undefined) {
586
+ capturedArgs.positional = positional.concat(outerPositional);
587
+ }
588
+ if (named !== undefined) {
589
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
590
+ capturedArgs.named = Object.assign({}, ...named, outerNamed);
591
+ }
592
+ } else {
593
+ hostDefinition = value;
594
+ owner = initialOwner;
595
+ }
596
+ let manager = getInternalModifierManager(hostDefinition);
597
+ if (manager === null) {
598
+ {
599
+ throw new Error('BUG: modifier manager expected');
600
+ }
601
+ }
602
+ let definition = {
603
+ resolvedName: null,
604
+ manager,
605
+ state: hostDefinition
606
+ };
607
+ let state = manager.create(owner, expect(constructing), definition.state, capturedArgs);
608
+ return {
609
+ manager,
610
+ state,
611
+ definition
612
+ };
613
+ });
614
+ let instance = valueForRef(instanceRef);
615
+ let tag = null;
616
+ if (instance !== undefined) {
617
+ let operations = expect(check(vm.fetchValue($t0)));
618
+ operations.addModifier(vm, instance, capturedArgs);
619
+ tag = instance.manager.getTag(instance.state);
620
+ if (tag !== null) {
621
+ consumeTag(tag);
622
+ }
623
+ }
624
+ if (!isConstRef(ref) || tag) {
625
+ return vm.updateWith(new UpdateDynamicModifierOpcode(tag, instance, instanceRef));
626
+ }
627
+ });
628
+ class UpdateModifierOpcode {
629
+ lastUpdated;
630
+ constructor(tag, modifier) {
631
+ this.tag = tag;
632
+ this.modifier = modifier;
633
+ this.lastUpdated = valueForTag(tag);
634
+ }
635
+ evaluate(vm) {
636
+ let {
637
+ modifier,
638
+ tag,
639
+ lastUpdated
640
+ } = this;
641
+ consumeTag(tag);
642
+ if (!validateTag(tag, lastUpdated)) {
643
+ vm.env.scheduleUpdateModifier(modifier);
644
+ this.lastUpdated = valueForTag(tag);
645
+ }
646
+ }
647
+ }
648
+ class UpdateDynamicModifierOpcode {
649
+ lastUpdated;
650
+ constructor(tag, instance, instanceRef) {
651
+ this.tag = tag;
652
+ this.instance = instance;
653
+ this.instanceRef = instanceRef;
654
+ this.lastUpdated = valueForTag(tag ?? CURRENT_TAG);
655
+ }
656
+ evaluate(vm) {
657
+ let {
658
+ tag,
659
+ lastUpdated,
660
+ instance,
661
+ instanceRef
662
+ } = this;
663
+ let newInstance = valueForRef(instanceRef);
664
+ if (newInstance !== instance) {
665
+ if (instance !== undefined) {
666
+ let destroyable = instance.manager.getDestroyable(instance.state);
667
+ if (destroyable !== null) {
668
+ destroy(destroyable);
669
+ }
670
+ }
671
+ if (newInstance !== undefined) {
672
+ let {
673
+ manager,
674
+ state
675
+ } = newInstance;
676
+ let destroyable = manager.getDestroyable(state);
677
+ if (destroyable !== null) {
678
+ associateDestroyableChild(this, destroyable);
679
+ }
680
+ tag = manager.getTag(state);
681
+ if (tag !== null) {
682
+ this.lastUpdated = valueForTag(tag);
683
+ }
684
+ this.tag = tag;
685
+ vm.env.scheduleInstallModifier(newInstance);
686
+ }
687
+ this.instance = newInstance;
688
+ } else if (tag !== null && !validateTag(tag, lastUpdated)) {
689
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- @fixme
690
+ vm.env.scheduleUpdateModifier(instance);
691
+ this.lastUpdated = valueForTag(tag);
692
+ }
693
+ if (tag !== null) {
694
+ consumeTag(tag);
695
+ }
696
+ }
697
+ }
698
+ APPEND_OPCODES.add(VM_STATIC_ATTR_OP, (vm, {
699
+ op1: _name,
700
+ op2: _value,
701
+ op3: _namespace
702
+ }) => {
703
+ let name = vm.constants.getValue(_name);
704
+ let value = vm.constants.getValue(_value);
705
+ let namespace = _namespace ? vm.constants.getValue(_namespace) : null;
706
+ vm.tree().setStaticAttribute(name, value, namespace);
707
+ });
708
+ APPEND_OPCODES.add(VM_DYNAMIC_ATTR_OP, (vm, {
709
+ op1: _name,
710
+ op2: _trusting,
711
+ op3: _namespace
712
+ }) => {
713
+ let name = vm.constants.getValue(_name);
714
+ let trusting = vm.constants.getValue(_trusting);
715
+ let reference = check(vm.stack.pop());
716
+ let value = valueForRef(reference);
717
+ let namespace = _namespace ? vm.constants.getValue(_namespace) : null;
718
+ let attribute = vm.tree().setDynamicAttribute(name, value, trusting, namespace);
719
+ if (!isConstRef(reference)) {
720
+ vm.updateWith(new UpdateDynamicAttributeOpcode(reference, attribute, vm.env));
721
+ }
722
+ });
723
+ class UpdateDynamicAttributeOpcode {
724
+ updateRef;
725
+ constructor(reference, attribute, env) {
726
+ let initialized = false;
727
+ this.updateRef = createComputeRef(() => {
728
+ let value = valueForRef(reference);
729
+ if (initialized) {
730
+ attribute.update(value, env);
731
+ } else {
732
+ initialized = true;
733
+ }
734
+ });
735
+ valueForRef(this.updateRef);
736
+ }
737
+ evaluate() {
738
+ valueForRef(this.updateRef);
739
+ }
740
+ }
741
+
742
+ /**
743
+ * The VM creates a new ComponentInstance data structure for every component
744
+ * invocation it encounters.
745
+ *
746
+ * Similar to how a ComponentDefinition contains state about all components of a
747
+ * particular type, a ComponentInstance contains state specific to a particular
748
+ * instance of a component type. It also contains a pointer back to its
749
+ * component type's ComponentDefinition.
750
+ */
751
+
752
+ APPEND_OPCODES.add(VM_PUSH_COMPONENT_DEFINITION_OP, (vm, {
753
+ op1: handle
754
+ }) => {
755
+ let definition = vm.constants.getValue(handle);
756
+ let {
757
+ manager,
758
+ capabilities
759
+ } = definition;
760
+ let instance = {
761
+ definition,
762
+ manager,
763
+ capabilities,
764
+ state: null,
765
+ handle: null,
766
+ table: null,
767
+ lookup: null
768
+ };
769
+ vm.stack.push(instance);
770
+ });
771
+ APPEND_OPCODES.add(VM_RESOLVE_DYNAMIC_COMPONENT_OP, (vm, {
772
+ op1: _isStrict
773
+ }) => {
774
+ let stack = vm.stack;
775
+ let ref = check(stack.pop());
776
+ let component = check(valueForRef(ref));
777
+ let constants = vm.constants;
778
+ let owner = vm.getOwner();
779
+ constants.getValue(_isStrict);
780
+ vm.loadValue($t1, null); // Clear the temp register
781
+
782
+ let definition;
783
+ if (typeof component === 'string') {
784
+ let resolvedDefinition = resolveComponent(vm.context.resolver, constants, component, owner);
785
+ definition = expect(resolvedDefinition);
786
+ } else if (isCurriedValue(component)) {
787
+ definition = component;
788
+ } else {
789
+ definition = constants.component(component, owner);
790
+ }
791
+ stack.push(definition);
792
+ });
793
+ APPEND_OPCODES.add(VM_RESOLVE_CURRIED_COMPONENT_OP, vm => {
794
+ let stack = vm.stack;
795
+ let ref = check(stack.pop());
796
+ let value = valueForRef(ref);
797
+ let constants = vm.constants;
798
+ let definition;
799
+ if (isCurriedValue(value)) {
800
+ definition = value;
801
+ } else {
802
+ definition = constants.component(value, vm.getOwner(), true);
803
+ }
804
+ stack.push(definition);
805
+ });
806
+ APPEND_OPCODES.add(VM_PUSH_DYNAMIC_COMPONENT_INSTANCE_OP, vm => {
807
+ let {
808
+ stack
809
+ } = vm;
810
+ let definition = stack.pop();
811
+ let capabilities, manager;
812
+ if (isCurriedValue(definition)) {
813
+ manager = capabilities = null;
814
+ } else {
815
+ manager = definition.manager;
816
+ capabilities = definition.capabilities;
817
+ }
818
+ stack.push({
819
+ definition,
820
+ capabilities,
821
+ manager,
822
+ state: null,
823
+ handle: null,
824
+ table: null
825
+ });
826
+ });
827
+ APPEND_OPCODES.add(VM_PUSH_ARGS_OP, (vm, {
828
+ op1: _names,
829
+ op2: _blockNames,
830
+ op3: flags
831
+ }) => {
832
+ let stack = vm.stack;
833
+ let names = vm.constants.getArray(_names);
834
+ let positionalCount = flags >> 4;
835
+ let atNames = flags & 0b1000;
836
+ let blockNames = flags & 0b0111 ? vm.constants.getArray(_blockNames) : EMPTY_STRING_ARRAY;
837
+ vm.args.setup(stack, names, blockNames, positionalCount, !!atNames);
838
+ stack.push(vm.args);
839
+ });
840
+ APPEND_OPCODES.add(VM_PUSH_EMPTY_ARGS_OP, vm => {
841
+ let {
842
+ stack
843
+ } = vm;
844
+ stack.push(vm.args.empty(stack));
845
+ });
846
+ APPEND_OPCODES.add(VM_CAPTURE_ARGS_OP, vm => {
847
+ let stack = vm.stack;
848
+ let args = check(stack.pop());
849
+ let capturedArgs = args.capture();
850
+ stack.push(capturedArgs);
851
+ });
852
+ APPEND_OPCODES.add(VM_PREPARE_ARGS_OP, (vm, {
853
+ op1: register
854
+ }) => {
855
+ let stack = vm.stack;
856
+ let instance = vm.fetchValue(check(register));
857
+ let args = check(stack.pop());
858
+ let {
859
+ definition
860
+ } = instance;
861
+ if (isCurriedType(definition, CURRIED_COMPONENT)) {
862
+ assert(!definition.manager);
863
+ let constants = vm.constants;
864
+ let {
865
+ definition: resolvedDefinition,
866
+ owner,
867
+ resolved,
868
+ positional,
869
+ named
870
+ } = resolveCurriedValue(definition);
871
+ if (resolved) {
872
+ definition = resolvedDefinition;
873
+ } else if (typeof resolvedDefinition === 'string') {
874
+ let resolvedValue = vm.context.resolver?.lookupComponent?.(resolvedDefinition, owner) ?? null;
875
+ definition = constants.resolvedComponent(expect(resolvedValue), resolvedDefinition);
876
+ } else {
877
+ definition = constants.component(resolvedDefinition, owner);
878
+ }
879
+ if (named !== undefined) {
880
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
881
+ args.named.merge(assign({}, ...named));
882
+ }
883
+ if (positional !== undefined) {
884
+ args.realloc(positional.length);
885
+ args.positional.prepend(positional);
886
+ }
887
+ let {
888
+ manager
889
+ } = definition;
890
+ instance.definition = definition;
891
+ instance.manager = manager;
892
+ instance.capabilities = definition.capabilities;
893
+
894
+ // Save off the owner that this component was curried with. Later on,
895
+ // we'll fetch the value of this register and set it as the owner on the
896
+ // new root scope.
897
+ vm.loadValue($t1, owner);
898
+ }
899
+ let {
900
+ manager,
901
+ state
902
+ } = definition;
903
+ let capabilities = instance.capabilities;
904
+ if (!managerHasCapability(manager, capabilities, InternalComponentCapabilities.prepareArgs)) {
905
+ stack.push(args);
906
+ return;
907
+ }
908
+ let blocks = args.blocks.values;
909
+ let blockNames = args.blocks.names;
910
+ let preparedArgs = manager.prepareArgs(state, args);
911
+ if (preparedArgs) {
912
+ args.clear();
913
+ for (let i = 0; i < blocks.length; i++) {
914
+ stack.push(blocks[i]);
915
+ }
916
+ let {
917
+ positional,
918
+ named
919
+ } = preparedArgs;
920
+ let positionalCount = positional.length;
921
+ for (let i = 0; i < positionalCount; i++) {
922
+ stack.push(positional[i]);
923
+ }
924
+ let names = Object.keys(named);
925
+ for (let i = 0; i < names.length; i++) {
926
+ stack.push(named[unwrap(names[i])]);
927
+ }
928
+ args.setup(stack, names, blockNames, positionalCount, false);
929
+ }
930
+ stack.push(args);
931
+ });
932
+ APPEND_OPCODES.add(VM_CREATE_COMPONENT_OP, (vm, {
933
+ op1: flags
934
+ }) => {
935
+ let instance = check(vm.fetchValue($s0));
936
+ let {
937
+ definition,
938
+ manager,
939
+ capabilities
940
+ } = instance;
941
+ if (!managerHasCapability(manager, capabilities, InternalComponentCapabilities.createInstance)) {
942
+ // TODO: Closure and Main components are always invoked dynamically, so this
943
+ // opcode may run even if this capability is not enabled. In the future we
944
+ // should handle this in a better way.
945
+ return;
946
+ }
947
+ let dynamicScope = null;
948
+ if (managerHasCapability(manager, capabilities, InternalComponentCapabilities.dynamicScope)) {
949
+ dynamicScope = vm.dynamicScope();
950
+ }
951
+ let hasDefaultBlock = flags & 1;
952
+ let args = null;
953
+ if (managerHasCapability(manager, capabilities, InternalComponentCapabilities.createArgs)) {
954
+ args = check(vm.stack.peek());
955
+ }
956
+ let self = null;
957
+ if (managerHasCapability(manager, capabilities, InternalComponentCapabilities.createCaller)) {
958
+ self = vm.getSelf();
959
+ }
960
+ let state = manager.create(vm.getOwner(), definition.state, args, vm.env, dynamicScope, self, !!hasDefaultBlock);
961
+
962
+ // We want to reuse the `state` POJO here, because we know that the opcodes
963
+ // only transition at exactly one place.
964
+ instance.state = state;
965
+ if (managerHasCapability(manager, capabilities, InternalComponentCapabilities.updateHook)) {
966
+ vm.updateWith(new UpdateComponentOpcode(state, manager, dynamicScope));
967
+ }
968
+ });
969
+ APPEND_OPCODES.add(VM_REGISTER_COMPONENT_DESTRUCTOR_OP, (vm, {
970
+ op1: register
971
+ }) => {
972
+ let {
973
+ manager,
974
+ state,
975
+ capabilities
976
+ } = check(vm.fetchValue(check(register, CheckRegister)));
977
+ let d = manager.getDestroyable(state);
978
+ if (d) vm.associateDestroyable(d);
979
+ });
980
+ APPEND_OPCODES.add(VM_BEGIN_COMPONENT_TRANSACTION_OP, (vm, {
981
+ op1: register
982
+ }) => {
983
+ let name;
984
+ vm.beginCacheGroup(name);
985
+ vm.tree().pushAppendingBlock();
986
+ });
987
+ APPEND_OPCODES.add(VM_PUT_COMPONENT_OPERATIONS_OP, vm => {
988
+ vm.loadValue($t0, new ComponentElementOperations());
989
+ });
990
+ APPEND_OPCODES.add(VM_COMPONENT_ATTR_OP, (vm, {
991
+ op1: _name,
992
+ op2: _trusting,
993
+ op3: _namespace
994
+ }) => {
995
+ let name = vm.constants.getValue(_name);
996
+ let trusting = vm.constants.getValue(_trusting);
997
+ let reference = check(vm.stack.pop());
998
+ let namespace = _namespace ? vm.constants.getValue(_namespace) : null;
999
+ check(vm.fetchValue($t0), CheckInstanceof(ComponentElementOperations)).setAttribute(name, reference, trusting, namespace);
1000
+ });
1001
+ APPEND_OPCODES.add(VM_STATIC_COMPONENT_ATTR_OP, (vm, {
1002
+ op1: _name,
1003
+ op2: _value,
1004
+ op3: _namespace
1005
+ }) => {
1006
+ let name = vm.constants.getValue(_name);
1007
+ let value = vm.constants.getValue(_value);
1008
+ let namespace = _namespace ? vm.constants.getValue(_namespace) : null;
1009
+ check(vm.fetchValue($t0), CheckInstanceof(ComponentElementOperations)).setStaticAttribute(name, value, namespace);
1010
+ });
1011
+ class ComponentElementOperations {
1012
+ attributes = dict();
1013
+ classes = [];
1014
+ modifiers = [];
1015
+ setAttribute(name, value, trusting, namespace) {
1016
+ let deferred = {
1017
+ value,
1018
+ namespace,
1019
+ trusting
1020
+ };
1021
+ if (name === 'class') {
1022
+ this.classes.push(value);
1023
+ }
1024
+ this.attributes[name] = deferred;
1025
+ }
1026
+ setStaticAttribute(name, value, namespace) {
1027
+ let deferred = {
1028
+ value,
1029
+ namespace
1030
+ };
1031
+ if (name === 'class') {
1032
+ this.classes.push(value);
1033
+ }
1034
+ this.attributes[name] = deferred;
1035
+ }
1036
+ addModifier(vm, modifier, capturedArgs) {
1037
+ this.modifiers.push(modifier);
1038
+ if (vm.env.debugRenderTree !== undefined) {
1039
+ const {
1040
+ manager,
1041
+ definition,
1042
+ state
1043
+ } = modifier;
1044
+
1045
+ // TODO: we need a stable object for the debugRenderTree as the key, add support for
1046
+ // the case where the state is a primitive, or if in practice we always have/require
1047
+ // an object, then change the internal types to reflect that
1048
+ if (state === null || typeof state !== 'object' && typeof state !== 'function') {
1049
+ return;
1050
+ }
1051
+ let {
1052
+ element,
1053
+ constructing
1054
+ } = vm.tree();
1055
+ let name = definition.resolvedName ?? manager.getDebugName(definition.state);
1056
+ let instance = manager.getDebugInstance(state);
1057
+ let bounds = new ConcreteBounds(element, constructing, constructing);
1058
+ vm.env.debugRenderTree.create(state, {
1059
+ type: 'modifier',
1060
+ name,
1061
+ args: capturedArgs,
1062
+ instance
1063
+ });
1064
+ vm.env.debugRenderTree.didRender(state, bounds);
1065
+
1066
+ // For tearing down the debugRenderTree
1067
+ vm.associateDestroyable(state);
1068
+ vm.updateWith(new DebugRenderTreeUpdateOpcode(state));
1069
+ vm.updateWith(new DebugRenderTreeDidRenderOpcode(state, bounds));
1070
+ registerDestructor(state, () => {
1071
+ vm.env.debugRenderTree?.willDestroy(state);
1072
+ });
1073
+ }
1074
+ }
1075
+ flush(vm) {
1076
+ let type;
1077
+ let attributes = this.attributes;
1078
+ for (let name in this.attributes) {
1079
+ if (name === 'type') {
1080
+ type = attributes[name];
1081
+ continue;
1082
+ }
1083
+ let attr = unwrap(this.attributes[name]);
1084
+ if (name === 'class') {
1085
+ setDeferredAttr(vm, 'class', mergeClasses(this.classes), attr.namespace, attr.trusting);
1086
+ } else {
1087
+ setDeferredAttr(vm, name, attr.value, attr.namespace, attr.trusting);
1088
+ }
1089
+ }
1090
+ if (type !== undefined) {
1091
+ setDeferredAttr(vm, 'type', type.value, type.namespace, type.trusting);
1092
+ }
1093
+ return this.modifiers;
1094
+ }
1095
+ }
1096
+ function mergeClasses(classes) {
1097
+ if (classes.length === 0) {
1098
+ return '';
1099
+ }
1100
+ if (classes.length === 1) {
1101
+ return unwrap(classes[0]);
1102
+ }
1103
+ if (allStringClasses(classes)) {
1104
+ return classes.join(' ');
1105
+ }
1106
+ return createClassListRef(classes);
1107
+ }
1108
+ function allStringClasses(classes) {
1109
+ return classes.every(c => typeof c === 'string');
1110
+ }
1111
+ function setDeferredAttr(vm, name, value, namespace, trusting = false) {
1112
+ if (typeof value === 'string') {
1113
+ vm.tree().setStaticAttribute(name, value, namespace);
1114
+ } else {
1115
+ let attribute = vm.tree().setDynamicAttribute(name, valueForRef(value), trusting, namespace);
1116
+ if (!isConstRef(value)) {
1117
+ vm.updateWith(new UpdateDynamicAttributeOpcode(value, attribute, vm.env));
1118
+ }
1119
+ }
1120
+ }
1121
+ APPEND_OPCODES.add(VM_DID_CREATE_ELEMENT_OP, (vm, {
1122
+ op1: register
1123
+ }) => {
1124
+ let {
1125
+ definition,
1126
+ state
1127
+ } = check(vm.fetchValue(check(register, CheckRegister)));
1128
+ let {
1129
+ manager
1130
+ } = definition;
1131
+ let operations = check(vm.fetchValue($t0));
1132
+ manager.didCreateElement(state, expect(vm.tree().constructing), operations);
1133
+ });
1134
+ APPEND_OPCODES.add(VM_GET_COMPONENT_SELF_OP, (vm, {
1135
+ op1: register,
1136
+ op2: _names
1137
+ }) => {
1138
+ let instance = check(vm.fetchValue(check(register, CheckRegister)));
1139
+ let {
1140
+ definition,
1141
+ state
1142
+ } = instance;
1143
+ let {
1144
+ manager
1145
+ } = definition;
1146
+ let selfRef = manager.getSelf(state);
1147
+ if (vm.env.debugRenderTree !== undefined) {
1148
+ let instance = check(vm.fetchValue(check(register, CheckRegister)));
1149
+ let {
1150
+ definition,
1151
+ manager
1152
+ } = instance;
1153
+ let args;
1154
+ if (vm.stack.peek() === vm.args) {
1155
+ args = vm.args.capture();
1156
+ } else {
1157
+ let names = vm.constants.getArray(_names);
1158
+ vm.args.setup(vm.stack, names, [], 0, true);
1159
+ args = vm.args.capture();
1160
+ }
1161
+ let compilable = definition.compilable;
1162
+ if (compilable === null) {
1163
+ assert(managerHasCapability(manager, instance.capabilities, InternalComponentCapabilities.dynamicLayout));
1164
+ let resolver = vm.context.resolver;
1165
+ compilable = resolver === null ? null : manager.getDynamicLayout(state, resolver);
1166
+ }
1167
+
1168
+ // For tearing down the debugRenderTree
1169
+ vm.associateDestroyable(instance);
1170
+ if (hasCustomDebugRenderTreeLifecycle(manager)) {
1171
+ let nodes = manager.getDebugCustomRenderTree(instance.definition.state, instance.state, args);
1172
+ nodes.forEach(node => {
1173
+ let {
1174
+ bucket
1175
+ } = node;
1176
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- @fixme
1177
+ vm.env.debugRenderTree.create(bucket, node);
1178
+ registerDestructor(instance, () => {
1179
+ vm.env.debugRenderTree?.willDestroy(bucket);
1180
+ });
1181
+ vm.updateWith(new DebugRenderTreeUpdateOpcode(bucket));
1182
+ });
1183
+ } else {
1184
+ let name = getDebugName(definition, manager);
1185
+ vm.env.debugRenderTree.create(instance, {
1186
+ type: 'component',
1187
+ name,
1188
+ args,
1189
+ instance: valueForRef(selfRef)
1190
+ });
1191
+ registerDestructor(instance, () => {
1192
+ vm.env.debugRenderTree?.willDestroy(instance);
1193
+ });
1194
+ vm.updateWith(new DebugRenderTreeUpdateOpcode(instance));
1195
+ }
1196
+ }
1197
+ vm.stack.push(selfRef);
1198
+ });
1199
+ APPEND_OPCODES.add(VM_GET_COMPONENT_TAG_NAME_OP, (vm, {
1200
+ op1: register
1201
+ }) => {
1202
+ let {
1203
+ definition,
1204
+ state
1205
+ } = check(vm.fetchValue(check(register, CheckRegister)));
1206
+ let {
1207
+ manager
1208
+ } = definition;
1209
+ let tagName = manager.getTagName(state);
1210
+
1211
+ // User provided value from JS, so we don't bother to encode
1212
+ vm.stack.push(tagName);
1213
+ });
1214
+
1215
+ // Dynamic Invocation Only
1216
+ APPEND_OPCODES.add(VM_GET_COMPONENT_LAYOUT_OP, (vm, {
1217
+ op1: register
1218
+ }) => {
1219
+ let instance = check(vm.fetchValue(check(register, CheckRegister)));
1220
+ let {
1221
+ manager,
1222
+ definition
1223
+ } = instance;
1224
+ let {
1225
+ stack
1226
+ } = vm;
1227
+ let {
1228
+ compilable
1229
+ } = definition;
1230
+ if (compilable === null) {
1231
+ let {
1232
+ capabilities
1233
+ } = instance;
1234
+ assert(managerHasCapability(manager, capabilities, InternalComponentCapabilities.dynamicLayout));
1235
+ let resolver = vm.context.resolver;
1236
+ compilable = resolver === null ? null : manager.getDynamicLayout(instance.state, resolver);
1237
+ if (compilable === null) {
1238
+ if (managerHasCapability(manager, capabilities, InternalComponentCapabilities.wrapped)) {
1239
+ compilable = unwrapTemplate(vm.constants.defaultTemplate).asWrappedLayout();
1240
+ } else {
1241
+ compilable = unwrapTemplate(vm.constants.defaultTemplate).asLayout();
1242
+ }
1243
+ }
1244
+ }
1245
+ let handle = compilable.compile(vm.context);
1246
+ stack.push(compilable.symbolTable);
1247
+ stack.push(handle);
1248
+ });
1249
+ APPEND_OPCODES.add(VM_MAIN_OP, (vm, {
1250
+ op1: register
1251
+ }) => {
1252
+ let definition = check(vm.stack.pop());
1253
+ let invocation = check(vm.stack.pop());
1254
+ let {
1255
+ manager,
1256
+ capabilities
1257
+ } = definition;
1258
+ let state = {
1259
+ definition,
1260
+ manager,
1261
+ capabilities,
1262
+ state: null,
1263
+ handle: invocation.handle,
1264
+ table: invocation.symbolTable,
1265
+ lookup: null
1266
+ };
1267
+ vm.loadValue(check(register), state);
1268
+ });
1269
+ APPEND_OPCODES.add(VM_POPULATE_LAYOUT_OP, (vm, {
1270
+ op1: register
1271
+ }) => {
1272
+ let {
1273
+ stack
1274
+ } = vm;
1275
+
1276
+ // In import.meta.env.DEV handles could be ErrHandle objects
1277
+ let handle = check(stack.pop());
1278
+ let table = check(stack.pop());
1279
+ let state = check(vm.fetchValue(check(register, CheckRegister)));
1280
+ state.handle = handle;
1281
+ state.table = table;
1282
+ });
1283
+ APPEND_OPCODES.add(VM_VIRTUAL_ROOT_SCOPE_OP, (vm, {
1284
+ op1: register
1285
+ }) => {
1286
+ let {
1287
+ table,
1288
+ manager,
1289
+ capabilities,
1290
+ state
1291
+ } = check(vm.fetchValue(check(register, CheckRegister)));
1292
+ let owner;
1293
+ if (managerHasCapability(manager, capabilities, InternalComponentCapabilities.hasSubOwner)) {
1294
+ owner = manager.getOwner(state);
1295
+ vm.loadValue($t1, null); // Clear the temp register
1296
+ } else {
1297
+ // Check the temp register to see if an owner was resolved from currying
1298
+ owner = vm.fetchValue($t1);
1299
+ if (owner === null) {
1300
+ // If an owner wasn't found, default to using the current owner. This
1301
+ // will happen for normal dynamic component invocation,
1302
+ // e.g. <SomeClassicEmberComponent/>
1303
+ owner = vm.getOwner();
1304
+ } else {
1305
+ // Else the owner was found, so clear the temp register. This will happen
1306
+ // if we are loading a curried component, e.g. <@someCurriedComponent/>
1307
+ vm.loadValue($t1, null);
1308
+ }
1309
+ }
1310
+ vm.pushRootScope(table.symbols.length + 1, owner);
1311
+ });
1312
+ APPEND_OPCODES.add(VM_SET_NAMED_VARIABLES_OP, (vm, {
1313
+ op1: register
1314
+ }) => {
1315
+ let state = check(vm.fetchValue(check(register, CheckRegister)));
1316
+ let scope = vm.scope();
1317
+ let args = check(vm.stack.peek());
1318
+ let callerNames = args.named.atNames;
1319
+ for (let i = callerNames.length - 1; i >= 0; i--) {
1320
+ let atName = unwrap(callerNames[i]);
1321
+ let symbol = state.table.symbols.indexOf(atName);
1322
+ let value = args.named.get(atName, true);
1323
+ if (symbol !== -1) scope.bindSymbol(symbol + 1, value);
1324
+ if (state.lookup) state.lookup[atName] = value;
1325
+ }
1326
+ });
1327
+ function bindBlock(symbolName, blockName, state, blocks, vm) {
1328
+ let symbol = state.table.symbols.indexOf(symbolName);
1329
+ let block = blocks.get(blockName);
1330
+ if (symbol !== -1) vm.scope().bindBlock(symbol + 1, block);
1331
+ if (state.lookup) state.lookup[symbolName] = block;
1332
+ }
1333
+ APPEND_OPCODES.add(VM_SET_BLOCKS_OP, (vm, {
1334
+ op1: register
1335
+ }) => {
1336
+ let state = check(vm.fetchValue(check(register, CheckRegister)));
1337
+ let {
1338
+ blocks
1339
+ } = check(vm.stack.peek());
1340
+ for (const [i] of enumerate(blocks.names)) {
1341
+ bindBlock(unwrap(blocks.symbolNames[i]), unwrap(blocks.names[i]), state, blocks, vm);
1342
+ }
1343
+ });
1344
+
1345
+ // Dynamic Invocation Only
1346
+ APPEND_OPCODES.add(VM_INVOKE_COMPONENT_LAYOUT_OP, (vm, {
1347
+ op1: register
1348
+ }) => {
1349
+ let state = check(vm.fetchValue(check(register, CheckRegister)));
1350
+ vm.call(state.handle);
1351
+ });
1352
+ APPEND_OPCODES.add(VM_DID_RENDER_LAYOUT_OP, (vm, {
1353
+ op1: register
1354
+ }) => {
1355
+ let instance = check(vm.fetchValue(check(register, CheckRegister)));
1356
+ let {
1357
+ manager,
1358
+ state,
1359
+ capabilities
1360
+ } = instance;
1361
+ let bounds = vm.tree().popBlock();
1362
+ if (vm.env.debugRenderTree !== undefined) {
1363
+ if (hasCustomDebugRenderTreeLifecycle(manager)) {
1364
+ let nodes = manager.getDebugCustomRenderTree(instance.definition.state, state, EMPTY_ARGS);
1365
+ nodes.reverse().forEach(node => {
1366
+ let {
1367
+ bucket
1368
+ } = node;
1369
+
1370
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- @fixme
1371
+ vm.env.debugRenderTree.didRender(bucket, bounds);
1372
+ vm.updateWith(new DebugRenderTreeDidRenderOpcode(bucket, bounds));
1373
+ });
1374
+ } else {
1375
+ vm.env.debugRenderTree.didRender(instance, bounds);
1376
+ vm.updateWith(new DebugRenderTreeDidRenderOpcode(instance, bounds));
1377
+ }
1378
+ }
1379
+ if (managerHasCapability(manager, capabilities, InternalComponentCapabilities.createInstance)) {
1380
+ let mgr = check(manager);
1381
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call -- @fixme
1382
+ mgr.didRenderLayout(state, bounds);
1383
+ vm.env.didCreate(instance);
1384
+ vm.updateWith(new DidUpdateLayoutOpcode(instance, bounds));
1385
+ }
1386
+ });
1387
+ APPEND_OPCODES.add(VM_COMMIT_COMPONENT_TRANSACTION_OP, vm => {
1388
+ vm.commitCacheGroup();
1389
+ });
1390
+ class UpdateComponentOpcode {
1391
+ constructor(component, manager, dynamicScope) {
1392
+ this.component = component;
1393
+ this.manager = manager;
1394
+ this.dynamicScope = dynamicScope;
1395
+ }
1396
+ evaluate(_vm) {
1397
+ let {
1398
+ component,
1399
+ manager,
1400
+ dynamicScope
1401
+ } = this;
1402
+ manager.update(component, dynamicScope);
1403
+ }
1404
+ }
1405
+ class DidUpdateLayoutOpcode {
1406
+ constructor(component, bounds) {
1407
+ this.component = component;
1408
+ this.bounds = bounds;
1409
+ }
1410
+ evaluate(vm) {
1411
+ let {
1412
+ component,
1413
+ bounds
1414
+ } = this;
1415
+ let {
1416
+ manager,
1417
+ state
1418
+ } = component;
1419
+ manager.didUpdateLayout(state, bounds);
1420
+ vm.env.didUpdate(component);
1421
+ }
1422
+ }
1423
+ class DebugRenderTreeUpdateOpcode {
1424
+ constructor(bucket) {
1425
+ this.bucket = bucket;
1426
+ }
1427
+ evaluate(vm) {
1428
+ vm.env.debugRenderTree?.update(this.bucket);
1429
+ }
1430
+ }
1431
+ class DebugRenderTreeDidRenderOpcode {
1432
+ constructor(bucket, bounds) {
1433
+ this.bucket = bucket;
1434
+ this.bounds = bounds;
1435
+ }
1436
+ evaluate(vm) {
1437
+ vm.env.debugRenderTree?.didRender(this.bucket, this.bounds);
1438
+ }
1439
+ }
1440
+
1441
+ class ReferenceChecker {
1442
+ validate(value) {
1443
+ return typeof value === 'object' && value !== null && REFERENCE in value;
1444
+ }
1445
+ expected() {
1446
+ return `Reference`;
1447
+ }
1448
+ }
1449
+ const CheckReference = new ReferenceChecker();
1450
+
1451
+ /*
1452
+ The calling convention is:
1453
+
1454
+ * 0-N block arguments at the bottom
1455
+ * 0-N positional arguments next (left-to-right)
1456
+ * 0-N named arguments next
1457
+ */
1458
+
1459
+ class VMArgumentsImpl {
1460
+ stack = null;
1461
+ positional = new PositionalArgumentsImpl();
1462
+ named = new NamedArgumentsImpl();
1463
+ blocks = new BlockArgumentsImpl();
1464
+ constructor() {
1465
+ setLocalDebugType('args', this);
1466
+ }
1467
+ empty(stack) {
1468
+ let base = stack.registers[$sp] + 1;
1469
+ this.named.empty(stack, base);
1470
+ this.positional.empty(stack, base);
1471
+ this.blocks.empty(stack, base);
1472
+ return this;
1473
+ }
1474
+ setup(stack, names, blockNames, positionalCount, atNames) {
1475
+ this.stack = stack;
1476
+
1477
+ /*
1478
+ | ... | blocks | positional | named |
1479
+ | ... | b0 b1 | p0 p1 p2 p3 | n0 n1 |
1480
+ index | ... | 4/5/6 7/8/9 | 10 11 12 13 | 14 15 |
1481
+ ^ ^ ^ ^
1482
+ bbase pbase nbase sp
1483
+ */
1484
+
1485
+ let named = this.named;
1486
+ let namedCount = names.length;
1487
+ let namedBase = stack.registers[$sp] - namedCount + 1;
1488
+ named.setup(stack, namedBase, namedCount, names, atNames);
1489
+ let positional = this.positional;
1490
+ let positionalBase = namedBase - positionalCount;
1491
+ positional.setup(stack, positionalBase, positionalCount);
1492
+ let blocks = this.blocks;
1493
+ let blocksCount = blockNames.length;
1494
+ let blocksBase = positionalBase - blocksCount * 3;
1495
+ blocks.setup(stack, blocksBase, blocksCount, blockNames);
1496
+ }
1497
+ get base() {
1498
+ return this.blocks.base;
1499
+ }
1500
+ get length() {
1501
+ return this.positional.length + this.named.length + this.blocks.length * 3;
1502
+ }
1503
+ at(pos) {
1504
+ return this.positional.at(pos);
1505
+ }
1506
+ realloc(offset) {
1507
+ let {
1508
+ stack
1509
+ } = this;
1510
+ if (offset > 0 && stack !== null) {
1511
+ let {
1512
+ positional,
1513
+ named
1514
+ } = this;
1515
+ let newBase = positional.base + offset;
1516
+ let length = positional.length + named.length;
1517
+ for (let i = length - 1; i >= 0; i--) {
1518
+ stack.copy(i + positional.base, i + newBase);
1519
+ }
1520
+ positional.base += offset;
1521
+ named.base += offset;
1522
+ stack.registers[$sp] += offset;
1523
+ }
1524
+ }
1525
+ capture() {
1526
+ let positional = this.positional.length === 0 ? EMPTY_POSITIONAL : this.positional.capture();
1527
+ let named = this.named.length === 0 ? EMPTY_NAMED : this.named.capture();
1528
+ return {
1529
+ named,
1530
+ positional
1531
+ };
1532
+ }
1533
+ clear() {
1534
+ let {
1535
+ stack,
1536
+ length
1537
+ } = this;
1538
+ if (length > 0 && stack !== null) stack.pop(length);
1539
+ }
1540
+ }
1541
+ const EMPTY_REFERENCES = emptyArray();
1542
+ class PositionalArgumentsImpl {
1543
+ base = 0;
1544
+ length = 0;
1545
+ stack = null;
1546
+ _references = null;
1547
+ constructor() {
1548
+ setLocalDebugType('args:positional', this);
1549
+ }
1550
+ empty(stack, base) {
1551
+ this.stack = stack;
1552
+ this.base = base;
1553
+ this.length = 0;
1554
+ this._references = EMPTY_REFERENCES;
1555
+ }
1556
+ setup(stack, base, length) {
1557
+ this.stack = stack;
1558
+ this.base = base;
1559
+ this.length = length;
1560
+ if (length === 0) {
1561
+ this._references = EMPTY_REFERENCES;
1562
+ } else {
1563
+ this._references = null;
1564
+ }
1565
+ }
1566
+ at(position) {
1567
+ let {
1568
+ base,
1569
+ length,
1570
+ stack
1571
+ } = this;
1572
+ if (position < 0 || position >= length) {
1573
+ return UNDEFINED_REFERENCE;
1574
+ }
1575
+
1576
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- @fixme
1577
+ return check(stack.get(position, base));
1578
+ }
1579
+ capture() {
1580
+ return this.references;
1581
+ }
1582
+ prepend(other) {
1583
+ let additions = other.length;
1584
+ if (additions > 0) {
1585
+ let {
1586
+ base,
1587
+ length,
1588
+ stack
1589
+ } = this;
1590
+ this.base = base = base - additions;
1591
+ this.length = length + additions;
1592
+ for (let i = 0; i < additions; i++) {
1593
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- @fixme
1594
+ stack.set(other[i], i, base);
1595
+ }
1596
+ this._references = null;
1597
+ }
1598
+ }
1599
+ get references() {
1600
+ let references = this._references;
1601
+ if (!references) {
1602
+ let {
1603
+ stack,
1604
+ base,
1605
+ length
1606
+ } = this;
1607
+
1608
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- @fixme
1609
+ references = this._references = stack.slice(base, base + length);
1610
+ }
1611
+ return references;
1612
+ }
1613
+ }
1614
+ class NamedArgumentsImpl {
1615
+ base = 0;
1616
+ length = 0;
1617
+ _references = null;
1618
+ _names = EMPTY_STRING_ARRAY;
1619
+ _atNames = EMPTY_STRING_ARRAY;
1620
+ constructor() {
1621
+ setLocalDebugType('args:named', this);
1622
+ }
1623
+ empty(stack, base) {
1624
+ this.stack = stack;
1625
+ this.base = base;
1626
+ this.length = 0;
1627
+ this._references = EMPTY_REFERENCES;
1628
+ this._names = EMPTY_STRING_ARRAY;
1629
+ this._atNames = EMPTY_STRING_ARRAY;
1630
+ }
1631
+ setup(stack, base, length, names, atNames) {
1632
+ this.stack = stack;
1633
+ this.base = base;
1634
+ this.length = length;
1635
+ if (length === 0) {
1636
+ this._references = EMPTY_REFERENCES;
1637
+ this._names = EMPTY_STRING_ARRAY;
1638
+ this._atNames = EMPTY_STRING_ARRAY;
1639
+ } else {
1640
+ this._references = null;
1641
+ if (atNames) {
1642
+ this._names = null;
1643
+ this._atNames = names;
1644
+ } else {
1645
+ this._names = names;
1646
+ this._atNames = null;
1647
+ }
1648
+ }
1649
+ }
1650
+ get names() {
1651
+ let names = this._names;
1652
+ if (!names) {
1653
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- @fixme
1654
+ names = this._names = this._atNames.map(this.toSyntheticName);
1655
+ }
1656
+ return names;
1657
+ }
1658
+ get atNames() {
1659
+ let atNames = this._atNames;
1660
+ if (!atNames) {
1661
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- @fixme
1662
+ atNames = this._atNames = this._names.map(this.toAtName);
1663
+ }
1664
+ return atNames;
1665
+ }
1666
+ has(name) {
1667
+ return this.names.indexOf(name) !== -1;
1668
+ }
1669
+ get(name, atNames = false) {
1670
+ let {
1671
+ base,
1672
+ stack
1673
+ } = this;
1674
+ let names = atNames ? this.atNames : this.names;
1675
+ let idx = names.indexOf(name);
1676
+ if (idx === -1) {
1677
+ return UNDEFINED_REFERENCE;
1678
+ }
1679
+ let ref = stack.get(idx, base);
1680
+ {
1681
+ return ref;
1682
+ }
1683
+ }
1684
+ capture() {
1685
+ let {
1686
+ names,
1687
+ references
1688
+ } = this;
1689
+ let map = dict();
1690
+ for (const [i, name] of enumerate(names)) {
1691
+ {
1692
+ map[name] = unwrap(references[i]);
1693
+ }
1694
+ }
1695
+ return map;
1696
+ }
1697
+ merge(other) {
1698
+ let keys = Object.keys(other);
1699
+ if (keys.length > 0) {
1700
+ let {
1701
+ names,
1702
+ length,
1703
+ stack
1704
+ } = this;
1705
+ let newNames = names.slice();
1706
+ for (const name of keys) {
1707
+ let idx = newNames.indexOf(name);
1708
+ if (idx === -1) {
1709
+ length = newNames.push(name);
1710
+ stack.push(other[name]);
1711
+ }
1712
+ }
1713
+ this.length = length;
1714
+ this._references = null;
1715
+ this._names = newNames;
1716
+ this._atNames = null;
1717
+ }
1718
+ }
1719
+ get references() {
1720
+ let references = this._references;
1721
+ if (!references) {
1722
+ let {
1723
+ base,
1724
+ length,
1725
+ stack
1726
+ } = this;
1727
+ references = this._references = stack.slice(base, base + length);
1728
+ }
1729
+ return references;
1730
+ }
1731
+ toSyntheticName(name) {
1732
+ return name.slice(1);
1733
+ }
1734
+ toAtName(name) {
1735
+ return `@${name}`;
1736
+ }
1737
+ }
1738
+ function toSymbolName(name) {
1739
+ return `&${name}`;
1740
+ }
1741
+ const EMPTY_BLOCK_VALUES = emptyArray();
1742
+ class BlockArgumentsImpl {
1743
+ internalValues = null;
1744
+ _symbolNames = null;
1745
+ internalTag = null;
1746
+ names = EMPTY_STRING_ARRAY;
1747
+ length = 0;
1748
+ base = 0;
1749
+ constructor() {
1750
+ setLocalDebugType('args:blocks', this);
1751
+ }
1752
+ empty(stack, base) {
1753
+ this.stack = stack;
1754
+ this.names = EMPTY_STRING_ARRAY;
1755
+ this.base = base;
1756
+ this.length = 0;
1757
+ this._symbolNames = null;
1758
+ this.internalTag = CONSTANT_TAG;
1759
+ this.internalValues = EMPTY_BLOCK_VALUES;
1760
+ }
1761
+ setup(stack, base, length, names) {
1762
+ this.stack = stack;
1763
+ this.names = names;
1764
+ this.base = base;
1765
+ this.length = length;
1766
+ this._symbolNames = null;
1767
+ if (length === 0) {
1768
+ this.internalTag = CONSTANT_TAG;
1769
+ this.internalValues = EMPTY_BLOCK_VALUES;
1770
+ } else {
1771
+ this.internalTag = null;
1772
+ this.internalValues = null;
1773
+ }
1774
+ }
1775
+ get values() {
1776
+ let values = this.internalValues;
1777
+ if (!values) {
1778
+ let {
1779
+ base,
1780
+ length,
1781
+ stack
1782
+ } = this;
1783
+ values = this.internalValues = stack.slice(base, base + length * 3);
1784
+ }
1785
+ return values;
1786
+ }
1787
+ has(name) {
1788
+ return this.names.indexOf(name) !== -1;
1789
+ }
1790
+ get(name) {
1791
+ let idx = this.names.indexOf(name);
1792
+ if (idx === -1) {
1793
+ return null;
1794
+ }
1795
+ let {
1796
+ base,
1797
+ stack
1798
+ } = this;
1799
+ let table = check(stack.get(idx * 3, base));
1800
+ let scope = check(stack.get(idx * 3 + 1, base));
1801
+ let handle = check(stack.get(idx * 3 + 2, base));
1802
+ return handle === null ? null : [handle, scope, table];
1803
+ }
1804
+ capture() {
1805
+ return new CapturedBlockArgumentsImpl(this.names, this.values);
1806
+ }
1807
+ get symbolNames() {
1808
+ let symbolNames = this._symbolNames;
1809
+ if (symbolNames === null) {
1810
+ symbolNames = this._symbolNames = this.names.map(toSymbolName);
1811
+ }
1812
+ return symbolNames;
1813
+ }
1814
+ }
1815
+ class CapturedBlockArgumentsImpl {
1816
+ length;
1817
+ constructor(names, values) {
1818
+ this.names = names;
1819
+ this.values = values;
1820
+ this.length = names.length;
1821
+ }
1822
+ has(name) {
1823
+ return this.names.indexOf(name) !== -1;
1824
+ }
1825
+ get(name) {
1826
+ let idx = this.names.indexOf(name);
1827
+ if (idx === -1) return null;
1828
+ return [this.values[idx * 3 + 2], this.values[idx * 3 + 1], this.values[idx * 3]];
1829
+ }
1830
+ }
1831
+ function createCapturedArgs(named, positional) {
1832
+ return {
1833
+ named,
1834
+ positional
1835
+ };
1836
+ }
1837
+ function reifyNamed(named) {
1838
+ let reified = dict();
1839
+ for (const [key, value] of Object.entries(named)) {
1840
+ reified[key] = valueForRef(value);
1841
+ }
1842
+ return reified;
1843
+ }
1844
+ function reifyPositional(positional) {
1845
+ return positional.map(valueForRef);
1846
+ }
1847
+ function reifyArgs(args) {
1848
+ return {
1849
+ named: reifyNamed(args.named),
1850
+ positional: reifyPositional(args.positional)
1851
+ };
1852
+ }
1853
+ const ARGUMENT_ERROR = Symbol('ARGUMENT_ERROR');
1854
+ function isArgumentError(arg) {
1855
+ return arg !== null && typeof arg === 'object' && arg[ARGUMENT_ERROR];
1856
+ }
1857
+
1858
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1859
+ function ArgumentErrorImpl(error) {
1860
+ return {
1861
+ [ARGUMENT_ERROR]: true,
1862
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
1863
+ error
1864
+ };
1865
+ }
1866
+ function reifyNamedDebug(named) {
1867
+ let reified = dict();
1868
+ for (const [key, value] of Object.entries(named)) {
1869
+ try {
1870
+ reified[key] = valueForRef(value);
1871
+ } catch (e) {
1872
+ reified[key] = ArgumentErrorImpl(e);
1873
+ }
1874
+ }
1875
+ return reified;
1876
+ }
1877
+ function reifyPositionalDebug(positional) {
1878
+ return positional.map(p => {
1879
+ try {
1880
+ return valueForRef(p);
1881
+ } catch (e) {
1882
+ return ArgumentErrorImpl(e);
1883
+ }
1884
+ });
1885
+ }
1886
+ function reifyArgsDebug(args) {
1887
+ let named = reifyNamedDebug(args.named);
1888
+ let positional = reifyPositionalDebug(args.positional);
1889
+ return {
1890
+ named,
1891
+ positional
1892
+ };
1893
+ }
1894
+ const EMPTY_NAMED = Object.freeze(Object.create(null));
1895
+ const EMPTY_POSITIONAL = EMPTY_REFERENCES;
1896
+ const EMPTY_ARGS = createCapturedArgs(EMPTY_NAMED, EMPTY_POSITIONAL);
1897
+
1898
+ let GUID = 0;
1899
+ class Ref {
1900
+ id = GUID++;
1901
+ value;
1902
+ constructor(value) {
1903
+ this.value = value;
1904
+ }
1905
+ get() {
1906
+ return this.value;
1907
+ }
1908
+ release() {
1909
+ this.value = null;
1910
+ }
1911
+ toString() {
1912
+ let label = `Ref ${this.id}`;
1913
+ if (this.value === null) {
1914
+ return `${label} (released)`;
1915
+ } else {
1916
+ try {
1917
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
1918
+ return `${label}: ${this.value}`;
1919
+ } catch {
1920
+ return label;
1921
+ }
1922
+ }
1923
+ }
1924
+ }
1925
+ class DebugRenderTreeImpl {
1926
+ stack = new StackImpl();
1927
+ refs = new WeakMap();
1928
+ roots = new Set();
1929
+ nodes = new WeakMap();
1930
+ begin() {
1931
+ this.reset();
1932
+ }
1933
+ create(state, node) {
1934
+ let internalNode = assign({}, node, {
1935
+ bounds: null,
1936
+ refs: new Set()
1937
+ });
1938
+ this.nodes.set(state, internalNode);
1939
+ this.appendChild(internalNode, state);
1940
+ this.enter(state);
1941
+ }
1942
+ update(state) {
1943
+ this.enter(state);
1944
+ }
1945
+ didRender(state, bounds) {
1946
+ this.nodeFor(state).bounds = bounds;
1947
+ this.exit();
1948
+ }
1949
+ willDestroy(state) {
1950
+ expect(this.refs.get(state)).release();
1951
+ }
1952
+ commit() {
1953
+ this.reset();
1954
+ }
1955
+ capture() {
1956
+ return this.captureRefs(this.roots);
1957
+ }
1958
+ reset() {
1959
+ if (this.stack.size !== 0) {
1960
+ // We probably encountered an error during the rendering loop. This will
1961
+ // likely trigger undefined behavior and memory leaks as the error left
1962
+ // things in an inconsistent state. It is recommended that the user
1963
+ // refresh the page.
1964
+
1965
+ // TODO: We could warn here? But this happens all the time in our tests?
1966
+
1967
+ // Clean up the root reference to prevent errors from happening if we
1968
+ // attempt to capture the render tree (Ember Inspector may do this)
1969
+ let root = expect(this.stack.toArray()[0]);
1970
+ let ref = this.refs.get(root);
1971
+ if (ref !== undefined) {
1972
+ this.roots.delete(ref);
1973
+ }
1974
+ while (!this.stack.isEmpty()) {
1975
+ this.stack.pop();
1976
+ }
1977
+ }
1978
+ }
1979
+ enter(state) {
1980
+ this.stack.push(state);
1981
+ }
1982
+ exit() {
1983
+ this.stack.pop();
1984
+ }
1985
+ nodeFor(state) {
1986
+ return expect(this.nodes.get(state));
1987
+ }
1988
+ appendChild(node, state) {
1989
+ let parent = this.stack.current;
1990
+ let ref = new Ref(state);
1991
+ this.refs.set(state, ref);
1992
+ if (parent) {
1993
+ let parentNode = this.nodeFor(parent);
1994
+ parentNode.refs.add(ref);
1995
+ node.parent = parentNode;
1996
+ } else {
1997
+ this.roots.add(ref);
1998
+ }
1999
+ }
2000
+ captureRefs(refs) {
2001
+ let captured = [];
2002
+ refs.forEach(ref => {
2003
+ let state = ref.get();
2004
+ if (state) {
2005
+ captured.push(this.captureNode(`render-node:${ref.id}`, state));
2006
+ } else {
2007
+ refs.delete(ref);
2008
+ }
2009
+ });
2010
+ return captured;
2011
+ }
2012
+ captureNode(id, state) {
2013
+ let node = this.nodeFor(state);
2014
+ let {
2015
+ type,
2016
+ name,
2017
+ args,
2018
+ instance,
2019
+ refs
2020
+ } = node;
2021
+ let bounds = this.captureBounds(node);
2022
+ let children = this.captureRefs(refs);
2023
+ return {
2024
+ id,
2025
+ type,
2026
+ name,
2027
+ args: reifyArgsDebug(args),
2028
+ instance,
2029
+ bounds,
2030
+ children
2031
+ };
2032
+ }
2033
+ captureBounds(node) {
2034
+ let bounds = expect(node.bounds);
2035
+ let parentElement = bounds.parentElement();
2036
+ let firstNode = bounds.firstNode();
2037
+ let lastNode = bounds.lastNode();
2038
+ return {
2039
+ parentElement,
2040
+ firstNode,
2041
+ lastNode
2042
+ };
2043
+ }
2044
+ }
2045
+ function getDebugName(definition, manager = definition.manager) {
2046
+ return definition.resolvedName ?? definition.debugName ?? manager.getDebugName(definition.state);
2047
+ }
2048
+
2049
+ export { APPEND_OPCODES as A, BeginTrackFrameOpcode as B, CurriedValue as C, DebugRenderTreeImpl as D, EMPTY_ARGS as E, JumpIfNotModifiedOpcode as J, VMArgumentsImpl as V, EMPTY_NAMED as a, EMPTY_POSITIONAL as b, createCapturedArgs as c, curry as d, reifyNamed as e, reifyPositional as f, check as g, isCurriedType as h, isArgumentError as i, resolveCurriedValue as j, AssertFilter as k, externs as l, EndTrackFrameOpcode as m, reifyArgs as r };