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

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 (506) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/dev/src/components/AccessExpression.test.js +1 -1
  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 +1 -1
  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 +1 -1
  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/components/block.test.js +1 -1
  88. package/dist/dev/test/components/block.test.js.map +1 -1
  89. package/dist/dev/test/components/copy-file.test.js +7 -7
  90. package/dist/dev/test/components/copy-file.test.js.map +1 -1
  91. package/dist/dev/test/components/update-file.test.js +1 -1
  92. package/dist/dev/test/components/update-file.test.js.map +1 -1
  93. package/dist/dev/test/components/wrap.test.js +1 -1
  94. package/dist/dev/test/components/wrap.test.js.map +1 -1
  95. package/dist/dev/test/control-flow/match.test.js +1 -1
  96. package/dist/dev/test/control-flow/match.test.js.map +1 -1
  97. package/dist/dev/test/control-flow/show.test.js +1 -1
  98. package/dist/dev/test/control-flow/show.test.js.map +1 -1
  99. package/dist/dev/test/lazy-isempty.test.js +6 -6
  100. package/dist/dev/test/lazy-isempty.test.js.map +1 -1
  101. package/dist/dev/test/node.test.js +80 -0
  102. package/dist/dev/test/node.test.js.map +1 -0
  103. package/dist/dev/test/output-e2e.test.js +194 -0
  104. package/dist/dev/test/output-e2e.test.js.map +1 -0
  105. package/dist/dev/test/reactivity/circular-reactives.test.js +1 -1
  106. package/dist/dev/test/reactivity/circular-reactives.test.js.map +1 -1
  107. package/dist/dev/test/reactivity/cleanup.test.js +1 -1
  108. package/dist/dev/test/reactivity/cleanup.test.js.map +1 -1
  109. package/dist/dev/test/rendering/memoization.test.js +6 -1
  110. package/dist/dev/test/rendering/memoization.test.js.map +1 -1
  111. package/dist/dev/test/rendering/render-output-diagnostics.test.js +102 -0
  112. package/dist/dev/test/rendering/render-output-diagnostics.test.js.map +1 -0
  113. package/dist/dev/test/runtime.test.js +385 -0
  114. package/dist/dev/test/runtime.test.js.map +1 -0
  115. package/dist/dev/test/tree-test-utils.js +16 -0
  116. package/dist/dev/test/tree-test-utils.js.map +1 -0
  117. package/dist/dev/test/utils.test.js +1 -1
  118. package/dist/dev/test/utils.test.js.map +1 -1
  119. package/dist/dev/testing/devtools-utils.js +1 -1
  120. package/dist/dev/testing/devtools-utils.js.map +1 -1
  121. package/dist/dev/testing/extend-expect.js +7 -33
  122. package/dist/dev/testing/extend-expect.js.map +1 -1
  123. package/dist/dev/testing/render.js +7 -17
  124. package/dist/dev/testing/render.js.map +1 -1
  125. package/dist/devtools/index.html +17 -17
  126. package/dist/src/components/AccessExpression.test.js +1 -1
  127. package/dist/src/components/AccessExpression.test.js.map +1 -1
  128. package/dist/src/components/Output.d.ts +1 -1
  129. package/dist/src/components/Output.d.ts.map +1 -1
  130. package/dist/src/components/Output.js +2 -1
  131. package/dist/src/components/Output.js.map +1 -1
  132. package/dist/src/components/ReferenceOrContent.d.ts +1 -1
  133. package/dist/src/components/ReferenceOrContent.d.ts.map +1 -1
  134. package/dist/src/components/SourceFile.d.ts +1 -1
  135. package/dist/src/components/SourceFile.d.ts.map +1 -1
  136. package/dist/src/components/SourceFile.js.map +1 -1
  137. package/dist/src/content-slot.test.js +1 -1
  138. package/dist/src/content-slot.test.js.map +1 -1
  139. package/dist/src/context/format-options.d.ts +1 -1
  140. package/dist/src/context/format-options.d.ts.map +1 -1
  141. package/dist/src/context.d.ts +9 -1
  142. package/dist/src/context.d.ts.map +1 -1
  143. package/dist/src/context.js +30 -3
  144. package/dist/src/context.js.map +1 -1
  145. package/dist/src/debug/diagnostics.test.js +1 -1
  146. package/dist/src/debug/diagnostics.test.js.map +1 -1
  147. package/dist/src/debug/effects.test.js +1 -1
  148. package/dist/src/debug/effects.test.js.map +1 -1
  149. package/dist/src/debug/file-streaming.d.ts +22 -0
  150. package/dist/src/debug/file-streaming.d.ts.map +1 -0
  151. package/dist/src/debug/file-streaming.js +103 -0
  152. package/dist/src/debug/file-streaming.js.map +1 -0
  153. package/dist/src/debug/files.test.js +4 -5
  154. package/dist/src/debug/files.test.js.map +1 -1
  155. package/dist/src/debug/index.d.ts +5 -7
  156. package/dist/src/debug/index.d.ts.map +1 -1
  157. package/dist/src/debug/index.js +4 -6
  158. package/dist/src/debug/index.js.map +1 -1
  159. package/dist/src/debug/message-format.test.js +16 -18
  160. package/dist/src/debug/message-format.test.js.map +1 -1
  161. package/dist/src/debug/render-tree-orphans.test.js +8 -18
  162. package/dist/src/debug/render-tree-orphans.test.js.map +1 -1
  163. package/dist/src/debug/render.d.ts +71 -21
  164. package/dist/src/debug/render.d.ts.map +1 -1
  165. package/dist/src/debug/render.js +529 -352
  166. package/dist/src/debug/render.js.map +1 -1
  167. package/dist/src/debug/render.test.js +137 -74
  168. package/dist/src/debug/render.test.js.map +1 -1
  169. package/dist/src/debug/trace-writer.d.ts +6 -1
  170. package/dist/src/debug/trace-writer.d.ts.map +1 -1
  171. package/dist/src/debug/trace-writer.js +127 -15
  172. package/dist/src/debug/trace-writer.js.map +1 -1
  173. package/dist/src/debug/trace.d.ts +0 -36
  174. package/dist/src/debug/trace.d.ts.map +1 -1
  175. package/dist/src/debug/trace.js +0 -36
  176. package/dist/src/debug/trace.js.map +1 -1
  177. package/dist/src/devtools/devtools-protocol.d.ts +34 -1
  178. package/dist/src/devtools/devtools-protocol.d.ts.map +1 -1
  179. package/dist/src/devtools/devtools-server.d.ts.map +1 -1
  180. package/dist/src/devtools/devtools-server.js +55 -32
  181. package/dist/src/devtools/devtools-server.js.map +1 -1
  182. package/dist/src/devtools-entry.browser.d.ts +1 -1
  183. package/dist/src/devtools-entry.browser.d.ts.map +1 -1
  184. package/dist/src/devtools-entry.browser.js.map +1 -1
  185. package/dist/src/devtools-entry.d.ts +1 -1
  186. package/dist/src/devtools-entry.d.ts.map +1 -1
  187. package/dist/src/devtools-entry.js.map +1 -1
  188. package/dist/src/diagnostics.d.ts +4 -0
  189. package/dist/src/diagnostics.d.ts.map +1 -1
  190. package/dist/src/diagnostics.js +19 -1
  191. package/dist/src/diagnostics.js.map +1 -1
  192. package/dist/src/index.d.ts +5 -2
  193. package/dist/src/index.d.ts.map +1 -1
  194. package/dist/src/index.js +5 -2
  195. package/dist/src/index.js.map +1 -1
  196. package/dist/src/jsx-runtime.d.ts +13 -4
  197. package/dist/src/jsx-runtime.d.ts.map +1 -1
  198. package/dist/src/jsx-runtime.js +14 -8
  199. package/dist/src/jsx-runtime.js.map +1 -1
  200. package/dist/src/output-types.d.ts +40 -0
  201. package/dist/src/output-types.d.ts.map +1 -0
  202. package/dist/src/output-types.js +2 -0
  203. package/dist/src/output-types.js.map +1 -0
  204. package/dist/src/reactivity.d.ts +49 -18
  205. package/dist/src/reactivity.d.ts.map +1 -1
  206. package/dist/src/reactivity.js +155 -13
  207. package/dist/src/reactivity.js.map +1 -1
  208. package/dist/src/render/get-string-width.d.ts +19 -0
  209. package/dist/src/render/get-string-width.d.ts.map +1 -0
  210. package/dist/src/render/get-string-width.js +61 -0
  211. package/dist/src/render/get-string-width.js.map +1 -0
  212. package/dist/src/render/index.d.ts +2 -0
  213. package/dist/src/render/index.d.ts.map +1 -0
  214. package/dist/src/render/index.js +2 -0
  215. package/dist/src/render/index.js.map +1 -0
  216. package/dist/src/render/node-context.d.ts +5 -0
  217. package/dist/src/render/node-context.d.ts.map +1 -0
  218. package/dist/src/render/node-context.js +7 -0
  219. package/dist/src/render/node-context.js.map +1 -0
  220. package/dist/src/render/node.d.ts +146 -0
  221. package/dist/src/render/node.d.ts.map +1 -0
  222. package/dist/src/render/node.js +386 -0
  223. package/dist/src/render/node.js.map +1 -0
  224. package/dist/src/render/printer-support.d.ts +50 -0
  225. package/dist/src/render/printer-support.d.ts.map +1 -0
  226. package/dist/src/render/printer-support.js +180 -0
  227. package/dist/src/render/printer-support.js.map +1 -0
  228. package/dist/src/render/printer.d.ts +35 -0
  229. package/dist/src/render/printer.d.ts.map +1 -0
  230. package/dist/src/render/printer.js +797 -0
  231. package/dist/src/render/printer.js.map +1 -0
  232. package/dist/src/render-error.d.ts +4 -0
  233. package/dist/src/render-error.d.ts.map +1 -0
  234. package/dist/src/render-error.js +79 -0
  235. package/dist/src/render-error.js.map +1 -0
  236. package/dist/src/render-output.d.ts +42 -0
  237. package/dist/src/render-output.d.ts.map +1 -0
  238. package/dist/src/render-output.js +209 -0
  239. package/dist/src/render-output.js.map +1 -0
  240. package/dist/src/runtime/component.d.ts +2 -2
  241. package/dist/src/runtime/component.d.ts.map +1 -1
  242. package/dist/src/runtime/create-intrinsic.d.ts +28 -0
  243. package/dist/src/runtime/create-intrinsic.d.ts.map +1 -0
  244. package/dist/src/runtime/create-intrinsic.js +53 -0
  245. package/dist/src/runtime/create-intrinsic.js.map +1 -0
  246. package/dist/src/runtime/fragment.d.ts +16 -0
  247. package/dist/src/runtime/fragment.d.ts.map +1 -0
  248. package/dist/src/runtime/fragment.js +21 -0
  249. package/dist/src/runtime/fragment.js.map +1 -0
  250. package/dist/src/runtime/index.d.ts +12 -0
  251. package/dist/src/runtime/index.d.ts.map +1 -0
  252. package/dist/src/runtime/index.js +13 -0
  253. package/dist/src/runtime/index.js.map +1 -0
  254. package/dist/src/runtime/insert.d.ts +29 -0
  255. package/dist/src/runtime/insert.d.ts.map +1 -0
  256. package/dist/src/runtime/insert.js +453 -0
  257. package/dist/src/runtime/insert.js.map +1 -0
  258. package/dist/src/runtime/intrinsic.d.ts +12 -29
  259. package/dist/src/runtime/intrinsic.d.ts.map +1 -1
  260. package/dist/src/runtime/intrinsic.js +1 -11
  261. package/dist/src/runtime/intrinsic.js.map +1 -1
  262. package/dist/src/scheduler.d.ts.map +1 -1
  263. package/dist/src/scheduler.js +38 -14
  264. package/dist/src/scheduler.js.map +1 -1
  265. package/dist/src/stc.d.ts.map +1 -1
  266. package/dist/src/stc.js +2 -0
  267. package/dist/src/stc.js.map +1 -1
  268. package/dist/src/sti.d.ts +7 -6
  269. package/dist/src/sti.d.ts.map +1 -1
  270. package/dist/src/sti.js +1 -1
  271. package/dist/src/sti.js.map +1 -1
  272. package/dist/src/symbols/symbol-slot.test.js +1 -1
  273. package/dist/src/symbols/symbol-slot.test.js.map +1 -1
  274. package/dist/src/test-render.d.ts +31 -0
  275. package/dist/src/test-render.d.ts.map +1 -0
  276. package/dist/src/test-render.js +78 -0
  277. package/dist/src/test-render.js.map +1 -0
  278. package/dist/src/utils.d.ts +1 -1
  279. package/dist/src/utils.d.ts.map +1 -1
  280. package/dist/src/utils.js +40 -28
  281. package/dist/src/utils.js.map +1 -1
  282. package/dist/src/write-output.d.ts +1 -1
  283. package/dist/src/write-output.d.ts.map +1 -1
  284. package/dist/test/babel-e2e.test.d.ts +13 -0
  285. package/dist/test/babel-e2e.test.d.ts.map +1 -0
  286. package/dist/test/babel-e2e.test.js +218 -0
  287. package/dist/test/babel-e2e.test.js.map +1 -0
  288. package/dist/test/components/block.test.js +1 -1
  289. package/dist/test/components/block.test.js.map +1 -1
  290. package/dist/test/components/copy-file.test.d.ts.map +1 -1
  291. package/dist/test/components/copy-file.test.js +1 -1
  292. package/dist/test/components/copy-file.test.js.map +1 -1
  293. package/dist/test/components/update-file.test.js +1 -1
  294. package/dist/test/components/update-file.test.js.map +1 -1
  295. package/dist/test/components/wrap.test.js +1 -1
  296. package/dist/test/components/wrap.test.js.map +1 -1
  297. package/dist/test/control-flow/match.test.js +1 -1
  298. package/dist/test/control-flow/match.test.js.map +1 -1
  299. package/dist/test/control-flow/show.test.js +1 -1
  300. package/dist/test/control-flow/show.test.js.map +1 -1
  301. package/dist/test/lazy-isempty.test.js +6 -6
  302. package/dist/test/lazy-isempty.test.js.map +1 -1
  303. package/dist/test/node.test.d.ts +2 -0
  304. package/dist/test/node.test.d.ts.map +1 -0
  305. package/dist/test/node.test.js +80 -0
  306. package/dist/test/node.test.js.map +1 -0
  307. package/dist/test/output-e2e.test.d.ts +13 -0
  308. package/dist/test/output-e2e.test.d.ts.map +1 -0
  309. package/dist/test/output-e2e.test.js +194 -0
  310. package/dist/test/output-e2e.test.js.map +1 -0
  311. package/dist/test/reactivity/circular-reactives.test.js +1 -1
  312. package/dist/test/reactivity/circular-reactives.test.js.map +1 -1
  313. package/dist/test/reactivity/cleanup.test.js +1 -1
  314. package/dist/test/reactivity/cleanup.test.js.map +1 -1
  315. package/dist/test/rendering/memoization.test.js +6 -1
  316. package/dist/test/rendering/memoization.test.js.map +1 -1
  317. package/dist/test/rendering/render-output-diagnostics.test.d.ts +2 -0
  318. package/dist/test/rendering/render-output-diagnostics.test.d.ts.map +1 -0
  319. package/dist/test/rendering/render-output-diagnostics.test.js +82 -0
  320. package/dist/test/rendering/render-output-diagnostics.test.js.map +1 -0
  321. package/dist/test/runtime.test.d.ts +11 -0
  322. package/dist/test/runtime.test.d.ts.map +1 -0
  323. package/dist/test/runtime.test.js +385 -0
  324. package/dist/test/runtime.test.js.map +1 -0
  325. package/dist/test/tree-test-utils.d.ts +3 -0
  326. package/dist/test/tree-test-utils.d.ts.map +1 -0
  327. package/dist/test/tree-test-utils.js +16 -0
  328. package/dist/test/tree-test-utils.js.map +1 -0
  329. package/dist/test/utils.test.js +1 -1
  330. package/dist/test/utils.test.js.map +1 -1
  331. package/dist/testing/devtools-utils.d.ts.map +1 -1
  332. package/dist/testing/devtools-utils.js +1 -1
  333. package/dist/testing/devtools-utils.js.map +1 -1
  334. package/dist/testing/extend-expect.d.ts.map +1 -1
  335. package/dist/testing/extend-expect.js +7 -33
  336. package/dist/testing/extend-expect.js.map +1 -1
  337. package/dist/testing/render.d.ts +7 -9
  338. package/dist/testing/render.d.ts.map +1 -1
  339. package/dist/testing/render.js +7 -17
  340. package/dist/testing/render.js.map +1 -1
  341. package/dist/tsconfig.tsbuildinfo +1 -1
  342. package/docs/api/components/Output.md +0 -3
  343. package/docs/api/components/SourceFile.md +0 -3
  344. package/docs/api/functions/createComment.md +18 -0
  345. package/docs/api/functions/createElement.md +19 -0
  346. package/docs/api/functions/createFragment.md +17 -0
  347. package/docs/api/functions/createTextNode.md +18 -0
  348. package/docs/api/functions/emitDiagnosticForTree.md +19 -0
  349. package/docs/api/functions/ensureIsEmpty.md +1 -1
  350. package/docs/api/functions/getContextForNode.md +18 -0
  351. package/docs/api/functions/getContextForRenderNode.md +4 -4
  352. package/docs/api/functions/getDiagnosticsForTree.md +7 -5
  353. package/docs/api/functions/getRegisteredDiagnosticsForTree.md +18 -0
  354. package/docs/api/functions/index.md +17 -12
  355. package/docs/api/functions/isCustomContext.md +4 -4
  356. package/docs/api/functions/notifyContentState.md +6 -0
  357. package/docs/api/functions/printTree.md +6 -16
  358. package/docs/api/functions/registerDiagnosticsForTree.md +19 -0
  359. package/docs/api/functions/render.md +1 -2
  360. package/docs/api/functions/renderAsync.md +1 -2
  361. package/docs/api/functions/renderTree.md +8 -5
  362. package/docs/api/functions/reportDiagnosticsForTree.md +18 -0
  363. package/docs/api/functions/runInContext.md +28 -0
  364. package/docs/api/functions/sourceFilesForTree.md +6 -16
  365. package/docs/api/index.md +3 -3
  366. package/docs/api/testing/functions/index.md +1 -1
  367. package/docs/api/testing/functions/renderToString.md +1 -1
  368. package/docs/api/types/AlloyNode.md +22 -0
  369. package/docs/api/types/Child.md +1 -1
  370. package/docs/api/types/CommentNode.md +15 -0
  371. package/docs/api/types/Context.md +13 -15
  372. package/docs/api/types/ElementNode.md +18 -0
  373. package/docs/api/types/FragmentNode.md +12 -0
  374. package/docs/api/types/Insertable.md +7 -0
  375. package/docs/api/types/NodeType.md +5 -0
  376. package/docs/api/types/OutputDirectory.md +0 -50
  377. package/docs/api/types/PrintTreeOptions.md +0 -1
  378. package/docs/api/types/RenderTreeOptions.md +7 -0
  379. package/docs/api/types/StiComponentCreator.md +4 -4
  380. package/docs/api/types/StiSignature.md +1 -1
  381. package/docs/api/types/TextNode.md +16 -0
  382. package/docs/api/types/index.md +10 -28
  383. package/docs/api/variables/COMMENT_NODE.md +5 -0
  384. package/docs/api/variables/ELEMENT_NODE.md +11 -0
  385. package/docs/api/variables/FRAGMENT_NODE.md +5 -0
  386. package/docs/api/variables/TEXT_NODE.md +5 -0
  387. package/docs/api/variables/index.md +4 -2
  388. package/docs/formatting.md +1 -1
  389. package/docs/rendering.md +4 -4
  390. package/package.json +6 -6
  391. package/src/components/AccessExpression.test.tsx +1 -1
  392. package/src/components/Output.tsx +2 -1
  393. package/src/components/SourceFile.tsx +1 -1
  394. package/src/content-slot.test.tsx +1 -1
  395. package/src/context/format-options.ts +1 -1
  396. package/src/context.ts +37 -4
  397. package/src/debug/diagnostics.test.tsx +1 -1
  398. package/src/debug/effects.test.tsx +1 -1
  399. package/src/debug/file-streaming.ts +115 -0
  400. package/src/debug/files.test.tsx +15 -11
  401. package/src/debug/index.ts +11 -11
  402. package/src/debug/message-format.test.tsx +32 -19
  403. package/src/debug/render-tree-orphans.test.tsx +10 -19
  404. package/src/debug/render.test.tsx +206 -78
  405. package/src/debug/render.ts +642 -495
  406. package/src/debug/trace-writer.ts +168 -14
  407. package/src/debug/trace.ts +0 -20
  408. package/src/devtools/devtools-protocol.ts +43 -0
  409. package/src/devtools/devtools-server.ts +57 -32
  410. package/src/devtools-entry.browser.ts +5 -0
  411. package/src/devtools-entry.ts +5 -0
  412. package/src/diagnostics.ts +31 -0
  413. package/src/index.ts +66 -2
  414. package/src/jsx-runtime.ts +16 -14
  415. package/src/output-types.ts +47 -0
  416. package/src/reactivity.ts +186 -40
  417. package/src/render/get-string-width.ts +201 -0
  418. package/src/render/index.ts +1 -0
  419. package/src/render/node-context.ts +14 -0
  420. package/src/render/node.ts +442 -0
  421. package/src/render/printer-support.ts +209 -0
  422. package/src/render/printer.ts +817 -0
  423. package/src/render-error.ts +98 -0
  424. package/src/render-output.ts +243 -0
  425. package/src/runtime/component.ts +2 -2
  426. package/src/runtime/create-intrinsic.ts +56 -0
  427. package/src/runtime/fragment.ts +22 -0
  428. package/src/runtime/index.ts +12 -0
  429. package/src/runtime/insert.ts +569 -0
  430. package/src/runtime/intrinsic.ts +14 -70
  431. package/src/scheduler.ts +40 -25
  432. package/src/stc.ts +3 -0
  433. package/src/sti.ts +17 -20
  434. package/src/symbols/symbol-slot.test.tsx +1 -1
  435. package/src/test-render.ts +103 -0
  436. package/src/utils.tsx +55 -37
  437. package/src/write-output.ts +1 -1
  438. package/temp/api-testing.json +390 -14
  439. package/temp/api.json +4320 -4144
  440. package/test/babel-e2e.test.ts +224 -0
  441. package/test/components/block.test.tsx +1 -1
  442. package/test/components/copy-file.test.tsx +2 -1
  443. package/test/components/update-file.test.tsx +1 -1
  444. package/test/components/wrap.test.tsx +1 -1
  445. package/test/control-flow/match.test.tsx +1 -1
  446. package/test/control-flow/show.test.tsx +1 -1
  447. package/test/lazy-isempty.test.tsx +6 -6
  448. package/test/node.test.ts +90 -0
  449. package/test/output-e2e.test.ts +198 -0
  450. package/test/reactivity/circular-reactives.test.tsx +1 -1
  451. package/test/reactivity/cleanup.test.tsx +1 -1
  452. package/test/rendering/memoization.test.tsx +6 -1
  453. package/test/rendering/render-output-diagnostics.test.tsx +120 -0
  454. package/test/runtime.test.ts +448 -0
  455. package/test/tree-test-utils.ts +23 -0
  456. package/test/utils.test.tsx +1 -1
  457. package/testing/devtools-utils.ts +2 -0
  458. package/testing/extend-expect.ts +8 -46
  459. package/testing/render.ts +17 -21
  460. package/dist/dev/src/print-hook.js +0 -10
  461. package/dist/dev/src/print-hook.js.map +0 -1
  462. package/dist/dev/src/render.js +0 -872
  463. package/dist/dev/src/render.js.map +0 -1
  464. package/dist/src/print-hook.d.ts +0 -14
  465. package/dist/src/print-hook.d.ts.map +0 -1
  466. package/dist/src/print-hook.js +0 -10
  467. package/dist/src/print-hook.js.map +0 -1
  468. package/dist/src/render.d.ts +0 -155
  469. package/dist/src/render.d.ts.map +0 -1
  470. package/dist/src/render.js +0 -872
  471. package/dist/src/render.js.map +0 -1
  472. package/docs/api/functions/createIntrinsic.md +0 -19
  473. package/docs/api/functions/createRenderTreeHook.md +0 -19
  474. package/docs/api/functions/getElementCache.md +0 -17
  475. package/docs/api/functions/isIntrinsicElement.md +0 -18
  476. package/docs/api/functions/isPrintHook.md +0 -18
  477. package/docs/api/types/AlignIntrinsicElement.md +0 -5
  478. package/docs/api/types/BrIntrinsicElement.md +0 -5
  479. package/docs/api/types/BreakParentIntrinsicElement.md +0 -5
  480. package/docs/api/types/DedentIntrinsicElement.md +0 -5
  481. package/docs/api/types/DedentToRootIntrinsicElement.md +0 -5
  482. package/docs/api/types/ElementCache.md +0 -5
  483. package/docs/api/types/ElementCacheKey.md +0 -5
  484. package/docs/api/types/FillIntrinsicElement.md +0 -5
  485. package/docs/api/types/GroupIntrinsicElement.md +0 -5
  486. package/docs/api/types/HardlineIntrinsicElement.md +0 -5
  487. package/docs/api/types/HbrIntrinsicElement.md +0 -5
  488. package/docs/api/types/IfBreakIntrinsicElement.md +0 -5
  489. package/docs/api/types/IndentIfBreakIntrinsicElement.md +0 -5
  490. package/docs/api/types/IndentIntrinsicElement.md +0 -5
  491. package/docs/api/types/IntrinsicElement.md +0 -5
  492. package/docs/api/types/IntrinsicElementBase.md +0 -9
  493. package/docs/api/types/LbrIntrinsicElement.md +0 -5
  494. package/docs/api/types/LineIntrinsicElement.md +0 -5
  495. package/docs/api/types/LineSuffixBoundaryIntrinsicElement.md +0 -5
  496. package/docs/api/types/LineSuffixIntrinsicElement.md +0 -5
  497. package/docs/api/types/LiterallineIntrinsicElement.md +0 -5
  498. package/docs/api/types/MarkAsRootIntrinsicElement.md +0 -5
  499. package/docs/api/types/PrintHook.md +0 -10
  500. package/docs/api/types/RenderedTextTree.md +0 -5
  501. package/docs/api/types/SbrIntrinsicElement.md +0 -5
  502. package/docs/api/types/SoftlineIntrinsicElement.md +0 -5
  503. package/docs/api/variables/intrinsicElementKey.md +0 -5
  504. package/docs/api/variables/printHookTag.md +0 -7
  505. package/src/print-hook.ts +0 -22
  506. package/src/render.ts +0 -1154
