@alloy-js/core 0.24.0-dev.2 → 0.24.0-dev.7

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 (656) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/dev/src/components/AccessExpression.test.js +30 -38
  3. package/dist/dev/src/components/AccessExpression.test.js.map +1 -1
  4. package/dist/dev/src/components/Output.js +3 -2
  5. package/dist/dev/src/components/Output.js.map +1 -1
  6. package/dist/dev/src/components/SourceFile.js.map +1 -1
  7. package/dist/dev/src/content-slot.test.js +16 -18
  8. package/dist/dev/src/content-slot.test.js.map +1 -1
  9. package/dist/dev/src/context.js +30 -3
  10. package/dist/dev/src/context.js.map +1 -1
  11. package/dist/dev/src/debug/diagnostics.test.js +1 -1
  12. package/dist/dev/src/debug/diagnostics.test.js.map +1 -1
  13. package/dist/dev/src/debug/effects.test.js +1 -1
  14. package/dist/dev/src/debug/effects.test.js.map +1 -1
  15. package/dist/dev/src/debug/file-streaming.js +103 -0
  16. package/dist/dev/src/debug/file-streaming.js.map +1 -0
  17. package/dist/dev/src/debug/files.test.js +4 -5
  18. package/dist/dev/src/debug/files.test.js.map +1 -1
  19. package/dist/dev/src/debug/index.js +4 -6
  20. package/dist/dev/src/debug/index.js.map +1 -1
  21. package/dist/dev/src/debug/message-format.test.js +50 -52
  22. package/dist/dev/src/debug/message-format.test.js.map +1 -1
  23. package/dist/dev/src/debug/render-tree-orphans.test.js +13 -23
  24. package/dist/dev/src/debug/render-tree-orphans.test.js.map +1 -1
  25. package/dist/dev/src/debug/render.js +529 -352
  26. package/dist/dev/src/debug/render.js.map +1 -1
  27. package/dist/dev/src/debug/render.test.js +171 -92
  28. package/dist/dev/src/debug/render.test.js.map +1 -1
  29. package/dist/dev/src/debug/trace-writer.js +127 -15
  30. package/dist/dev/src/debug/trace-writer.js.map +1 -1
  31. package/dist/dev/src/debug/trace.js +0 -36
  32. package/dist/dev/src/debug/trace.js.map +1 -1
  33. package/dist/dev/src/devtools/devtools-server.js +55 -32
  34. package/dist/dev/src/devtools/devtools-server.js.map +1 -1
  35. package/dist/dev/src/devtools-entry.browser.js.map +1 -1
  36. package/dist/dev/src/devtools-entry.js.map +1 -1
  37. package/dist/dev/src/diagnostics.js +19 -1
  38. package/dist/dev/src/diagnostics.js.map +1 -1
  39. package/dist/dev/src/index.js +5 -2
  40. package/dist/dev/src/index.js.map +1 -1
  41. package/dist/dev/src/jsx-runtime.js +14 -8
  42. package/dist/dev/src/jsx-runtime.js.map +1 -1
  43. package/dist/dev/src/output-types.js +2 -0
  44. package/dist/dev/src/output-types.js.map +1 -0
  45. package/dist/dev/src/reactivity.js +155 -13
  46. package/dist/dev/src/reactivity.js.map +1 -1
  47. package/dist/dev/src/render/get-string-width.js +61 -0
  48. package/dist/dev/src/render/get-string-width.js.map +1 -0
  49. package/dist/dev/src/render/index.js +2 -0
  50. package/dist/dev/src/render/index.js.map +1 -0
  51. package/dist/dev/src/render/node-context.js +7 -0
  52. package/dist/dev/src/render/node-context.js.map +1 -0
  53. package/dist/dev/src/render/node.js +386 -0
  54. package/dist/dev/src/render/node.js.map +1 -0
  55. package/dist/dev/src/render/printer-support.js +180 -0
  56. package/dist/dev/src/render/printer-support.js.map +1 -0
  57. package/dist/dev/src/render/printer.js +797 -0
  58. package/dist/dev/src/render/printer.js.map +1 -0
  59. package/dist/dev/src/render-error.js +79 -0
  60. package/dist/dev/src/render-error.js.map +1 -0
  61. package/dist/dev/src/render-output.js +209 -0
  62. package/dist/dev/src/render-output.js.map +1 -0
  63. package/dist/dev/src/runtime/create-intrinsic.js +53 -0
  64. package/dist/dev/src/runtime/create-intrinsic.js.map +1 -0
  65. package/dist/dev/src/runtime/fragment.js +21 -0
  66. package/dist/dev/src/runtime/fragment.js.map +1 -0
  67. package/dist/dev/src/runtime/index.js +13 -0
  68. package/dist/dev/src/runtime/index.js.map +1 -0
  69. package/dist/dev/src/runtime/insert.js +453 -0
  70. package/dist/dev/src/runtime/insert.js.map +1 -0
  71. package/dist/dev/src/runtime/intrinsic.js +1 -11
  72. package/dist/dev/src/runtime/intrinsic.js.map +1 -1
  73. package/dist/dev/src/scheduler.js +38 -14
  74. package/dist/dev/src/scheduler.js.map +1 -1
  75. package/dist/dev/src/stc.js +2 -0
  76. package/dist/dev/src/stc.js.map +1 -1
  77. package/dist/dev/src/sti.js +1 -1
  78. package/dist/dev/src/sti.js.map +1 -1
  79. package/dist/dev/src/symbols/symbol-slot.test.js +5 -5
  80. package/dist/dev/src/symbols/symbol-slot.test.js.map +1 -1
  81. package/dist/dev/src/test-render.js +78 -0
  82. package/dist/dev/src/test-render.js.map +1 -0
  83. package/dist/dev/src/utils.js +47 -35
  84. package/dist/dev/src/utils.js.map +1 -1
  85. package/dist/dev/test/babel-e2e.test.js +218 -0
  86. package/dist/dev/test/babel-e2e.test.js.map +1 -0
  87. package/dist/dev/test/children.test.js +9 -11
  88. package/dist/dev/test/children.test.js.map +1 -1
  89. package/dist/dev/test/components/append-file.test.js +26 -27
  90. package/dist/dev/test/components/append-file.test.js.map +1 -1
  91. package/dist/dev/test/components/block.test.js +9 -11
  92. package/dist/dev/test/components/block.test.js.map +1 -1
  93. package/dist/dev/test/components/copy-file.test.js +1 -2
  94. package/dist/dev/test/components/copy-file.test.js.map +1 -1
  95. package/dist/dev/test/components/declaration.test.js +2 -2
  96. package/dist/dev/test/components/declaration.test.js.map +1 -1
  97. package/dist/dev/test/components/list.test.js +41 -43
  98. package/dist/dev/test/components/list.test.js.map +1 -1
  99. package/dist/dev/test/components/prose.test.js +4 -5
  100. package/dist/dev/test/components/prose.test.js.map +1 -1
  101. package/dist/dev/test/components/reference-or-content.test.js +32 -33
  102. package/dist/dev/test/components/reference-or-content.test.js.map +1 -1
  103. package/dist/dev/test/components/source-file.test.js +8 -7
  104. package/dist/dev/test/components/source-file.test.js.map +1 -1
  105. package/dist/dev/test/components/template-file.test.js +16 -17
  106. package/dist/dev/test/components/template-file.test.js.map +1 -1
  107. package/dist/dev/test/components/update-file.test.js +11 -12
  108. package/dist/dev/test/components/update-file.test.js.map +1 -1
  109. package/dist/dev/test/components/wrap.test.js +6 -8
  110. package/dist/dev/test/components/wrap.test.js.map +1 -1
  111. package/dist/dev/test/control-flow/for.test.js +58 -42
  112. package/dist/dev/test/control-flow/for.test.js.map +1 -1
  113. package/dist/dev/test/control-flow/match.test.js +15 -17
  114. package/dist/dev/test/control-flow/match.test.js.map +1 -1
  115. package/dist/dev/test/control-flow/show.test.js +5 -8
  116. package/dist/dev/test/control-flow/show.test.js.map +1 -1
  117. package/dist/dev/test/lazy-isempty.test.js +29 -31
  118. package/dist/dev/test/lazy-isempty.test.js.map +1 -1
  119. package/dist/dev/test/name-policy.test.js +2 -3
  120. package/dist/dev/test/name-policy.test.js.map +1 -1
  121. package/dist/dev/test/node.test.js +80 -0
  122. package/dist/dev/test/node.test.js.map +1 -0
  123. package/dist/dev/test/output-e2e.test.js +194 -0
  124. package/dist/dev/test/output-e2e.test.js.map +1 -0
  125. package/dist/dev/test/reactivity/circular-reactives.test.js +9 -9
  126. package/dist/dev/test/reactivity/circular-reactives.test.js.map +1 -1
  127. package/dist/dev/test/reactivity/cleanup.test.js +5 -6
  128. package/dist/dev/test/reactivity/cleanup.test.js.map +1 -1
  129. package/dist/dev/test/reactivity/ref-rendering.test.js +15 -15
  130. package/dist/dev/test/reactivity/ref-rendering.test.js.map +1 -1
  131. package/dist/dev/test/reactivity/test.test.js +18 -18
  132. package/dist/dev/test/reactivity/test.test.js.map +1 -1
  133. package/dist/dev/test/rendering/basic.test.js +18 -19
  134. package/dist/dev/test/rendering/basic.test.js.map +1 -1
  135. package/dist/dev/test/rendering/code.test.js +2 -3
  136. package/dist/dev/test/rendering/code.test.js.map +1 -1
  137. package/dist/dev/test/rendering/formatting.test.js +115 -121
  138. package/dist/dev/test/rendering/formatting.test.js.map +1 -1
  139. package/dist/dev/test/rendering/indent.test.js +23 -24
  140. package/dist/dev/test/rendering/indent.test.js.map +1 -1
  141. package/dist/dev/test/rendering/memoization.test.js +9 -5
  142. package/dist/dev/test/rendering/memoization.test.js.map +1 -1
  143. package/dist/dev/test/rendering/print-render-stack.test.js +20 -21
  144. package/dist/dev/test/rendering/print-render-stack.test.js.map +1 -1
  145. package/dist/dev/test/rendering/refkeys.test.js +1 -2
  146. package/dist/dev/test/rendering/refkeys.test.js.map +1 -1
  147. package/dist/dev/test/rendering/render-output-diagnostics.test.js +102 -0
  148. package/dist/dev/test/rendering/render-output-diagnostics.test.js.map +1 -0
  149. package/dist/dev/test/runtime.test.js +385 -0
  150. package/dist/dev/test/runtime.test.js.map +1 -0
  151. package/dist/dev/test/stc.test.js +0 -1
  152. package/dist/dev/test/stc.test.js.map +1 -1
  153. package/dist/dev/test/tree-test-utils.js +16 -0
  154. package/dist/dev/test/tree-test-utils.js.map +1 -0
  155. package/dist/dev/test/utils.test.js +34 -33
  156. package/dist/dev/test/utils.test.js.map +1 -1
  157. package/dist/dev/test/vitest.setup.js +2 -0
  158. package/dist/dev/test/vitest.setup.js.map +1 -0
  159. package/dist/dev/testing/devtools-utils.js +1 -1
  160. package/dist/dev/testing/devtools-utils.js.map +1 -1
  161. package/dist/dev/testing/extend-expect.js +30 -34
  162. package/dist/dev/testing/extend-expect.js.map +1 -1
  163. package/dist/dev/testing/render.js +7 -17
  164. package/dist/dev/testing/render.js.map +1 -1
  165. package/dist/devtools/index.html +17 -17
  166. package/dist/src/components/AccessExpression.test.d.ts +1 -1
  167. package/dist/src/components/AccessExpression.test.d.ts.map +1 -1
  168. package/dist/src/components/AccessExpression.test.js +5 -13
  169. package/dist/src/components/AccessExpression.test.js.map +1 -1
  170. package/dist/src/components/Output.d.ts +1 -1
  171. package/dist/src/components/Output.d.ts.map +1 -1
  172. package/dist/src/components/Output.js +2 -1
  173. package/dist/src/components/Output.js.map +1 -1
  174. package/dist/src/components/ReferenceOrContent.d.ts +1 -1
  175. package/dist/src/components/ReferenceOrContent.d.ts.map +1 -1
  176. package/dist/src/components/SourceFile.d.ts +1 -1
  177. package/dist/src/components/SourceFile.d.ts.map +1 -1
  178. package/dist/src/components/SourceFile.js.map +1 -1
  179. package/dist/src/content-slot.test.d.ts +1 -1
  180. package/dist/src/content-slot.test.d.ts.map +1 -1
  181. package/dist/src/content-slot.test.js +8 -10
  182. package/dist/src/content-slot.test.js.map +1 -1
  183. package/dist/src/context/format-options.d.ts +1 -1
  184. package/dist/src/context/format-options.d.ts.map +1 -1
  185. package/dist/src/context.d.ts +9 -1
  186. package/dist/src/context.d.ts.map +1 -1
  187. package/dist/src/context.js +30 -3
  188. package/dist/src/context.js.map +1 -1
  189. package/dist/src/debug/diagnostics.test.js +1 -1
  190. package/dist/src/debug/diagnostics.test.js.map +1 -1
  191. package/dist/src/debug/effects.test.js +1 -1
  192. package/dist/src/debug/effects.test.js.map +1 -1
  193. package/dist/src/debug/file-streaming.d.ts +22 -0
  194. package/dist/src/debug/file-streaming.d.ts.map +1 -0
  195. package/dist/src/debug/file-streaming.js +103 -0
  196. package/dist/src/debug/file-streaming.js.map +1 -0
  197. package/dist/src/debug/files.test.js +4 -5
  198. package/dist/src/debug/files.test.js.map +1 -1
  199. package/dist/src/debug/index.d.ts +5 -7
  200. package/dist/src/debug/index.d.ts.map +1 -1
  201. package/dist/src/debug/index.js +4 -6
  202. package/dist/src/debug/index.js.map +1 -1
  203. package/dist/src/debug/message-format.test.js +16 -18
  204. package/dist/src/debug/message-format.test.js.map +1 -1
  205. package/dist/src/debug/render-tree-orphans.test.js +8 -18
  206. package/dist/src/debug/render-tree-orphans.test.js.map +1 -1
  207. package/dist/src/debug/render.d.ts +71 -21
  208. package/dist/src/debug/render.d.ts.map +1 -1
  209. package/dist/src/debug/render.js +529 -352
  210. package/dist/src/debug/render.js.map +1 -1
  211. package/dist/src/debug/render.test.js +137 -74
  212. package/dist/src/debug/render.test.js.map +1 -1
  213. package/dist/src/debug/trace-writer.d.ts +6 -1
  214. package/dist/src/debug/trace-writer.d.ts.map +1 -1
  215. package/dist/src/debug/trace-writer.js +127 -15
  216. package/dist/src/debug/trace-writer.js.map +1 -1
  217. package/dist/src/debug/trace.d.ts +0 -36
  218. package/dist/src/debug/trace.d.ts.map +1 -1
  219. package/dist/src/debug/trace.js +0 -36
  220. package/dist/src/debug/trace.js.map +1 -1
  221. package/dist/src/devtools/devtools-protocol.d.ts +34 -1
  222. package/dist/src/devtools/devtools-protocol.d.ts.map +1 -1
  223. package/dist/src/devtools/devtools-server.d.ts.map +1 -1
  224. package/dist/src/devtools/devtools-server.js +55 -32
  225. package/dist/src/devtools/devtools-server.js.map +1 -1
  226. package/dist/src/devtools-entry.browser.d.ts +1 -1
  227. package/dist/src/devtools-entry.browser.d.ts.map +1 -1
  228. package/dist/src/devtools-entry.browser.js.map +1 -1
  229. package/dist/src/devtools-entry.d.ts +1 -1
  230. package/dist/src/devtools-entry.d.ts.map +1 -1
  231. package/dist/src/devtools-entry.js.map +1 -1
  232. package/dist/src/diagnostics.d.ts +4 -0
  233. package/dist/src/diagnostics.d.ts.map +1 -1
  234. package/dist/src/diagnostics.js +19 -1
  235. package/dist/src/diagnostics.js.map +1 -1
  236. package/dist/src/index.d.ts +5 -2
  237. package/dist/src/index.d.ts.map +1 -1
  238. package/dist/src/index.js +5 -2
  239. package/dist/src/index.js.map +1 -1
  240. package/dist/src/jsx-runtime.d.ts +13 -4
  241. package/dist/src/jsx-runtime.d.ts.map +1 -1
  242. package/dist/src/jsx-runtime.js +14 -8
  243. package/dist/src/jsx-runtime.js.map +1 -1
  244. package/dist/src/output-types.d.ts +40 -0
  245. package/dist/src/output-types.d.ts.map +1 -0
  246. package/dist/src/output-types.js +2 -0
  247. package/dist/src/output-types.js.map +1 -0
  248. package/dist/src/reactivity.d.ts +49 -18
  249. package/dist/src/reactivity.d.ts.map +1 -1
  250. package/dist/src/reactivity.js +155 -13
  251. package/dist/src/reactivity.js.map +1 -1
  252. package/dist/src/render/get-string-width.d.ts +19 -0
  253. package/dist/src/render/get-string-width.d.ts.map +1 -0
  254. package/dist/src/render/get-string-width.js +61 -0
  255. package/dist/src/render/get-string-width.js.map +1 -0
  256. package/dist/src/render/index.d.ts +2 -0
  257. package/dist/src/render/index.d.ts.map +1 -0
  258. package/dist/src/render/index.js +2 -0
  259. package/dist/src/render/index.js.map +1 -0
  260. package/dist/src/render/node-context.d.ts +5 -0
  261. package/dist/src/render/node-context.d.ts.map +1 -0
  262. package/dist/src/render/node-context.js +7 -0
  263. package/dist/src/render/node-context.js.map +1 -0
  264. package/dist/src/render/node.d.ts +146 -0
  265. package/dist/src/render/node.d.ts.map +1 -0
  266. package/dist/src/render/node.js +386 -0
  267. package/dist/src/render/node.js.map +1 -0
  268. package/dist/src/render/printer-support.d.ts +50 -0
  269. package/dist/src/render/printer-support.d.ts.map +1 -0
  270. package/dist/src/render/printer-support.js +180 -0
  271. package/dist/src/render/printer-support.js.map +1 -0
  272. package/dist/src/render/printer.d.ts +35 -0
  273. package/dist/src/render/printer.d.ts.map +1 -0
  274. package/dist/src/render/printer.js +797 -0
  275. package/dist/src/render/printer.js.map +1 -0
  276. package/dist/src/render-error.d.ts +4 -0
  277. package/dist/src/render-error.d.ts.map +1 -0
  278. package/dist/src/render-error.js +79 -0
  279. package/dist/src/render-error.js.map +1 -0
  280. package/dist/src/render-output.d.ts +42 -0
  281. package/dist/src/render-output.d.ts.map +1 -0
  282. package/dist/src/render-output.js +209 -0
  283. package/dist/src/render-output.js.map +1 -0
  284. package/dist/src/runtime/component.d.ts +2 -2
  285. package/dist/src/runtime/component.d.ts.map +1 -1
  286. package/dist/src/runtime/create-intrinsic.d.ts +28 -0
  287. package/dist/src/runtime/create-intrinsic.d.ts.map +1 -0
  288. package/dist/src/runtime/create-intrinsic.js +53 -0
  289. package/dist/src/runtime/create-intrinsic.js.map +1 -0
  290. package/dist/src/runtime/fragment.d.ts +16 -0
  291. package/dist/src/runtime/fragment.d.ts.map +1 -0
  292. package/dist/src/runtime/fragment.js +21 -0
  293. package/dist/src/runtime/fragment.js.map +1 -0
  294. package/dist/src/runtime/index.d.ts +12 -0
  295. package/dist/src/runtime/index.d.ts.map +1 -0
  296. package/dist/src/runtime/index.js +13 -0
  297. package/dist/src/runtime/index.js.map +1 -0
  298. package/dist/src/runtime/insert.d.ts +29 -0
  299. package/dist/src/runtime/insert.d.ts.map +1 -0
  300. package/dist/src/runtime/insert.js +453 -0
  301. package/dist/src/runtime/insert.js.map +1 -0
  302. package/dist/src/runtime/intrinsic.d.ts +12 -29
  303. package/dist/src/runtime/intrinsic.d.ts.map +1 -1
  304. package/dist/src/runtime/intrinsic.js +1 -11
  305. package/dist/src/runtime/intrinsic.js.map +1 -1
  306. package/dist/src/scheduler.d.ts.map +1 -1
  307. package/dist/src/scheduler.js +38 -14
  308. package/dist/src/scheduler.js.map +1 -1
  309. package/dist/src/stc.d.ts.map +1 -1
  310. package/dist/src/stc.js +2 -0
  311. package/dist/src/stc.js.map +1 -1
  312. package/dist/src/sti.d.ts +7 -6
  313. package/dist/src/sti.d.ts.map +1 -1
  314. package/dist/src/sti.js +1 -1
  315. package/dist/src/sti.js.map +1 -1
  316. package/dist/src/symbols/symbol-slot.test.js +5 -5
  317. package/dist/src/symbols/symbol-slot.test.js.map +1 -1
  318. package/dist/src/test-render.d.ts +31 -0
  319. package/dist/src/test-render.d.ts.map +1 -0
  320. package/dist/src/test-render.js +78 -0
  321. package/dist/src/test-render.js.map +1 -0
  322. package/dist/src/utils.d.ts +1 -1
  323. package/dist/src/utils.d.ts.map +1 -1
  324. package/dist/src/utils.js +40 -28
  325. package/dist/src/utils.js.map +1 -1
  326. package/dist/src/write-output.d.ts +1 -1
  327. package/dist/src/write-output.d.ts.map +1 -1
  328. package/dist/test/babel-e2e.test.d.ts +13 -0
  329. package/dist/test/babel-e2e.test.d.ts.map +1 -0
  330. package/dist/test/babel-e2e.test.js +218 -0
  331. package/dist/test/babel-e2e.test.js.map +1 -0
  332. package/dist/test/children.test.js +5 -7
  333. package/dist/test/children.test.js.map +1 -1
  334. package/dist/test/components/append-file.test.d.ts +1 -1
  335. package/dist/test/components/append-file.test.d.ts.map +1 -1
  336. package/dist/test/components/append-file.test.js +0 -1
  337. package/dist/test/components/append-file.test.js.map +1 -1
  338. package/dist/test/components/block.test.d.ts +1 -1
  339. package/dist/test/components/block.test.d.ts.map +1 -1
  340. package/dist/test/components/block.test.js +4 -6
  341. package/dist/test/components/block.test.js.map +1 -1
  342. package/dist/test/components/copy-file.test.d.ts +1 -1
  343. package/dist/test/components/copy-file.test.d.ts.map +1 -1
  344. package/dist/test/components/copy-file.test.js +1 -2
  345. package/dist/test/components/copy-file.test.js.map +1 -1
  346. package/dist/test/components/declaration.test.js +2 -2
  347. package/dist/test/components/declaration.test.js.map +1 -1
  348. package/dist/test/components/list.test.d.ts +1 -1
  349. package/dist/test/components/list.test.d.ts.map +1 -1
  350. package/dist/test/components/list.test.js +20 -22
  351. package/dist/test/components/list.test.js.map +1 -1
  352. package/dist/test/components/prose.test.d.ts +1 -1
  353. package/dist/test/components/prose.test.d.ts.map +1 -1
  354. package/dist/test/components/prose.test.js +0 -1
  355. package/dist/test/components/prose.test.js.map +1 -1
  356. package/dist/test/components/reference-or-content.test.js +8 -9
  357. package/dist/test/components/reference-or-content.test.js.map +1 -1
  358. package/dist/test/components/source-file.test.d.ts +1 -1
  359. package/dist/test/components/source-file.test.d.ts.map +1 -1
  360. package/dist/test/components/source-file.test.js +5 -4
  361. package/dist/test/components/source-file.test.js.map +1 -1
  362. package/dist/test/components/template-file.test.d.ts +1 -1
  363. package/dist/test/components/template-file.test.d.ts.map +1 -1
  364. package/dist/test/components/template-file.test.js +0 -1
  365. package/dist/test/components/template-file.test.js.map +1 -1
  366. package/dist/test/components/update-file.test.d.ts +1 -1
  367. package/dist/test/components/update-file.test.d.ts.map +1 -1
  368. package/dist/test/components/update-file.test.js +1 -2
  369. package/dist/test/components/update-file.test.js.map +1 -1
  370. package/dist/test/components/wrap.test.d.ts +1 -1
  371. package/dist/test/components/wrap.test.d.ts.map +1 -1
  372. package/dist/test/components/wrap.test.js +3 -5
  373. package/dist/test/components/wrap.test.js.map +1 -1
  374. package/dist/test/control-flow/for.test.d.ts +1 -1
  375. package/dist/test/control-flow/for.test.d.ts.map +1 -1
  376. package/dist/test/control-flow/for.test.js +40 -24
  377. package/dist/test/control-flow/for.test.js.map +1 -1
  378. package/dist/test/control-flow/match.test.d.ts +1 -1
  379. package/dist/test/control-flow/match.test.d.ts.map +1 -1
  380. package/dist/test/control-flow/match.test.js +4 -6
  381. package/dist/test/control-flow/match.test.js.map +1 -1
  382. package/dist/test/control-flow/show.test.d.ts +1 -1
  383. package/dist/test/control-flow/show.test.d.ts.map +1 -1
  384. package/dist/test/control-flow/show.test.js +3 -6
  385. package/dist/test/control-flow/show.test.js.map +1 -1
  386. package/dist/test/lazy-isempty.test.d.ts +1 -1
  387. package/dist/test/lazy-isempty.test.d.ts.map +1 -1
  388. package/dist/test/lazy-isempty.test.js +16 -18
  389. package/dist/test/lazy-isempty.test.js.map +1 -1
  390. package/dist/test/name-policy.test.d.ts +1 -1
  391. package/dist/test/name-policy.test.d.ts.map +1 -1
  392. package/dist/test/name-policy.test.js +0 -1
  393. package/dist/test/name-policy.test.js.map +1 -1
  394. package/dist/test/node.test.d.ts +2 -0
  395. package/dist/test/node.test.d.ts.map +1 -0
  396. package/dist/test/node.test.js +80 -0
  397. package/dist/test/node.test.js.map +1 -0
  398. package/dist/test/output-e2e.test.d.ts +13 -0
  399. package/dist/test/output-e2e.test.d.ts.map +1 -0
  400. package/dist/test/output-e2e.test.js +194 -0
  401. package/dist/test/output-e2e.test.js.map +1 -0
  402. package/dist/test/reactivity/circular-reactives.test.js +6 -6
  403. package/dist/test/reactivity/circular-reactives.test.js.map +1 -1
  404. package/dist/test/reactivity/cleanup.test.js +2 -3
  405. package/dist/test/reactivity/cleanup.test.js.map +1 -1
  406. package/dist/test/reactivity/ref-rendering.test.js +15 -15
  407. package/dist/test/reactivity/ref-rendering.test.js.map +1 -1
  408. package/dist/test/reactivity/test.test.js +15 -15
  409. package/dist/test/reactivity/test.test.js.map +1 -1
  410. package/dist/test/rendering/basic.test.d.ts +1 -1
  411. package/dist/test/rendering/basic.test.d.ts.map +1 -1
  412. package/dist/test/rendering/basic.test.js +0 -1
  413. package/dist/test/rendering/basic.test.js.map +1 -1
  414. package/dist/test/rendering/code.test.d.ts +1 -1
  415. package/dist/test/rendering/code.test.d.ts.map +1 -1
  416. package/dist/test/rendering/code.test.js +0 -1
  417. package/dist/test/rendering/code.test.js.map +1 -1
  418. package/dist/test/rendering/formatting.test.d.ts +1 -1
  419. package/dist/test/rendering/formatting.test.d.ts.map +1 -1
  420. package/dist/test/rendering/formatting.test.js +17 -23
  421. package/dist/test/rendering/formatting.test.js.map +1 -1
  422. package/dist/test/rendering/indent.test.d.ts +1 -1
  423. package/dist/test/rendering/indent.test.d.ts.map +1 -1
  424. package/dist/test/rendering/indent.test.js +0 -1
  425. package/dist/test/rendering/indent.test.js.map +1 -1
  426. package/dist/test/rendering/memoization.test.js +7 -3
  427. package/dist/test/rendering/memoization.test.js.map +1 -1
  428. package/dist/test/rendering/print-render-stack.test.d.ts +1 -1
  429. package/dist/test/rendering/print-render-stack.test.d.ts.map +1 -1
  430. package/dist/test/rendering/print-render-stack.test.js +0 -1
  431. package/dist/test/rendering/print-render-stack.test.js.map +1 -1
  432. package/dist/test/rendering/refkeys.test.d.ts +1 -1
  433. package/dist/test/rendering/refkeys.test.d.ts.map +1 -1
  434. package/dist/test/rendering/refkeys.test.js +0 -1
  435. package/dist/test/rendering/refkeys.test.js.map +1 -1
  436. package/dist/test/rendering/render-output-diagnostics.test.d.ts +2 -0
  437. package/dist/test/rendering/render-output-diagnostics.test.d.ts.map +1 -0
  438. package/dist/test/rendering/render-output-diagnostics.test.js +82 -0
  439. package/dist/test/rendering/render-output-diagnostics.test.js.map +1 -0
  440. package/dist/test/runtime.test.d.ts +11 -0
  441. package/dist/test/runtime.test.d.ts.map +1 -0
  442. package/dist/test/runtime.test.js +385 -0
  443. package/dist/test/runtime.test.js.map +1 -0
  444. package/dist/test/stc.test.d.ts +1 -1
  445. package/dist/test/stc.test.d.ts.map +1 -1
  446. package/dist/test/stc.test.js +0 -1
  447. package/dist/test/stc.test.js.map +1 -1
  448. package/dist/test/tree-test-utils.d.ts +3 -0
  449. package/dist/test/tree-test-utils.d.ts.map +1 -0
  450. package/dist/test/tree-test-utils.js +16 -0
  451. package/dist/test/tree-test-utils.js.map +1 -0
  452. package/dist/test/utils.test.d.ts +1 -1
  453. package/dist/test/utils.test.d.ts.map +1 -1
  454. package/dist/test/utils.test.js +12 -11
  455. package/dist/test/utils.test.js.map +1 -1
  456. package/dist/test/vitest.setup.d.ts +2 -0
  457. package/dist/test/vitest.setup.d.ts.map +1 -0
  458. package/dist/test/vitest.setup.js +2 -0
  459. package/dist/test/vitest.setup.js.map +1 -0
  460. package/dist/testing/devtools-utils.d.ts.map +1 -1
  461. package/dist/testing/devtools-utils.js +1 -1
  462. package/dist/testing/devtools-utils.js.map +1 -1
  463. package/dist/testing/extend-expect.d.ts.map +1 -1
  464. package/dist/testing/extend-expect.js +30 -34
  465. package/dist/testing/extend-expect.js.map +1 -1
  466. package/dist/testing/render.d.ts +7 -9
  467. package/dist/testing/render.d.ts.map +1 -1
  468. package/dist/testing/render.js +7 -17
  469. package/dist/testing/render.js.map +1 -1
  470. package/dist/tsconfig.tsbuildinfo +1 -1
  471. package/docs/api/components/Output.md +0 -3
  472. package/docs/api/components/SourceFile.md +0 -3
  473. package/docs/api/functions/createComment.md +18 -0
  474. package/docs/api/functions/createElement.md +19 -0
  475. package/docs/api/functions/createFragment.md +17 -0
  476. package/docs/api/functions/createTextNode.md +18 -0
  477. package/docs/api/functions/emitDiagnosticForTree.md +19 -0
  478. package/docs/api/functions/ensureIsEmpty.md +1 -1
  479. package/docs/api/functions/getContextForNode.md +18 -0
  480. package/docs/api/functions/getContextForRenderNode.md +4 -4
  481. package/docs/api/functions/getDiagnosticsForTree.md +7 -5
  482. package/docs/api/functions/getRegisteredDiagnosticsForTree.md +18 -0
  483. package/docs/api/functions/index.md +17 -12
  484. package/docs/api/functions/isCustomContext.md +4 -4
  485. package/docs/api/functions/notifyContentState.md +6 -0
  486. package/docs/api/functions/printTree.md +6 -16
  487. package/docs/api/functions/registerDiagnosticsForTree.md +19 -0
  488. package/docs/api/functions/render.md +1 -2
  489. package/docs/api/functions/renderAsync.md +1 -2
  490. package/docs/api/functions/renderTree.md +8 -5
  491. package/docs/api/functions/reportDiagnosticsForTree.md +18 -0
  492. package/docs/api/functions/runInContext.md +28 -0
  493. package/docs/api/functions/sourceFilesForTree.md +6 -16
  494. package/docs/api/index.md +3 -3
  495. package/docs/api/testing/functions/index.md +1 -1
  496. package/docs/api/testing/functions/renderToString.md +1 -1
  497. package/docs/api/types/AlloyNode.md +22 -0
  498. package/docs/api/types/Child.md +1 -1
  499. package/docs/api/types/CommentNode.md +15 -0
  500. package/docs/api/types/Context.md +13 -15
  501. package/docs/api/types/ElementNode.md +18 -0
  502. package/docs/api/types/FragmentNode.md +12 -0
  503. package/docs/api/types/Insertable.md +7 -0
  504. package/docs/api/types/NodeType.md +5 -0
  505. package/docs/api/types/OutputDirectory.md +0 -50
  506. package/docs/api/types/PrintTreeOptions.md +0 -1
  507. package/docs/api/types/RenderTreeOptions.md +7 -0
  508. package/docs/api/types/StiComponentCreator.md +4 -4
  509. package/docs/api/types/StiSignature.md +1 -1
  510. package/docs/api/types/TextNode.md +16 -0
  511. package/docs/api/types/index.md +10 -28
  512. package/docs/api/variables/COMMENT_NODE.md +5 -0
  513. package/docs/api/variables/ELEMENT_NODE.md +11 -0
  514. package/docs/api/variables/FRAGMENT_NODE.md +5 -0
  515. package/docs/api/variables/TEXT_NODE.md +5 -0
  516. package/docs/api/variables/index.md +4 -2
  517. package/docs/formatting.md +1 -1
  518. package/docs/rendering.md +4 -4
  519. package/package.json +6 -6
  520. package/src/components/AccessExpression.test.tsx +5 -13
  521. package/src/components/Output.tsx +2 -1
  522. package/src/components/SourceFile.tsx +1 -1
  523. package/src/content-slot.test.tsx +8 -10
  524. package/src/context/format-options.ts +1 -1
  525. package/src/context.ts +37 -4
  526. package/src/debug/diagnostics.test.tsx +1 -1
  527. package/src/debug/effects.test.tsx +1 -1
  528. package/src/debug/file-streaming.ts +115 -0
  529. package/src/debug/files.test.tsx +15 -11
  530. package/src/debug/index.ts +11 -11
  531. package/src/debug/message-format.test.tsx +32 -19
  532. package/src/debug/render-tree-orphans.test.tsx +10 -19
  533. package/src/debug/render.test.tsx +206 -78
  534. package/src/debug/render.ts +642 -495
  535. package/src/debug/trace-writer.ts +168 -14
  536. package/src/debug/trace.ts +0 -20
  537. package/src/devtools/devtools-protocol.ts +43 -0
  538. package/src/devtools/devtools-server.ts +57 -32
  539. package/src/devtools-entry.browser.ts +5 -0
  540. package/src/devtools-entry.ts +5 -0
  541. package/src/diagnostics.ts +31 -0
  542. package/src/index.ts +66 -2
  543. package/src/jsx-runtime.ts +16 -14
  544. package/src/output-types.ts +47 -0
  545. package/src/reactivity.ts +186 -40
  546. package/src/render/get-string-width.ts +201 -0
  547. package/src/render/index.ts +1 -0
  548. package/src/render/node-context.ts +14 -0
  549. package/src/render/node.ts +442 -0
  550. package/src/render/printer-support.ts +209 -0
  551. package/src/render/printer.ts +817 -0
  552. package/src/render-error.ts +98 -0
  553. package/src/render-output.ts +243 -0
  554. package/src/runtime/component.ts +2 -2
  555. package/src/runtime/create-intrinsic.ts +56 -0
  556. package/src/runtime/fragment.ts +22 -0
  557. package/src/runtime/index.ts +12 -0
  558. package/src/runtime/insert.ts +569 -0
  559. package/src/runtime/intrinsic.ts +14 -70
  560. package/src/scheduler.ts +40 -25
  561. package/src/stc.ts +3 -0
  562. package/src/sti.ts +17 -20
  563. package/src/symbols/symbol-slot.test.tsx +5 -5
  564. package/src/test-render.ts +103 -0
  565. package/src/utils.tsx +55 -37
  566. package/src/write-output.ts +1 -1
  567. package/temp/api-testing.json +390 -14
  568. package/temp/api.json +4320 -4144
  569. package/test/babel-e2e.test.ts +224 -0
  570. package/test/children.test.tsx +4 -7
  571. package/test/components/append-file.test.tsx +0 -1
  572. package/test/components/block.test.tsx +4 -6
  573. package/test/components/copy-file.test.tsx +2 -2
  574. package/test/components/declaration.test.tsx +2 -2
  575. package/test/components/list.test.tsx +20 -29
  576. package/test/components/prose.test.tsx +0 -1
  577. package/test/components/reference-or-content.test.tsx +8 -9
  578. package/test/components/source-file.test.tsx +4 -4
  579. package/test/components/template-file.test.tsx +0 -1
  580. package/test/components/update-file.test.tsx +1 -2
  581. package/test/components/wrap.test.tsx +3 -5
  582. package/test/control-flow/for.test.tsx +39 -31
  583. package/test/control-flow/match.test.tsx +4 -6
  584. package/test/control-flow/show.test.tsx +3 -6
  585. package/test/lazy-isempty.test.tsx +17 -19
  586. package/test/name-policy.test.tsx +0 -1
  587. package/test/node.test.ts +90 -0
  588. package/test/output-e2e.test.ts +198 -0
  589. package/test/reactivity/circular-reactives.test.tsx +6 -6
  590. package/test/reactivity/cleanup.test.tsx +2 -3
  591. package/test/reactivity/ref-rendering.test.tsx +15 -15
  592. package/test/reactivity/test.test.tsx +14 -14
  593. package/test/rendering/basic.test.tsx +0 -1
  594. package/test/rendering/code.test.tsx +0 -1
  595. package/test/rendering/formatting.test.tsx +21 -29
  596. package/test/rendering/indent.test.tsx +0 -1
  597. package/test/rendering/memoization.test.tsx +7 -3
  598. package/test/rendering/print-render-stack.test.tsx +0 -1
  599. package/test/rendering/refkeys.test.tsx +0 -1
  600. package/test/rendering/render-output-diagnostics.test.tsx +120 -0
  601. package/test/runtime.test.ts +448 -0
  602. package/test/stc.test.tsx +0 -1
  603. package/test/tree-test-utils.ts +23 -0
  604. package/test/utils.test.tsx +10 -9
  605. package/test/vitest.setup.ts +1 -0
  606. package/testing/devtools-utils.ts +2 -0
  607. package/testing/extend-expect.ts +32 -47
  608. package/testing/render.ts +17 -21
  609. package/vitest.config.ts +3 -0
  610. package/dist/dev/src/print-hook.js +0 -10
  611. package/dist/dev/src/print-hook.js.map +0 -1
  612. package/dist/dev/src/render.js +0 -872
  613. package/dist/dev/src/render.js.map +0 -1
  614. package/dist/src/print-hook.d.ts +0 -14
  615. package/dist/src/print-hook.d.ts.map +0 -1
  616. package/dist/src/print-hook.js +0 -10
  617. package/dist/src/print-hook.js.map +0 -1
  618. package/dist/src/render.d.ts +0 -155
  619. package/dist/src/render.d.ts.map +0 -1
  620. package/dist/src/render.js +0 -872
  621. package/dist/src/render.js.map +0 -1
  622. package/docs/api/functions/createIntrinsic.md +0 -19
  623. package/docs/api/functions/createRenderTreeHook.md +0 -19
  624. package/docs/api/functions/getElementCache.md +0 -17
  625. package/docs/api/functions/isIntrinsicElement.md +0 -18
  626. package/docs/api/functions/isPrintHook.md +0 -18
  627. package/docs/api/types/AlignIntrinsicElement.md +0 -5
  628. package/docs/api/types/BrIntrinsicElement.md +0 -5
  629. package/docs/api/types/BreakParentIntrinsicElement.md +0 -5
  630. package/docs/api/types/DedentIntrinsicElement.md +0 -5
  631. package/docs/api/types/DedentToRootIntrinsicElement.md +0 -5
  632. package/docs/api/types/ElementCache.md +0 -5
  633. package/docs/api/types/ElementCacheKey.md +0 -5
  634. package/docs/api/types/FillIntrinsicElement.md +0 -5
  635. package/docs/api/types/GroupIntrinsicElement.md +0 -5
  636. package/docs/api/types/HardlineIntrinsicElement.md +0 -5
  637. package/docs/api/types/HbrIntrinsicElement.md +0 -5
  638. package/docs/api/types/IfBreakIntrinsicElement.md +0 -5
  639. package/docs/api/types/IndentIfBreakIntrinsicElement.md +0 -5
  640. package/docs/api/types/IndentIntrinsicElement.md +0 -5
  641. package/docs/api/types/IntrinsicElement.md +0 -5
  642. package/docs/api/types/IntrinsicElementBase.md +0 -9
  643. package/docs/api/types/LbrIntrinsicElement.md +0 -5
  644. package/docs/api/types/LineIntrinsicElement.md +0 -5
  645. package/docs/api/types/LineSuffixBoundaryIntrinsicElement.md +0 -5
  646. package/docs/api/types/LineSuffixIntrinsicElement.md +0 -5
  647. package/docs/api/types/LiterallineIntrinsicElement.md +0 -5
  648. package/docs/api/types/MarkAsRootIntrinsicElement.md +0 -5
  649. package/docs/api/types/PrintHook.md +0 -10
  650. package/docs/api/types/RenderedTextTree.md +0 -5
  651. package/docs/api/types/SbrIntrinsicElement.md +0 -5
  652. package/docs/api/types/SoftlineIntrinsicElement.md +0 -5
  653. package/docs/api/variables/intrinsicElementKey.md +0 -5
  654. package/docs/api/variables/printHookTag.md +0 -7
  655. package/src/print-hook.ts +0 -22
  656. package/src/render.ts +0 -1154
