@alloy-js/core 0.23.0-dev.9 → 0.23.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (964) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/api-extractor.json +1 -8
  3. package/api-extractor.testing.json +19 -0
  4. package/dist/dev/src/binder.js +595 -0
  5. package/dist/dev/src/binder.js.map +1 -0
  6. package/dist/dev/src/code.js +181 -0
  7. package/dist/dev/src/code.js.map +1 -0
  8. package/dist/dev/src/components/AccessExpression.js +230 -0
  9. package/dist/dev/src/components/AccessExpression.js.map +1 -0
  10. package/dist/dev/src/components/AccessExpression.test.js +237 -0
  11. package/dist/dev/src/components/AccessExpression.test.js.map +1 -0
  12. package/dist/dev/src/components/AppendFile.js +246 -0
  13. package/dist/dev/src/components/AppendFile.js.map +1 -0
  14. package/dist/dev/src/components/Block.js +78 -0
  15. package/dist/dev/src/components/Block.js.map +1 -0
  16. package/dist/dev/src/components/CopyFile.js +16 -0
  17. package/dist/dev/src/components/CopyFile.js.map +1 -0
  18. package/dist/dev/src/components/Declaration.js +70 -0
  19. package/dist/dev/src/components/Declaration.js.map +1 -0
  20. package/dist/dev/src/components/For.js +40 -0
  21. package/dist/dev/src/components/For.js.map +1 -0
  22. package/dist/dev/src/components/Indent.js +37 -0
  23. package/dist/dev/src/components/Indent.js.map +1 -0
  24. package/dist/dev/src/components/List.js +29 -0
  25. package/dist/dev/src/components/List.js.map +1 -0
  26. package/dist/dev/src/components/MemberDeclaration.js +70 -0
  27. package/dist/dev/src/components/MemberDeclaration.js.map +1 -0
  28. package/dist/dev/src/components/MemberName.js +18 -0
  29. package/dist/dev/src/components/MemberName.js.map +1 -0
  30. package/dist/dev/src/components/MemberScope.js +62 -0
  31. package/dist/dev/src/components/MemberScope.js.map +1 -0
  32. package/dist/dev/src/components/Name.js +11 -0
  33. package/dist/dev/src/components/Name.js.map +1 -0
  34. package/dist/dev/src/components/Output.js +72 -0
  35. package/dist/dev/src/components/Output.js.map +1 -0
  36. package/dist/dev/src/components/Prose.js +32 -0
  37. package/dist/dev/src/components/Prose.js.map +1 -0
  38. package/dist/dev/src/components/ReferenceOrContent.js +12 -0
  39. package/dist/dev/src/components/ReferenceOrContent.js.map +1 -0
  40. package/dist/dev/src/components/Scope.js +56 -0
  41. package/dist/dev/src/components/Scope.js.map +1 -0
  42. package/dist/dev/src/components/Show.js +4 -0
  43. package/dist/dev/src/components/Show.js.map +1 -0
  44. package/dist/dev/src/components/SourceDirectory.js +41 -0
  45. package/dist/dev/src/components/SourceDirectory.js.map +1 -0
  46. package/dist/dev/src/components/SourceFile.js +52 -0
  47. package/dist/dev/src/components/SourceFile.js.map +1 -0
  48. package/dist/dev/src/components/StatementList.js +20 -0
  49. package/dist/dev/src/components/StatementList.js.map +1 -0
  50. package/dist/dev/src/components/Switch.js +42 -0
  51. package/dist/dev/src/components/Switch.js.map +1 -0
  52. package/dist/dev/src/components/TemplateFile.js +153 -0
  53. package/dist/dev/src/components/TemplateFile.js.map +1 -0
  54. package/dist/dev/src/components/UpdateFile.js +71 -0
  55. package/dist/dev/src/components/UpdateFile.js.map +1 -0
  56. package/dist/dev/src/components/Wrap.js +18 -0
  57. package/dist/dev/src/components/Wrap.js.map +1 -0
  58. package/dist/dev/src/components/index.js +25 -0
  59. package/dist/dev/src/components/index.js.map +1 -0
  60. package/dist/dev/src/components/stc/index.js +27 -0
  61. package/dist/dev/src/components/stc/index.js.map +1 -0
  62. package/dist/dev/src/components/stc/sti.js +10 -0
  63. package/dist/dev/src/components/stc/sti.js.map +1 -0
  64. package/dist/dev/src/content-slot.js +78 -0
  65. package/dist/dev/src/content-slot.js.map +1 -0
  66. package/dist/dev/src/content-slot.test.js +89 -0
  67. package/dist/dev/src/content-slot.test.js.map +1 -0
  68. package/dist/dev/src/context/assignment.js +46 -0
  69. package/dist/dev/src/context/assignment.js.map +1 -0
  70. package/dist/dev/src/context/binder.js +17 -0
  71. package/dist/dev/src/context/binder.js.map +1 -0
  72. package/dist/dev/src/context/declaration.js +3 -0
  73. package/dist/dev/src/context/declaration.js.map +1 -0
  74. package/dist/dev/src/context/format-options.js +45 -0
  75. package/dist/dev/src/context/format-options.js.map +1 -0
  76. package/dist/dev/src/context/index.js +11 -0
  77. package/dist/dev/src/context/index.js.map +1 -0
  78. package/dist/dev/src/context/member-declaration.js +11 -0
  79. package/dist/dev/src/context/member-declaration.js.map +1 -0
  80. package/dist/dev/src/context/member-scope.js +12 -0
  81. package/dist/dev/src/context/member-scope.js.map +1 -0
  82. package/dist/dev/src/context/name-policy.js +13 -0
  83. package/dist/dev/src/context/name-policy.js.map +1 -0
  84. package/dist/dev/src/context/scope.js +18 -0
  85. package/dist/dev/src/context/scope.js.map +1 -0
  86. package/dist/dev/src/context/source-directory.js +12 -0
  87. package/dist/dev/src/context/source-directory.js.map +1 -0
  88. package/dist/dev/src/context/source-file.js +3 -0
  89. package/dist/dev/src/context/source-file.js.map +1 -0
  90. package/dist/dev/src/context.js +47 -0
  91. package/dist/dev/src/context.js.map +1 -0
  92. package/dist/dev/src/debug/cli.browser.js +14 -0
  93. package/dist/dev/src/debug/cli.browser.js.map +1 -0
  94. package/dist/dev/src/debug/cli.js +164 -0
  95. package/dist/dev/src/debug/cli.js.map +1 -0
  96. package/dist/dev/src/debug/diagnostics-broadcast.test.js +100 -0
  97. package/dist/dev/src/debug/diagnostics-broadcast.test.js.map +1 -0
  98. package/dist/dev/src/debug/diagnostics.test.js +50 -0
  99. package/dist/dev/src/debug/diagnostics.test.js.map +1 -0
  100. package/dist/dev/src/debug/effects.js +293 -0
  101. package/dist/dev/src/debug/effects.js.map +1 -0
  102. package/dist/dev/src/debug/effects.test.js +280 -0
  103. package/dist/dev/src/debug/effects.test.js.map +1 -0
  104. package/dist/dev/src/debug/files.js +29 -0
  105. package/dist/dev/src/debug/files.js.map +1 -0
  106. package/dist/dev/src/debug/files.test.js +78 -0
  107. package/dist/dev/src/debug/files.test.js.map +1 -0
  108. package/dist/dev/src/debug/index.js +71 -0
  109. package/dist/dev/src/debug/index.js.map +1 -0
  110. package/dist/dev/src/debug/message-format.test.js +836 -0
  111. package/dist/dev/src/debug/message-format.test.js.map +1 -0
  112. package/dist/dev/src/debug/render-tree-orphans.test.js +365 -0
  113. package/dist/dev/src/debug/render-tree-orphans.test.js.map +1 -0
  114. package/dist/dev/src/debug/render.js +479 -0
  115. package/dist/dev/src/debug/render.js.map +1 -0
  116. package/dist/dev/src/debug/render.test.js +363 -0
  117. package/dist/dev/src/debug/render.test.js.map +1 -0
  118. package/dist/dev/src/debug/serialize.js +70 -0
  119. package/dist/dev/src/debug/serialize.js.map +1 -0
  120. package/dist/dev/src/debug/source-map.browser.js +24 -0
  121. package/dist/dev/src/debug/source-map.browser.js.map +1 -0
  122. package/dist/dev/src/debug/source-map.js +111 -0
  123. package/dist/dev/src/debug/source-map.js.map +1 -0
  124. package/dist/dev/src/debug/symbols.js +196 -0
  125. package/dist/dev/src/debug/symbols.js.map +1 -0
  126. package/dist/dev/src/debug/symbols.test.js +93 -0
  127. package/dist/dev/src/debug/symbols.test.js.map +1 -0
  128. package/dist/dev/src/debug/trace-db.browser.js +11 -0
  129. package/dist/dev/src/debug/trace-db.browser.js.map +1 -0
  130. package/dist/dev/src/debug/trace-db.js +40 -0
  131. package/dist/dev/src/debug/trace-db.js.map +1 -0
  132. package/dist/dev/src/debug/trace-writer.js +653 -0
  133. package/dist/dev/src/debug/trace-writer.js.map +1 -0
  134. package/dist/dev/src/debug/trace.js +460 -0
  135. package/dist/dev/src/debug/trace.js.map +1 -0
  136. package/dist/dev/src/devtools/devtools-protocol.js +2 -0
  137. package/dist/dev/src/devtools/devtools-protocol.js.map +1 -0
  138. package/dist/dev/src/devtools/devtools-server.browser.js +36 -0
  139. package/dist/dev/src/devtools/devtools-server.browser.js.map +1 -0
  140. package/dist/dev/src/devtools/devtools-server.js +458 -0
  141. package/dist/dev/src/devtools/devtools-server.js.map +1 -0
  142. package/dist/dev/src/devtools/devtools-transport.js +114 -0
  143. package/dist/dev/src/devtools/devtools-transport.js.map +1 -0
  144. package/dist/dev/src/devtools-entry.browser.js +2 -0
  145. package/dist/dev/src/devtools-entry.browser.js.map +1 -0
  146. package/dist/dev/src/devtools-entry.js +2 -0
  147. package/dist/dev/src/devtools-entry.js.map +1 -0
  148. package/dist/dev/src/diagnostics.js +97 -0
  149. package/dist/dev/src/diagnostics.js.map +1 -0
  150. package/dist/dev/src/host/alloy-host.browser.js +32 -0
  151. package/dist/dev/src/host/alloy-host.browser.js.map +1 -0
  152. package/dist/dev/src/host/alloy-host.js +144 -0
  153. package/dist/dev/src/host/alloy-host.js.map +1 -0
  154. package/dist/dev/src/host/interface.js +2 -0
  155. package/dist/dev/src/host/interface.js.map +1 -0
  156. package/dist/dev/src/host/node-host.browser.js +21 -0
  157. package/dist/dev/src/host/node-host.browser.js.map +1 -0
  158. package/dist/dev/src/host/node-host.js +20 -0
  159. package/dist/dev/src/host/node-host.js.map +1 -0
  160. package/dist/dev/src/index.browser.js +3 -0
  161. package/dist/dev/src/index.browser.js.map +1 -0
  162. package/dist/dev/src/index.js +27 -0
  163. package/dist/dev/src/index.js.map +1 -0
  164. package/dist/dev/src/inspect.browser.js +6 -0
  165. package/dist/dev/src/inspect.browser.js.map +1 -0
  166. package/dist/dev/src/inspect.js +2 -0
  167. package/dist/dev/src/inspect.js.map +1 -0
  168. package/dist/dev/src/jsx-runtime.js +17 -0
  169. package/dist/dev/src/jsx-runtime.js.map +1 -0
  170. package/dist/dev/src/library-symbol-reference.js +59 -0
  171. package/dist/dev/src/library-symbol-reference.js.map +1 -0
  172. package/dist/dev/src/name-policy.js +51 -0
  173. package/dist/dev/src/name-policy.js.map +1 -0
  174. package/dist/dev/src/pretty-string/pretty-string.js +100 -0
  175. package/dist/dev/src/pretty-string/pretty-string.js.map +1 -0
  176. package/dist/dev/src/pretty-string/pretty-string.test.js +38 -0
  177. package/dist/dev/src/pretty-string/pretty-string.test.js.map +1 -0
  178. package/dist/dev/src/print-hook.js +10 -0
  179. package/dist/dev/src/print-hook.js.map +1 -0
  180. package/dist/dev/src/props-combinators.js +109 -0
  181. package/dist/dev/src/props-combinators.js.map +1 -0
  182. package/dist/dev/src/reactive-union-set.js +213 -0
  183. package/dist/dev/src/reactive-union-set.js.map +1 -0
  184. package/dist/dev/src/reactivity.js +452 -0
  185. package/dist/dev/src/reactivity.js.map +1 -0
  186. package/dist/dev/src/refkey.js +167 -0
  187. package/dist/dev/src/refkey.js.map +1 -0
  188. package/dist/dev/src/render-stack.js +252 -0
  189. package/dist/dev/src/render-stack.js.map +1 -0
  190. package/dist/dev/src/render.js +872 -0
  191. package/dist/dev/src/render.js.map +1 -0
  192. package/dist/dev/src/resource.js +124 -0
  193. package/dist/dev/src/resource.js.map +1 -0
  194. package/dist/dev/src/runtime/component.js +41 -0
  195. package/dist/dev/src/runtime/component.js.map +1 -0
  196. package/dist/dev/src/runtime/intrinsic.js +12 -0
  197. package/dist/dev/src/runtime/intrinsic.js.map +1 -0
  198. package/dist/dev/src/scheduler.js +217 -0
  199. package/dist/dev/src/scheduler.js.map +1 -0
  200. package/dist/dev/src/stc.js +40 -0
  201. package/dist/dev/src/stc.js.map +1 -0
  202. package/dist/dev/src/sti.js +31 -0
  203. package/dist/dev/src/sti.js.map +1 -0
  204. package/dist/dev/src/symbols/basic-scope.js +21 -0
  205. package/dist/dev/src/symbols/basic-scope.js.map +1 -0
  206. package/dist/dev/src/symbols/basic-symbol.js +34 -0
  207. package/dist/dev/src/symbols/basic-symbol.js.map +1 -0
  208. package/dist/dev/src/symbols/decl.js +26 -0
  209. package/dist/dev/src/symbols/decl.js.map +1 -0
  210. package/dist/dev/src/symbols/index.js +10 -0
  211. package/dist/dev/src/symbols/index.js.map +1 -0
  212. package/dist/dev/src/symbols/output-scope.js +235 -0
  213. package/dist/dev/src/symbols/output-scope.js.map +1 -0
  214. package/dist/dev/src/symbols/output-space.js +51 -0
  215. package/dist/dev/src/symbols/output-space.js.map +1 -0
  216. package/dist/dev/src/symbols/output-symbol.js +644 -0
  217. package/dist/dev/src/symbols/output-symbol.js.map +1 -0
  218. package/dist/dev/src/symbols/symbol-flow.js +106 -0
  219. package/dist/dev/src/symbols/symbol-flow.js.map +1 -0
  220. package/dist/dev/src/symbols/symbol-slot.js +75 -0
  221. package/dist/dev/src/symbols/symbol-slot.js.map +1 -0
  222. package/dist/dev/src/symbols/symbol-slot.test.js +68 -0
  223. package/dist/dev/src/symbols/symbol-slot.test.js.map +1 -0
  224. package/dist/dev/src/symbols/symbol-table.js +103 -0
  225. package/dist/dev/src/symbols/symbol-table.js.map +1 -0
  226. package/dist/dev/src/tap.js +109 -0
  227. package/dist/dev/src/tap.js.map +1 -0
  228. package/dist/dev/src/trace.js +2 -0
  229. package/dist/dev/src/trace.js.map +1 -0
  230. package/dist/dev/src/tracer.js +180 -0
  231. package/dist/dev/src/tracer.js.map +1 -0
  232. package/dist/dev/src/utils.js +487 -0
  233. package/dist/dev/src/utils.js.map +1 -0
  234. package/dist/dev/src/write-output.js +48 -0
  235. package/dist/dev/src/write-output.js.map +1 -0
  236. package/dist/dev/test/browser-build.test.js +146 -0
  237. package/dist/dev/test/browser-build.test.js.map +1 -0
  238. package/dist/dev/test/children.test.js +44 -0
  239. package/dist/dev/test/children.test.js.map +1 -0
  240. package/dist/dev/test/components/append-file.test.js +394 -0
  241. package/dist/dev/test/components/append-file.test.js.map +1 -0
  242. package/dist/dev/test/components/block.test.js +83 -0
  243. package/dist/dev/test/components/block.test.js.map +1 -0
  244. package/dist/dev/test/components/copy-file.test.js +119 -0
  245. package/dist/dev/test/components/copy-file.test.js.map +1 -0
  246. package/dist/dev/test/components/declaration.test.js +40 -0
  247. package/dist/dev/test/components/declaration.test.js.map +1 -0
  248. package/dist/dev/test/components/list.test.js +250 -0
  249. package/dist/dev/test/components/list.test.js.map +1 -0
  250. package/dist/dev/test/components/prose.test.js +42 -0
  251. package/dist/dev/test/components/prose.test.js.map +1 -0
  252. package/dist/dev/test/components/reference-or-content.test.js +246 -0
  253. package/dist/dev/test/components/reference-or-content.test.js.map +1 -0
  254. package/dist/dev/test/components/source-file.test.js +271 -0
  255. package/dist/dev/test/components/source-file.test.js.map +1 -0
  256. package/dist/dev/test/components/template-file.test.js +200 -0
  257. package/dist/dev/test/components/template-file.test.js.map +1 -0
  258. package/dist/dev/test/components/update-file.test.js +210 -0
  259. package/dist/dev/test/components/update-file.test.js.map +1 -0
  260. package/dist/dev/test/components/wrap.test.js +48 -0
  261. package/dist/dev/test/components/wrap.test.js.map +1 -0
  262. package/dist/dev/test/control-flow/for.test.js +318 -0
  263. package/dist/dev/test/control-flow/for.test.js.map +1 -0
  264. package/dist/dev/test/control-flow/match.test.js +112 -0
  265. package/dist/dev/test/control-flow/match.test.js.map +1 -0
  266. package/dist/dev/test/control-flow/show.test.js +38 -0
  267. package/dist/dev/test/control-flow/show.test.js.map +1 -0
  268. package/dist/dev/test/lazy-isempty.test.js +121 -0
  269. package/dist/dev/test/lazy-isempty.test.js.map +1 -0
  270. package/dist/dev/test/name-policy.test.js +28 -0
  271. package/dist/dev/test/name-policy.test.js.map +1 -0
  272. package/dist/dev/test/props-with-defaults.test.js +94 -0
  273. package/dist/dev/test/props-with-defaults.test.js.map +1 -0
  274. package/dist/dev/test/reactive-union-set-disposers.test.js +98 -0
  275. package/dist/dev/test/reactive-union-set-disposers.test.js.map +1 -0
  276. package/dist/dev/test/reactive-union-set.test.js +171 -0
  277. package/dist/dev/test/reactive-union-set.test.js.map +1 -0
  278. package/dist/dev/test/reactivity/circular-reactives.test.js +62 -0
  279. package/dist/dev/test/reactivity/circular-reactives.test.js.map +1 -0
  280. package/dist/dev/test/reactivity/cleanup.test.js +96 -0
  281. package/dist/dev/test/reactivity/cleanup.test.js.map +1 -0
  282. package/dist/dev/test/reactivity/memo.test.js +17 -0
  283. package/dist/dev/test/reactivity/memo.test.js.map +1 -0
  284. package/dist/dev/test/reactivity/ref-rendering.test.js +38 -0
  285. package/dist/dev/test/reactivity/ref-rendering.test.js.map +1 -0
  286. package/dist/dev/test/reactivity/shallow-reactive.test.js +56 -0
  287. package/dist/dev/test/reactivity/shallow-reactive.test.js.map +1 -0
  288. package/dist/dev/test/reactivity/test.test.js +74 -0
  289. package/dist/dev/test/reactivity/test.test.js.map +1 -0
  290. package/dist/dev/test/reactivity/untrack.test.js +27 -0
  291. package/dist/dev/test/reactivity/untrack.test.js.map +1 -0
  292. package/dist/dev/test/refkey.test.js +36 -0
  293. package/dist/dev/test/refkey.test.js.map +1 -0
  294. package/dist/dev/test/rendering/basic.test.js +194 -0
  295. package/dist/dev/test/rendering/basic.test.js.map +1 -0
  296. package/dist/dev/test/rendering/code.test.js +64 -0
  297. package/dist/dev/test/rendering/code.test.js.map +1 -0
  298. package/dist/dev/test/rendering/formatting.test.js +797 -0
  299. package/dist/dev/test/rendering/formatting.test.js.map +1 -0
  300. package/dist/dev/test/rendering/indent.test.js +183 -0
  301. package/dist/dev/test/rendering/indent.test.js.map +1 -0
  302. package/dist/dev/test/rendering/memoization.test.js +37 -0
  303. package/dist/dev/test/rendering/memoization.test.js.map +1 -0
  304. package/dist/dev/test/rendering/print-render-stack.test.js +287 -0
  305. package/dist/dev/test/rendering/print-render-stack.test.js.map +1 -0
  306. package/dist/dev/test/rendering/refkeys.test.js +37 -0
  307. package/dist/dev/test/rendering/refkeys.test.js.map +1 -0
  308. package/dist/dev/test/scheduler-extended.test.js +96 -0
  309. package/dist/dev/test/scheduler-extended.test.js.map +1 -0
  310. package/dist/dev/test/scheduler.test.js +46 -0
  311. package/dist/dev/test/scheduler.test.js.map +1 -0
  312. package/dist/dev/test/split-props.test.js +78 -0
  313. package/dist/dev/test/split-props.test.js.map +1 -0
  314. package/dist/dev/test/stc.test.js +35 -0
  315. package/dist/dev/test/stc.test.js.map +1 -0
  316. package/dist/dev/test/symbols/deconflicted-name.test.js +120 -0
  317. package/dist/dev/test/symbols/deconflicted-name.test.js.map +1 -0
  318. package/dist/dev/test/symbols/output-scope.test.js +221 -0
  319. package/dist/dev/test/symbols/output-scope.test.js.map +1 -0
  320. package/dist/dev/test/symbols/output-symbol.test.js +202 -0
  321. package/dist/dev/test/symbols/output-symbol.test.js.map +1 -0
  322. package/dist/dev/test/symbols/resolution.test.js +487 -0
  323. package/dist/dev/test/symbols/resolution.test.js.map +1 -0
  324. package/dist/dev/test/symbols/symbol-table.test.js +15 -0
  325. package/dist/dev/test/symbols/symbol-table.test.js.map +1 -0
  326. package/dist/dev/test/symbols/utils.js +26 -0
  327. package/dist/dev/test/symbols/utils.js.map +1 -0
  328. package/dist/dev/test/utils.test.js +317 -0
  329. package/dist/dev/test/utils.test.js.map +1 -0
  330. package/dist/dev/testing/create-test-wrapper.js +130 -0
  331. package/dist/dev/testing/create-test-wrapper.js.map +1 -0
  332. package/dist/dev/testing/devtools-utils.js +162 -0
  333. package/dist/dev/testing/devtools-utils.js.map +1 -0
  334. package/dist/dev/testing/extend-expect.js +187 -0
  335. package/dist/dev/testing/extend-expect.js.map +1 -0
  336. package/dist/dev/testing/extend-expect.test.js +234 -0
  337. package/dist/dev/testing/extend-expect.test.js.map +1 -0
  338. package/dist/dev/testing/index.js +4 -0
  339. package/dist/dev/testing/index.js.map +1 -0
  340. package/dist/dev/testing/render.js +34 -0
  341. package/dist/dev/testing/render.js.map +1 -0
  342. package/dist/dev/testing/vitest.d.js +14 -0
  343. package/dist/dev/testing/vitest.d.js.map +1 -0
  344. package/dist/devtools/index.html +29 -17
  345. package/dist/src/binder.d.ts +107 -3
  346. package/dist/src/binder.d.ts.map +1 -1
  347. package/dist/src/binder.js +113 -1
  348. package/dist/src/binder.js.map +1 -1
  349. package/dist/src/components/AccessExpression.d.ts +78 -0
  350. package/dist/src/components/AccessExpression.d.ts.map +1 -0
  351. package/dist/src/components/AccessExpression.js +218 -0
  352. package/dist/src/components/AccessExpression.js.map +1 -0
  353. package/dist/src/components/AccessExpression.test.d.ts +2 -0
  354. package/dist/src/components/AccessExpression.test.d.ts.map +1 -0
  355. package/dist/src/components/AccessExpression.test.js +137 -0
  356. package/dist/src/components/AccessExpression.test.js.map +1 -0
  357. package/dist/src/components/Block.d.ts +12 -0
  358. package/dist/src/components/Block.d.ts.map +1 -1
  359. package/dist/src/components/Block.js +12 -0
  360. package/dist/src/components/Block.js.map +1 -1
  361. package/dist/src/components/For.d.ts.map +1 -1
  362. package/dist/src/components/For.js +1 -1
  363. package/dist/src/components/For.js.map +1 -1
  364. package/dist/src/components/List.d.ts +11 -1
  365. package/dist/src/components/List.d.ts.map +1 -1
  366. package/dist/src/components/List.js +1 -1
  367. package/dist/src/components/List.js.map +1 -1
  368. package/dist/src/components/MemberDeclaration.d.ts +6 -6
  369. package/dist/src/components/MemberDeclaration.js +6 -6
  370. package/dist/src/components/MemberName.d.ts +6 -0
  371. package/dist/src/components/MemberName.d.ts.map +1 -1
  372. package/dist/src/components/MemberName.js +7 -0
  373. package/dist/src/components/MemberName.js.map +1 -1
  374. package/dist/src/components/MemberScope.d.ts +5 -0
  375. package/dist/src/components/MemberScope.d.ts.map +1 -1
  376. package/dist/src/components/MemberScope.js +5 -0
  377. package/dist/src/components/MemberScope.js.map +1 -1
  378. package/dist/src/components/Output.d.ts +4 -2
  379. package/dist/src/components/Output.d.ts.map +1 -1
  380. package/dist/src/components/Output.js.map +1 -1
  381. package/dist/src/components/Scope.d.ts +6 -0
  382. package/dist/src/components/Scope.d.ts.map +1 -1
  383. package/dist/src/components/Scope.js +6 -0
  384. package/dist/src/components/Scope.js.map +1 -1
  385. package/dist/src/components/SourceFile.d.ts +22 -2
  386. package/dist/src/components/SourceFile.d.ts.map +1 -1
  387. package/dist/src/components/SourceFile.js.map +1 -1
  388. package/dist/src/components/Switch.d.ts.map +1 -1
  389. package/dist/src/components/Switch.js +1 -1
  390. package/dist/src/components/Switch.js.map +1 -1
  391. package/dist/src/components/index.d.ts +1 -0
  392. package/dist/src/components/index.d.ts.map +1 -1
  393. package/dist/src/components/index.js +1 -0
  394. package/dist/src/components/index.js.map +1 -1
  395. package/dist/src/context/binder.d.ts +4 -0
  396. package/dist/src/context/binder.d.ts.map +1 -1
  397. package/dist/src/context/binder.js +5 -0
  398. package/dist/src/context/binder.js.map +1 -1
  399. package/dist/src/context/format-options.d.ts +14 -1
  400. package/dist/src/context/format-options.d.ts.map +1 -1
  401. package/dist/src/context/format-options.js +14 -1
  402. package/dist/src/context/format-options.js.map +1 -1
  403. package/dist/src/context/scope.d.ts +4 -0
  404. package/dist/src/context/scope.d.ts.map +1 -1
  405. package/dist/src/context/scope.js +5 -0
  406. package/dist/src/context/scope.js.map +1 -1
  407. package/dist/src/context/source-directory.d.ts +9 -0
  408. package/dist/src/context/source-directory.d.ts.map +1 -1
  409. package/dist/src/context/source-directory.js +9 -0
  410. package/dist/src/context/source-directory.js.map +1 -1
  411. package/dist/src/debug/cli.browser.d.ts +13 -0
  412. package/dist/src/debug/cli.browser.d.ts.map +1 -0
  413. package/dist/src/debug/cli.browser.js +14 -0
  414. package/dist/src/debug/cli.browser.js.map +1 -0
  415. package/dist/src/debug/cli.d.ts.map +1 -1
  416. package/dist/src/debug/cli.js +3 -2
  417. package/dist/src/debug/cli.js.map +1 -1
  418. package/dist/src/debug/diagnostics-broadcast.test.d.ts +2 -0
  419. package/dist/src/debug/diagnostics-broadcast.test.d.ts.map +1 -0
  420. package/dist/src/debug/diagnostics-broadcast.test.js +100 -0
  421. package/dist/src/debug/diagnostics-broadcast.test.js.map +1 -0
  422. package/dist/src/debug/diagnostics.test.js +3 -2
  423. package/dist/src/debug/diagnostics.test.js.map +1 -1
  424. package/dist/src/debug/effects.d.ts +12 -4
  425. package/dist/src/debug/effects.d.ts.map +1 -1
  426. package/dist/src/debug/effects.js +119 -54
  427. package/dist/src/debug/effects.js.map +1 -1
  428. package/dist/src/debug/effects.test.js +213 -41
  429. package/dist/src/debug/effects.test.js.map +1 -1
  430. package/dist/src/debug/files.d.ts.map +1 -1
  431. package/dist/src/debug/files.js +7 -18
  432. package/dist/src/debug/files.js.map +1 -1
  433. package/dist/src/debug/files.test.js +13 -36
  434. package/dist/src/debug/files.test.js.map +1 -1
  435. package/dist/src/debug/index.d.ts +4 -2
  436. package/dist/src/debug/index.d.ts.map +1 -1
  437. package/dist/src/debug/index.js +4 -2
  438. package/dist/src/debug/index.js.map +1 -1
  439. package/dist/src/debug/message-format.test.d.ts +2 -0
  440. package/dist/src/debug/message-format.test.d.ts.map +1 -0
  441. package/dist/src/debug/message-format.test.js +700 -0
  442. package/dist/src/debug/message-format.test.js.map +1 -0
  443. package/dist/src/debug/render-tree-orphans.test.d.ts +2 -0
  444. package/dist/src/debug/render-tree-orphans.test.d.ts.map +1 -0
  445. package/dist/src/debug/render-tree-orphans.test.js +297 -0
  446. package/dist/src/debug/render-tree-orphans.test.js.map +1 -0
  447. package/dist/src/debug/render.d.ts.map +1 -1
  448. package/dist/src/debug/render.js +91 -131
  449. package/dist/src/debug/render.js.map +1 -1
  450. package/dist/src/debug/render.test.js +91 -128
  451. package/dist/src/debug/render.test.js.map +1 -1
  452. package/dist/src/debug/source-map.browser.d.ts +16 -0
  453. package/dist/src/debug/source-map.browser.d.ts.map +1 -0
  454. package/dist/src/debug/source-map.browser.js +24 -0
  455. package/dist/src/debug/source-map.browser.js.map +1 -0
  456. package/dist/src/debug/source-map.d.ts +22 -0
  457. package/dist/src/debug/source-map.d.ts.map +1 -0
  458. package/dist/src/debug/source-map.js +111 -0
  459. package/dist/src/debug/source-map.js.map +1 -0
  460. package/dist/src/debug/symbols.d.ts +6 -5
  461. package/dist/src/debug/symbols.d.ts.map +1 -1
  462. package/dist/src/debug/symbols.js +46 -23
  463. package/dist/src/debug/symbols.js.map +1 -1
  464. package/dist/src/debug/symbols.test.js +15 -26
  465. package/dist/src/debug/symbols.test.js.map +1 -1
  466. package/dist/src/debug/trace-db.browser.d.ts +9 -0
  467. package/dist/src/debug/trace-db.browser.d.ts.map +1 -0
  468. package/dist/src/debug/trace-db.browser.js +11 -0
  469. package/dist/src/debug/trace-db.browser.js.map +1 -0
  470. package/dist/src/debug/trace-db.d.ts +16 -0
  471. package/dist/src/debug/trace-db.d.ts.map +1 -0
  472. package/dist/src/debug/trace-db.js +40 -0
  473. package/dist/src/debug/trace-db.js.map +1 -0
  474. package/dist/src/debug/trace-writer.d.ts +56 -0
  475. package/dist/src/debug/trace-writer.d.ts.map +1 -0
  476. package/dist/src/debug/trace-writer.js +653 -0
  477. package/dist/src/debug/trace-writer.js.map +1 -0
  478. package/dist/src/debug/trace.d.ts +10 -10
  479. package/dist/src/debug/trace.d.ts.map +1 -1
  480. package/dist/src/debug/trace.js +41 -24
  481. package/dist/src/debug/trace.js.map +1 -1
  482. package/dist/src/devtools/devtools-protocol.d.ts +318 -161
  483. package/dist/src/devtools/devtools-protocol.d.ts.map +1 -1
  484. package/dist/src/devtools/devtools-server.browser.d.ts +1 -5
  485. package/dist/src/devtools/devtools-server.browser.d.ts.map +1 -1
  486. package/dist/src/devtools/devtools-server.browser.js +3 -3
  487. package/dist/src/devtools/devtools-server.browser.js.map +1 -1
  488. package/dist/src/devtools/devtools-server.d.ts +5 -6
  489. package/dist/src/devtools/devtools-server.d.ts.map +1 -1
  490. package/dist/src/devtools/devtools-server.js +227 -25
  491. package/dist/src/devtools/devtools-server.js.map +1 -1
  492. package/dist/src/devtools/devtools-transport.d.ts +2 -2
  493. package/dist/src/devtools/devtools-transport.d.ts.map +1 -1
  494. package/dist/src/devtools/devtools-transport.js +2 -2
  495. package/dist/src/devtools/devtools-transport.js.map +1 -1
  496. package/dist/src/devtools-entry.browser.d.ts +1 -1
  497. package/dist/src/devtools-entry.browser.d.ts.map +1 -1
  498. package/dist/src/devtools-entry.browser.js.map +1 -1
  499. package/dist/src/devtools-entry.d.ts +1 -1
  500. package/dist/src/devtools-entry.d.ts.map +1 -1
  501. package/dist/src/devtools-entry.js.map +1 -1
  502. package/dist/src/diagnostics.d.ts +1 -1
  503. package/dist/src/diagnostics.d.ts.map +1 -1
  504. package/dist/src/diagnostics.js +27 -19
  505. package/dist/src/diagnostics.js.map +1 -1
  506. package/dist/src/host/node-host.browser.d.ts +11 -0
  507. package/dist/src/host/node-host.browser.d.ts.map +1 -0
  508. package/dist/src/host/node-host.browser.js +21 -0
  509. package/dist/src/host/node-host.browser.js.map +1 -0
  510. package/dist/src/host/node-host.d.ts +11 -0
  511. package/dist/src/host/node-host.d.ts.map +1 -0
  512. package/dist/src/host/node-host.js +20 -0
  513. package/dist/src/host/node-host.js.map +1 -0
  514. package/dist/src/library-symbol-reference.d.ts +52 -0
  515. package/dist/src/library-symbol-reference.d.ts.map +1 -1
  516. package/dist/src/library-symbol-reference.js +54 -0
  517. package/dist/src/library-symbol-reference.js.map +1 -1
  518. package/dist/src/name-policy.d.ts +30 -3
  519. package/dist/src/name-policy.d.ts.map +1 -1
  520. package/dist/src/name-policy.js +27 -0
  521. package/dist/src/name-policy.js.map +1 -1
  522. package/dist/src/reactivity.d.ts +28 -2
  523. package/dist/src/reactivity.d.ts.map +1 -1
  524. package/dist/src/reactivity.js +154 -45
  525. package/dist/src/reactivity.js.map +1 -1
  526. package/dist/src/render-stack.d.ts.map +1 -1
  527. package/dist/src/render-stack.js +4 -3
  528. package/dist/src/render-stack.js.map +1 -1
  529. package/dist/src/render.d.ts +2 -0
  530. package/dist/src/render.d.ts.map +1 -1
  531. package/dist/src/render.js +84 -30
  532. package/dist/src/render.js.map +1 -1
  533. package/dist/src/scheduler.d.ts +5 -0
  534. package/dist/src/scheduler.d.ts.map +1 -1
  535. package/dist/src/scheduler.js +94 -23
  536. package/dist/src/scheduler.js.map +1 -1
  537. package/dist/src/symbols/output-scope.d.ts +33 -1
  538. package/dist/src/symbols/output-scope.d.ts.map +1 -1
  539. package/dist/src/symbols/output-scope.js +34 -1
  540. package/dist/src/symbols/output-scope.js.map +1 -1
  541. package/dist/src/symbols/output-space.d.ts +12 -0
  542. package/dist/src/symbols/output-space.d.ts.map +1 -1
  543. package/dist/src/symbols/output-space.js +15 -0
  544. package/dist/src/symbols/output-space.js.map +1 -1
  545. package/dist/src/symbols/output-symbol.d.ts +128 -12
  546. package/dist/src/symbols/output-symbol.d.ts.map +1 -1
  547. package/dist/src/symbols/output-symbol.js +158 -18
  548. package/dist/src/symbols/output-symbol.js.map +1 -1
  549. package/dist/src/symbols/symbol-slot.d.ts.map +1 -1
  550. package/dist/src/symbols/symbol-slot.js +7 -0
  551. package/dist/src/symbols/symbol-slot.js.map +1 -1
  552. package/dist/src/symbols/symbol-slot.test.js +18 -1
  553. package/dist/src/symbols/symbol-slot.test.js.map +1 -1
  554. package/dist/src/symbols/symbol-table.d.ts.map +1 -1
  555. package/dist/src/symbols/symbol-table.js +13 -3
  556. package/dist/src/symbols/symbol-table.js.map +1 -1
  557. package/dist/src/utils.d.ts.map +1 -1
  558. package/dist/src/utils.js +11 -5
  559. package/dist/src/utils.js.map +1 -1
  560. package/dist/src/write-output.d.ts.map +1 -1
  561. package/dist/src/write-output.js +6 -5
  562. package/dist/src/write-output.js.map +1 -1
  563. package/dist/test/browser-build.test.js +128 -68
  564. package/dist/test/browser-build.test.js.map +1 -1
  565. package/dist/test/reactivity/shallow-reactive.test.js +4 -0
  566. package/dist/test/reactivity/shallow-reactive.test.js.map +1 -1
  567. package/dist/test/symbols/deconflicted-name.test.d.ts +2 -0
  568. package/dist/test/symbols/deconflicted-name.test.d.ts.map +1 -0
  569. package/dist/test/symbols/deconflicted-name.test.js +120 -0
  570. package/dist/test/symbols/deconflicted-name.test.js.map +1 -0
  571. package/dist/test/symbols/output-scope.test.js +41 -0
  572. package/dist/test/symbols/output-scope.test.js.map +1 -1
  573. package/dist/testing/create-test-wrapper.d.ts +75 -2
  574. package/dist/testing/create-test-wrapper.d.ts.map +1 -1
  575. package/dist/testing/create-test-wrapper.js +55 -1
  576. package/dist/testing/create-test-wrapper.js.map +1 -1
  577. package/dist/testing/devtools-utils.d.ts +12 -3
  578. package/dist/testing/devtools-utils.d.ts.map +1 -1
  579. package/dist/testing/devtools-utils.js +26 -4
  580. package/dist/testing/devtools-utils.js.map +1 -1
  581. package/dist/testing/extend-expect.d.ts +26 -0
  582. package/dist/testing/extend-expect.d.ts.map +1 -1
  583. package/dist/testing/extend-expect.js +20 -0
  584. package/dist/testing/extend-expect.js.map +1 -1
  585. package/dist/testing/index.d.ts +1 -1
  586. package/dist/testing/index.d.ts.map +1 -1
  587. package/dist/testing/index.js +1 -1
  588. package/dist/testing/index.js.map +1 -1
  589. package/dist/testing/render.d.ts +9 -0
  590. package/dist/testing/render.d.ts.map +1 -1
  591. package/dist/testing/render.js +11 -0
  592. package/dist/testing/render.js.map +1 -1
  593. package/dist/testing/vitest.d.js +12 -0
  594. package/dist/testing/vitest.d.js.map +1 -1
  595. package/dist/tsconfig.tsbuildinfo +1 -1
  596. package/docs/api/components/AppendRegion.md +83 -0
  597. package/docs/api/components/Block.md +49 -0
  598. package/docs/api/components/CopyFile.md +26 -0
  599. package/docs/api/components/Declaration.md +85 -0
  600. package/docs/api/components/For.md +91 -0
  601. package/docs/api/components/Indent.md +40 -0
  602. package/docs/api/components/List.md +68 -0
  603. package/docs/api/components/MemberDeclaration.md +89 -0
  604. package/docs/api/components/MemberName.md +21 -0
  605. package/docs/api/components/MemberScope.md +81 -0
  606. package/docs/api/components/Name.md +19 -0
  607. package/docs/api/components/Output.md +62 -0
  608. package/docs/api/components/Prose.md +29 -0
  609. package/docs/api/components/ReferenceOrContent.md +28 -0
  610. package/docs/api/components/Scope.md +83 -0
  611. package/docs/api/components/Show.md +32 -0
  612. package/docs/api/components/SourceDirectory.md +28 -0
  613. package/docs/api/components/SourceFile.md +60 -0
  614. package/docs/api/components/StatementList.md +29 -0
  615. package/docs/api/components/Switch.md +42 -0
  616. package/docs/api/components/TemplateFile.md +71 -0
  617. package/docs/api/components/TemplateVariable.md +57 -0
  618. package/docs/api/components/UpdateFile.md +56 -0
  619. package/docs/api/components/Wrap.md +40 -0
  620. package/docs/api/components/createAccessExpression.md +55 -0
  621. package/docs/api/components/index.md +27 -0
  622. package/docs/api/contexts/Assignment-context.md +43 -0
  623. package/docs/api/contexts/Binder-context.md +22 -0
  624. package/docs/api/contexts/Declaration-context.md +15 -0
  625. package/docs/api/contexts/Member-context.md +17 -0
  626. package/docs/api/contexts/MemberDeclaration-context.md +24 -0
  627. package/docs/api/contexts/NamePolicy-context.md +18 -0
  628. package/docs/api/contexts/Scope-context.md +20 -0
  629. package/docs/api/contexts/SourceDirectory-context.md +26 -0
  630. package/docs/api/contexts/SourceFile-context.md +19 -0
  631. package/docs/api/contexts/index.md +11 -0
  632. package/docs/api/functions/attachDiagnosticsCollector.md +18 -0
  633. package/docs/api/functions/baseListPropsToMapJoinArgs.md +20 -0
  634. package/docs/api/functions/children.md +27 -0
  635. package/docs/api/functions/childrenArray.md +25 -0
  636. package/docs/api/functions/code.md +25 -0
  637. package/docs/api/functions/computed.md +18 -0
  638. package/docs/api/functions/createComponent.md +20 -0
  639. package/docs/api/functions/createContentSlot.md +33 -0
  640. package/docs/api/functions/createContext.md +19 -0
  641. package/docs/api/functions/createCustomContext.md +18 -0
  642. package/docs/api/functions/createDeclarationTap.md +20 -0
  643. package/docs/api/functions/createFileResource.md +35 -0
  644. package/docs/api/functions/createFormatOptionsContextFor.md +28 -0
  645. package/docs/api/functions/createIntrinsic.md +19 -0
  646. package/docs/api/functions/createMemberTap.md +20 -0
  647. package/docs/api/functions/createNamePolicy.md +37 -0
  648. package/docs/api/functions/createNamedContext.md +19 -0
  649. package/docs/api/functions/createOutputBinder.md +24 -0
  650. package/docs/api/functions/createRenderTreeHook.md +19 -0
  651. package/docs/api/functions/createResource.md +77 -0
  652. package/docs/api/functions/createScope.md +35 -0
  653. package/docs/api/functions/createScopeTap.md +20 -0
  654. package/docs/api/functions/createSourceFileTap.md +20 -0
  655. package/docs/api/functions/createSymbol.md +25 -0
  656. package/docs/api/functions/createSymbolSlot.md +19 -0
  657. package/docs/api/functions/createTap.md +55 -0
  658. package/docs/api/functions/decl.md +20 -0
  659. package/docs/api/functions/defaultProps.md +21 -0
  660. package/docs/api/functions/effect.md +26 -0
  661. package/docs/api/functions/emitDiagnostic.md +18 -0
  662. package/docs/api/functions/emitSymbol.md +18 -0
  663. package/docs/api/functions/ensureIsEmpty.md +20 -0
  664. package/docs/api/functions/findCurrentEffectId.md +19 -0
  665. package/docs/api/functions/findKeyedChild.md +19 -0
  666. package/docs/api/functions/findKeyedChildren.md +19 -0
  667. package/docs/api/functions/findUnkeyedChildren.md +18 -0
  668. package/docs/api/functions/formatReactivePropertyLabel.md +21 -0
  669. package/docs/api/functions/getAssignmentSymbol.md +19 -0
  670. package/docs/api/functions/getContext.md +17 -0
  671. package/docs/api/functions/getContextForRenderNode.md +18 -0
  672. package/docs/api/functions/getDiagnosticsForTree.md +18 -0
  673. package/docs/api/functions/getEffectDebugId.md +18 -0
  674. package/docs/api/functions/getElementCache.md +17 -0
  675. package/docs/api/functions/getReactiveCreationLocation.md +18 -0
  676. package/docs/api/functions/getSymbolCreator.md +18 -0
  677. package/docs/api/functions/getSymbolCreatorSymbol.md +17 -0
  678. package/docs/api/functions/index.md +105 -0
  679. package/docs/api/functions/inspectRefkey.md +18 -0
  680. package/docs/api/functions/instantiateTakenMembersTo.md +20 -0
  681. package/docs/api/functions/isComponentCreator.md +19 -0
  682. package/docs/api/functions/isCustomContext.md +18 -0
  683. package/docs/api/functions/isIntrinsicElement.md +18 -0
  684. package/docs/api/functions/isKeyedChild.md +18 -0
  685. package/docs/api/functions/isLibrarySymbolReference.md +18 -0
  686. package/docs/api/functions/isMemberRefkey.md +18 -0
  687. package/docs/api/functions/isNamekey.md +18 -0
  688. package/docs/api/functions/isPrintHook.md +18 -0
  689. package/docs/api/functions/isRefkey.md +18 -0
  690. package/docs/api/functions/isRefkeyable.md +18 -0
  691. package/docs/api/functions/isRenderableObject.md +20 -0
  692. package/docs/api/functions/isSymbolRefkey.md +18 -0
  693. package/docs/api/functions/join.md +33 -0
  694. package/docs/api/functions/mapJoin.md +106 -0
  695. package/docs/api/functions/memberRefkey.md +27 -0
  696. package/docs/api/functions/memo.md +29 -0
  697. package/docs/api/functions/mergeProps.md +64 -0
  698. package/docs/api/functions/moveTakenMembersTo.md +18 -0
  699. package/docs/api/functions/namekey.md +41 -0
  700. package/docs/api/functions/nextReactiveId.md +19 -0
  701. package/docs/api/functions/notifyContentState.md +17 -0
  702. package/docs/api/functions/onCleanup.md +26 -0
  703. package/docs/api/functions/printTree.md +31 -0
  704. package/docs/api/functions/reactivePropertyRefId.md +21 -0
  705. package/docs/api/functions/ref.md +21 -0
  706. package/docs/api/functions/refId.md +18 -0
  707. package/docs/api/functions/refkey.md +24 -0
  708. package/docs/api/functions/render.md +31 -0
  709. package/docs/api/functions/renderAsync.md +31 -0
  710. package/docs/api/functions/renderTree.md +18 -0
  711. package/docs/api/functions/reportDiagnostics.md +18 -0
  712. package/docs/api/functions/resetRefIdCounter.md +17 -0
  713. package/docs/api/functions/resolve.md +31 -0
  714. package/docs/api/functions/root.md +25 -0
  715. package/docs/api/functions/shallowReactive.md +18 -0
  716. package/docs/api/functions/shallowRef.md +21 -0
  717. package/docs/api/functions/sourceFilesForTree.md +31 -0
  718. package/docs/api/functions/splitProps.md +19 -0
  719. package/docs/api/functions/stc.md +18 -0
  720. package/docs/api/functions/sti.md +18 -0
  721. package/docs/api/functions/symbolForRefkey.md +24 -0
  722. package/docs/api/functions/taggedComponent.md +19 -0
  723. package/docs/api/functions/takeSymbols.md +18 -0
  724. package/docs/api/functions/text.md +19 -0
  725. package/docs/api/functions/toRef.md +20 -0
  726. package/docs/api/functions/toRefkey.md +18 -0
  727. package/docs/api/functions/toRefs.md +20 -0
  728. package/docs/api/functions/traverseOutput.md +21 -0
  729. package/docs/api/functions/unresolvedRefkey.md +18 -0
  730. package/docs/api/functions/untrack.md +18 -0
  731. package/docs/api/functions/useContext.md +18 -0
  732. package/docs/api/functions/useFormatOptions.md +18 -0
  733. package/docs/api/functions/useMemberContext.md +17 -0
  734. package/docs/api/functions/useMemberScope.md +17 -0
  735. package/docs/api/functions/writeOutput.md +21 -0
  736. package/docs/api/index.md +9 -0
  737. package/docs/api/testing/functions/createTestWrapper.md +70 -0
  738. package/docs/api/testing/functions/d.md +21 -0
  739. package/docs/api/testing/functions/dedent.md +18 -0
  740. package/docs/api/testing/functions/index.md +6 -0
  741. package/docs/api/testing/functions/renderToString.md +20 -0
  742. package/docs/api/testing/index.md +4 -0
  743. package/docs/api/testing/types/TestWrapper.md +10 -0
  744. package/docs/api/testing/types/ToRenderToOptions.md +24 -0
  745. package/docs/api/testing/types/index.md +4 -0
  746. package/docs/api/types/AlignIntrinsicElement.md +5 -0
  747. package/docs/api/types/AppendRegionProps.md +5 -0
  748. package/docs/api/types/BaseListProps.md +21 -0
  749. package/docs/api/types/BasePartProps.md +10 -0
  750. package/docs/api/types/BasicScope.md +15 -0
  751. package/docs/api/types/BasicSymbol.md +18 -0
  752. package/docs/api/types/Binder.md +18 -0
  753. package/docs/api/types/BinderOptions.md +7 -0
  754. package/docs/api/types/BrIntrinsicElement.md +5 -0
  755. package/docs/api/types/BreakParentIntrinsicElement.md +5 -0
  756. package/docs/api/types/Child.md +5 -0
  757. package/docs/api/types/Children.md +5 -0
  758. package/docs/api/types/ChildrenOptions.md +7 -0
  759. package/docs/api/types/CommonFormatOptions.md +8 -0
  760. package/docs/api/types/Component.md +8 -0
  761. package/docs/api/types/ComponentContext.md +11 -0
  762. package/docs/api/types/ComponentCreator.md +11 -0
  763. package/docs/api/types/ComponentDefinition.md +7 -0
  764. package/docs/api/types/ContentOutputFile.md +10 -0
  765. package/docs/api/types/ContentSlot.md +12 -0
  766. package/docs/api/types/Context.md +19 -0
  767. package/docs/api/types/ContextProviderProps.md +8 -0
  768. package/docs/api/types/CopyFileContext.md +8 -0
  769. package/docs/api/types/CopyOutputFile.md +9 -0
  770. package/docs/api/types/CustomContext.md +10 -0
  771. package/docs/api/types/CustomContextChildrenCallback.md +5 -0
  772. package/docs/api/types/DeclarationProps.md +5 -0
  773. package/docs/api/types/DedentIntrinsicElement.md +5 -0
  774. package/docs/api/types/DedentToRootIntrinsicElement.md +5 -0
  775. package/docs/api/types/Diagnostic.md +11 -0
  776. package/docs/api/types/DiagnosticHandle.md +7 -0
  777. package/docs/api/types/DiagnosticInput.md +10 -0
  778. package/docs/api/types/DiagnosticSeverity.md +5 -0
  779. package/docs/api/types/DiagnosticStackEntry.md +9 -0
  780. package/docs/api/types/DiagnosticsCollector.md +8 -0
  781. package/docs/api/types/Disposable_2.md +7 -0
  782. package/docs/api/types/EffectDebugOptions.md +8 -0
  783. package/docs/api/types/EffectOptions.md +7 -0
  784. package/docs/api/types/ElementCache.md +5 -0
  785. package/docs/api/types/ElementCacheKey.md +5 -0
  786. package/docs/api/types/FillIntrinsicElement.md +5 -0
  787. package/docs/api/types/ForCallbackArgs.md +5 -0
  788. package/docs/api/types/ForSupportedCollections.md +5 -0
  789. package/docs/api/types/GroupIntrinsicElement.md +5 -0
  790. package/docs/api/types/HardlineIntrinsicElement.md +5 -0
  791. package/docs/api/types/HbrIntrinsicElement.md +5 -0
  792. package/docs/api/types/IfBreakIntrinsicElement.md +5 -0
  793. package/docs/api/types/IndentIfBreakIntrinsicElement.md +5 -0
  794. package/docs/api/types/IndentIntrinsicElement.md +5 -0
  795. package/docs/api/types/IntrinsicElement.md +5 -0
  796. package/docs/api/types/IntrinsicElementBase.md +9 -0
  797. package/docs/api/types/IntrinsicElements.md +26 -0
  798. package/docs/api/types/JoinOptions.md +9 -0
  799. package/docs/api/types/LbrIntrinsicElement.md +5 -0
  800. package/docs/api/types/LibrarySymbolReference.md +13 -0
  801. package/docs/api/types/LineIntrinsicElement.md +5 -0
  802. package/docs/api/types/LineSuffixBoundaryIntrinsicElement.md +5 -0
  803. package/docs/api/types/LineSuffixIntrinsicElement.md +5 -0
  804. package/docs/api/types/LiterallineIntrinsicElement.md +5 -0
  805. package/docs/api/types/MakeChildrenOptional.md +7 -0
  806. package/docs/api/types/MarkAsRootIntrinsicElement.md +5 -0
  807. package/docs/api/types/MatchProps.md +9 -0
  808. package/docs/api/types/MemberDeclarationProps.md +5 -0
  809. package/docs/api/types/MemberDescriptor.md +10 -0
  810. package/docs/api/types/MemberRefkey.md +10 -0
  811. package/docs/api/types/MemberResolutionContext.md +10 -0
  812. package/docs/api/types/MemberResolver.md +32 -0
  813. package/docs/api/types/MemberScopeProps.md +5 -0
  814. package/docs/api/types/Metadata.md +5 -0
  815. package/docs/api/types/NameConflictResolver.md +27 -0
  816. package/docs/api/types/NamePolicy.md +8 -0
  817. package/docs/api/types/NamePolicyGetter.md +9 -0
  818. package/docs/api/types/Namekey.md +10 -0
  819. package/docs/api/types/NamekeyOptions.md +8 -0
  820. package/docs/api/types/OnReactiveSetAddCallback.md +5 -0
  821. package/docs/api/types/OnReactiveSetDeleteCallback.md +5 -0
  822. package/docs/api/types/OutputDeclarationSpace.md +13 -0
  823. package/docs/api/types/OutputDirectory.md +59 -0
  824. package/docs/api/types/OutputFile.md +5 -0
  825. package/docs/api/types/OutputFileBase.md +8 -0
  826. package/docs/api/types/OutputMemberSpace.md +13 -0
  827. package/docs/api/types/OutputScope.md +33 -0
  828. package/docs/api/types/OutputScopeOptions.md +9 -0
  829. package/docs/api/types/OutputSpace.md +7 -0
  830. package/docs/api/types/OutputSymbol.md +78 -0
  831. package/docs/api/types/OutputSymbolOptions.md +16 -0
  832. package/docs/api/types/OutputVisitor.md +10 -0
  833. package/docs/api/types/PrintHook.md +10 -0
  834. package/docs/api/types/PrintTreeOptions.md +11 -0
  835. package/docs/api/types/Props.md +5 -0
  836. package/docs/api/types/ReactiveUnionSet.md +20 -0
  837. package/docs/api/types/ReactiveUnionSetOptions.md +8 -0
  838. package/docs/api/types/Refkey.md +5 -0
  839. package/docs/api/types/Refkeyable.md +5 -0
  840. package/docs/api/types/RefkeyableObject.md +7 -0
  841. package/docs/api/types/RenderableObject.md +9 -0
  842. package/docs/api/types/RenderedTextTree.md +5 -0
  843. package/docs/api/types/ResolutionResult.md +39 -0
  844. package/docs/api/types/ResolveDeclarationByKeyOptions.md +7 -0
  845. package/docs/api/types/Resource.md +11 -0
  846. package/docs/api/types/RootOptions.md +7 -0
  847. package/docs/api/types/SbrIntrinsicElement.md +5 -0
  848. package/docs/api/types/ScopeProps.md +5 -0
  849. package/docs/api/types/SoftlineIntrinsicElement.md +5 -0
  850. package/docs/api/types/SourceLocation.md +9 -0
  851. package/docs/api/types/SplitProps.md +12 -0
  852. package/docs/api/types/StcComponentCreator.md +9 -0
  853. package/docs/api/types/StcSignature.md +5 -0
  854. package/docs/api/types/StiComponentCreator.md +9 -0
  855. package/docs/api/types/StiSignature.md +7 -0
  856. package/docs/api/types/SymbolCreator.md +15 -0
  857. package/docs/api/types/SymbolRefkey.md +9 -0
  858. package/docs/api/types/SymbolSlot.md +12 -0
  859. package/docs/api/types/SymbolTable.md +15 -0
  860. package/docs/api/types/TakeSymbolCallback.md +7 -0
  861. package/docs/api/types/TakeSymbolsCallback.md +7 -0
  862. package/docs/api/types/Tap.md +11 -0
  863. package/docs/api/types/TapHandler.md +9 -0
  864. package/docs/api/types/Tapper.md +9 -0
  865. package/docs/api/types/TemplateVariableProps.md +5 -0
  866. package/docs/api/types/index.md +122 -0
  867. package/docs/api/variables/FormatOptions.md +5 -0
  868. package/docs/api/variables/Match.md +7 -0
  869. package/docs/api/variables/REFKEYABLE.md +5 -0
  870. package/docs/api/variables/RENDERABLE.md +5 -0
  871. package/docs/api/variables/TO_SYMBOL.md +39 -0
  872. package/docs/api/variables/contextsByKey.md +5 -0
  873. package/docs/api/variables/index.md +11 -0
  874. package/docs/api/variables/intrinsicElementKey.md +5 -0
  875. package/docs/api/variables/matchTag.md +5 -0
  876. package/docs/api/variables/printHookTag.md +7 -0
  877. package/docs/components.md +97 -0
  878. package/docs/context.md +67 -0
  879. package/docs/control-flow.md +5 -0
  880. package/docs/debugging.md +105 -0
  881. package/docs/formatting.md +99 -0
  882. package/docs/guides/language-package-guide.md +593 -0
  883. package/docs/guides/references-and-refkeys.md +210 -0
  884. package/docs/guides/style-guide.md +244 -0
  885. package/docs/index.md +22 -0
  886. package/docs/reactivity.md +68 -0
  887. package/docs/rendering.md +41 -0
  888. package/docs/symbols-and-scopes.md +180 -0
  889. package/package.json +21 -7
  890. package/src/binder.ts +154 -41
  891. package/src/components/AccessExpression.test.tsx +132 -0
  892. package/src/components/AccessExpression.tsx +344 -0
  893. package/src/components/Block.tsx +12 -0
  894. package/src/components/For.tsx +14 -10
  895. package/src/components/List.tsx +18 -5
  896. package/src/components/MemberDeclaration.tsx +6 -6
  897. package/src/components/MemberName.tsx +6 -0
  898. package/src/components/MemberScope.tsx +5 -0
  899. package/src/components/Output.tsx +4 -1
  900. package/src/components/Scope.tsx +6 -0
  901. package/src/components/SourceFile.tsx +22 -2
  902. package/src/components/Switch.tsx +11 -7
  903. package/src/components/index.tsx +1 -0
  904. package/src/context/binder.ts +4 -0
  905. package/src/context/format-options.ts +14 -1
  906. package/src/context/scope.ts +4 -0
  907. package/src/context/source-directory.ts +9 -0
  908. package/src/debug/cli.browser.ts +17 -0
  909. package/src/debug/cli.ts +3 -2
  910. package/src/debug/diagnostics-broadcast.test.tsx +98 -0
  911. package/src/debug/diagnostics.test.tsx +3 -2
  912. package/src/debug/effects.test.tsx +248 -36
  913. package/src/debug/effects.ts +198 -64
  914. package/src/debug/files.test.tsx +15 -35
  915. package/src/debug/files.ts +11 -11
  916. package/src/debug/index.ts +4 -0
  917. package/src/debug/message-format.test.tsx +759 -0
  918. package/src/debug/render-tree-orphans.test.tsx +344 -0
  919. package/src/debug/render.test.tsx +96 -118
  920. package/src/debug/render.ts +196 -125
  921. package/src/debug/source-map.browser.ts +30 -0
  922. package/src/debug/source-map.ts +135 -0
  923. package/src/debug/symbols.test.tsx +19 -20
  924. package/src/debug/symbols.ts +106 -23
  925. package/src/debug/trace-db.browser.ts +12 -0
  926. package/src/debug/trace-db.ts +42 -0
  927. package/src/debug/trace-writer.ts +962 -0
  928. package/src/debug/trace.ts +46 -32
  929. package/src/devtools/devtools-protocol.ts +361 -176
  930. package/src/devtools/devtools-server.browser.ts +4 -9
  931. package/src/devtools/devtools-server.ts +226 -33
  932. package/src/devtools/devtools-transport.ts +4 -4
  933. package/src/devtools-entry.browser.ts +11 -15
  934. package/src/devtools-entry.ts +9 -15
  935. package/src/diagnostics.ts +44 -22
  936. package/src/host/node-host.browser.ts +23 -0
  937. package/src/host/node-host.ts +22 -0
  938. package/src/library-symbol-reference.ts +52 -0
  939. package/src/name-policy.ts +30 -3
  940. package/src/reactivity.ts +179 -55
  941. package/src/render-stack.ts +4 -3
  942. package/src/render.ts +106 -30
  943. package/src/scheduler.ts +145 -26
  944. package/src/symbols/output-scope.ts +33 -1
  945. package/src/symbols/output-space.ts +13 -0
  946. package/src/symbols/output-symbol.ts +185 -22
  947. package/src/symbols/symbol-slot.test.tsx +28 -1
  948. package/src/symbols/symbol-slot.tsx +8 -0
  949. package/src/symbols/symbol-table.ts +13 -3
  950. package/src/utils.tsx +7 -4
  951. package/src/write-output.ts +6 -5
  952. package/temp/api-testing.json +673 -0
  953. package/temp/api.json +895 -73
  954. package/test/browser-build.test.ts +141 -76
  955. package/test/reactivity/shallow-reactive.test.tsx +4 -0
  956. package/test/symbols/deconflicted-name.test.ts +120 -0
  957. package/test/symbols/output-scope.test.ts +38 -0
  958. package/testing/create-test-wrapper.tsx +81 -2
  959. package/testing/devtools-utils.ts +46 -4
  960. package/testing/extend-expect.ts +22 -1
  961. package/testing/index.ts +1 -1
  962. package/testing/render.ts +9 -0
  963. package/testing/vitest.d.ts +18 -3
  964. package/vitest.config.ts +8 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,47 @@
