@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
@@ -0,0 +1,210 @@
1
+ # References & Refkeys
2
+
3
+ Alloy's refkey system lets you declare named symbols and reference them across files. When a reference is rendered, Alloy automatically computes the correct name, generates any needed imports, and handles name conflicts.
4
+
5
+ ## Creating Refkeys
6
+
7
+ A **refkey** uniquely identifies a symbol. Create one with `refkey()`:
8
+
9
+ ```ts
10
+ import { refkey } from "@alloy-js/core";
11
+
12
+ // Unique refkey (different every call)
13
+ const myKey = refkey();
14
+
15
+ // Seeded refkey (same args → same refkey)
16
+ const modelKey = refkey(schemaObject);
17
+ ```
18
+
19
+ Seeded refkeys are the most common pattern. When you're generating code from input data (like a schema), pass the data object to `refkey()` and you'll always get the same key for the same object. This means you don't need to pass refkeys around — any code that has the original data object can recreate the same refkey.
20
+
21
+ ### Composite Refkeys
22
+
23
+ Pass multiple arguments to create a composite key when you need multiple declarations for the same input:
24
+
25
+ ```tsx
26
+ // Two declarations from the same schema
27
+ <Declaration name="UserInput" refkey={refkey(userSchema, "input")} />
28
+ <Declaration name="UserOutput" refkey={refkey(userSchema, "output")} />
29
+ ```
30
+
31
+ Arguments are compared by identity for objects and by value for primitives. The order matters — `refkey(a, b)` is different from `refkey(b, a)`.
32
+
33
+ ## Declaring Symbols
34
+
35
+ Pass a refkey to a declaration component to register a symbol:
36
+
37
+ ```tsx
38
+ <Declaration name="getUser" refkey={refkey(getUserOp)}>
39
+ {body}
40
+ </Declaration>
41
+ ```
42
+
43
+ The declaration component creates a symbol in the current scope, associated with that refkey. Other components can then reference it by the same refkey.
44
+
45
+ ## Referencing Symbols
46
+
47
+ There are two ways to reference a declared symbol.
48
+
49
+ ### Inline Refkeys in JSX
50
+
51
+ The simplest approach: use a refkey directly as a JSX child.
52
+
53
+ ```tsx
54
+ <SourceFile path="client.ts">
55
+ const user = await {refkey(getUserOp)}();
56
+ </SourceFile>
57
+ ```
58
+
59
+ When a refkey appears as a JSX child, Alloy resolves it through the current source file's `reference` function. This renders the symbol's name and, if the declaration is in a different file or package, automatically generates the necessary import statement.
60
+
61
+ The above might render:
62
+
63
+ ```ts
64
+ import { getUser } from "./api.js";
65
+
66
+ const user = await getUser();
67
+ ```
68
+
69
+ ### The Reference Component
70
+
71
+ Each language package provides a `Reference` component for explicit control:
72
+
73
+ ```tsx
74
+ import { Reference } from "@alloy-js/typescript";
75
+
76
+ <Reference refkey={refkey(model)} type />;
77
+ ```
78
+
79
+ The `type` prop (TypeScript-specific) generates `import type` instead of `import`. Most of the time inline refkeys are sufficient — use `Reference` when you need language-specific options.
80
+
81
+ ### Refkeys in `code` Templates
82
+
83
+ Refkeys work inside `code` template expressions too:
84
+
85
+ ```tsx
86
+ code`someExpression(${refkey(responseModel)})`;
87
+ ```
88
+
89
+ This resolves the refkey and splices the rendered name into the output.
90
+
91
+ ## Namekeys
92
+
93
+ A **namekey** is a special refkey that also carries a name and naming options. Use it when you want to both name and reference a symbol in one value:
94
+
95
+ ```tsx
96
+ import { namekey } from "@alloy-js/core";
97
+
98
+ const myClass = namekey("MyClass");
99
+
100
+ return (
101
+ <>
102
+ <Declaration name={myClass}>{/* ... */}</Declaration>
103
+ {myClass}
104
+ </>
105
+ );
106
+ ```
107
+
108
+ This renders a declaration named `MyClass` and a reference to it. The namekey serves as both the `name` prop and a refkey.
109
+
110
+ ### Name Policy Bypass
111
+
112
+ Namekeys can opt out of the language's name policy or conflict resolution:
113
+
114
+ ```tsx
115
+ // Keep the exact name, don't apply camelCase/snake_case transforms
116
+ const specialName = namekey("$internal", { ignoreNamePolicy: true });
117
+
118
+ // Don't disambiguate if another symbol has the same name
119
+ const fixedName = namekey("toString", { ignoreNameConflict: true });
120
+ ```
121
+
122
+ ### Refkey vs. Namekey
123
+
124
+ | | `refkey()` | `namekey()` |
125
+ | -------------- | ------------------------------------ | -------------------------------------------- |
126
+ | **Purpose** | Identify a symbol by its source data | Identify + name a symbol |
127
+ | **Name** | Set separately via `name` prop | Carried in the namekey |
128
+ | **Uniqueness** | Same args → same key | Always unique (like `refkey()` with no args) |
129
+ | **Use when** | Generating from input data | Generating fixed/known names |
130
+
131
+ Use `refkey(data)` when you're mapping input data to declarations — this is the common case. Use `namekey()` when you're creating declarations with known names that don't come from input data.
132
+
133
+ ## Member Refkeys
134
+
135
+ Use `memberRefkey()` to reference a member of a symbol — for example, an instance property of a class:
136
+
137
+ ```ts
138
+ import { memberRefkey } from "@alloy-js/core";
139
+
140
+ const classKey = refkey(myClass);
141
+ const propKey = memberRefkey(classKey, refkey(myClass, "id"));
142
+ ```
143
+
144
+ Member refkeys resolve through the language's member resolution system, which handles things like `this.id` inside a class vs. `instance.id` outside.
145
+
146
+ ## Cross-File References
147
+
148
+ Refkeys work across files automatically. When you reference a symbol declared in another file, the language package generates the necessary import:
149
+
150
+ ```tsx
151
+ <SourceFile path="models.ts">
152
+ <Declaration name="User" refkey={refkey(userSchema)}>
153
+ {/* language-specific declaration body */}
154
+ </Declaration>
155
+ </SourceFile>
156
+
157
+ <SourceFile path="client.ts">
158
+ const user: {refkey(userSchema)} = await fetchUser();
159
+ </SourceFile>
160
+ ```
161
+
162
+ The language package handles the import generation. For example, in TypeScript `client.ts` renders with an auto-generated import:
163
+
164
+ ```ts
165
+ import { User } from "./models.js";
166
+
167
+ const user: User = await fetchUser();
168
+ ```
169
+
170
+ This works across packages too — Alloy resolves the correct package name and path.
171
+
172
+ **Order doesn't matter.** References can appear before their declarations in the component tree. Alloy resolves everything reactively, so forward references work naturally.
173
+
174
+ ## External Package Symbols
175
+
176
+ Language packages provide helpers like `createPackage()` (TypeScript) or `createModule()` (Python) to declare symbols from external libraries that your generated code imports:
177
+
178
+ ```ts
179
+ import { createPackage } from "@alloy-js/typescript";
180
+
181
+ const node = createPackage({
182
+ name: "node:path",
183
+ descriptor: {
184
+ ".": { named: ["join", "resolve", "dirname"] },
185
+ },
186
+ });
187
+
188
+ // Reference in a component — auto-generates: import { join } from "node:path"
189
+ code`${node.join}("a", "b")`;
190
+ ```
191
+
192
+ These symbols aren't declared in the output tree — they exist only in the binder's symbol table and generate imports when referenced.
193
+
194
+ ## How Resolution Works
195
+
196
+ When a refkey is encountered during rendering:
197
+
198
+ 1. The render pipeline detects the refkey (via `isRefkeyable()` check)
199
+ 2. It calls `sourceFile.reference({ refkey })` — the reference function provided by the language package's SourceFile component
200
+ 3. The language's `ref()` function calls `resolve()` from core, which searches the scope tree for the symbol matching the refkey
201
+ 4. Based on where the symbol is relative to the reference (local, different module, different package), the language package renders the appropriate syntax and generates any needed imports
202
+ 5. The result is reactive — if the symbol moves or is renamed, the reference updates automatically
203
+
204
+ ## Best Practices
205
+
206
+ - **Seed refkeys from input data** — `refkey(schemaObj)` is better than passing refkeys around manually.
207
+ - **Use composite keys for disambiguation** — `refkey(schema, "input")` vs `refkey(schema, "output")` when one input maps to multiple declarations.
208
+ - **Use inline refkeys** (`{refkey(...)}` in JSX) for most references — simpler than `<Reference>`.
209
+ - **Use `namekey` sparingly** — only when the name is known ahead of time and not derived from input data.
210
+ - **Export declarations that need cross-file references** — a symbol must be reachable through the scope tree to be referenced.
@@ -0,0 +1,244 @@
1
+ # Alloy JSX Style Guide
2
+
3
+ Idiomatic patterns for writing Alloy JSX components. Alloy JSX is **not** React — it renders to source code text, not DOM elements. Do not use HTML elements like `<div>`, `<span>`, etc.
4
+
5
+ ## String Content
6
+
7
+ Use plain string children or the `code` template tag. **Never** wrap string literals in expression braces.
8
+
9
+ ```tsx
10
+ // ✅ Good — plain text children
11
+ <Declaration>hello world</Declaration>;
12
+
13
+ // ✅ Good — code template for interpolation
14
+ code`Promise<${returnType}>`;
15
+
16
+ // ✅ Good — code template for multi-line structured output
17
+ return code`
18
+ <?xml version="1.0" encoding="UTF-8"?>
19
+ <project>
20
+ ${children}
21
+ </project>
22
+ `;
23
+
24
+ // ❌ Bad — unnecessary expression wrapper around a string
25
+ <Declaration>{"hello world"}</Declaration>;
26
+ ```
27
+
28
+ Use `code` template tags for any output that mixes static text with interpolated expressions. Use plain template literals only for inline fragments that won't appear directly in rendered output (e.g. computing a variable).
29
+
30
+ When you introduce a JSX line break only for source formatting, preserve any rendered space that should still exist at that boundary with `{' '}`:
31
+
32
+ ```tsx
33
+ // ✅ Good — line break is only for formatting, so keep the rendered space explicit
34
+ <>
35
+ Hello{' '}
36
+ world
37
+ </>
38
+
39
+ // ❌ Avoid — the line break removed the intended space between words
40
+ <>
41
+ Hello
42
+ world
43
+ </>
44
+ ```
45
+
46
+ ## Conditional Rendering
47
+
48
+ Use `{condition && content}` for short inline content like keywords, punctuation, or modifiers:
49
+
50
+ ```tsx
51
+ // ✅ Good — short conditional modifier
52
+ {
53
+ props.async && "async ";
54
+ }
55
+ {
56
+ props.nullable && "?";
57
+ }
58
+ {
59
+ !props.children && ";";
60
+ }
61
+ ```
62
+
63
+ Use `<Show when={}>` for larger conditional blocks:
64
+
65
+ ```tsx
66
+ // ✅ Good — conditional block with Show
67
+ <Show when={!!param.type}>
68
+ : <TypeSlot>{param.type}</TypeSlot>
69
+ </Show>;
70
+
71
+ // ❌ Avoid — large conditional blocks with &&
72
+ {
73
+ props.typeParameters && (
74
+ <TypeParameterList parameters={props.typeParameters} />
75
+ );
76
+ }
77
+ ```
78
+
79
+ ## Boolean Props
80
+
81
+ Use shorthand for literal `true` values. Use explicit expressions when the value is conditional:
82
+
83
+ ```tsx
84
+ // ✅ Good — shorthand for literal true
85
+ <For each={items} comma hardline enderPunctuation>
86
+
87
+ // ✅ Good — explicit expression when conditional
88
+ <Indent
89
+ hardline={!props.inline && hasContent}
90
+ softline={props.inline || isEmpty}
91
+ trailingBreak
92
+ >
93
+ ```
94
+
95
+ ## List Rendering
96
+
97
+ Use `<For each={}>` to render lists in output. Use `.map()` only for transforming data before rendering:
98
+
99
+ ```tsx
100
+ // ✅ Good — For in render output
101
+ <For each={props.model.properties} comma hardline enderPunctuation>
102
+ {(prop) => <Property property={prop} />}
103
+ </For>;
104
+
105
+ // ✅ Good — .map() for data transformation
106
+ const parameters = (props.parameters as string[]).map((name) => ({
107
+ name,
108
+ type: undefined,
109
+ }));
110
+ ```
111
+
112
+ ## Fragments
113
+
114
+ Use `<>...</>` to combine adjacent pieces of output without a wrapper. Prefer `code` template tags when the content is primarily text with interpolation:
115
+
116
+ ```tsx
117
+ // ✅ Good — fragment for combining JSX pieces
118
+ <>
119
+ {extendsClause}
120
+ {implementsClause}
121
+ </>;
122
+
123
+ // ✅ Good — code template when mixing text and expressions
124
+ code`extends ${baseClass}`;
125
+ ```
126
+
127
+ ## Props
128
+
129
+ Do not destructure props. Access them as `props.x`:
130
+
131
+ ```tsx
132
+ // ✅ Good
133
+ export function MyComponent(props: MyComponentProps) {
134
+ return (
135
+ <Declaration name={props.name} refkey={props.refkey}>
136
+ {props.children}
137
+ </Declaration>
138
+ );
139
+ }
140
+
141
+ // ❌ Bad — destructured props break reactivity
142
+ export function MyComponent({ name, refkey, children }: MyComponentProps) {
143
+ // ...
144
+ }
145
+ ```
146
+
147
+ Use `splitProps` to separate props for forwarding:
148
+
149
+ ```tsx
150
+ const [rest, forProps] = splitProps(props, ["children"]);
151
+ ```
152
+
153
+ ## Reactivity
154
+
155
+ Use `computed()` for reactive derived values. Use `memo()` for memoizing children or component expressions:
156
+
157
+ ```tsx
158
+ // ✅ Good — computed for a reactive signal
159
+ const keyword = computed(() => (props.const ? "const" : "var"));
160
+
161
+ // ✅ Good — memo for memoizing rendered children
162
+ const resolvedChildren = memo(() =>
163
+ childrenArray(() => props.children, { preserveFragments: true }),
164
+ );
165
+ ```
166
+
167
+ ## Component Return Patterns
168
+
169
+ Choose your return style based on the content:
170
+
171
+ - **JSX** for structural component trees
172
+ - **`code` template** for text-heavy structured output
173
+ - **`memo()`** wrapping reactive logic that determines what to render
174
+
175
+ ```tsx
176
+ // JSX return
177
+ export function MyComponent(props: MyComponentProps) {
178
+ return (
179
+ <Declaration name={props.name}>
180
+ <Indent hardline trailingBreak>
181
+ {props.children}
182
+ </Indent>
183
+ </Declaration>
184
+ );
185
+ }
186
+
187
+ // code template return
188
+ export function XmlElement(props: XmlElementProps) {
189
+ return code`
190
+ <${props.tag}>
191
+ ${props.children}
192
+ </${props.tag}>
193
+ `;
194
+ }
195
+
196
+ // memo return for reactive branching
197
+ export function ValueExpression(props: ValueExpressionProps): Children {
198
+ return memo((): Children => {
199
+ if (Array.isArray(props.jsValue)) {
200
+ return <ArrayExpression jsValue={props.jsValue} />;
201
+ }
202
+ return String(props.jsValue);
203
+ });
204
+ }
205
+ ```
206
+
207
+ ## Symbols and References
208
+
209
+ Use `refkey()` to capture symbols and reference them across files:
210
+
211
+ ```tsx
212
+ // Creating a declaration with a refkey
213
+ <InterfaceDeclaration name={props.model.name} refkey={refkey(props.model)}>
214
+ <For each={props.model.properties} comma hardline enderPunctuation>
215
+ {(prop) => <InterfaceMember name={prop.name} type={prop.type} />}
216
+ </For>
217
+ </InterfaceDeclaration>;
218
+
219
+ // Referencing the symbol elsewhere (auto-resolves name and imports)
220
+ code`Promise<${refkey(responseModel)}>`;
221
+ ```
222
+
223
+ ## Component File Organization
224
+
225
+ Structure component files as: imports, props interface, component function.
226
+
227
+ ```tsx
228
+ import { Children, code, refkey } from "@alloy-js/core";
229
+ import { Declaration } from "@alloy-js/typescript";
230
+
231
+ export interface MyComponentProps {
232
+ name: string;
233
+ children?: Children;
234
+ }
235
+
236
+ export function MyComponent(props: MyComponentProps) {
237
+ return <Declaration name={props.name}>{props.children}</Declaration>;
238
+ }
239
+ ```
240
+
241
+ - File names use `kebab-case` (e.g. `my-component.tsx`)
242
+ - Component names use `PascalCase`
243
+ - Props interfaces are named `<ComponentName>Props`
244
+ - Annotate return type as `Children` when the return is non-trivial
package/docs/index.md ADDED
@@ -0,0 +1,22 @@
1
+ # @alloy-js/core
2
+
3
+ ## Conceptual Guides
4
+
5
+ - [Components](components.md) — defining components, props, children, tagged children
6
+ - [Control Flow](control-flow.md) — Show, For, Switch/Match
7
+ - [Rendering](rendering.md) — the render pipeline, tree structure, output files
8
+ - [Reactivity](reactivity.md) — reactive primitives, effects, memos, scheduling
9
+ - [Formatting](formatting.md) — intrinsic elements, layout components, `code`/`text` tags
10
+ - [Symbols & Scopes](symbols-and-scopes.md) — declarations, references, refkeys, name policies, the binder
11
+ - [Context](context.md) — dependency injection through the component tree
12
+ - [Debugging](debugging.md) — diagnostics, trace files, devtools
13
+
14
+ ## Framework Guides
15
+
16
+ - [Style Guide](guides/style-guide.md) — idiomatic Alloy JSX patterns, conditional rendering, props, reactivity
17
+ - [References & Refkeys](guides/references-and-refkeys.md) — symbol declarations, cross-file references, namekeys
18
+ - [Language Package Guide](guides/language-package-guide.md) — creating a new `@alloy-js/<language>` package
19
+
20
+ ## API Reference
21
+
22
+ - [API Reference](api/index.md) — auto-generated API documentation
@@ -0,0 +1,68 @@
1
+ # Reactivity
2
+
3
+ Alloy uses Vue's signal primitives from `@vue/reactivity`, wrapped with an owner/context system, a custom scheduler, and cleanup lifecycle.
4
+
5
+ ## Primitives
6
+
7
+ - [**`ref(value)`**](api/functions/ref.md) — reactive container. Access/set via `.value`. Deep conversion.
8
+ - [**`shallowRef(value)`**](api/functions/shallowRef.md) — no deep conversion. **Prefer in most cases.**
9
+ - [**`computed(fn)`**](api/functions/computed.md) — derived reactive value (lazy, cached).
10
+ - **`reactive(obj)`** — deeply reactive proxy.
11
+ - [**`shallowReactive(obj)`**](api/functions/shallowReactive.md) — no deep conversion. **Prefer over `reactive()`.**
12
+
13
+ ## [`effect(fn, current?, options?)`](api/functions/effect.md)
14
+
15
+ Re-runs `fn` when tracked dependencies change. Runs through Alloy's scheduler, creates a new [`Context`](api/types/Context.md) in the owner chain, supports cleanup via [`onCleanup()`](api/functions/onCleanup.md).
16
+
17
+ ## [`memo(fn, equal?, name?)`](api/functions/memo.md)
18
+
19
+ Returns a getter caching the result of `fn`. Re-evaluates when dependencies change. If `equal` is true, skips downstream updates when the value is unchanged.
20
+
21
+ ```ts
22
+ const fullName = memo(() => `${first.value} ${last.value}`);
23
+ fullName(); // cached
24
+ ```
25
+
26
+ ## [`root(fn)`](api/functions/root.md)
27
+
28
+ Creates an isolated reactive scope. Reactive reads inside `fn` are not tracked by any outer effect. The callback receives a dispose function. Returns the callback's return value.
29
+
30
+ ## [`untrack(fn)`](api/functions/untrack.md)
31
+
32
+ Executes `fn` without tracking reactive dependencies. Useful for reading reactive values without subscribing, or performing side effects (e.g., registering imports) without creating unwanted dependencies.
33
+
34
+ ## [`onCleanup(fn)`](api/functions/onCleanup.md)
35
+
36
+ Registers a cleanup function on the current context. Runs when the containing effect re-executes (before the next run) or when the containing root/component is disposed.
37
+
38
+ Common uses:
39
+
40
+ - Deleting symbols when a declaration is removed: `onCleanup(() => symbol.delete())`
41
+ - Removing items from reactive collections
42
+ - Dismissing diagnostics
43
+
44
+ ## Owner Chain
45
+
46
+ Every [`effect()`](api/functions/effect.md) and [`root()`](api/functions/root.md) creates a [`Context`](api/types/Context.md) linked to its parent via `.owner`, forming a tree mirroring the component hierarchy. [`useContext()`](api/functions/useContext.md) traverses this chain.
47
+
48
+ ## Scheduler
49
+
50
+ Synchronous dual-queue scheduler:
51
+
52
+ - **Immediate queue** — drained first.
53
+ - **Deferred queue** — drained after.
54
+
55
+ `flushJobs()` runs synchronously during [`render()`](api/functions/render.md). `flushJobsAsync()` awaits pending promises — primarily useful in tests.
56
+
57
+ ## Reactivity in JSX
58
+
59
+ The JSX transform wraps reactive expressions in effects. When a dependency changes, only that expression re-evaluates — the component function does not re-run.
60
+
61
+ ```tsx
62
+ function Counter(props: { count: Ref<number> }) {
63
+ // Runs once. {props.count.value} is tracked in its own effect.
64
+ return <>Count: {props.count.value}</>;
65
+ }
66
+ ```
67
+
68
+ > **Warning:** Props may be reactive getters. `<Comp foo={myRef.value} />` compiles to a getter tracking `myRef`. Never use `/*@once*/` unless you're certain the value is non-reactive.
@@ -0,0 +1,41 @@
1
+ # Rendering
2
+
3
+ Alloy renders a component tree into output files. The pipeline has three layers.
4
+
5
+ ## Pipeline
6
+
7
+ ```
8
+ Component Tree → Rendered Text Tree → Output Files
9
+ (JSX) (strings + hooks) (formatted text)
10
+ ```
11
+
12
+ 1. [**`render(children, options?)`**](api/functions/render.md) — entry point. Returns an [`OutputDirectory`](api/types/OutputDirectory.md).
13
+ 2. [**`renderTree(children)`**](api/functions/renderTree.md) — evaluates components into a [`RenderedTextTree`](api/types/RenderedTextTree.md). Components run inside reactive effects and re-execute when dependencies change.
14
+ 3. **`sourceFilesForTree(tree)`** — walks the rendered tree, calling [`printTree()`](api/functions/printTree.md) per file to produce a formatted string for each source file.
15
+
16
+ `renderTree()`, `printTree()`, and `sourceFilesForTree()` are available individually for advanced use cases.
17
+
18
+ ## Key Components
19
+
20
+ - [**`<Output>`**](api/components/Output.md) — root. Sets up binder, format options, name policy, base path.
21
+ - [**`<SourceDirectory>`**](api/components/SourceDirectory.md) — directory in the output tree.
22
+ - [**`<SourceFile>`**](api/components/SourceFile.md) — file with `path`, `filetype`, optional print options.
23
+
24
+ ```tsx
25
+ render(
26
+ <Output>
27
+ <SourceDirectory path="src">
28
+ <SourceFile path="index.ts" filetype="typescript">
29
+ console.log("hello");
30
+ </SourceFile>
31
+ </SourceDirectory>
32
+ </Output>,
33
+ );
34
+ ```
35
+
36
+ ## File Operations
37
+
38
+ - [**`<AppendFile>`**](api/components/AppendFile.md) — append to an existing output file.
39
+ - [**`<CopyFile>`**](api/components/CopyFile.md) — copy from the host filesystem into output.
40
+ - [**`<UpdateFile>`**](api/components/UpdateFile.md) — read and transform an existing output file.
41
+ - [**`<TemplateFile>`**](api/components/TemplateFile.md) — read a host file, transform, write to output.