@@ -0,0 +1,22 @@
1
+ # AlloyNode
2
+
3
+ ## Members
4
+
5
+ | | | |
6
+ | ---------------------- | ------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
7
+ | after | (nodes: Insertable\[]) => void | Insert nodes immediately after `this` in the parent’s child list. |
8
+ | append | (nodes: Insertable\[]) => void | Append nodes (or strings) to the end of children. |
9
+ | before | (nodes: Insertable\[]) => void | Insert nodes immediately before `this` in the parent’s child list. |
10
+ | cloneNode | () => AlloyNode | Deep-clone this node and its subtree. The clone has no parent and its children are themselves clones. Used when a node value would otherwise be inserted into two parents (e.g. a shared joiner element produced by mapJoin) — Alloy intrinsic nodes are stateless so a fresh tree is semantically equivalent. |
11
+ | protected cloneShallow | () => AlloyNode | |
12
+ | firstChild | [AlloyNode](../alloynode/) \| null | |
13
+ | isEmpty | boolean | Empty-state propagation. `false` for Text/Element with content, `true` for empty regions. Mutated by reactive bindings; read by joiner/ender logic. Direct field — no Vue effect. |
14
+ | lastChild | [AlloyNode](../alloynode/) \| null | |
15
+ | moveBefore | (node: AlloyNode, ref: AlloyNode \| null) => void | Atomic move: relocate `node` to be a child of `this` immediately before `ref` (or at the end if `ref` is null), without disconnecting any state on the moved subtree. Used by `<For>` reorder paths so keyed-item bindings stay live. Mirrors the 2024 DOM `Element.moveBefore(node, child)` proposal. |
16
+ | nextSibling | [AlloyNode](../alloynode/) \| null | |
17
+ | nodeType | [NodeType](../nodetype/) | |
18
+ | parentNode | [AlloyNode](../alloynode/) \| null | |
19
+ | prepend | (nodes: Insertable\[]) => void | Prepend nodes (or strings) to the beginning of children. |
20
+ | previousSibling | [AlloyNode](../alloynode/) \| null | |
21
+ | remove | () => void | Remove `this` from its parent. |
22
+ | replaceWith | (nodes: Insertable\[]) => void | Replace `this` with the given nodes in the parent’s child list. |
@@ -1,5 +1,5 @@
1
1
  # Child