1
1
  # Changelog - @alloy-js/core
2
2
 
3
+ ## 0.23.1
4
+
5
+ ### Bug Fixes
6
+
7
+ - [#400](https://github.com/alloy-framework/alloy/pull/400) Fix additional files missing browser shim
8
+ - [#398](https://github.com/alloy-framework/alloy/pull/398) Reduce per-render overhead when devtools/debug are disabled. `isDevtoolsEnabled()` now caches the `ALLOY_DEBUG` env-var read at module load (use `refreshDebugState()` from tests that mutate the env var dynamically), and `effect()`, `ref()`, `shallowRef()`, `computed()`, `toRef()`, and `toRefs()` now gate their debug-hook bookkeeping behind `isDebugEnabled()` so the argument objects and source-location captures aren't built when debug is off.
9
+
10
+
11
+ ## 0.23.0
12
+
13
+ ### Bug Fixes
14
+
15
+ - [#356](https://github.com/alloy-framework/alloy/pull/356) onCleanup callbacks are now untracked, which fixes cases where cleaning up some reactive context would trigger it to run again.
16
+ - [#395](https://github.com/alloy-framework/alloy/pull/395) Fix O(N²) overhead in `DiagnosticsCollector`. `emit()` and `dismiss()` previously re-broadcast the entire diagnostic history on every call, which dominated render time on large workloads even when debug tracing was disabled (the default). Broadcasts are now skipped when tracing is off, and the trace writer sees per-diagnostic add/remove deltas instead of duplicated inserts.
17
+ - [#376](https://github.com/alloy-framework/alloy/pull/376) Ensure node specific api have browser override
18
+ - [#379](https://github.com/alloy-framework/alloy/pull/379) Fix SymbolSlot in FunctionBase being rendered twice when a parameter has both type and default, which caused the type symbol to be overwritten and member resolution to fail. Also add an error diagnostic when a SymbolSlot is rendered more than once.
19
+ - [#361](https://github.com/alloy-framework/alloy/pull/361) Reduce allocation overhead: lazy Context fields (disposables, context, elementCache, isEmpty), `_lastEmpty` boolean for cheap empty-state propagation, `ensureIsEmpty()` gating, scheduler `isJobActive` check to skip stopped effects, `ReactiveUnionSet` per-item root-scope disposers, and hoisted `defaultScheduler` closure.
20
+ - [#396](https://github.com/alloy-framework/alloy/pull/396) Fix TypeScript import handling:
21
+
22
+ - Long `import { ... } from "..."` statements now break across multiple lines when they exceed `printWidth`, using the layout engine.
23
+ - Import statements generated via `ref()` into a TypeScript `<SourceFile>` are now reference-counted and torn down (symbol deleted, statement removed) when the last live reference is disposed — e.g. when a `<Show>` that referenced an external refkey toggles off. Previously the import would linger and subsequent re-renders could drift conflicting local names to `foo_3`, `foo_4`, etc.
24
+ - `createValueSymbol` / `createTypeSymbol` / `createTypeAndValueSymbol` now automatically delete their symbol when the component that created it unmounts. This fixes a long-standing leak where symbols declared via `<VarDeclaration>`, `<FunctionDeclaration>`, etc. survived `<Show>` unmounts.
25
+
26
+ Improve name-conflict resolution:
27
+
28
+ - `OutputSymbol` now exposes a `deconflictedName` slot separate from the user-assigned name. Name-conflict resolvers write the collision rename into this slot (the public `.name` getter returns `deconflictedName ?? userAssignedName ?? originalName`), and clear it once a collision is resolved so survivors revert to their plain name. This replaces a fragile regex-based "is this an auto-generated alias?" check that hard-coded the default resolver's `foo_N` rename scheme. Custom resolvers with any rename scheme (including Python's `foo_N_module` form) now revert correctly when one of the conflicting symbols is removed.
29
+ - `tsNameConflictResolver` and `pythonNameConflictResolver` have been migrated to write through `deconflictedName`.
30
+ - `SymbolTable` now groups conflicts by each symbol's _canonical_ name — the result of applying the symbol's name policy to its `originalName`. This means two symbols whose original names normalize to the same policy-applied name (e.g. `foo_bar` and `fooBar` under camelCase) are correctly detected as conflicting.
31
+
32
+ ### Features
33
+
34
+ - [#362](https://github.com/alloy-framework/alloy/pull/362) Add `createAccessExpression` factory for building language-specific member/access expression components with shared call chain formatting, symbol resolution, and reactive optimization.
35
+ - [#356](https://github.com/alloy-framework/alloy/pull/356) Add a new diagnostics reporting interface. Diagnostics will log that an error occurred but will not stop emission. Various things that used to cause errors will now log diagnostics instead, including missing regions in AppendFile and TemplateFile. Unresolved refkeys will also produce a diagnostic.
36
+ - [#356](https://github.com/alloy-framework/alloy/pull/356) Add new `createScope` and `createSymbol` APIs which construct subclasses of `OutputScope` and `OutputSymbol`, respectively. These are necessary to register the created scopes and symbols with the new debugger interface.
37
+ - [#356](https://github.com/alloy-framework/alloy/pull/356) Added a browser-based debugger which is started when the ALLOY_DEBUG environment variable is set. The debugger shows emitted files, scopes, symbols, render nodes, effects, diagnostics, and more.
38
+ - [#356](https://github.com/alloy-framework/alloy/pull/356) Added options to `effect` to allow passing debug information that helps identify that effect.
39
+ - [#356](https://github.com/alloy-framework/alloy/pull/356) Tracing will now capture both "trigger" and "triggered-by" events (previously we only traced triggered-by (and called it trigger).
40
+ - [#350](https://github.com/alloy-framework/alloy/pull/350) Print richer stack traces when rendering fails.
41
+ - [#368](https://github.com/alloy-framework/alloy/pull/368) Ship dev sources in package for debugging. Use node's --condition="development" flag to use this build.
42
+ - [#366](https://github.com/alloy-framework/alloy/pull/366) Add SQLite-based trace storage for debug and devtools infrastructure, enabling structured recording of render trees, effects, reactive edges, scopes, symbols, and diagnostics during development builds.
43
+
44
+
3
45
  ## 0.22.0
4
46
 
5
47
  ### Bug Fixes
@@ -1,11 +1,4 @@
1
1
  {
2
2
  "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
3
- "extends": "../../api-extractor.base.json",
4
- "messages": {
5
- "extractorMessageReporting": {
6
- "ae-wrong-input-file-type": {
7
- "logLevel": "none"
8
- }
9
- }
10
- }
3
+ "extends": "../../api-extractor.base.json"
11
4
  }
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
3
+ "extends": "../../api-extractor.base.json",
4
+ "mainEntryPointFilePath": "<projectFolder>/dist/testing/index.d.ts",
5
+ "docModel": {
6
+ "enabled": true,
7
+ "apiJsonFilePath": "<projectFolder>/temp/api-testing.json"
8
+ },
9
+ "messages": {
10
+ "extractorMessageReporting": {
11
+ "ae-wrong-input-file-type": {
12
+ "logLevel": "none"
13
+ },
14
+ "ae-forgotten-export": {
15
+ "logLevel": "none"
16
+ }
17
+ }
18
+ }
19
+ }
@@ -0,0 +1,595 @@
1
+ import { computed, shallowRef } from "@vue/reactivity";
2
+ import { useBinder } from "./context/binder.js";
3
+ import { useMemberContext } from "./context/member-scope.js";
4
+ import { useScope } from "./context/scope.js";
5
+ import { debug, TracePhase } from "./debug/index.js";
6
+ import { emitDiagnostic } from "./diagnostics.js";
7
+ import { effect, onCleanup } from "./reactivity.js";
8
+ import { inspectRefkey, isMemberRefkey, refkey, toRefkey } from "./refkey.js";
9
+ import { formatRefkeys, formatSymbolName } from "./tracer.js";
10
+
11
+ /**
12
+ * The binder tracks all output scopes and symbols. Scopes are nested containers
13
+ * for symbols.
14
+ *
15
+ * @remarks
16
+ *
17
+ * Symbol information is reactive because in certain situations this data may
18
+ * change. For example, when a symbol becomes conflicted with another symbol,
19
+ * one of the symbol names may change. Ensure that you interact with binder
20
+ * values in a reactive context (i.e. within JSX/code template, or within
21
+ * memo/computed/etc).
22
+ *
23
+ */
24
+
25
+ /**
26
+ * A successful resolution of a refkey.
27
+ *
28
+ * @example
29
+ *
30
+ * Let's say we have the following scopes and symbols:
31
+ *
32
+ * ```
33
+ * scope: global scope
34
+ * ├── scope: namespace scope 1
35
+ * │ └── symbol: foo
36
+ * │ └── static members
37
+ * │ └── symbol: bar
38
+ * └── scope: namespace scope 2
39
+ * └── (resolve bar from here)
40
+ * ```
41
+ *
42
+ * When we resolve the refkey for `bar` from within `namespace scope 2`, we will get the following
43
+ * resolution result:
44
+ *
45
+ * * **targetDeclaration**: symbol bar, the symbol we resolved.
46
+ * * **commonScope**: global scope, because this is the most specific scope that contains both the declaration and the reference.
47
+ * * **pathUp**: [namespace scope 2], because this is the scope between the reference and the common scope.
48
+ * * **pathDown**: [namespace scope 1], because this is the scope between the common scope and the declaration
49
+ * * **memberPath**: [bar]
50
+ * * **lexicalDeclaration**: foo
51
+ * For deeper chains (e.g., foo.bar.baz where bar and baz are member symbols, foo is not): memberPath = [bar, baz], lexicalDeclaration = foo.
52
+ */
53
+
54
+ /**
55
+ * Describes a member in a member access chain, tracking both the symbol
56
+ * and whether this specific member was accessed via a memberRefkey.
57
+ */
58
+
59
+ /**
60
+ * A callable interface invoked by the binder when two or more symbols in the
61
+ * same scope share a name. The resolver mutates symbol names to eliminate
62
+ * conflicts (e.g., appending `_2`, `_3`).
63
+ *
64
+ * @remarks
65
+ * The resolver is called with the shared `name` and all symbols in the scope
66
+ * that have that original name. Rename a symbol by assigning to `symbol.name`.
67
+ * Symbols with `ignoreNameConflict: true` are excluded. The default resolver
68
+ * keeps the first symbol unchanged and renames subsequent ones
69
+ * `originalName + "_2"`, `originalName + "_3"`, etc.
70
+ *
71
+ * Assigned names pass through the active name policy before being stored;
72
+ * design suffixes to produce the correct final name after policy
73
+ * transformation, or set `ignoreNamePolicy` on the symbol after resolution.
74
+ *
75
+ * Conflict detection is keyed on `originalName`
76
+ * (see {@link OutputSymbol.originalName}). Symbols that differ in original
77
+ * name but normalize to the same policy-applied name are never detected as
78
+ * conflicting.
79
+ *
80
+ * @example
81
+ * ```ts
82
+ * const resolver: NameConflictResolver = (name, symbols) => {
83
+ * for (let i = 1; i < symbols.length; i++) {
84
+ * symbols[i].name = symbols[i].originalName + "_" + (i + 1);
85
+ * }
86
+ * };
87
+ * ```
88
+ */
89
+
90
+ /**
91
+ * The context for a member resolution. This is used to properly resolve a
92
+ * member in the MemberResolver.
93
+ */
94
+
95
+ /**
96
+ * A callback that performs access-control filtering during member resolution.
97
+ *
98
+ * @remarks
99
+ *
100
+ * When provided to {@link ResolveDeclarationByKeyOptions}, it entirely replaces
101
+ * the default checks (ownership assertion and `isMemberSymbol` assertion).
102
+ *
103
+ * **Contract:**
104
+ * - **Return `void`** to accept the member.
105
+ * - **Throw an error** to reject the member — the error propagates to the caller,
106
+ * matching the behavior of the default checks.
107
+ *
108
+ * @example
109
+ * ```ts
110
+ * const resolver: MemberResolver<MyScope, MySymbol> = (owner, member, ctx) => {
111
+ * if (member.isPrivate && !ctx.isMemberAccess) {
112
+ * throw new Error(`${member.name} is not accessible here`);
113
+ * }
114
+ * };
115
+ * ```
116
+ *
117
+ * @see {@link MemberResolutionContext} for available context properties.
118
+ */
119
+
120
+ /**
121
+ * Construct a scope instance and register it with devtools. Prefer this over
122
+ * calling `new` directly so that debugging tools can track the scope.
123
+ *
124
+ * @remarks
125
+ *
126
+ * Inside a component, obtain the current scope with `useScope()` and pass it
127
+ * as the `parentScope` constructor argument so the new scope is wired into
128
+ * the scope tree.
129
+ *
130
+ * @example
131
+ * ```tsx
132
+ * function MyScope(props) {
133
+ * const parentScope = useScope();
134
+ * const scope = createScope(MyScope, "scope-name", parentScope);
135
+ * return <Scope value={scope}>{props.children}</Scope>;
136
+ * }
137
+ * ```
138
+ *
139
+ * @param ctor - The scope subclass constructor.
140
+ * @param args - Positional arguments forwarded directly to the scope
141
+ * constructor; see {@link OutputScope} for the base-class constructor
142
+ * signature.
143
+ */
144
+ export function createScope(ctor, ...args) {
145
+ const scope = new ctor(...args);
146
+ debug.symbols.registerScope(scope);
147
+ return scope;
148
+ }
149
+
150
+ /**
151
+ * Construct a symbol instance and register it with devtools. Prefer this over
152
+ * calling `new` directly so that debugging tools can track the symbol.
153
+ *
154
+ * @remarks
155
+ *
156
+ * Binder registration (via `useBinder()` + `notifySymbolCreated()`) happens
157
+ * inside the `OutputSymbol` constructor regardless of whether you use
158
+ * `createSymbol` or `new`. This helper only adds devtools registration.
159
+ *
160
+ * @param ctor - The symbol subclass constructor.
161
+ * @param args - Arguments forwarded to the constructor.
162
+ */
163
+ export function createSymbol(ctor, ...args) {
164
+ const symbol = new ctor(...args);
165
+ debug.symbols.registerSymbol(symbol);
166
+ return symbol;
167
+ }
168
+ export function createOutputBinder(options = {}) {
169
+ const binder = {
170
+ resolveDeclarationByKey,
171
+ getSymbolForRefkey,
172
+ notifyScopeCreated,
173
+ notifySymbolCreated,
174
+ notifySymbolDeleted,
175
+ nameConflictResolver: options.nameConflictResolver
176
+ };
177
+ const knownDeclarations = new Map();
178
+ const waitingDeclarations = new Map();
179
+ const waitingSymbolNames = new Map();
180
+ const waitingScopeNames = new Map();
181
+ return binder;
182
+ function notifyScopeCreated(scope) {
183
+ if (!scope.parent || !waitingScopeNames.has(scope.parent)) {
184
+ return;
185
+ }
186
+ const waiting = waitingScopeNames.get(scope.parent);
187
+ if (waiting?.has(scope.name)) {
188
+ const ref = waiting.get(scope.name);
189
+ ref.value = scope;
190
+ }
191
+ }
192
+ function notifySymbolDeleted(symbol) {
193
+ debug.symbols.unregisterSymbol(symbol);
194
+ if (!refkey) {
195
+ return;
196
+ }
197
+ for (const refkey of symbol.refkeys) {
198
+ const resolution = waitingDeclarations.get(refkey);
199
+ if (!resolution) return;
200
+ resolution.value = undefined;
201
+ }
202
+ }
203
+ function buildResult(currentScope, targetDeclarationBase) {
204
+ const {
205
+ memberPath: targetMemberPath,
206
+ scopeChain: targetChain
207
+ } = scopeAndMemberChain(targetDeclarationBase);
208
+ let targetLexicalDeclaration = targetMemberPath && targetMemberPath.length > 0 ? targetMemberPath[0].ownerSymbol : targetDeclarationBase;
209
+ // when we are resolving from a scope which is a member scope and might have
210
+ // member scope parents, and any symbols in the member path are members of
211
+ // the member scope's owner symbol (i.e., those symbols are in scope where
212
+ // the reference is made), we replace the target member path with an entry
213
+ // on the scope chain.
214
+
215
+ // So, first we find all the owner symbols for any member scopes in scope
216
+ // for the reference.
217
+ const referenceChain = scopeChain(currentScope);
218
+ const inScopeSymbols = new Map();
219
+ for (const scope of referenceChain) {
220
+ if (scope.isMemberScope) {
221
+ inScopeSymbols.set(scope.ownerSymbol, scope);
222
+ }
223
+ }
224
+
225
+ // then if the lexical declaration symbol's members are in scope, remove the
226
+ // symbol from the member path and add its corresponding member scope to the
227
+ // target chain.
228
+ while (targetMemberPath.length > 0 && inScopeSymbols.has(targetLexicalDeclaration)) {
229
+ targetChain.push(inScopeSymbols.get(targetLexicalDeclaration));
230
+ targetLexicalDeclaration = targetMemberPath.shift();
231
+ }
232
+
233
+ // Now we replace any scopes in the target chain with corresponding scopes
234
+ // from the reference chain.
235
+ for (const [index, scope] of targetChain.entries()) {
236
+ if (inScopeSymbols.has(scope.ownerSymbol)) {
237
+ targetChain[index] = inScopeSymbols.get(scope.ownerSymbol);
238
+ }
239
+ }
240
+
241
+ // Next we look for member scopes in the target chain that correspond to
242
+ // member scopes in the reference chain. We splice the reference chain into
243
+ // the target chain at that point. This ensures that we establish the proper
244
+ // common scope and path up/down even if the reference chain has additional
245
+ // scopes above it (e.g. a scope for the current source file).
246
+ const commonMemberContainer = targetChain.findIndex(scope => scope.isMemberScope && inScopeSymbols.has(scope.ownerSymbol));
247
+ if (commonMemberContainer > -1) {
248
+ const sourceLocation = referenceChain.findIndex(scope => scope.isMemberScope && scope.ownerSymbol === targetChain[commonMemberContainer].ownerSymbol);
249
+
250
+ // source location is guaranteed to exist at this point.
251
+ targetChain.splice(0, commonMemberContainer + 1, ...referenceChain.slice(0, sourceLocation + 1));
252
+ }
253
+
254
+ // Now that we have the target chain and scopes, we can determine the common
255
+ // scopes and paths.
256
+ let diffStart = 0;
257
+ while (targetChain[diffStart] && referenceChain[diffStart] && targetChain[diffStart] === referenceChain[diffStart]) {
258
+ diffStart++;
259
+ }
260
+ const pathUp = referenceChain.slice(diffStart);
261
+ const pathDown = targetChain.slice(diffStart);
262
+ const commonScope = targetChain[diffStart - 1] ?? undefined;
263
+ return {
264
+ pathUp,
265
+ pathDown,
266
+ memberPath: targetMemberPath,
267
+ commonScope,
268
+ symbol: targetDeclarationBase,
269
+ lexicalDeclaration: targetLexicalDeclaration,
270
+ fullSymbolPath: targetChain,
271
+ fullReferencePath: referenceChain
272
+ };
273
+ }
274
+
275
+ /**
276
+ * Walk from the provided symbol up to the non-member symbol. This constitutes
277
+ * the member path. Then, walk from the first non-member symbol's scope up to
278
+ * the global scope. This constitutes the scope chain.
279
+ */
280
+ function scopeAndMemberChain(symbol) {
281
+ const result = {
282
+ memberPath: [],
283
+ scopeChain: []
284
+ };
285
+ let currentSymbol = symbol;
286
+ if (currentSymbol.isMemberSymbol) {
287
+ result.memberPath = [];
288
+ while (currentSymbol.isMemberSymbol) {
289
+ result.memberPath.unshift(currentSymbol);
290
+ currentSymbol = currentSymbol.ownerSymbol;
291
+ }
292
+ }
293
+ const startScope = currentSymbol.scope;
294
+ result.scopeChain = scopeChain(startScope);
295
+ return result;
296
+ }
297
+ function scopeChain(scope) {
298
+ const chain = [];
299
+ while (scope) {
300
+ chain.unshift(scope);
301
+ scope = scope.parent;
302
+ }
303
+ return chain;
304
+ }
305
+ function getSymbolForRefkey(refkeyable) {
306
+ const refkey = toRefkey(refkeyable);
307
+ if (waitingDeclarations.has(refkey)) {
308
+ return waitingDeclarations.get(refkey);
309
+ }
310
+ let symbolRef;
311
+ if (isMemberRefkey(refkey)) {
312
+ const baseSymbolRef = getSymbolForRefkey(refkey.base);
313
+ const memberSymbolRef = getMemberSymbolFromMemberRefkey(refkey);
314
+ symbolRef = computed(() => {
315
+ // even though we don't necessarily need the base symbol to be available
316
+ // yet (the member symbol might already be declared on a type), we wait
317
+ // to resolve the member refkey until the base symbol is available.
318
+ const baseSymbol = baseSymbolRef.value;
319
+ const memberSymbol = memberSymbolRef.value;
320
+ if (!baseSymbol || !memberSymbol) {
321
+ return undefined;
322
+ }
323
+ return memberSymbol;
324
+ });
325
+ } else {
326
+ symbolRef = shallowRef();
327
+ }
328
+ waitingDeclarations.set(refkey, symbolRef);
329
+ if (knownDeclarations.has(refkey)) {
330
+ symbolRef.value = knownDeclarations.get(refkey);
331
+ }
332
+ return symbolRef;
333
+ }
334
+
335
+ /**
336
+ * There are two ways to reference a member symbol - directly via its refkey,
337
+ * and via a member refkey. In the former case, we just find the member
338
+ * symbol, and then compute its path directly from there. In hte latter case,
339
+ * we need to find the base of the member expression, and then add the members
340
+ * from the (possibly nested) member refkey to result.
341
+ */
342
+ function resolveDeclarationByKey(currentScope, refkey, options = {}) {
343
+ const resolvedSymbol = getSymbolForRefkey(refkey);
344
+ return computed(() => {
345
+ debug.trace(TracePhase.resolve.pending, () => `Resolving ${formatRefkeys(refkey)}.`);
346
+ const symbol = resolvedSymbol.value;
347
+ if (!symbol) {
348
+ debug.trace(TracePhase.resolve.failure, () => `No symbol for ${formatRefkeys(refkey)}.`);
349
+ return undefined;
350
+ }
351
+ debug.trace(TracePhase.resolve.pending, () => `${formatRefkeys(refkey)} resolved to ${formatSymbolName(symbol)}.`);
352
+ if (symbol.isTransient) {
353
+ debug.trace(TracePhase.resolve.failure, () => `Symbol ${formatSymbolName(symbol)} is transient.`);
354
+ return undefined;
355
+ }
356
+ const chain = scopeChain(symbol.scope);
357
+ if (chain.some(scope => scope.isTransient)) {
358
+ debug.trace(TracePhase.resolve.failure, () => `Symbol ${formatSymbolName(symbol)} is in a transient scope.`);
359
+ return undefined;
360
+ }
361
+ let result;
362
+ let memberDescriptorsFromRefkey;
363
+ if (isMemberRefkey(refkey)) {
364
+ memberDescriptorsFromRefkey = getMemberPathFromRefkey(refkey);
365
+ result = buildResult(currentScope, memberDescriptorsFromRefkey[0].symbol);
366
+ } else {
367
+ memberDescriptorsFromRefkey = [];
368
+ result = buildResult(currentScope, symbol);
369
+ }
370
+
371
+ // When we have member descriptors, this first entry is already part of the result due to passing it
372
+ // to buildResult above, so we don't need it here.
373
+ const newMemberPathDescriptors = memberDescriptorsFromRefkey.slice(1);
374
+ const allDescriptors = [...result.memberPath.map(s => ({
375
+ symbol: s,
376
+ isMemberAccess: false
377
+ })), ...newMemberPathDescriptors];
378
+
379
+ // update the member path and resolved symbol from our member descriptors
380
+ // (if we have them)
381
+ if (memberDescriptorsFromRefkey.length > 0) {
382
+ for (const descriptor of newMemberPathDescriptors) {
383
+ result.memberPath.push(descriptor.symbol);
384
+ }
385
+ result.symbol = memberDescriptorsFromRefkey.at(-1).symbol;
386
+ }
387
+
388
+ // a subcomputed here ensures we don't lose the progress above When
389
+ // we fail to resolve because a type isn't available yet.
390
+ return computed(() => {
391
+ // resolve each member in the member path
392
+ let currentBase = result.lexicalDeclaration;
393
+ for (const descriptor of allDescriptors) {
394
+ const member = descriptor.symbol;
395
+ if (currentBase.isTyped && !currentBase.hasTypeSymbol) {
396
+ debug.trace(TracePhase.resolve.pending, () => `${formatRefkeys(refkey)} needs type information from a parent type.`);
397
+ // waiting for type
398
+ return undefined;
399
+ }
400
+ resolveMember(currentBase, member, options.memberResolver, {
401
+ referencePath: result.fullReferencePath,
402
+ isMemberAccess: descriptor.isMemberAccess
403
+ });
404
+ currentBase = member;
405
+ }
406
+ debug.trace(TracePhase.resolve.success, () => `${formatRefkeys(refkey)} successfully resolved to ${formatSymbolName(symbol)}.`);
407
+ return result;
408
+ }).value;
409
+ });
410
+ }
411
+
412
+ /**
413
+ * Extracts member descriptors from a refkey, tracking which members
414
+ * were accessed via memberRefkey for proper member resolution context.
415
+ */
416
+ function getMemberPathFromRefkey(refkey) {
417
+ if (isMemberRefkey(refkey)) {
418
+ return [...getMemberPathFromRefkey(refkey.base), {
419
+ symbol: getMemberSymbolFromMemberRefkey(refkey).value,
420
+ isMemberAccess: true
421
+ }];
422
+ }
423
+ return [{
424
+ symbol: getSymbolForRefkey(refkey).value,
425
+ isMemberAccess: false
426
+ }];
427
+ }
428
+ function getMemberSymbolFromMemberRefkey(refkey) {
429
+ if (typeof refkey.member === "string") {
430
+ return computed(() => {
431
+ const baseSymbol = getSymbolForRefkey(refkey.base).value;
432
+ if (!baseSymbol) {
433
+ return undefined;
434
+ }
435
+ return baseSymbol.resolveMemberByName(refkey.member);
436
+ });
437
+ } else {
438
+ return getSymbolForRefkey(refkey.member);
439
+ }
440
+ }
441
+ function resolveMember(base, member, memberResolver, context) {
442
+ if (memberResolver) {
443
+ memberResolver(base, member, context);
444
+ } else {
445
+ // default member resolution
446
+ if (!member.isMemberSymbol) {
447
+ throw new Error(`${formatSymbolName(member)} is not a member symbol.`);
448
+ }
449
+ const memberOwner = base.hasTypeSymbol ? base.type : base.dealias();
450
+ if (member.ownerSymbol !== memberOwner) {
451
+ throw new Error(`${formatSymbolName(member)} is not a member of ${formatSymbolName(base)}.`);
452
+ }
453
+ }
454
+ }
455
+ function notifySymbolCreated(symbol) {
456
+ effect(oldRefkeys => {
457
+ if (symbol.refkeys) {
458
+ debug.trace(TracePhase.resolve.pending, () => `Notifying resolutions for ${formatRefkeys(symbol.refkeys)}.`);
459
+ }
460
+ if (oldRefkeys) {
461
+ for (const refkey of oldRefkeys) {
462
+ if (!symbol.refkeys.includes(refkey)) {
463
+ // remove the old refkey from the known declarations
464
+ knownDeclarations.delete(refkey);
465
+
466
+ // reset any waiting declarations
467
+ if (waitingDeclarations.has(refkey)) {
468
+ const signal = waitingDeclarations.get(refkey);
469
+ signal.value = undefined;
470
+ }
471
+ }
472
+ }
473
+ }
474
+ for (const refkey of symbol.refkeys) {
475
+ // notify those waiting for this refkey
476
+ knownDeclarations.set(refkey, symbol);
477
+ if (waitingDeclarations.has(refkey)) {
478
+ const signal = waitingDeclarations.get(refkey);
479
+ signal.value = symbol;
480
+ }
481
+ const scope = symbol.scope;
482
+ if (!scope) {
483
+ continue;
484
+ }
485
+
486
+ // notify those waiting for this symbol name
487
+ const waitingScope = waitingSymbolNames.get(scope);
488
+ if (waitingScope) {
489
+ const waitingName = waitingScope.get(symbol.name);
490
+ if (waitingName) {
491
+ waitingName.value = symbol;
492
+ }
493
+ }
494
+ }
495
+ return [...symbol.refkeys];
496
+ }, undefined, {
497
+ debug: {
498
+ name: "binder:notifySymbolCreated",
499
+ type: "binder"
500
+ }
501
+ });
502
+ }
503
+ }
504
+
505
+ /**
506
+ * Resolve a refkey in the current scope. Returns a Ref for the resolution result.
507
+ * The value of the ref will be undefined if the identifier hasn't been resolved yet.
508
+ *
509
+ * @remarks
510
+ *
511
+ * This API may return a ref for undefined, but that does not mean that the symbol is
512
+ * not found. The symbol you're looking for may not have been declared yet. When the symbol
513
+ * is declared, the ref will be updated with the resolution result.
514
+ */
515
+ export function resolve(refkey, options = {}) {
516
+ const scope = useScope();
517
+ const memberScope = useMemberContext();
518
+ const binder = scope?.binder ?? memberScope?.ownerSymbol.binder;
519
+ if (!binder) {
520
+ throw new Error("Can't resolve refkey without a binder");
521
+ }
522
+ const result = binder.resolveDeclarationByKey(scope, refkey, options);
523
+ let diagnosticHandle = null;
524
+ effect(() => {
525
+ if (result.value === undefined) {
526
+ // Emit diagnostic for this specific reference site
527
+ if (!diagnosticHandle) {
528
+ diagnosticHandle = emitDiagnostic({
529
+ severity: "warning",
530
+ message: `Unresolved refkey: ${inspectRefkey(refkey)}`
531
+ });
532
+ }
533
+ } else {
534
+ // Dismiss diagnostic when resolved
535
+ if (diagnosticHandle) {
536
+ diagnosticHandle.dismiss();
537
+ diagnosticHandle = null;
538
+ }
539
+ }
540
+ }, undefined, {
541
+ debug: {
542
+ name: `binder:resolve:${inspectRefkey(refkey)}`,
543
+ type: "binder"
544
+ }
545
+ });
546
+ onCleanup(() => {
547
+ if (diagnosticHandle) {
548
+ diagnosticHandle.dismiss();
549
+ diagnosticHandle = null;
550
+ }
551
+ });
552
+ return result;
553
+ }
554
+
555
+ /**
556
+ * Get a ref to the symbol for the given refkey using the current binder. The
557
+ * value of the ref will be undefined when no symbol with that refkey has been
558
+ * created.
559
+ *
560
+ * @remarks
561
+ *
562
+ * This API may return a ref for undefined, but that does not mean that the symbol is
563
+ * not found. The symbol you're looking for may not have been declared yet. When the symbol
564
+ * is declared, the ref will be updated with the symbol.
565
+ */
566
+ export function symbolForRefkey(refkey) {
567
+ const binder = useBinder();
568
+ if (!binder) {
569
+ throw new Error("Can't resolve refkey without a binder");
570
+ }
571
+ return binder.getSymbolForRefkey(refkey);
572
+ }
573
+ const createSymbolsSymbol = Symbol();
574
+ export function getSymbolCreator(creator) {
575
+ return creator[createSymbolsSymbol];
576
+ }
577
+ export function getSymbolCreatorSymbol() {
578
+ return createSymbolsSymbol;
579
+ }
580
+
581
+ /**
582
+ * An object that can register symbols into a binder. Pass instances to the
583
+ * `externals` prop of `<Output>` to make library symbols resolvable.
584
+ *
585
+ * @remarks
586
+ * `SymbolCreator` is a low-level core mechanism for eager symbol registration.
587
+ * The recommended pattern for language packages is lazy self-registration:
588
+ * implement `[TO_SYMBOL]()` on descriptors to call `useBinder()`, create and
589
+ * cache symbols per binder via a `WeakMap`, and register them into the
590
+ * appropriate scope automatically. This approach does not require `externals`.
591
+ * See the C# package's `createLibrary()` for a reference implementation.
592
+ *
593
+ * See {@link TO_SYMBOL} and {@link REFKEYABLE}.
594
+ */
595
+ //# sourceMappingURL=binder.js.map