@@ -0,0 +1,146 @@
1
+ /**
2
+ * AlloyNode tree — a DOM-aligned in-memory representation of rendered
3
+ * output.
4
+ *
5
+ * Components return AlloyNodes (or values that get inserted into them)
6
+ * via `runtime/insert.ts`; the resulting tree is consumed by the direct
7
+ * printer and `render-output.ts` output-directory walker.
8
+ *
9
+ * Naming and semantics follow the modern DOM where there is meaningful
10
+ * overlap. Only modern DOM mutation methods are exposed
11
+ * (`append`/`prepend`/`before`/`after`/`replaceWith`/`remove`/`text.data`/
12
+ * `moveBefore`). Legacy methods (`appendChild`, `insertBefore`,
13
+ * `removeChild`, `replaceChild`, the `nodeValue` setter) are intentionally
14
+ * NOT provided.
15
+ */
16
+ export declare const ELEMENT_NODE: 1;
17
+ export declare const TEXT_NODE: 3;
18
+ export declare const COMMENT_NODE: 8;
19
+ export declare const FRAGMENT_NODE: 11;
20
+ export type NodeType = 1 | 3 | 8 | 11;
21
+ /**
22
+ * Anything that can be inserted: a Node, a string (auto-wrapped as Text),
23
+ * or a number (auto-wrapped as Text).
24
+ */
25
+ export type Insertable = AlloyNode | string | number;
26
+ export declare abstract class AlloyNode {
27
+ abstract readonly nodeType: NodeType;
28
+ parentNode: AlloyNode | null;
29
+ firstChild: AlloyNode | null;
30
+ lastChild: AlloyNode | null;
31
+ previousSibling: AlloyNode | null;
32
+ nextSibling: AlloyNode | null;
33
+ /**
34
+ * Empty-state propagation. `false` for Text/Element with content,
35
+ * `true` for empty regions. Mutated by reactive bindings; read by
36
+ * joiner/ender logic. Direct field — no Vue effect.
37
+ */
38
+ isEmpty: boolean;
39
+ /** Append nodes (or strings) to the end of children. */
40
+ append(...nodes: Insertable[]): void;
41
+ /** Prepend nodes (or strings) to the beginning of children. */
42
+ prepend(...nodes: Insertable[]): void;
43
+ /** Insert nodes immediately before `this` in the parent's child list. */
44
+ before(...nodes: Insertable[]): void;
45
+ /** Insert nodes immediately after `this` in the parent's child list. */
46
+ after(...nodes: Insertable[]): void;
47
+ /** Replace `this` with the given nodes in the parent's child list. */
48
+ replaceWith(...nodes: Insertable[]): void;
49
+ /** Remove `this` from its parent. */
50
+ remove(): void;
51
+ /**
52
+ * Atomic move: relocate `node` to be a child of `this` immediately
53
+ * before `ref` (or at the end if `ref` is null), without disconnecting
54
+ * any state on the moved subtree. Used by `<For>` reorder paths so
55
+ * keyed-item bindings stay live.
56
+ *
57
+ * Mirrors the 2024 DOM `Element.moveBefore(node, child)` proposal.
58
+ */
59
+ moveBefore(node: AlloyNode, ref: AlloyNode | null): void;
60
+ /**
61
+ * Deep-clone this node and its subtree. The clone has no parent and
62
+ * its children are themselves clones. Used when a node value would
63
+ * otherwise be inserted into two parents (e.g. a shared joiner element
64
+ * produced by mapJoin) — Alloy intrinsic nodes are stateless so a
65
+ * fresh tree is semantically equivalent.
66
+ */
67
+ cloneNode(): AlloyNode;
68
+ protected abstract cloneShallow(): AlloyNode;
69
+ }
70
+ /** Text node — analog of DOM Text / CharacterData. */
71
+ export declare class TextNode extends AlloyNode {
72
+ readonly nodeType: 3;
73
+ data: string;
74
+ /** Display width (Prettier-compatible). Lazily filled on first read. */
75
+ _w: number;
76
+ /** 1 if `data` contains a newline, 0 if not, -1 if not yet computed. */
77
+ _nl: number;
78
+ constructor(data: string);
79
+ protected cloneShallow(): TextNode;
80
+ }
81
+ /**
82
+ * Comment node — used as a slot anchor (start/end markers) bracketing
83
+ * dynamic regions. Solid uses the same pattern.
84
+ */
85
+ export declare class CommentNode extends AlloyNode {
86
+ readonly nodeType: 8;
87
+ data: string;
88
+ /** Comments don't contribute output, always empty. */
89
+ isEmpty: boolean;
90
+ constructor(data?: string);
91
+ protected cloneShallow(): CommentNode;
92
+ }
93
+ /**
94
+ * Element node — Alloy hook node. `localName` carries the hook kind
95
+ * ("group", "indent", "line", "softline", "ifBreak", etc).
96
+ *
97
+ * `data` carries hook-specific config (e.g. `{ shouldBreak: false }` for
98
+ * a group). Kept as a single bag rather than a parallel hierarchy of
99
+ * subclasses to avoid V8 hidden-class fan-out.
100
+ */
101
+ export declare class ElementNode extends AlloyNode {
102
+ readonly nodeType: 1;
103
+ localName: string;
104
+ data: unknown;
105
+ /**
106
+ * Count of unabsorbed break-leaves in this subtree. Maintained by
107
+ * `insertBefore` / `detach` so the printer can decide whether a
108
+ * `group` is broken in O(1) without a prepass walk.
109
+ *
110
+ * `breakParent` / `hardline` / `hbr` / `literalline` / `lbr` elements
111
+ * and TextNodes containing `\n`/`\r` count as break-leaves; a `group`
112
+ * element absorbs the count from its own subtree (does not propagate
113
+ * outward).
114
+ *
115
+ * For `ifBreak` elements the count includes contributions from
116
+ * `data.flatNode` (the alternate branch is not in the regular tree).
117
+ */
118
+ _breakCount: number;
119
+ constructor(localName: string, data?: unknown);
120
+ protected cloneShallow(): ElementNode;
121
+ }
122
+ /**
123
+ * Fragment node — transient batch container. Inserting a Fragment splices
124
+ * its children into the target (mirroring DOM DocumentFragment semantics)
125
+ * and the Fragment itself becomes empty.
126
+ */
127
+ export declare class FragmentNode extends AlloyNode {
128
+ readonly nodeType: 11;
129
+ protected cloneShallow(): FragmentNode;
130
+ }
131
+ export declare function createTextNode(data: string): TextNode;
132
+ export declare function createComment(data?: string): CommentNode;
133
+ export declare function createElement(localName: string, data?: unknown): ElementNode;
134
+ export declare function createFragment(): FragmentNode;
135
+ /**
136
+ * Splice `node` (or its children, if Fragment) into `parent` immediately
137
+ * before `ref` (or at end if `ref` is null). Detaches `node` from any
138
+ * existing parent first.
139
+ */
140
+ /** Mutation listener — set by `debug/render.ts`. */
141
+ export interface MutationListener {
142
+ attached(node: AlloyNode, parent: AlloyNode): void;
143
+ detached(node: AlloyNode, formerParent: AlloyNode): void;
144
+ }
145
+ export declare function setMutationListener(l: MutationListener | null): void;
146
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/render/node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,386 @@
1
+ /**
2
+ * AlloyNode tree — a DOM-aligned in-memory representation of rendered
3
+ * output.
4
+ *
5
+ * Components return AlloyNodes (or values that get inserted into them)
6
+ * via `runtime/insert.ts`; the resulting tree is consumed by the direct
7
+ * printer and `render-output.ts` output-directory walker.
8
+ *
9
+ * Naming and semantics follow the modern DOM where there is meaningful
10
+ * overlap. Only modern DOM mutation methods are exposed
11
+ * (`append`/`prepend`/`before`/`after`/`replaceWith`/`remove`/`text.data`/
12
+ * `moveBefore`). Legacy methods (`appendChild`, `insertBefore`,
13
+ * `removeChild`, `replaceChild`, the `nodeValue` setter) are intentionally
14
+ * NOT provided.
15
+ */
16
+
17
+ // #region nodeType constants
18
+
19
+ export const ELEMENT_NODE = 1;
20
+ export const TEXT_NODE = 3;
21
+ export const COMMENT_NODE = 8;
22
+ export const FRAGMENT_NODE = 11;
23
+
24
+ /**
25
+ * Anything that can be inserted: a Node, a string (auto-wrapped as Text),
26
+ * or a number (auto-wrapped as Text).
27
+ */
28
+
29
+ // #endregion
30
+
31
+ // #region Base Node
32
+
33
+ export class AlloyNode {
34
+ parentNode = null;
35
+ firstChild = null;
36
+ lastChild = null;
37
+ previousSibling = null;
38
+ nextSibling = null;
39
+
40
+ /**
41
+ * Empty-state propagation. `false` for Text/Element with content,
42
+ * `true` for empty regions. Mutated by reactive bindings; read by
43
+ * joiner/ender logic. Direct field — no Vue effect.
44
+ */
45
+ isEmpty = true;
46
+
47
+ // #region Modern DOM mutation API
48
+
49
+ /** Append nodes (or strings) to the end of children. */
50
+ append(...nodes) {
51
+ for (let i = 0, len = nodes.length; i < len; i++) {
52
+ insertBefore(this, normalize(nodes[i]), null);
53
+ }
54
+ }
55
+
56
+ /** Prepend nodes (or strings) to the beginning of children. */
57
+ prepend(...nodes) {
58
+ const first = this.firstChild;
59
+ for (let i = 0, len = nodes.length; i < len; i++) {
60
+ insertBefore(this, normalize(nodes[i]), first);
61
+ }
62
+ }
63
+
64
+ /** Insert nodes immediately before `this` in the parent's child list. */
65
+ before(...nodes) {
66
+ const parent = this.parentNode;
67
+ if (parent === null) return;
68
+ for (let i = 0, len = nodes.length; i < len; i++) {
69
+ insertBefore(parent, normalize(nodes[i]), this);
70
+ }
71
+ }
72
+
73
+ /** Insert nodes immediately after `this` in the parent's child list. */
74
+ after(...nodes) {
75
+ const parent = this.parentNode;
76
+ if (parent === null) return;
77
+ const ref = this.nextSibling;
78
+ for (let i = 0, len = nodes.length; i < len; i++) {
79
+ insertBefore(parent, normalize(nodes[i]), ref);
80
+ }
81
+ }
82
+
83
+ /** Replace `this` with the given nodes in the parent's child list. */
84
+ replaceWith(...nodes) {
85
+ const parent = this.parentNode;
86
+ if (parent === null) return;
87
+ const ref = this.nextSibling;
88
+ detach(this);
89
+ for (let i = 0, len = nodes.length; i < len; i++) {
90
+ insertBefore(parent, normalize(nodes[i]), ref);
91
+ }
92
+ }
93
+
94
+ /** Remove `this` from its parent. */
95
+ remove() {
96
+ if (this.parentNode !== null) detach(this);
97
+ }
98
+
99
+ /**
100
+ * Atomic move: relocate `node` to be a child of `this` immediately
101
+ * before `ref` (or at the end if `ref` is null), without disconnecting
102
+ * any state on the moved subtree. Used by `<For>` reorder paths so
103
+ * keyed-item bindings stay live.
104
+ *
105
+ * Mirrors the 2024 DOM `Element.moveBefore(node, child)` proposal.
106
+ */
107
+ moveBefore(node, ref) {
108
+ if (node.parentNode === this && node.nextSibling === ref) return;
109
+ detach(node);
110
+ insertBefore(this, node, ref);
111
+ }
112
+
113
+ /**
114
+ * Deep-clone this node and its subtree. The clone has no parent and
115
+ * its children are themselves clones. Used when a node value would
116
+ * otherwise be inserted into two parents (e.g. a shared joiner element
117
+ * produced by mapJoin) — Alloy intrinsic nodes are stateless so a
118
+ * fresh tree is semantically equivalent.
119
+ */
120
+ cloneNode() {
121
+ const copy = this.cloneShallow();
122
+ for (let c = this.firstChild; c !== null; c = c.nextSibling) {
123
+ insertBefore(copy, c.cloneNode(), null);
124
+ }
125
+ return copy;
126
+ }
127
+ }
128
+
129
+ // #endregion
130
+
131
+ // #endregion
132
+
133
+ // #region Concrete Node types
134
+
135
+ /** Text node — analog of DOM Text / CharacterData. */
136
+ export class TextNode extends AlloyNode {
137
+ nodeType = TEXT_NODE;
138
+ // Cached during construction — text data is set once and never mutated
139
+ // (insert.ts replaces TextNode instances rather than reassigning .data).
140
+ // Reading these in the printer's hot path is much cheaper than rerunning
141
+ // getStringWidth / two indexOf scans on every print.
142
+ /** Display width (Prettier-compatible). Lazily filled on first read. */
143
+ _w = -1;
144
+ /** 1 if `data` contains a newline, 0 if not, -1 if not yet computed. */
145
+ _nl = -1;
146
+ constructor(data) {
147
+ super();
148
+ this.data = data;
149
+ this.isEmpty = data.length === 0;
150
+ }
151
+ cloneShallow() {
152
+ return new TextNode(this.data);
153
+ }
154
+ }
155
+
156
+ /**
157
+ * Comment node — used as a slot anchor (start/end markers) bracketing
158
+ * dynamic regions. Solid uses the same pattern.
159
+ */
160
+ export class CommentNode extends AlloyNode {
161
+ nodeType = COMMENT_NODE;
162
+ /** Comments don't contribute output, always empty. */
163
+ isEmpty = true;
164
+ constructor(data = "") {
165
+ super();
166
+ this.data = data;
167
+ }
168
+ cloneShallow() {
169
+ return new CommentNode(this.data);
170
+ }
171
+ }
172
+
173
+ /**
174
+ * Element node — Alloy hook node. `localName` carries the hook kind
175
+ * ("group", "indent", "line", "softline", "ifBreak", etc).
176
+ *
177
+ * `data` carries hook-specific config (e.g. `{ shouldBreak: false }` for
178
+ * a group). Kept as a single bag rather than a parallel hierarchy of
179
+ * subclasses to avoid V8 hidden-class fan-out.
180
+ */
181
+ export class ElementNode extends AlloyNode {
182
+ nodeType = ELEMENT_NODE;
183
+ /**
184
+ * Count of unabsorbed break-leaves in this subtree. Maintained by
185
+ * `insertBefore` / `detach` so the printer can decide whether a
186
+ * `group` is broken in O(1) without a prepass walk.
187
+ *
188
+ * `breakParent` / `hardline` / `hbr` / `literalline` / `lbr` elements
189
+ * and TextNodes containing `\n`/`\r` count as break-leaves; a `group`
190
+ * element absorbs the count from its own subtree (does not propagate
191
+ * outward).
192
+ *
193
+ * For `ifBreak` elements the count includes contributions from
194
+ * `data.flatNode` (the alternate branch is not in the regular tree).
195
+ */
196
+ _breakCount = 0;
197
+ constructor(localName, data) {
198
+ super();
199
+ this.localName = localName;
200
+ this.data = data;
201
+ }
202
+ cloneShallow() {
203
+ return new ElementNode(this.localName, this.data);
204
+ }
205
+ }
206
+
207
+ /**
208
+ * Fragment node — transient batch container. Inserting a Fragment splices
209
+ * its children into the target (mirroring DOM DocumentFragment semantics)
210
+ * and the Fragment itself becomes empty.
211
+ */
212
+ export class FragmentNode extends AlloyNode {
213
+ nodeType = FRAGMENT_NODE;
214
+ cloneShallow() {
215
+ return new FragmentNode();
216
+ }
217
+ }
218
+
219
+ // #endregion
220
+
221
+ // #region Constructors
222
+
223
+ export function createTextNode(data) {
224
+ return new TextNode(data);
225
+ }
226
+ export function createComment(data = "") {
227
+ return new CommentNode(data);
228
+ }
229
+ export function createElement(localName, data) {
230
+ return new ElementNode(localName, data);
231
+ }
232
+ export function createFragment() {
233
+ return new FragmentNode();
234
+ }
235
+
236
+ // #endregion
237
+
238
+ // #region Eager break propagation
239
+
240
+ /**
241
+ * Element local-names whose mere presence forces the innermost enclosing
242
+ * `group` to break (= count as one "break leaf"). Mirrors the cases
243
+ * Prettier's `propagateBreaks` triggers on.
244
+ */
245
+ function isBreakLeafElement(localName) {
246
+ return localName === "breakParent" || localName === "hardline" || localName === "hbr" || localName === "literalline" || localName === "lbr";
247
+ }
248
+
249
+ /**
250
+ * How many break-leaves does inserting/removing `n` add to its parent's
251
+ * subtree? `group` absorbs internal breaks → contributes 0 outward.
252
+ * `ifBreak` includes its `flatNode` count too (the alternate branch is
253
+ * stored on `data`, not in the regular tree).
254
+ */
255
+ function effectiveBreakCount(n) {
256
+ const nt = n.nodeType;
257
+ if (nt === TEXT_NODE) {
258
+ const t = n;
259
+ // Inline (and cache) the textHasNewline check to avoid a cross-module
260
+ // call on the hot insert path.
261
+ let nl = t._nl;
262
+ if (nl < 0) {
263
+ const s = t.data;
264
+ nl = s.length > 0 && (s.indexOf("\n") !== -1 || s.indexOf("\r") !== -1) ? 1 : 0;
265
+ t._nl = nl;
266
+ }
267
+ return nl;
268
+ }
269
+ if (nt === ELEMENT_NODE) {
270
+ const el = n;
271
+ const ln = el.localName;
272
+ if (isBreakLeafElement(ln)) return 1;
273
+ if (ln === "group") {
274
+ const broken = el._breakCount > 0 || el.data?.shouldBreak === true;
275
+ return broken ? 1 : 0;
276
+ }
277
+ if (ln === "ifBreak") {
278
+ const flat = el.data?.flatNode;
279
+ return el._breakCount + (flat ? flat._breakCount : 0);
280
+ }
281
+ return el._breakCount;
282
+ }
283
+ return 0;
284
+ }
285
+
286
+ /**
287
+ * Walk up from `start` adjusting `_breakCount` by `delta`. When the walk
288
+ * crosses a `group` element, the group itself absorbs the inner breaks,
289
+ * but if its own broken state transitions (0 ↔ >0) it must propagate ±1
290
+ * outward so that ancestor groups also become broken (matches Prettier's
291
+ * `propagateBreaks` cascade through groupStack).
292
+ */
293
+ function propagateBreakDelta(start, delta) {
294
+ if (delta === 0) return;
295
+ let d = delta;
296
+ for (let n = start; n !== null; n = n.parentNode) {
297
+ if (n.nodeType !== ELEMENT_NODE) continue;
298
+ const el = n;
299
+ const before = el._breakCount;
300
+ el._breakCount = before + d;
301
+ if (el.localName === "group") {
302
+ const wasBroken = before > 0 || el.data?.shouldBreak === true;
303
+ const nowBroken = el._breakCount > 0 || el.data?.shouldBreak === true;
304
+ if (wasBroken === nowBroken) return;
305
+ d = nowBroken ? 1 : -1;
306
+ }
307
+ }
308
+ }
309
+
310
+ // #endregion
311
+
312
+ // #region Core mutation primitives
313
+
314
+ function normalize(input) {
315
+ if (typeof input === "string") return new TextNode(input);
316
+ if (typeof input === "number") return new TextNode(String(input));
317
+ return input;
318
+ }
319
+
320
+ /**
321
+ * Splice `node` (or its children, if Fragment) into `parent` immediately
322
+ * before `ref` (or at end if `ref` is null). Detaches `node` from any
323
+ * existing parent first.
324
+ */
325
+ /** Mutation listener — set by `debug/render.ts`. */
326
+
327
+ let mutationListener = null;
328
+ export function setMutationListener(l) {
329
+ mutationListener = l;
330
+ }
331
+ function insertBefore(parent, node, ref) {
332
+ // Fragment: splice its children, leaving the fragment itself empty.
333
+ if (node.nodeType === FRAGMENT_NODE) {
334
+ let child = node.firstChild;
335
+ node.firstChild = null;
336
+ node.lastChild = null;
337
+ while (child !== null) {
338
+ const next = child.nextSibling;
339
+ child.parentNode = null;
340
+ child.previousSibling = null;
341
+ child.nextSibling = null;
342
+ insertBefore(parent, child, ref);
343
+ child = next;
344
+ }
345
+ return;
346
+ }
347
+ if (node.parentNode !== null) detach(node);
348
+ node.parentNode = parent;
349
+ if (ref === null) {
350
+ // append
351
+ const last = parent.lastChild;
352
+ node.previousSibling = last;
353
+ node.nextSibling = null;
354
+ if (last !== null) last.nextSibling = node;else parent.firstChild = node;
355
+ parent.lastChild = node;
356
+ } else {
357
+ // insert before ref
358
+ const prev = ref.previousSibling;
359
+ node.previousSibling = prev;
360
+ node.nextSibling = ref;
361
+ ref.previousSibling = node;
362
+ if (prev !== null) prev.nextSibling = node;else parent.firstChild = node;
363
+ }
364
+ // Eager break propagation — keeps groups' `_breakCount` accurate so
365
+ // the printer can skip its `propagateBreaks` prepass.
366
+ propagateBreakDelta(parent, effectiveBreakCount(node));
367
+ if (mutationListener !== null) mutationListener.attached(node, parent);
368
+ }
369
+ function detach(node) {
370
+ const parent = node.parentNode;
371
+ if (parent === null) return;
372
+ // Subtract this subtree's break contribution from ancestors before
373
+ // unlinking, so `_breakCount` stays in sync.
374
+ propagateBreakDelta(parent, -effectiveBreakCount(node));
375
+ const prev = node.previousSibling;
376
+ const next = node.nextSibling;
377
+ if (prev !== null) prev.nextSibling = next;else parent.firstChild = next;
378
+ if (next !== null) next.previousSibling = prev;else parent.lastChild = prev;
379
+ node.parentNode = null;
380
+ node.previousSibling = null;
381
+ node.nextSibling = null;
382
+ if (mutationListener !== null) mutationListener.detached(node, parent);
383
+ }
384
+
385
+ // #endregion
386
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ELEMENT_NODE","TEXT_NODE","COMMENT_NODE","FRAGMENT_NODE","AlloyNode","parentNode","firstChild","lastChild","previousSibling","nextSibling","isEmpty","append","nodes","i","len","length","insertBefore","normalize","prepend","first","before","parent","after","ref","replaceWith","detach","remove","moveBefore","node","cloneNode","copy","cloneShallow","c","TextNode","nodeType","_w","_nl","constructor","data","CommentNode","ElementNode","_breakCount","localName","FragmentNode","createTextNode","createComment","createElement","createFragment","isBreakLeafElement","effectiveBreakCount","n","nt","t","nl","s","indexOf","el","ln","broken","shouldBreak","flat","flatNode","propagateBreakDelta","start","delta","d","wasBroken","nowBroken","input","String","mutationListener","setMutationListener","l","child","next","last","prev","attached","detached"],"sources":["../../../src/render/node.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Shared scaffolding for the direct AlloyNode printer.
3
+ *
4
+ * `Indent` management, `trim`, mode constants, and the cursor placeholder
5
+ * are kept separate from the main tree walk so the printer's control flow
6
+ * stays focused on AlloyNode dispatch.
7
+ */
8
+ import { getStringWidth } from "./get-string-width.js";
9
+ import type { TextNode } from "./node.js";
10
+ export { getStringWidth };
11
+ /**
12
+ * Width of a TextNode's data, cached on the node (data is immutable
13
+ * post-construction). Includes an ASCII fast path — for the bulk of
14
+ * generated source, every char is < 0x80 so display width === string
15
+ * length and we skip the (expensive) emoji-regex / east-asian-width
16
+ * traversal that lives in `getStringWidth`.
17
+ */
18
+ export declare function textWidth(t: TextNode): number;
19
+ /** Whether a TextNode's data contains \n or \r. Cached. */
20
+ export declare function textHasNewline(t: TextNode): boolean;
21
+ export declare const MODE_BREAK: unique symbol;
22
+ export declare const MODE_FLAT: unique symbol;
23
+ export declare const CURSOR_PLACEHOLDER: unique symbol;
24
+ export type Mode = typeof MODE_BREAK | typeof MODE_FLAT;
25
+ export interface PrintNodeOptions {
26
+ printWidth: number;
27
+ tabWidth: number;
28
+ useTabs?: boolean;
29
+ }
30
+ export interface IndentPart {
31
+ type: "indent" | "stringAlign" | "numberAlign";
32
+ n?: any;
33
+ }
34
+ export interface Indent {
35
+ value: string;
36
+ length: number;
37
+ queue: IndentPart[];
38
+ root?: Indent;
39
+ }
40
+ export declare function rootIndent(): Indent;
41
+ export declare function makeIndent(ind: Indent, options: PrintNodeOptions): Indent;
42
+ export declare function makeAlign(indent: Indent, widthOrDoc: any, options: PrintNodeOptions): Indent;
43
+ /**
44
+ * Roll back trailing spaces / tabs from the emitted output. Used by
45
+ * `trim` doc/element and at every newline before emitting indentation
46
+ * (Prettier semantics — see prettier/doc.js `trim2`).
47
+ */
48
+ export declare function trimOut(out: (string | symbol)[]): number;
49
+ export declare function joinOut(out: (string | symbol)[]): string;
50
+ //# sourceMappingURL=printer-support.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printer-support.d.ts","sourceRoot":"","sources":["../../../src/render/printer-support.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,CAW7C;AAED,2DAA2D;AAC3D,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,CAWnD;AAED,eAAO,MAAM,UAAU,eAAuB,CAAC;AAC/C,eAAO,MAAM,SAAS,eAAsB,CAAC;AAC7C,eAAO,MAAM,kBAAkB,eAAmB,CAAC;AAEnD,MAAM,MAAM,IAAI,GAAG,OAAO,UAAU,GAAG,OAAO,SAAS,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,GAAG,aAAa,GAAG,aAAa,CAAC;IAC/C,CAAC,CAAC,EAAE,GAAG,CAAC;CACT;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAEzE;AAED,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,GAAG,EACf,OAAO,EAAE,gBAAgB,GACxB,MAAM,CAqBR;AA2DD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,CA0BxD;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,CAYxD"}