2
2
 
3
3
  ```ts
4
- type Child = RenderableObject | RefkeyableObject | string | boolean | number | undefined | null | void | (() => Children) | Ref | Refkey | CustomContext | IntrinsicElement;
4
+ type Child = RenderableObject | RefkeyableObject | string | boolean | number | undefined | null | void | (() => Children) | Ref | Refkey | CustomContext | AlloyNode;
5
5
  ```
@@ -0,0 +1,15 @@
1
+ # CommentNode
2
+
3
+ Comment node — used as a slot anchor (start/end markers) bracketing dynamic regions. Solid uses the same pattern.
4
+
5
+ ## Members
6
+
7
+ Extends [AlloyNode](../alloynode/)
8
+
9
+ | | | |
10
+ | ---------------------- | ----------------- | ---------------------------------------------------- |
11
+ | constructor | (data: string) | Constructs a new instance of the [`CommentNode`](CommentNode.md) class |
12
+ | protected cloneShallow | () => CommentNode | |
13
+ | data | string | |
14
+ | isEmpty | boolean | Comments don’t contribute output, always empty. |
15
+ | nodeType | 8 | |
@@ -2,18 +2,16 @@
2
2
 
3
3
  ## Members
4
4
 
5
- | | | |
6
- | ------------------- | ---------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
7
- | \_lastEmpty | boolean | Cheap boolean tracking the last propagated empty state. Used by notifyContentState() for early-return optimization without requiring a reactive ref on every context. |
8
- | childrenWithContent | number | The number of child nodes that have content. When zero, this component is semantically empty. |
9
- | componentOwner | optional [ComponentCreator](../componentcreator/)\<unknown> | When this context was created by a component, this will be the component that created it. |
10
- | context | optional Record\<symbol, unknown> | |
11
- | disposables | optional [Disposable\_2](../disposable_2/)\[] | |
12
- | elementCache | optional [ElementCache](../elementcache/) | A cache of RenderTextTree nodes created within this context, indexed by the component or function which created them. |
13
- | id | number | Monotonic numeric ID for trace/debug correlation. |
14
- | isEmpty | optional Ref\<boolean> | A ref that indicates whether the component is empty. Only allocated when reactively observed (ContentSlot, mapJoin). |
15
- | isRoot | boolean | Whether this context is a root context |
16
- | meta | optional Record\<string, any> | |
17
- | owner | [Context](../context/) \| null | |
18
- | takenSymbols | optional ShallowReactive\<Set<[OutputSymbol](../outputsymbol/)>> | The symbol that this component has taken. |
19
- | takesSymbols | boolean | Whether this context will take an emitted symbol. |
5
+ | | | |
6
+ | ------------------- | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
7
+ | childrenWithContent | number | The number of child nodes that have content. When zero, this component is semantically empty. |
8
+ | componentOwner | optional [ComponentCreator](../componentcreator/)\<unknown> | When this context was created by a component, this will be the component that created it. |
9
+ | context | optional Record\<symbol, unknown> | |
10
+ | disposables | optional [Disposable\_2](../disposable_2/)\[] | |
11
+ | id | number | Monotonic numeric ID for trace/debug correlation. |
12
+ | isEmpty | optional Ref\<boolean> | A ref that indicates whether the component is empty. Only allocated when reactively observed (e.g. by [`ContentSlot`](ContentSlot.md)). mapJoin uses an internal empty-change callback instead. |
13
+ | isRoot | boolean | Whether this context is a root context |
14
+ | meta | optional Record\<string, any> | |
15
+ | owner | [Context](../context/) \| null | |
16
+ | takenSymbols | optional ShallowReactive\<Set<[OutputSymbol](../outputsymbol/)>> | The symbol that this component has taken. |
17
+ | takesSymbols | boolean | Whether this context will take an emitted symbol. |
@@ -0,0 +1,18 @@
1
+ # ElementNode
2
+
3
+ Element node — Alloy hook node. `localName` carries the hook kind (“group”, “indent”, “line”, “softline”, “ifBreak”, etc).
4
+
5
+ `data` carries hook-specific config (e.g. `{ shouldBreak: false }` for a group). Kept as a single bag rather than a parallel hierarchy of subclasses to avoid V8 hidden-class fan-out.
6
+
7
+ ## Members
8
+
9
+ Extends [AlloyNode](../alloynode/)
10
+
11
+ | | | |
12
+ | ---------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
13
+ | \_breakCount | number | Count of unabsorbed break-leaves in this subtree. Maintained by `insertBefore` / `detach` so the printer can decide whether a `group` is broken in O(1) without a prepass walk. `breakParent` / `hardline` / `hbr` / `literalline` / `lbr` elements and TextNodes containing `\n`/`\r` count as break-leaves; a `group` element absorbs the count from its own subtree (does not propagate outward). For `ifBreak` elements the count includes contributions from `data.flatNode` (the alternate branch is not in the regular tree). |
14
+ | constructor | (localName: string, data: unknown) | Constructs a new instance of the [`ElementNode`](ElementNode.md) class |
15
+ | protected cloneShallow | () => ElementNode | |
16
+ | data | unknown | |
17
+ | localName | string | |
18
+ | nodeType | 1 | |
@@ -0,0 +1,12 @@
1
+ # FragmentNode
2
+
3
+ Fragment node — transient batch container. Inserting a Fragment splices its children into the target (mirroring DOM DocumentFragment semantics) and the Fragment itself becomes empty.
4
+
5
+ ## Members
6
+
7
+ Extends [AlloyNode](../alloynode/)
8
+
9
+ | | | |
10
+ | ---------------------- | ------------------ | - |
11
+ | protected cloneShallow | () => FragmentNode | |
12
+ | nodeType | 11 | |
@@ -0,0 +1,7 @@
1
+ # Insertable
2
+
3
+ Anything that can be inserted: a Node, a string (auto-wrapped as Text), or a number (auto-wrapped as Text).
4
+
5
+ ```ts
6
+ type Insertable = AlloyNode | string | number;
7
+ ```
@@ -0,0 +1,5 @@
1
+ # NodeType
2
+
3
+ ```ts
4
+ type NodeType = 1 | 3 | 8 | 11;
5
+ ```
@@ -1,55 +1,5 @@
1
1
  # OutputDirectory
2
2
 
3
- Turning components into source text involves three different trees produced sequentially:
4
-
5
- 1. Component tree, built by the nesting of components
6
- 2. Rendered text tree, produced by *rendering* the component tree
7
- 3. Document tree, produced by *printing* the rendered text tree
8
-
9
- Finally, the document tree is converted to text via `prettier`. Let’s look at each of these trees and the conversions in detail.
10
-
11
- # Component tree
12
-
13
- The component tree is built by JSX or STC templates. The nodes in this tree are defined by the type [`Child`](Child.md) and are one of the following
14
-
15
- ## Primitive values
16
-
17
- Strings in the tree are placed into the rendered text tree as-is. Numbers are converted to strings. Falsy primitive values and booleans are converted to empty strings (and may cause a line break to be ignored, see below).
18
-
19
- ## Nullary functions
20
-
21
- Nullary functions represent computed or reactive values in the component tree, such as expressions placed into a JSX template with curly brackets. Nullary functions return [`Children`](Children.md) which are then recursively rendered. Nullary functions are invoked in an effect which will update the rendered text tree when any reactive dependencies change.
22
-
23
- ## Component creators
24
-
25
- Component creators are a special kind of nullary function which instantiate components in order to get their children which are then recursively rendered. Component creators have some special rendering behavior, such as tracking the stack of rendered components. Like other nullary functions, component creators are invoked in an effect which will update the rendered text tree when any reactive dependencies change.
26
-
27
- ## Refs
28
-
29
- Refs are wrapped in a nullary function and rendered in an effect which will update the rendered text tree when the ref’s value changes. This is essentially a syntactic convenience, allowing JSX templates to contain `\{ someRef \}` instead of `\{ someRef.value \}`.
30
-
31
- ## Refkey
32
-
33
- Refkeys are replaced with a component creator for the Reference component associated with the current source file. This allows creating references by placing them directly in the component tree e.g. `{ someRefkey }`.
34
-
35
- ## CustomContext
36
-
37
- CustomContext is a special kind of component which allows rendering children within a custom reactive context. This enables components to manually manage the lifetime of their reactive contexts.
38
-
39
- ## IntrinsicElement
40
-
41
- Various intrinsic elements exist to control formatting. These elements provide Print Hooks that are called during Printing.
42
-
43
- # Rendered Text Tree
44
-
45
- This tree is a nested array structure containing the rendered output of all the components in the component tree. This structure is updated reactively when reactive dependencies change. The nodes in this tree are predominantly strings, but can also be Print Hooks.
46
-
47
- This tree is built by the `renderTree` function.
48
-
49
- # Document Tree
50
-
51
- This tree is constructed by calling `printTree` on the rendered text tree. The rendered text tree is walked and the appropriate Prettier builders are called to produce a document tree. The result is then passed to Prettier’s `printDocToString` function to produce the final source text.
52
-
53
3
  ## Members
54
4
 
55
5
  | | | |
@@ -5,7 +5,6 @@
5
5
  | | | |
6
6
  | ------------------ | ---------------- | ------------------------------------------------------------------------------ |
7
7
  | insertFinalNewLine | optional boolean | If files should end with a final new line. |
8
- | noFlush | optional boolean | Skip flushing scheduled jobs before printing. |
9
8
  | printWidth | optional number | The number of characters the printer will wrap on. Defaults to 100 characters. |
10
9
  | tabWidth | optional number | The number of spaces to use for indentation. Defaults to 2 spaces. |
11
10
  | useTabs | optional boolean | Whether to use tabs instead of spaces for indentation. Defaults to false. |
@@ -0,0 +1,7 @@
1
+ # RenderTreeOptions
2
+
3
+ ## Members
4
+
5
+ | | | |
6
+ | ------- | ---------------- | - |
7
+ | noFlush | optional boolean | |
@@ -1,9 +1,9 @@
1
1
  # StiComponentCreator
2
2
 
3
3
  ```ts
4
- type StiComponentCreator<T extends keyof IntrinsicElements> = (() => IntrinsicElementBase<T>) & {
5
- code(template: TemplateStringsArray, ...substitutions: Children[]): () => IntrinsicElementBase<T>;
6
- text(template: TemplateStringsArray, ...substitutions: Children[]): () => IntrinsicElementBase<T>;
7
- children(...children: Children[]): () => IntrinsicElementBase<T>;
4
+ type StiComponentCreator = (() => ElementNode) & {
5
+ code(template: TemplateStringsArray, ...substitutions: Children[]): () => ElementNode;
6
+ text(template: TemplateStringsArray, ...substitutions: Children[]): () => ElementNode;
7
+ children(...children: Children[]): () => ElementNode;
8
8
  };
9
9
  ```
@@ -3,5 +3,5 @@
3
3
  ```ts
4
4
  type StiSignature<T extends keyof IntrinsicElements> = (...args: unknown extends T ? [] : {} extends Omit<IntrinsicElements[T], "children"> ? [
5
5
  props?: IntrinsicElements[T]
6
- ] : [props: IntrinsicElements[T]]) => StiComponentCreator<T>;
6
+ ] : [props: IntrinsicElements[T]]) => StiComponentCreator;
7
7
  ```
@@ -0,0 +1,16 @@
1
+ # TextNode
2
+
3
+ Text node — analog of DOM Text / CharacterData.
4
+
5
+ ## Members
6
+
7
+ Extends [AlloyNode](../alloynode/)
8
+
9
+ | | | |
10
+ | ---------------------- | -------------- | ----------------------------------------------------------------- |
11
+ | \_nl | number | 1 if `data` contains a newline, 0 if not, -1 if not yet computed. |
12
+ | \_w | number | Display width (Prettier-compatible). Lazily filled on first read. |
13
+ | constructor | (data: string) | Constructs a new instance of the [`TextNode`](TextNode.md) class |
14
+ | protected cloneShallow | () => TextNode | |
15
+ | data | string | |
16
+ | nodeType | 3 | |
@@ -1,6 +1,6 @@
1
1
  # core — types
2
2
 
3
- - [AlignIntrinsicElement](AlignIntrinsicElement.md) — type AlignIntrinsicElement = IntrinsicElementBase<"align">;
3
+ - [AlloyNode](AlloyNode.md)
4
4
  - [AppendRegionProps](AppendRegionProps.md) — type AppendRegionProps = AppendRegionPropsWithChildren | AppendRegionPropsWithContent | AppendRegionPropsBase;
5
5
  - [BaseListProps](BaseListProps.md) — <group>
6
6
  - [BasePartProps](BasePartProps.md) — Base props that all language-specific Part components must include.
@@ -8,11 +8,10 @@
8
8
  - [BasicSymbol](BasicSymbol.md) — BasicSymbol is a kind of OutputSymbol that has instance and static members.
9
9
  - [Binder](Binder.md) — The binder tracks all output scopes and symbols.
10
10
  - [BinderOptions](BinderOptions.md)
11
- - [BreakParentIntrinsicElement](BreakParentIntrinsicElement.md) — type BreakParentIntrinsicElement = IntrinsicElementBase<"breakParent">;
12
- - [BrIntrinsicElement](BrIntrinsicElement.md) — type BrIntrinsicElement = IntrinsicElementBase<"br">;
13
11
  - [Child](Child.md) — type Child = RenderableObject | RefkeyableObject | string | boolean | number | undefined | null | void | (() => Children
14
12
  - [Children](Children.md) — type Children = Child | Children[];
15
13
  - [ChildrenOptions](ChildrenOptions.md)
14
+ - [CommentNode](CommentNode.md) — Comment node — used as a slot anchor (start/end markers) bracketing dynamic regions.
16
15
  - [CommonFormatOptions](CommonFormatOptions.md) — Extends [PrintTreeOptions](../printtreeoptions/)
17
16
  - [Component](Component.md)
18
17
  - [ComponentContext](ComponentContext.md)
@@ -27,8 +26,6 @@
27
26
  - [CustomContext](CustomContext.md) — Create a custom reactive context for the children returned by the provided context.
28
27
  - [CustomContextChildrenCallback](CustomContextChildrenCallback.md) — type CustomContextChildrenCallback = (child: Children) => void;
29
28
  - [DeclarationProps](DeclarationProps.md) — type DeclarationProps = DeclarationPropsWithSymbol | DeclarationPropsWithInfo;
30
- - [DedentIntrinsicElement](DedentIntrinsicElement.md) — type DedentIntrinsicElement = IntrinsicElementBase<"dedent">;
31
- - [DedentToRootIntrinsicElement](DedentToRootIntrinsicElement.md) — type DedentToRootIntrinsicElement = IntrinsicElementBase<"dedentToRoot">;
32
29
  - [Diagnostic](Diagnostic.md)
33
30
  - [DiagnosticHandle](DiagnosticHandle.md)
34
31
  - [DiagnosticInput](DiagnosticInput.md)
@@ -38,29 +35,15 @@
38
35
  - [Disposable_2](Disposable_2.md)
39
36
  - [EffectDebugOptions](EffectDebugOptions.md)
40
37
  - [EffectOptions](EffectOptions.md)
41
- - [ElementCache](ElementCache.md) — type ElementCache = Map<ElementCacheKey, RenderedTextTree>;
42
- - [ElementCacheKey](ElementCacheKey.md) — type ElementCacheKey = ComponentCreator | (() => unknown) | CustomContext;
43
- - [FillIntrinsicElement](FillIntrinsicElement.md) — type FillIntrinsicElement = IntrinsicElementBase<"fill">;
38
+ - [ElementNode](ElementNode.md) — Element node Alloy hook node.
44
39
  - [ForCallbackArgs](ForCallbackArgs.md) — type ForCallbackArgs<T> = number extends keyof T ?
45
40
  - [ForSupportedCollections](ForSupportedCollections.md) — type ForSupportedCollections = readonly unknown[] | ReadonlyMap<unknown, unknown> | ReadonlySet<unknown> | IterableItera
46
- - [GroupIntrinsicElement](GroupIntrinsicElement.md) — type GroupIntrinsicElement = IntrinsicElementBase<"group">;
47
- - [HardlineIntrinsicElement](HardlineIntrinsicElement.md) — type HardlineIntrinsicElement = IntrinsicElementBase<"hardline">;
48
- - [HbrIntrinsicElement](HbrIntrinsicElement.md) — type HbrIntrinsicElement = IntrinsicElementBase<"hbr">;
49
- - [IfBreakIntrinsicElement](IfBreakIntrinsicElement.md) — type IfBreakIntrinsicElement = IntrinsicElementBase<"ifBreak">;
50
- - [IndentIfBreakIntrinsicElement](IndentIfBreakIntrinsicElement.md) — type IndentIfBreakIntrinsicElement = IntrinsicElementBase<"indentIfBreak">;
51
- - [IndentIntrinsicElement](IndentIntrinsicElement.md) — type IndentIntrinsicElement = IntrinsicElementBase<"indent">;
52
- - [IntrinsicElement](IntrinsicElement.md) — type IntrinsicElement = IndentIntrinsicElement | IndentIfBreakIntrinsicElement | BrIntrinsicElement | LineIntrinsicEleme
53
- - [IntrinsicElementBase](IntrinsicElementBase.md)
41
+ - [FragmentNode](FragmentNode.md) — Fragment node transient batch container.
42
+ - [Insertable](Insertable.md) — Anything that can be inserted: a Node, a string (auto-wrapped as Text), or a number (auto-wrapped as Text).
54
43
  - [IntrinsicElements](IntrinsicElements.md)
55
44
  - [JoinOptions](JoinOptions.md)
56
- - [LbrIntrinsicElement](LbrIntrinsicElement.md) — type LbrIntrinsicElement = IntrinsicElementBase<"lbr">;
57
45
  - [LibrarySymbolReference](LibrarySymbolReference.md) — An object that acts as a lazy reference to an external library symbol.
58
- - [LineIntrinsicElement](LineIntrinsicElement.md) — type LineIntrinsicElement = IntrinsicElementBase<"line">;
59
- - [LineSuffixBoundaryIntrinsicElement](LineSuffixBoundaryIntrinsicElement.md) — type LineSuffixBoundaryIntrinsicElement = IntrinsicElementBase<"lineSuffixBoundary">;
60
- - [LineSuffixIntrinsicElement](LineSuffixIntrinsicElement.md) — type LineSuffixIntrinsicElement = IntrinsicElementBase<"lineSuffix">;
61
- - [LiterallineIntrinsicElement](LiterallineIntrinsicElement.md) — type LiterallineIntrinsicElement = IntrinsicElementBase<"literalline">;
62
46
  - [MakeChildrenOptional](MakeChildrenOptional.md) — type MakeChildrenOptional<T extends object> = T extends {
63
- - [MarkAsRootIntrinsicElement](MarkAsRootIntrinsicElement.md) — type MarkAsRootIntrinsicElement = IntrinsicElementBase<"markAsRoot">;
64
47
  - [MatchProps](MatchProps.md)
65
48
  - [MemberDeclarationProps](MemberDeclarationProps.md) — type MemberDeclarationProps = MemberDeclarationPropsWithInfo | MemberDeclarationPropsWithSymbol;
66
49
  - [MemberDescriptor](MemberDescriptor.md) — Describes a member in a member access chain, tracking both the symbol and whether this specific member was accessed via
@@ -74,10 +57,11 @@
74
57
  - [NamekeyOptions](NamekeyOptions.md)
75
58
  - [NamePolicy](NamePolicy.md)
76
59
  - [NamePolicyGetter](NamePolicyGetter.md) — A function that transforms a name according to a naming policy for a specific element kind.
60
+ - [NodeType](NodeType.md) — type NodeType = 1 | 3 | 8 | 11;
77
61
  - [OnReactiveSetAddCallback](OnReactiveSetAddCallback.md) — type OnReactiveSetAddCallback<T> = (value: T) => T;
78
62
  - [OnReactiveSetDeleteCallback](OnReactiveSetDeleteCallback.md) — type OnReactiveSetDeleteCallback<T> = (value: T) => void;
79
63
  - [OutputDeclarationSpace](OutputDeclarationSpace.md) — A symbol table attached to an [OutputScope](../outputscope/).
80
- - [OutputDirectory](OutputDirectory.md) — Turning components into source text involves three different trees produced sequentially:
64
+ - [OutputDirectory](OutputDirectory.md)
81
65
  - [OutputFile](OutputFile.md) — type OutputFile = ContentOutputFile | CopyOutputFile;
82
66
  - [OutputFileBase](OutputFileBase.md)
83
67
  - [OutputMemberSpace](OutputMemberSpace.md) — A symbol table attached to an [OutputSymbol](../outputsymbol/).
@@ -87,7 +71,6 @@
87
71
  - [OutputSymbol](OutputSymbol.md) — An output symbol is a named entity that can be referenced in your output code.
88
72
  - [OutputSymbolOptions](OutputSymbolOptions.md)
89
73
  - [OutputVisitor](OutputVisitor.md) — A visitor to collect the output from [render](../../functions/render/).
90
- - [PrintHook](PrintHook.md)
91
74
  - [PrintTreeOptions](PrintTreeOptions.md)
92
75
  - [Props](Props.md) — type Props = Record<string, any>;
93
76
  - [ReactiveUnionSet](ReactiveUnionSet.md) — Extends Set\<T>
@@ -96,19 +79,17 @@
96
79
  - [Refkeyable](Refkeyable.md) — type Refkeyable = RefkeyableObject | Refkey;
97
80
  - [RefkeyableObject](RefkeyableObject.md) — type RefkeyableObject = {
98
81
  - [RenderableObject](RenderableObject.md) — A renderable object is any object that has an `[ay.RENDERABLE]` method that returns children.
99
- - [RenderedTextTree](RenderedTextTree.md) — type RenderedTextTree = (string | RenderedTextTree | PrintHook)[];
82
+ - [RenderTreeOptions](RenderTreeOptions.md)
100
83
  - [ResolutionResult](ResolutionResult.md) — A successful resolution of a refkey.
101
84
  - [ResolveDeclarationByKeyOptions](ResolveDeclarationByKeyOptions.md)
102
85
  - [Resource](Resource.md) — Represents an external resource fetched asynchronously.
103
86
  - [RootOptions](RootOptions.md)
104
- - [SbrIntrinsicElement](SbrIntrinsicElement.md) — type SbrIntrinsicElement = IntrinsicElementBase<"sbr">;
105
87
  - [ScopeProps](ScopeProps.md) — type ScopeProps = ScopePropsWithValue | ScopePropsWithInfo;
106
- - [SoftlineIntrinsicElement](SoftlineIntrinsicElement.md) — type SoftlineIntrinsicElement = IntrinsicElementBase<"softline">;
107
88
  - [SourceLocation](SourceLocation.md)
108
89
  - [SplitProps](SplitProps.md) — type SplitProps<T, K extends (readonly (keyof T)[])[]> = [
109
90
  - [StcComponentCreator](StcComponentCreator.md) — type StcComponentCreator<T> = ComponentCreator<T> & {
110
91
  - [StcSignature](StcSignature.md) — type StcSignature<T extends {}> = (...args: unknown extends T ?
111
- - [StiComponentCreator](StiComponentCreator.md) — type StiComponentCreator<T extends keyof IntrinsicElements> = (() => IntrinsicElementBase<T>) & {
92
+ - [StiComponentCreator](StiComponentCreator.md) — type StiComponentCreator = (() => ElementNode) & {
112
93
  - [StiSignature](StiSignature.md) — type StiSignature<T extends keyof IntrinsicElements> = (...args: unknown extends T ?
113
94
  - [SymbolCreator](SymbolCreator.md) — An object that can register symbols into a binder.
114
95
  - [SymbolRefkey](SymbolRefkey.md) — Extends [RefkeyableObject](../refkeyableobject/)
@@ -120,3 +101,4 @@
120
101
  - [TapHandler](TapHandler.md) — A function that is called when the tapped value is available.
121
102
  - [Tapper](Tapper.md) — A function called when the Tap is rendered.
122
103
  - [TemplateVariableProps](TemplateVariableProps.md) — type TemplateVariableProps = TemplateVariablePropsWithChildren | TemplateVariablePropsWithValue;
104
+ - [TextNode](TextNode.md) — Text node — analog of DOM Text / CharacterData.
@@ -0,0 +1,5 @@
1
+ # COMMENT_NODE
2
+
3
+ ```ts
4
+ COMMENT_NODE: 8
5
+ ```
@@ -0,0 +1,11 @@
1
+ # ELEMENT_NODE
2
+
3
+ AlloyNode tree — a DOM-aligned in-memory representation of rendered output.
4
+
5
+ Components return AlloyNodes (or values that get inserted into them) via `runtime/insert.ts`; the resulting tree is consumed by the direct printer and `render-output.ts` output-directory walker.
6
+
7
+ Naming and semantics follow the modern DOM where there is meaningful overlap. Only modern DOM mutation methods are exposed (`append`/`prepend`/`before`/`after`/`replaceWith`/`remove`/`text.data`/ `moveBefore`). Legacy methods (`appendChild`, `insertBefore`, `removeChild`, `replaceChild`, the `nodeValue` setter) are intentionally NOT provided.
8
+
9
+ ```ts
10
+ ELEMENT_NODE: 1
11
+ ```
@@ -0,0 +1,5 @@
1
+ # FRAGMENT_NODE
2
+
3
+ ```ts
4
+ FRAGMENT_NODE: 11
5
+ ```
@@ -0,0 +1,5 @@
1
+ # TEXT_NODE
2
+
3
+ ```ts
4
+ TEXT_NODE: 3
5
+ ```
@@ -1,11 +1,13 @@
1
1
  # core — variables
2
2
 
3
+ - [COMMENT_NODE](COMMENT_NODE.md) — COMMENT_NODE: 8
3
4
  - [contextsByKey](contextsByKey.md) — contextsByKey: Map<symbol, ComponentContext<any>>
5
+ - [ELEMENT_NODE](ELEMENT_NODE.md) — AlloyNode tree — a DOM-aligned in-memory representation of rendered output.
4
6
  - [FormatOptions](FormatOptions.md) — FormatOptions: import("../index.js").ComponentDefinition<import("../context.js").ContextProviderProps<CommonFormatOption
5
- - [intrinsicElementKey](intrinsicElementKey.md) — intrinsicElementKey: unique symbol
7
+ - [FRAGMENT_NODE](FRAGMENT_NODE.md) — FRAGMENT_NODE: 11
6
8
  - [Match](Match.md) — The Match component is used inside of a [Switch](../../components/switch/) component to define conditionally rendered bl
7
9
  - [matchTag](matchTag.md) — matchTag: unique symbol
8
- - [printHookTag](printHookTag.md) — Print hook types and utilities.
9
10
  - [REFKEYABLE](REFKEYABLE.md) — REFKEYABLE: unique symbol
10
11
  - [RENDERABLE](RENDERABLE.md) — RENDERABLE: unique symbol
12
+ - [TEXT_NODE](TEXT_NODE.md) — TEXT_NODE: 3
11
13
  - [TO_SYMBOL](TO_SYMBOL.md) — Well-known symbol for the lazy-symbol-creation protocol used by external library descriptors.
@@ -1,6 +1,6 @@
1
1
  # Formatting
2
2
 
3
- Alloy uses [Prettier's document IR](https://github.com/prettier/prettier/blob/main/commands.md) as its layout engine.
3
+ Alloy uses intrinsic formatting elements such as `<group>`, `<indent>`, and line breaks to describe layout in the AlloyNode tree. The direct printer walks that tree and applies Prettier-compatible layout semantics without exposing a separate document IR.
4
4
 
5
5
  Format options ([`printWidth`, `tabWidth`, `useTabs`](api/types/CommonFormatOptions.md)) are set on [`<Output>`](api/components/Output.md) and overridable per [`<SourceFile>`](api/components/SourceFile.md).
6
6
 
package/docs/rendering.md CHANGED
@@ -5,13 +5,13 @@ Alloy renders a component tree into output files. The pipeline has three layers.
5
5
  ## Pipeline
6
6
 
7
7
  ```
8
- Component Tree → Rendered Text Tree → Output Files
9
- (JSX) (strings + hooks) (formatted text)
8
+ Component Tree → AlloyNode Tree → Output Files
9
+ (JSX) (DOM-like nodes) (formatted text)
10
10
  ```
11
11
 
12
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.
13
+ 2. [**`renderTree(children)`**](api/functions/renderTree.md) — evaluates components into an `ElementNode` root containing DOM-like `AlloyNode` children.
14
+ 3. **`sourceFilesForTree(tree)`** — walks the AlloyNode tree, calling [`printTree()`](api/functions/printTree.md) per file to produce a formatted string for each source file.
15
15
 
16
16
  `renderTree()`, `printTree()`, and `sourceFilesForTree()` are available individually for advanced use cases.
17
17
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alloy-js/core",
3
- "version": "0.24.0-dev.2",
3
+ "version": "0.24.0-dev.7",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",
@@ -66,15 +66,15 @@
66
66
  "devalue": "^5.6.2",
67
67
  "pathe": "^2.0.3",
68
68
  "picocolors": "^1.1.1",
69
- "prettier": "^3.6.2",
70
69
  "ws": "^8.19.0"
71
70
  },
72
71
  "devDependencies": {
73
- "@alloy-js/cli": "~0.23.0 || >= 0.24.0-dev.0",
74
- "@alloy-js/rollup-plugin": "~0.1.1 || >= 0.1.2-dev.1",
72
+ "@alloy-js/babel-preset": "~0.3.0 || >= 0.3.1-dev.0",
73
+ "@alloy-js/cli": "~0.23.0 || >= 0.24.0-dev.1",
74
+ "@alloy-js/rollup-plugin": "~0.1.1 || >= 0.1.2-dev.2",
75
+ "@babel/core": "7.28.6",
76
+ "@babel/preset-typescript": "7.27.1",
75
77
  "@microsoft/api-extractor": "~7.52.8",
76
- "@rollup/plugin-typescript": "^12.1.2",
77
- "concurrently": "^9.2.0",
78
78
  "typescript": "^5.8.3",
79
79
  "vite": "^7.0.6",
80
80
  "vitest": "3.2.4"
@@ -1,11 +1,9 @@
1
1
  import { describe, expect, it } from "vitest";
2
- import "../../testing/extend-expect.js";
3
2
  import {
4
3
  BasePartProps,
5
4
  createAccessExpression,
6
5
  } from "../components/AccessExpression.jsx";
7
6
  import { code } from "../index.js";
8
- import { printTree, renderTree } from "../render.js";
9
7
  import { Children } from "../runtime/component.js";
10
8
 
11
9
  interface TestPartProps extends BasePartProps {
@@ -105,28 +103,22 @@ describe("createAccessExpression", () => {
105
103
 
106
104
  describe("createAccessExpression: call chain formatting", () => {
107
105
  it("uses linear format with only one call", () => {
108
- const tree = renderTree(
106
+ expect(
109
107
  <Expression>
110
108
  <Part name="foo" />
111
109
  <Part name="bar" args="x" />
112
110
  </Expression>,
113
- );
114
- // Single call → linear, no grouping.
115
- expect(printTree(tree)).toBe("foo.bar(x)");
111
+ ).toRenderTo("foo.bar(x)");
116
112
  });
117
113
 
118
114
  it("uses call chain format with multiple calls", () => {
119
- const tree = renderTree(
115
+ // Multiple calls → call chain with group/indent wrapping.
116
+ expect(
120
117
  <Expression>
121
118
  <Part name="foo" />
122
119
  <Part name="bar" args="x" />
123
120
  <Part name="baz" args="y" />
124
121
  </Expression>,
125
- );
126
- // Multiple calls → call chain with group/indent wrapping.
127
- const result = printTree(tree);
128
- // Should contain both calls.
129
- expect(result).toContain("bar(x)");
130
- expect(result).toContain("baz(y)");
122
+ ).toRenderTo("foo.bar(x).baz(y)");
131
123
  });
132
124
  });
@@ -8,7 +8,7 @@ import { BinderContext } from "../context/binder.js";
8
8
  import { FormatOptions } from "../context/format-options.js";
9
9
  import { NamePolicyContext } from "../context/name-policy.js";
10
10
  import { NamePolicy } from "../name-policy.js";
11
- import { PrintTreeOptions } from "../render.js";
11
+ import { PrintTreeOptions } from "../output-types.js";
12
12
  import type { Children } from "../runtime/component.js";
13
13
  import { SourceDirectory } from "./SourceDirectory.js";
14
14
 
@@ -70,6 +70,7 @@ export function Output(props: OutputProps) {
70
70
  printWidth: props.printWidth,
71
71
  tabWidth: props.tabWidth,
72
72
  useTabs: props.useTabs,
73
+ insertFinalNewLine: props.insertFinalNewLine,
73
74
  }}
74
75
  >
75
76
  {props.namePolicy ?
@@ -3,9 +3,9 @@ import { useContext } from "../context.js";
3
3
  import { useFormatOptions } from "../context/format-options.js";
4
4
  import { SourceDirectoryContext } from "../context/source-directory.js";
5
5
  import { SourceFileContext } from "../context/source-file.js";
6
+ import { PrintTreeOptions } from "../output-types.js";
6
7
  import { getContext } from "../reactivity.js";
7
8
  import { Refkey } from "../refkey.js";
8
- import { PrintTreeOptions } from "../render.js";
9
9
  import type { Children, ComponentDefinition } from "../runtime/component.js";
10
10
  import { Show } from "./Show.jsx";
11
11