@alloy-js/core 0.23.0-dev.10 → 0.23.0-dev.12

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 (464) hide show
  1. package/dist/dev/src/binder.js +488 -0
  2. package/dist/dev/src/binder.js.map +1 -0
  3. package/dist/dev/src/code.js +181 -0
  4. package/dist/dev/src/code.js.map +1 -0
  5. package/dist/dev/src/components/AccessExpression.js +230 -0
  6. package/dist/dev/src/components/AccessExpression.js.map +1 -0
  7. package/dist/dev/src/components/AccessExpression.test.js +237 -0
  8. package/dist/dev/src/components/AccessExpression.test.js.map +1 -0
  9. package/dist/dev/src/components/AppendFile.js +246 -0
  10. package/dist/dev/src/components/AppendFile.js.map +1 -0
  11. package/dist/dev/src/components/Block.js +66 -0
  12. package/dist/dev/src/components/Block.js.map +1 -0
  13. package/dist/dev/src/components/CopyFile.js +16 -0
  14. package/dist/dev/src/components/CopyFile.js.map +1 -0
  15. package/dist/dev/src/components/Declaration.js +70 -0
  16. package/dist/dev/src/components/Declaration.js.map +1 -0
  17. package/dist/dev/src/components/For.js +40 -0
  18. package/dist/dev/src/components/For.js.map +1 -0
  19. package/dist/dev/src/components/Indent.js +37 -0
  20. package/dist/dev/src/components/Indent.js.map +1 -0
  21. package/dist/dev/src/components/List.js +29 -0
  22. package/dist/dev/src/components/List.js.map +1 -0
  23. package/dist/dev/src/components/MemberDeclaration.js +70 -0
  24. package/dist/dev/src/components/MemberDeclaration.js.map +1 -0
  25. package/dist/dev/src/components/MemberName.js +11 -0
  26. package/dist/dev/src/components/MemberName.js.map +1 -0
  27. package/dist/dev/src/components/MemberScope.js +57 -0
  28. package/dist/dev/src/components/MemberScope.js.map +1 -0
  29. package/dist/dev/src/components/Name.js +11 -0
  30. package/dist/dev/src/components/Name.js.map +1 -0
  31. package/dist/dev/src/components/Output.js +72 -0
  32. package/dist/dev/src/components/Output.js.map +1 -0
  33. package/dist/dev/src/components/Prose.js +32 -0
  34. package/dist/dev/src/components/Prose.js.map +1 -0
  35. package/dist/dev/src/components/ReferenceOrContent.js +12 -0
  36. package/dist/dev/src/components/ReferenceOrContent.js.map +1 -0
  37. package/dist/dev/src/components/Scope.js +50 -0
  38. package/dist/dev/src/components/Scope.js.map +1 -0
  39. package/dist/dev/src/components/Show.js +4 -0
  40. package/dist/dev/src/components/Show.js.map +1 -0
  41. package/dist/dev/src/components/SourceDirectory.js +41 -0
  42. package/dist/dev/src/components/SourceDirectory.js.map +1 -0
  43. package/dist/dev/src/components/SourceFile.js +52 -0
  44. package/dist/dev/src/components/SourceFile.js.map +1 -0
  45. package/dist/dev/src/components/StatementList.js +20 -0
  46. package/dist/dev/src/components/StatementList.js.map +1 -0
  47. package/dist/dev/src/components/Switch.js +42 -0
  48. package/dist/dev/src/components/Switch.js.map +1 -0
  49. package/dist/dev/src/components/TemplateFile.js +153 -0
  50. package/dist/dev/src/components/TemplateFile.js.map +1 -0
  51. package/dist/dev/src/components/UpdateFile.js +71 -0
  52. package/dist/dev/src/components/UpdateFile.js.map +1 -0
  53. package/dist/dev/src/components/Wrap.js +18 -0
  54. package/dist/dev/src/components/Wrap.js.map +1 -0
  55. package/dist/dev/src/components/index.js +25 -0
  56. package/dist/dev/src/components/index.js.map +1 -0
  57. package/dist/dev/src/components/stc/index.js +27 -0
  58. package/dist/dev/src/components/stc/index.js.map +1 -0
  59. package/dist/dev/src/components/stc/sti.js +10 -0
  60. package/dist/dev/src/components/stc/sti.js.map +1 -0
  61. package/dist/dev/src/content-slot.js +78 -0
  62. package/dist/dev/src/content-slot.js.map +1 -0
  63. package/dist/dev/src/content-slot.test.js +89 -0
  64. package/dist/dev/src/content-slot.test.js.map +1 -0
  65. package/dist/dev/src/context/assignment.js +46 -0
  66. package/dist/dev/src/context/assignment.js.map +1 -0
  67. package/dist/dev/src/context/binder.js +12 -0
  68. package/dist/dev/src/context/binder.js.map +1 -0
  69. package/dist/dev/src/context/declaration.js +3 -0
  70. package/dist/dev/src/context/declaration.js.map +1 -0
  71. package/dist/dev/src/context/format-options.js +32 -0
  72. package/dist/dev/src/context/format-options.js.map +1 -0
  73. package/dist/dev/src/context/index.js +11 -0
  74. package/dist/dev/src/context/index.js.map +1 -0
  75. package/dist/dev/src/context/member-declaration.js +11 -0
  76. package/dist/dev/src/context/member-declaration.js.map +1 -0
  77. package/dist/dev/src/context/member-scope.js +12 -0
  78. package/dist/dev/src/context/member-scope.js.map +1 -0
  79. package/dist/dev/src/context/name-policy.js +13 -0
  80. package/dist/dev/src/context/name-policy.js.map +1 -0
  81. package/dist/dev/src/context/scope.js +13 -0
  82. package/dist/dev/src/context/scope.js.map +1 -0
  83. package/dist/dev/src/context/source-directory.js +3 -0
  84. package/dist/dev/src/context/source-directory.js.map +1 -0
  85. package/dist/dev/src/context/source-file.js +3 -0
  86. package/dist/dev/src/context/source-file.js.map +1 -0
  87. package/dist/dev/src/context.js +47 -0
  88. package/dist/dev/src/context.js.map +1 -0
  89. package/dist/dev/src/debug/cli.js +163 -0
  90. package/dist/dev/src/debug/cli.js.map +1 -0
  91. package/dist/dev/src/debug/diagnostics.test.js +50 -0
  92. package/dist/dev/src/debug/diagnostics.test.js.map +1 -0
  93. package/dist/dev/src/debug/effects.js +293 -0
  94. package/dist/dev/src/debug/effects.js.map +1 -0
  95. package/dist/dev/src/debug/effects.test.js +280 -0
  96. package/dist/dev/src/debug/effects.test.js.map +1 -0
  97. package/dist/dev/src/debug/files.js +29 -0
  98. package/dist/dev/src/debug/files.js.map +1 -0
  99. package/dist/dev/src/debug/files.test.js +78 -0
  100. package/dist/dev/src/debug/files.test.js.map +1 -0
  101. package/dist/dev/src/debug/index.js +71 -0
  102. package/dist/dev/src/debug/index.js.map +1 -0
  103. package/dist/dev/src/debug/message-format.test.js +836 -0
  104. package/dist/dev/src/debug/message-format.test.js.map +1 -0
  105. package/dist/dev/src/debug/render-tree-orphans.test.js +365 -0
  106. package/dist/dev/src/debug/render-tree-orphans.test.js.map +1 -0
  107. package/dist/dev/src/debug/render.js +479 -0
  108. package/dist/dev/src/debug/render.js.map +1 -0
  109. package/dist/dev/src/debug/render.test.js +363 -0
  110. package/dist/dev/src/debug/render.test.js.map +1 -0
  111. package/dist/dev/src/debug/serialize.js +70 -0
  112. package/dist/dev/src/debug/serialize.js.map +1 -0
  113. package/dist/dev/src/debug/source-map.js +111 -0
  114. package/dist/dev/src/debug/source-map.js.map +1 -0
  115. package/dist/dev/src/debug/symbols.js +196 -0
  116. package/dist/dev/src/debug/symbols.js.map +1 -0
  117. package/dist/dev/src/debug/symbols.test.js +93 -0
  118. package/dist/dev/src/debug/symbols.test.js.map +1 -0
  119. package/dist/dev/src/debug/trace-writer.js +658 -0
  120. package/dist/dev/src/debug/trace-writer.js.map +1 -0
  121. package/dist/dev/src/debug/trace.js +459 -0
  122. package/dist/dev/src/debug/trace.js.map +1 -0
  123. package/dist/dev/src/devtools/devtools-protocol.js +2 -0
  124. package/dist/dev/src/devtools/devtools-protocol.js.map +1 -0
  125. package/dist/dev/src/devtools/devtools-server.browser.js +33 -0
  126. package/dist/dev/src/devtools/devtools-server.browser.js.map +1 -0
  127. package/dist/dev/src/devtools/devtools-server.js +444 -0
  128. package/dist/dev/src/devtools/devtools-server.js.map +1 -0
  129. package/dist/dev/src/devtools/devtools-transport.js +114 -0
  130. package/dist/dev/src/devtools/devtools-transport.js.map +1 -0
  131. package/dist/dev/src/devtools-entry.browser.js +2 -0
  132. package/dist/dev/src/devtools-entry.browser.js.map +1 -0
  133. package/dist/dev/src/devtools-entry.js +2 -0
  134. package/dist/dev/src/devtools-entry.js.map +1 -0
  135. package/dist/dev/src/diagnostics.js +89 -0
  136. package/dist/dev/src/diagnostics.js.map +1 -0
  137. package/dist/dev/src/host/alloy-host.browser.js +32 -0
  138. package/dist/dev/src/host/alloy-host.browser.js.map +1 -0
  139. package/dist/dev/src/host/alloy-host.js +144 -0
  140. package/dist/dev/src/host/alloy-host.js.map +1 -0
  141. package/dist/dev/src/host/interface.js +2 -0
  142. package/dist/dev/src/host/interface.js.map +1 -0
  143. package/dist/dev/src/index.browser.js +3 -0
  144. package/dist/dev/src/index.browser.js.map +1 -0
  145. package/dist/dev/src/index.js +27 -0
  146. package/dist/dev/src/index.js.map +1 -0
  147. package/dist/dev/src/inspect.browser.js +6 -0
  148. package/dist/dev/src/inspect.browser.js.map +1 -0
  149. package/dist/dev/src/inspect.js +2 -0
  150. package/dist/dev/src/inspect.js.map +1 -0
  151. package/dist/dev/src/jsx-runtime.js +17 -0
  152. package/dist/dev/src/jsx-runtime.js.map +1 -0
  153. package/dist/dev/src/library-symbol-reference.js +5 -0
  154. package/dist/dev/src/library-symbol-reference.js.map +1 -0
  155. package/dist/dev/src/name-policy.js +24 -0
  156. package/dist/dev/src/name-policy.js.map +1 -0
  157. package/dist/dev/src/pretty-string/pretty-string.js +100 -0
  158. package/dist/dev/src/pretty-string/pretty-string.js.map +1 -0
  159. package/dist/dev/src/pretty-string/pretty-string.test.js +38 -0
  160. package/dist/dev/src/pretty-string/pretty-string.test.js.map +1 -0
  161. package/dist/dev/src/print-hook.js +10 -0
  162. package/dist/dev/src/print-hook.js.map +1 -0
  163. package/dist/dev/src/props-combinators.js +109 -0
  164. package/dist/dev/src/props-combinators.js.map +1 -0
  165. package/dist/dev/src/reactive-union-set.js +213 -0
  166. package/dist/dev/src/reactive-union-set.js.map +1 -0
  167. package/dist/dev/src/reactivity.js +426 -0
  168. package/dist/dev/src/reactivity.js.map +1 -0
  169. package/dist/dev/src/refkey.js +167 -0
  170. package/dist/dev/src/refkey.js.map +1 -0
  171. package/dist/dev/src/render-stack.js +251 -0
  172. package/dist/dev/src/render-stack.js.map +1 -0
  173. package/dist/dev/src/render.js +872 -0
  174. package/dist/dev/src/render.js.map +1 -0
  175. package/dist/dev/src/resource.js +124 -0
  176. package/dist/dev/src/resource.js.map +1 -0
  177. package/dist/dev/src/runtime/component.js +41 -0
  178. package/dist/dev/src/runtime/component.js.map +1 -0
  179. package/dist/dev/src/runtime/intrinsic.js +12 -0
  180. package/dist/dev/src/runtime/intrinsic.js.map +1 -0
  181. package/dist/dev/src/scheduler.js +217 -0
  182. package/dist/dev/src/scheduler.js.map +1 -0
  183. package/dist/dev/src/stc.js +40 -0
  184. package/dist/dev/src/stc.js.map +1 -0
  185. package/dist/dev/src/sti.js +31 -0
  186. package/dist/dev/src/sti.js.map +1 -0
  187. package/dist/dev/src/symbols/basic-scope.js +21 -0
  188. package/dist/dev/src/symbols/basic-scope.js.map +1 -0
  189. package/dist/dev/src/symbols/basic-symbol.js +34 -0
  190. package/dist/dev/src/symbols/basic-symbol.js.map +1 -0
  191. package/dist/dev/src/symbols/decl.js +26 -0
  192. package/dist/dev/src/symbols/decl.js.map +1 -0
  193. package/dist/dev/src/symbols/index.js +10 -0
  194. package/dist/dev/src/symbols/index.js.map +1 -0
  195. package/dist/dev/src/symbols/output-scope.js +202 -0
  196. package/dist/dev/src/symbols/output-scope.js.map +1 -0
  197. package/dist/dev/src/symbols/output-space.js +36 -0
  198. package/dist/dev/src/symbols/output-space.js.map +1 -0
  199. package/dist/dev/src/symbols/output-symbol.js +504 -0
  200. package/dist/dev/src/symbols/output-symbol.js.map +1 -0
  201. package/dist/dev/src/symbols/symbol-flow.js +106 -0
  202. package/dist/dev/src/symbols/symbol-flow.js.map +1 -0
  203. package/dist/dev/src/symbols/symbol-slot.js +68 -0
  204. package/dist/dev/src/symbols/symbol-slot.js.map +1 -0
  205. package/dist/dev/src/symbols/symbol-slot.test.js +43 -0
  206. package/dist/dev/src/symbols/symbol-slot.test.js.map +1 -0
  207. package/dist/dev/src/symbols/symbol-table.js +93 -0
  208. package/dist/dev/src/symbols/symbol-table.js.map +1 -0
  209. package/dist/dev/src/tap.js +109 -0
  210. package/dist/dev/src/tap.js.map +1 -0
  211. package/dist/dev/src/trace.js +2 -0
  212. package/dist/dev/src/trace.js.map +1 -0
  213. package/dist/dev/src/tracer.js +180 -0
  214. package/dist/dev/src/tracer.js.map +1 -0
  215. package/dist/dev/src/utils.js +487 -0
  216. package/dist/dev/src/utils.js.map +1 -0
  217. package/dist/dev/src/write-output.js +47 -0
  218. package/dist/dev/src/write-output.js.map +1 -0
  219. package/dist/dev/test/browser-build.test.js +86 -0
  220. package/dist/dev/test/browser-build.test.js.map +1 -0
  221. package/dist/dev/test/children.test.js +44 -0
  222. package/dist/dev/test/children.test.js.map +1 -0
  223. package/dist/dev/test/components/append-file.test.js +394 -0
  224. package/dist/dev/test/components/append-file.test.js.map +1 -0
  225. package/dist/dev/test/components/block.test.js +83 -0
  226. package/dist/dev/test/components/block.test.js.map +1 -0
  227. package/dist/dev/test/components/copy-file.test.js +119 -0
  228. package/dist/dev/test/components/copy-file.test.js.map +1 -0
  229. package/dist/dev/test/components/declaration.test.js +40 -0
  230. package/dist/dev/test/components/declaration.test.js.map +1 -0
  231. package/dist/dev/test/components/list.test.js +250 -0
  232. package/dist/dev/test/components/list.test.js.map +1 -0
  233. package/dist/dev/test/components/prose.test.js +42 -0
  234. package/dist/dev/test/components/prose.test.js.map +1 -0
  235. package/dist/dev/test/components/reference-or-content.test.js +246 -0
  236. package/dist/dev/test/components/reference-or-content.test.js.map +1 -0
  237. package/dist/dev/test/components/source-file.test.js +271 -0
  238. package/dist/dev/test/components/source-file.test.js.map +1 -0
  239. package/dist/dev/test/components/template-file.test.js +200 -0
  240. package/dist/dev/test/components/template-file.test.js.map +1 -0
  241. package/dist/dev/test/components/update-file.test.js +210 -0
  242. package/dist/dev/test/components/update-file.test.js.map +1 -0
  243. package/dist/dev/test/components/wrap.test.js +48 -0
  244. package/dist/dev/test/components/wrap.test.js.map +1 -0
  245. package/dist/dev/test/control-flow/for.test.js +318 -0
  246. package/dist/dev/test/control-flow/for.test.js.map +1 -0
  247. package/dist/dev/test/control-flow/match.test.js +112 -0
  248. package/dist/dev/test/control-flow/match.test.js.map +1 -0
  249. package/dist/dev/test/control-flow/show.test.js +38 -0
  250. package/dist/dev/test/control-flow/show.test.js.map +1 -0
  251. package/dist/dev/test/lazy-isempty.test.js +121 -0
  252. package/dist/dev/test/lazy-isempty.test.js.map +1 -0
  253. package/dist/dev/test/name-policy.test.js +28 -0
  254. package/dist/dev/test/name-policy.test.js.map +1 -0
  255. package/dist/dev/test/props-with-defaults.test.js +94 -0
  256. package/dist/dev/test/props-with-defaults.test.js.map +1 -0
  257. package/dist/dev/test/reactive-union-set-disposers.test.js +98 -0
  258. package/dist/dev/test/reactive-union-set-disposers.test.js.map +1 -0
  259. package/dist/dev/test/reactive-union-set.test.js +171 -0
  260. package/dist/dev/test/reactive-union-set.test.js.map +1 -0
  261. package/dist/dev/test/reactivity/circular-reactives.test.js +62 -0
  262. package/dist/dev/test/reactivity/circular-reactives.test.js.map +1 -0
  263. package/dist/dev/test/reactivity/cleanup.test.js +96 -0
  264. package/dist/dev/test/reactivity/cleanup.test.js.map +1 -0
  265. package/dist/dev/test/reactivity/memo.test.js +17 -0
  266. package/dist/dev/test/reactivity/memo.test.js.map +1 -0
  267. package/dist/dev/test/reactivity/ref-rendering.test.js +38 -0
  268. package/dist/dev/test/reactivity/ref-rendering.test.js.map +1 -0
  269. package/dist/dev/test/reactivity/shallow-reactive.test.js +52 -0
  270. package/dist/dev/test/reactivity/shallow-reactive.test.js.map +1 -0
  271. package/dist/dev/test/reactivity/test.test.js +74 -0
  272. package/dist/dev/test/reactivity/test.test.js.map +1 -0
  273. package/dist/dev/test/reactivity/untrack.test.js +27 -0
  274. package/dist/dev/test/reactivity/untrack.test.js.map +1 -0
  275. package/dist/dev/test/refkey.test.js +36 -0
  276. package/dist/dev/test/refkey.test.js.map +1 -0
  277. package/dist/dev/test/rendering/basic.test.js +194 -0
  278. package/dist/dev/test/rendering/basic.test.js.map +1 -0
  279. package/dist/dev/test/rendering/code.test.js +64 -0
  280. package/dist/dev/test/rendering/code.test.js.map +1 -0
  281. package/dist/dev/test/rendering/formatting.test.js +797 -0
  282. package/dist/dev/test/rendering/formatting.test.js.map +1 -0
  283. package/dist/dev/test/rendering/indent.test.js +183 -0
  284. package/dist/dev/test/rendering/indent.test.js.map +1 -0
  285. package/dist/dev/test/rendering/memoization.test.js +37 -0
  286. package/dist/dev/test/rendering/memoization.test.js.map +1 -0
  287. package/dist/dev/test/rendering/print-render-stack.test.js +287 -0
  288. package/dist/dev/test/rendering/print-render-stack.test.js.map +1 -0
  289. package/dist/dev/test/rendering/refkeys.test.js +37 -0
  290. package/dist/dev/test/rendering/refkeys.test.js.map +1 -0
  291. package/dist/dev/test/scheduler-extended.test.js +96 -0
  292. package/dist/dev/test/scheduler-extended.test.js.map +1 -0
  293. package/dist/dev/test/scheduler.test.js +46 -0
  294. package/dist/dev/test/scheduler.test.js.map +1 -0
  295. package/dist/dev/test/split-props.test.js +78 -0
  296. package/dist/dev/test/split-props.test.js.map +1 -0
  297. package/dist/dev/test/stc.test.js +35 -0
  298. package/dist/dev/test/stc.test.js.map +1 -0
  299. package/dist/dev/test/symbols/output-scope.test.js +180 -0
  300. package/dist/dev/test/symbols/output-scope.test.js.map +1 -0
  301. package/dist/dev/test/symbols/output-symbol.test.js +202 -0
  302. package/dist/dev/test/symbols/output-symbol.test.js.map +1 -0
  303. package/dist/dev/test/symbols/resolution.test.js +487 -0
  304. package/dist/dev/test/symbols/resolution.test.js.map +1 -0
  305. package/dist/dev/test/symbols/symbol-table.test.js +15 -0
  306. package/dist/dev/test/symbols/symbol-table.test.js.map +1 -0
  307. package/dist/dev/test/symbols/utils.js +26 -0
  308. package/dist/dev/test/symbols/utils.js.map +1 -0
  309. package/dist/dev/test/utils.test.js +317 -0
  310. package/dist/dev/test/utils.test.js.map +1 -0
  311. package/dist/dev/testing/create-test-wrapper.js +76 -0
  312. package/dist/dev/testing/create-test-wrapper.js.map +1 -0
  313. package/dist/dev/testing/devtools-utils.js +162 -0
  314. package/dist/dev/testing/devtools-utils.js.map +1 -0
  315. package/dist/dev/testing/extend-expect.js +167 -0
  316. package/dist/dev/testing/extend-expect.js.map +1 -0
  317. package/dist/dev/testing/extend-expect.test.js +234 -0
  318. package/dist/dev/testing/extend-expect.test.js.map +1 -0
  319. package/dist/dev/testing/index.js +4 -0
  320. package/dist/dev/testing/index.js.map +1 -0
  321. package/dist/dev/testing/render.js +23 -0
  322. package/dist/dev/testing/render.js.map +1 -0
  323. package/dist/dev/testing/vitest.d.js +2 -0
  324. package/dist/dev/testing/vitest.d.js.map +1 -0
  325. package/dist/devtools/index.html +29 -17
  326. package/dist/src/binder.d.ts.map +1 -1
  327. package/dist/src/binder.js +5 -0
  328. package/dist/src/binder.js.map +1 -1
  329. package/dist/src/components/For.d.ts.map +1 -1
  330. package/dist/src/components/For.js +1 -1
  331. package/dist/src/components/For.js.map +1 -1
  332. package/dist/src/components/List.d.ts.map +1 -1
  333. package/dist/src/components/List.js +1 -1
  334. package/dist/src/components/List.js.map +1 -1
  335. package/dist/src/components/Switch.d.ts.map +1 -1
  336. package/dist/src/components/Switch.js +1 -1
  337. package/dist/src/components/Switch.js.map +1 -1
  338. package/dist/src/debug/diagnostics.test.js +3 -2
  339. package/dist/src/debug/diagnostics.test.js.map +1 -1
  340. package/dist/src/debug/effects.d.ts +12 -4
  341. package/dist/src/debug/effects.d.ts.map +1 -1
  342. package/dist/src/debug/effects.js +119 -54
  343. package/dist/src/debug/effects.js.map +1 -1
  344. package/dist/src/debug/effects.test.js +213 -41
  345. package/dist/src/debug/effects.test.js.map +1 -1
  346. package/dist/src/debug/files.d.ts.map +1 -1
  347. package/dist/src/debug/files.js +7 -18
  348. package/dist/src/debug/files.js.map +1 -1
  349. package/dist/src/debug/files.test.js +13 -36
  350. package/dist/src/debug/files.test.js.map +1 -1
  351. package/dist/src/debug/index.d.ts +4 -2
  352. package/dist/src/debug/index.d.ts.map +1 -1
  353. package/dist/src/debug/index.js +4 -2
  354. package/dist/src/debug/index.js.map +1 -1
  355. package/dist/src/debug/message-format.test.d.ts +2 -0
  356. package/dist/src/debug/message-format.test.d.ts.map +1 -0
  357. package/dist/src/debug/message-format.test.js +700 -0
  358. package/dist/src/debug/message-format.test.js.map +1 -0
  359. package/dist/src/debug/render-tree-orphans.test.d.ts +2 -0
  360. package/dist/src/debug/render-tree-orphans.test.d.ts.map +1 -0
  361. package/dist/src/debug/render-tree-orphans.test.js +297 -0
  362. package/dist/src/debug/render-tree-orphans.test.js.map +1 -0
  363. package/dist/src/debug/render.d.ts.map +1 -1
  364. package/dist/src/debug/render.js +91 -131
  365. package/dist/src/debug/render.js.map +1 -1
  366. package/dist/src/debug/render.test.js +91 -128
  367. package/dist/src/debug/render.test.js.map +1 -1
  368. package/dist/src/debug/source-map.d.ts +22 -0
  369. package/dist/src/debug/source-map.d.ts.map +1 -0
  370. package/dist/src/debug/source-map.js +111 -0
  371. package/dist/src/debug/source-map.js.map +1 -0
  372. package/dist/src/debug/symbols.d.ts +6 -5
  373. package/dist/src/debug/symbols.d.ts.map +1 -1
  374. package/dist/src/debug/symbols.js +46 -23
  375. package/dist/src/debug/symbols.js.map +1 -1
  376. package/dist/src/debug/symbols.test.js +15 -26
  377. package/dist/src/debug/symbols.test.js.map +1 -1
  378. package/dist/src/debug/trace-writer.d.ts +55 -0
  379. package/dist/src/debug/trace-writer.d.ts.map +1 -0
  380. package/dist/src/debug/trace-writer.js +658 -0
  381. package/dist/src/debug/trace-writer.js.map +1 -0
  382. package/dist/src/debug/trace.d.ts +10 -10
  383. package/dist/src/debug/trace.d.ts.map +1 -1
  384. package/dist/src/debug/trace.js +36 -20
  385. package/dist/src/debug/trace.js.map +1 -1
  386. package/dist/src/devtools/devtools-protocol.d.ts +318 -161
  387. package/dist/src/devtools/devtools-protocol.d.ts.map +1 -1
  388. package/dist/src/devtools/devtools-server.browser.d.ts +0 -5
  389. package/dist/src/devtools/devtools-server.browser.d.ts.map +1 -1
  390. package/dist/src/devtools/devtools-server.browser.js +0 -3
  391. package/dist/src/devtools/devtools-server.browser.js.map +1 -1
  392. package/dist/src/devtools/devtools-server.d.ts +0 -6
  393. package/dist/src/devtools/devtools-server.d.ts.map +1 -1
  394. package/dist/src/devtools/devtools-server.js +212 -24
  395. package/dist/src/devtools/devtools-server.js.map +1 -1
  396. package/dist/src/devtools/devtools-transport.d.ts +2 -2
  397. package/dist/src/devtools/devtools-transport.d.ts.map +1 -1
  398. package/dist/src/devtools/devtools-transport.js +2 -2
  399. package/dist/src/devtools/devtools-transport.js.map +1 -1
  400. package/dist/src/devtools-entry.browser.d.ts +1 -1
  401. package/dist/src/devtools-entry.browser.d.ts.map +1 -1
  402. package/dist/src/devtools-entry.browser.js.map +1 -1
  403. package/dist/src/devtools-entry.d.ts +1 -1
  404. package/dist/src/devtools-entry.d.ts.map +1 -1
  405. package/dist/src/devtools-entry.js.map +1 -1
  406. package/dist/src/diagnostics.d.ts.map +1 -1
  407. package/dist/src/diagnostics.js +5 -5
  408. package/dist/src/diagnostics.js.map +1 -1
  409. package/dist/src/reactivity.d.ts +13 -2
  410. package/dist/src/reactivity.d.ts.map +1 -1
  411. package/dist/src/reactivity.js +96 -13
  412. package/dist/src/reactivity.js.map +1 -1
  413. package/dist/src/render.d.ts.map +1 -1
  414. package/dist/src/render.js +84 -30
  415. package/dist/src/render.js.map +1 -1
  416. package/dist/src/scheduler.d.ts +5 -0
  417. package/dist/src/scheduler.d.ts.map +1 -1
  418. package/dist/src/scheduler.js +94 -23
  419. package/dist/src/scheduler.js.map +1 -1
  420. package/dist/src/utils.d.ts.map +1 -1
  421. package/dist/src/utils.js +11 -5
  422. package/dist/src/utils.js.map +1 -1
  423. package/dist/test/browser-build.test.js +1 -1
  424. package/dist/test/browser-build.test.js.map +1 -1
  425. package/dist/testing/devtools-utils.d.ts +12 -3
  426. package/dist/testing/devtools-utils.d.ts.map +1 -1
  427. package/dist/testing/devtools-utils.js +26 -4
  428. package/dist/testing/devtools-utils.js.map +1 -1
  429. package/dist/tsconfig.tsbuildinfo +1 -1
  430. package/package.json +9 -3
  431. package/src/binder.ts +47 -38
  432. package/src/components/For.tsx +14 -10
  433. package/src/components/List.tsx +7 -4
  434. package/src/components/Switch.tsx +11 -7
  435. package/src/debug/diagnostics.test.tsx +3 -2
  436. package/src/debug/effects.test.tsx +248 -36
  437. package/src/debug/effects.ts +198 -64
  438. package/src/debug/files.test.tsx +15 -35
  439. package/src/debug/files.ts +11 -11
  440. package/src/debug/index.ts +4 -0
  441. package/src/debug/message-format.test.tsx +759 -0
  442. package/src/debug/render-tree-orphans.test.tsx +344 -0
  443. package/src/debug/render.test.tsx +96 -118
  444. package/src/debug/render.ts +196 -125
  445. package/src/debug/source-map.ts +135 -0
  446. package/src/debug/symbols.test.tsx +19 -20
  447. package/src/debug/symbols.ts +106 -23
  448. package/src/debug/trace-writer.ts +969 -0
  449. package/src/debug/trace.ts +41 -28
  450. package/src/devtools/devtools-protocol.ts +361 -176
  451. package/src/devtools/devtools-server.browser.ts +0 -9
  452. package/src/devtools/devtools-server.ts +210 -32
  453. package/src/devtools/devtools-transport.ts +4 -4
  454. package/src/devtools-entry.browser.ts +11 -15
  455. package/src/devtools-entry.ts +9 -15
  456. package/src/diagnostics.ts +14 -5
  457. package/src/reactivity.ts +113 -17
  458. package/src/render.ts +104 -30
  459. package/src/scheduler.ts +145 -26
  460. package/src/utils.tsx +7 -4
  461. package/temp/api.json +142 -20
  462. package/test/browser-build.test.ts +1 -1
  463. package/testing/devtools-utils.ts +46 -4
  464. package/vitest.config.ts +8 -0
@@ -1,7 +1,15 @@
1
1
  import { isReactive, isRef } from "@vue/reactivity";
2
2
  import {
3
- emitDevtoolsMessage,
4
- isDevtoolsEnabled,
3
+ formatReactivePropertyLabel,
4
+ getReactiveCreationLocation,
5
+ nextReactiveId,
6
+ } from "../reactivity.js";
7
+ import { loadSourceMapSupport, resolveSourceMap } from "./source-map.js";
8
+ import { insertEdge, insertEffect, insertRef } from "./trace-writer.js";
9
+ import {
10
+ isDebugEnabled,
11
+ isTraceEnabled,
12
+ logDevtoolsMessage,
5
13
  TracePhase,
6
14
  traceType,
7
15
  } from "./trace.js";
@@ -22,15 +30,19 @@ export interface EffectDebugInfo {
22
30
  name?: string;
23
31
  type?: string;
24
32
  createdAt?: SourceLocation;
33
+ contextId?: number;
34
+ ownerContextId?: number | null;
35
+ component?: string;
25
36
  lastTriggeredByRefId?: number;
26
- lastTriggeredAt?: SourceLocation;
27
37
  }
28
38
 
29
39
  export interface RefDebugInfo {
30
40
  id: number;
31
41
  kind?: string;
42
+ label?: string;
32
43
  createdAt?: SourceLocation;
33
44
  createdByEffectId?: number;
45
+ isApproxLocation?: boolean;
34
46
  }
35
47
 
36
48
  export interface EffectEdgeDebugInfo {
@@ -42,33 +54,50 @@ export interface EffectEdgeDebugInfo {
42
54
  targetKind?: "ref" | "target";
43
55
  targetLabel?: string;
44
56
  targetKey?: string | number;
45
- location?: SourceLocation;
46
57
  }
47
58
 
48
59
  const effects = new Map<number, EffectDebugInfo>();
49
60
  const refs = new Map<number, RefDebugInfo>();
50
61
  let effectIdCounter = 1;
51
62
  let edgeEventIdCounter = 1;
52
- let nonRefTargetIdCounter = 1;
53
63
  const nonRefTargetIds = new WeakMap<object, number>();
54
64
  const primitiveTargetIds = new Map<unknown, number>();
55
65
 
56
- const STACK_LINE = /\s*at\s+(?:.+?\s+\()?(.+?):(\d+):(\d+)\)?$/;
66
+ // Alloy-internal paths to skip when capturing source locations.
67
+ // We skip core infrastructure (reactivity, render, debug, scheduler, etc.)
68
+ // but allow component and symbol frames through so the location points at
69
+ // the component/symbol that created the effect.
70
+ // These patterns match both src/ and dist/src/ paths.
71
+ const CORE_INTERNAL_PATHS = [
72
+ "/core/src/reactivity",
73
+ "/core/src/render",
74
+ "/core/src/scheduler",
75
+ "/core/src/debug/",
76
+ "/core/src/devtools/",
77
+ "/core/src/resource",
78
+ "/core/src/context",
79
+ "/core/src/tracer",
80
+ "/core/src/reactive-union-set",
81
+ "/core/src/utils",
82
+ "/core/dist/src/reactivity",
83
+ "/core/dist/src/render",
84
+ "/core/dist/src/scheduler",
85
+ "/core/dist/src/debug/",
86
+ "/core/dist/src/devtools/",
87
+ "/core/dist/src/resource",
88
+ "/core/dist/src/context",
89
+ "/core/dist/src/tracer",
90
+ "/core/dist/src/reactive-union-set",
91
+ "/core/dist/src/utils",
92
+ ];
93
+
57
94
  const STACK_SKIP = [
58
95
  "node:internal",
59
- "/node_modules/",
60
- "\\node_modules\\",
61
96
  "/@vue/",
62
97
  "\\@vue\\",
63
- "/@alloy-js/",
64
- "\\@alloy-js\\",
65
- "/packages/core/src/reactivity",
66
- "/packages/core/src/devtools/effects-debug",
67
- "/packages/core/dist/src/reactivity",
68
- "\\packages\\core\\dist\\src\\reactivity",
69
- "/packages/core/dist/src/devtools/effects-debug",
70
- "\\packages\\core\\dist\\src\\devtools\\effects-debug",
71
98
  "captureSourceLocation",
99
+ ...CORE_INTERNAL_PATHS,
100
+ ...CORE_INTERNAL_PATHS.map((p) => p.replace(/\//g, "\\")),
72
101
  ];
73
102
 
74
103
  const VUE_REACTIVITY_MARKERS = [
@@ -80,70 +109,104 @@ const VUE_REACTIVITY_MARKERS = [
80
109
  "\\@vue\\",
81
110
  ];
82
111
 
83
- function isVueReactivityLine(line: string) {
84
- return VUE_REACTIVITY_MARKERS.some((marker) => line.includes(marker));
112
+ // ─────────────────────────────────────────────────────────────────────────────
113
+ // Fast source location capture using V8 structured CallSite API
114
+ // ─────────────────────────────────────────────────────────────────────────────
115
+
116
+ function isSkipFile(fileName: string): boolean {
117
+ for (const skip of STACK_SKIP) {
118
+ if (fileName.includes(skip)) return true;
119
+ }
120
+ return false;
85
121
  }
86
122
 
87
- function parseStackLine(
88
- line: string,
89
- stack?: string,
90
- ): SourceLocation | undefined {
91
- const match = STACK_LINE.exec(line);
92
- if (!match) return undefined;
93
- const [, fileName, lineNumber, columnNumber] = match;
94
- return {
95
- fileName,
96
- lineNumber: Number(lineNumber),
97
- columnNumber: Number(columnNumber),
98
- stack,
99
- };
123
+ function isVueReactivityFile(fileName: string): boolean {
124
+ for (const marker of VUE_REACTIVITY_MARKERS) {
125
+ if (fileName.includes(marker)) return true;
126
+ }
127
+ return false;
128
+ }
129
+
130
+ // V8 structured stack capture — avoids string formatting entirely
131
+ const structuredPrepare = (
132
+ _err: Error,
133
+ callSites: NodeJS.CallSite[],
134
+ ): NodeJS.CallSite[] => callSites;
135
+
136
+ function captureCallSites(): NodeJS.CallSite[] {
137
+ const orig = Error.prepareStackTrace;
138
+ Error.prepareStackTrace = structuredPrepare;
139
+ const obj: { stack?: NodeJS.CallSite[] } = {};
140
+ Error.captureStackTrace(obj, captureCallSites);
141
+ const sites = obj.stack ?? [];
142
+ Error.prepareStackTrace = orig;
143
+ return sites;
100
144
  }
101
145
 
102
146
  export function captureSourceLocation(
103
147
  skipReactives = true,
104
148
  ): SourceLocation | undefined {
105
- if (!isDevtoolsEnabled()) return undefined;
106
- const stack = new Error().stack;
107
- if (!stack) {
108
- return { stack: "" };
109
- }
110
- const lines = stack.split("\n").slice(1);
111
- for (const line of lines) {
112
- if (STACK_SKIP.some((skip) => line.includes(skip))) continue;
113
- const parsed = parseStackLine(line, stack);
114
- if (parsed) return parsed;
149
+ if (!isDebugEnabled()) return undefined;
150
+ loadSourceMapSupport();
151
+
152
+ const sites = captureCallSites();
153
+
154
+ // First pass: skip internal/framework frames
155
+ for (const site of sites) {
156
+ const fn = site.getFileName();
157
+ if (!fn) continue;
158
+ if (isSkipFile(fn)) continue;
159
+ if (skipReactives && isVueReactivityFile(fn)) continue;
160
+
161
+ const line = site.getLineNumber() ?? 0;
162
+ const col = site.getColumnNumber() ?? 0;
163
+ const resolved = resolveSourceMap(fn, line, col);
164
+ return {
165
+ fileName: resolved.fileName,
166
+ lineNumber: resolved.line,
167
+ columnNumber: resolved.col,
168
+ };
115
169
  }
116
170
 
171
+ // Second pass without reactive filter
117
172
  if (skipReactives) {
118
- for (const line of lines) {
119
- if (STACK_SKIP.some((skip) => line.includes(skip))) continue;
120
- if (isVueReactivityLine(line)) continue;
121
- const parsed = parseStackLine(line, stack);
122
- if (parsed) return parsed;
173
+ for (const site of sites) {
174
+ const fn = site.getFileName();
175
+ if (!fn) continue;
176
+ if (isSkipFile(fn)) continue;
177
+
178
+ const line = site.getLineNumber() ?? 0;
179
+ const col = site.getColumnNumber() ?? 0;
180
+ const resolved = resolveSourceMap(fn, line, col);
181
+ return {
182
+ fileName: resolved.fileName,
183
+ lineNumber: resolved.line,
184
+ columnNumber: resolved.col,
185
+ };
123
186
  }
124
187
  }
125
188
 
126
- return { stack };
189
+ return undefined;
127
190
  }
128
191
 
129
192
  function getNonRefTargetId(target: unknown): number {
130
193
  if (typeof target === "object" && target !== null) {
131
194
  const existing = nonRefTargetIds.get(target);
132
195
  if (existing) return existing;
133
- const id = nonRefTargetIdCounter++;
196
+ const id = nextReactiveId();
134
197
  nonRefTargetIds.set(target, id);
135
198
  return id;
136
199
  }
137
200
  if (typeof target === "function") {
138
201
  const existing = nonRefTargetIds.get(target as object);
139
202
  if (existing) return existing;
140
- const id = nonRefTargetIdCounter++;
203
+ const id = nextReactiveId();
141
204
  nonRefTargetIds.set(target as object, id);
142
205
  return id;
143
206
  }
144
207
  const existing = primitiveTargetIds.get(target);
145
208
  if (existing) return existing;
146
- const id = nonRefTargetIdCounter++;
209
+ const id = nextReactiveId();
147
210
  primitiveTargetIds.set(target, id);
148
211
  return id;
149
212
  }
@@ -192,11 +255,11 @@ function buildEffectTargetInfo(input: {
192
255
  }
193
256
 
194
257
  function emitEffect(message: { type: string; [key: string]: unknown }) {
195
- emitDevtoolsMessage(message);
258
+ logDevtoolsMessage(message);
196
259
  }
197
260
 
198
261
  export function update(input: Partial<EffectDebugInfo> & { id: number }) {
199
- if (!isDevtoolsEnabled()) return;
262
+ if (!isDebugEnabled()) return;
200
263
  const existing = effects.get(input.id);
201
264
  if (!existing) return;
202
265
  const next: EffectDebugInfo = { ...existing, ...input };
@@ -214,16 +277,32 @@ export function register(input: {
214
277
  contextId?: number;
215
278
  ownerContextId?: number | null;
216
279
  }): number {
217
- if (!isDevtoolsEnabled()) return -1;
280
+ if (!isDebugEnabled()) return -1;
218
281
  const id = effectIdCounter++;
219
282
  const info: EffectDebugInfo = {
220
283
  id,
221
284
  name: input.name,
222
285
  type: input.type,
223
286
  createdAt: input.createdAt ?? captureSourceLocation(),
287
+ contextId: input.contextId,
288
+ ownerContextId: input.ownerContextId ?? null,
224
289
  };
225
290
  effects.set(id, info);
226
291
  emitEffect({ type: traceType(TracePhase.effect.effectAdded), effect: info });
292
+
293
+ if (isTraceEnabled()) {
294
+ insertEffect(
295
+ id,
296
+ input.name,
297
+ input.type,
298
+ input.contextId,
299
+ input.ownerContextId ?? null,
300
+ info.createdAt?.fileName,
301
+ info.createdAt?.lineNumber,
302
+ info.createdAt?.columnNumber,
303
+ );
304
+ }
305
+
227
306
  return id;
228
307
  }
229
308
 
@@ -233,42 +312,90 @@ export function registerRef(input: {
233
312
  createdAt?: SourceLocation;
234
313
  createdByEffectId?: number;
235
314
  isInfrastructure?: boolean;
315
+ isApproxLocation?: boolean;
316
+ label?: string;
236
317
  }) {
237
- if (!isDevtoolsEnabled()) return;
318
+ if (!isDebugEnabled()) return;
238
319
  if (refs.has(input.id)) return;
239
320
  const info: RefDebugInfo = {
240
321
  id: input.id,
241
322
  kind: input.kind,
242
323
  createdAt: input.createdAt ?? captureSourceLocation(),
243
324
  createdByEffectId: input.createdByEffectId,
325
+ label: input.label,
326
+ isApproxLocation: input.isApproxLocation,
244
327
  };
245
328
  refs.set(input.id, info);
246
329
  emitEffect({ type: traceType(TracePhase.effect.refAdded), ref: info });
330
+
331
+ if (isTraceEnabled()) {
332
+ insertRef(
333
+ input.id,
334
+ input.kind,
335
+ input.createdByEffectId,
336
+ info.createdAt?.fileName,
337
+ info.createdAt?.lineNumber,
338
+ info.createdAt?.columnNumber,
339
+ input.label,
340
+ input.isApproxLocation,
341
+ );
342
+ }
247
343
  }
248
344
 
249
345
  export function ensureRef(input: { id: number; kind?: string }) {
250
- if (!isDevtoolsEnabled()) return;
346
+ if (!isDebugEnabled()) return;
251
347
  if (refs.has(input.id)) return;
252
348
  registerRef({ id: input.id, kind: input.kind });
253
349
  }
254
350
 
351
+ export function ensureReactivePropertyRef(input: {
352
+ id: number;
353
+ target: object;
354
+ key: string | number;
355
+ }) {
356
+ if (!isDebugEnabled()) return;
357
+ if (refs.has(input.id)) return;
358
+ const label = formatReactivePropertyLabel(input.target, input.key);
359
+ const createdAt = getReactiveCreationLocation(input.target);
360
+ // If the reactive wasn't created via alloy's shallowReactive wrapper,
361
+ // createdAt is undefined and registerRef falls back to captureSourceLocation
362
+ // (the first track site). Flag this as approximate.
363
+ const isApproxLocation = !createdAt;
364
+ registerRef({
365
+ id: input.id,
366
+ kind: "reactive-property",
367
+ label,
368
+ createdAt,
369
+ isApproxLocation,
370
+ });
371
+ }
372
+
255
373
  export function track(input: {
256
374
  effectId: number;
257
375
  target: unknown;
258
376
  refId?: number;
259
377
  targetKey?: unknown;
260
- location?: SourceLocation;
261
378
  }) {
262
- if (!isDevtoolsEnabled()) return;
379
+ if (!isDebugEnabled()) return;
263
380
  const edge: EffectEdgeDebugInfo = {
264
381
  id: edgeEventIdCounter++,
265
382
  type: "track",
266
383
  effectId: input.effectId,
267
384
  ...buildEffectTargetInfo({ target: input.target, refId: input.refId }),
268
385
  targetKey: sanitizeTargetKey(input.targetKey),
269
- location: input.location ?? captureSourceLocation(),
270
386
  };
271
387
  emitEffect({ type: traceType(TracePhase.effect.track), edge });
388
+
389
+ if (isTraceEnabled()) {
390
+ insertEdge(
391
+ "track",
392
+ input.effectId,
393
+ edge.refId,
394
+ edge.targetId,
395
+ edge.targetKey,
396
+ undefined,
397
+ );
398
+ }
272
399
  }
273
400
 
274
401
  export function trigger(input: {
@@ -276,25 +403,33 @@ export function trigger(input: {
276
403
  target: unknown;
277
404
  refId?: number;
278
405
  targetKey?: unknown;
279
- location?: SourceLocation;
280
406
  kind?: "trigger" | "triggered-by";
281
407
  causedBy?: number;
282
408
  }) {
283
- if (!isDevtoolsEnabled()) return;
409
+ if (!isDebugEnabled()) return;
284
410
  const edge: EffectEdgeDebugInfo = {
285
411
  id: edgeEventIdCounter++,
286
- type: input.kind ?? "triggered-by",
412
+ type: input.kind ?? "trigger",
287
413
  effectId: input.effectId,
288
414
  ...buildEffectTargetInfo({ target: input.target, refId: input.refId }),
289
415
  targetKey: sanitizeTargetKey(input.targetKey),
290
- location: input.location ?? captureSourceLocation(),
291
416
  };
292
417
  emitEffect({ type: traceType(TracePhase.effect.trigger), edge });
293
418
 
419
+ if (isTraceEnabled()) {
420
+ insertEdge(
421
+ edge.type,
422
+ input.effectId,
423
+ edge.refId,
424
+ edge.targetId,
425
+ edge.targetKey,
426
+ input.causedBy,
427
+ );
428
+ }
429
+
294
430
  update({
295
431
  id: input.effectId,
296
432
  ...(input.refId !== undefined ? { lastTriggeredByRefId: input.refId } : {}),
297
- lastTriggeredAt: input.location ?? captureSourceLocation(),
298
433
  });
299
434
  }
300
435
 
@@ -304,7 +439,6 @@ export function reset() {
304
439
  primitiveTargetIds.clear();
305
440
  effectIdCounter = 1;
306
441
  edgeEventIdCounter = 1;
307
- nonRefTargetIdCounter = 1;
308
442
  }
309
443
 
310
444
  // Utilities used by other debug sections
@@ -5,16 +5,13 @@ import {
5
5
  type DevtoolsMessage,
6
6
  } from "../../testing/devtools-utils.js";
7
7
  import { Output } from "../components/Output.jsx";
8
- import { Show } from "../components/Show.jsx";
9
8
  import { SourceDirectory } from "../components/SourceDirectory.jsx";
10
9
  import { SourceFile } from "../components/SourceFile.jsx";
11
10
  import {
12
11
  enableDevtools,
13
12
  resetDevtoolsServerForTests,
14
13
  } from "../devtools/devtools-server.js";
15
- import { ref } from "../reactivity.js";
16
14
  import { renderAsync } from "../render.js";
17
- import { flushJobsAsync } from "../scheduler.js";
18
15
 
19
16
  let socket: WebSocket | undefined;
20
17
 
@@ -38,59 +35,42 @@ afterEach(async () => {
38
35
  });
39
36
 
40
37
  it("emits file and directory add/update/remove messages", async () => {
41
- const show = ref(true);
42
- const collector = createMessageCollector(socket!);
38
+ const collector = await createMessageCollector(socket!);
43
39
 
44
40
  await renderAsync(
45
41
  <Output>
46
- <Show when={show.value}>
47
- <SourceDirectory path="src">
48
- <SourceFile path="index.ts" filetype="ts">
49
- {"export const value = 1;"}
50
- </SourceFile>
51
- </SourceDirectory>
52
- </Show>
42
+ <SourceDirectory path="src">
43
+ <SourceFile path="index.ts" filetype="ts">
44
+ {"export const value = 1;"}
45
+ </SourceFile>
46
+ </SourceDirectory>
53
47
  </Output>,
54
48
  );
55
49
 
56
50
  const initialMessages = await collector.waitForRender();
57
- const initialFiles = initialMessages.filter((m: DevtoolsMessage) =>
58
- m.type.startsWith("files:"),
51
+ const initialFiles = initialMessages.filter(
52
+ (m: DevtoolsMessage) =>
53
+ (m.type.startsWith("file:") || m.type.startsWith("directory:")) &&
54
+ !("triggerIds" in m),
59
55
  );
60
56
  expect(initialFiles[0]).toMatchObject({
57
+ type: "directory:added",
61
58
  path: "./",
62
59
  });
63
60
  expect(initialFiles[1]).toMatchObject({
64
- type: "files:directoryAdded",
61
+ type: "directory:added",
65
62
  path: "src",
66
63
  });
67
64
  expect(initialFiles[2]).toMatchObject({
68
- type: "files:fileAdded",
65
+ type: "file:added",
69
66
  path: "src/index.ts",
70
67
  filetype: "ts",
71
68
  });
72
69
  expect(initialFiles[3]).toMatchObject({
73
- type: "files:fileUpdated",
70
+ type: "file:updated",
74
71
  path: "src/index.ts",
75
- filetype: "ts",
76
- contents: expect.any(String),
72
+ content: expect.any(String),
77
73
  });
78
74
 
79
- show.value = false;
80
- await flushJobsAsync();
81
-
82
- const updateMessages = await collector.waitForFlush();
83
- const updateFiles = updateMessages.filter((m: DevtoolsMessage) =>
84
- m.type.startsWith("files:"),
85
- );
86
75
  collector.stop();
87
-
88
- expect(updateFiles[0]).toMatchObject({
89
- type: "files:fileRemoved",
90
- path: "src/index.ts",
91
- });
92
- expect(updateFiles[1]).toMatchObject({
93
- type: "files:directoryRemoved",
94
- path: "src",
95
- });
96
76
  });
@@ -1,4 +1,9 @@
1
- import { emitDevtoolsMessage, isDevtoolsEnabled } from "./trace.js";
1
+ import {
2
+ insertDirectory,
3
+ insertOutputFile,
4
+ updateOutputFileContent,
5
+ } from "./trace-writer.js";
6
+ import { isDebugEnabled } from "./trace.js";
2
7
 
3
8
  export interface FileUpdateInfo {
4
9
  path: string;
@@ -10,14 +15,14 @@ const fileContentCache = new Map<string, string>();
10
15
 
11
16
  /** Record a directory being added to the output. */
12
17
  export function recordDirectory(path: string) {
13
- if (!isDevtoolsEnabled()) return;
14
- emitDevtoolsMessage({ type: "files:directoryAdded", path });
18
+ if (!isDebugEnabled()) return;
19
+ insertDirectory(path);
15
20
  }
16
21
 
17
22
  /** Record a file being added to the output. */
18
23
  export function recordFile(path: string, filetype: string) {
19
- if (!isDevtoolsEnabled()) return;
20
- emitDevtoolsMessage({ type: "files:fileAdded", path, filetype });
24
+ if (!isDebugEnabled()) return;
25
+ insertOutputFile(path, filetype, undefined);
21
26
  }
22
27
 
23
28
  /** Notify devtools that a file's contents have changed. De-duplicates by content. */
@@ -26,12 +31,7 @@ export function updated(info: FileUpdateInfo) {
26
31
  if (previous === info.contents) return;
27
32
  fileContentCache.set(info.path, info.contents);
28
33
 
29
- emitDevtoolsMessage({
30
- type: "files:fileUpdated",
31
- path: info.path,
32
- filetype: info.filetype,
33
- contents: info.contents,
34
- });
34
+ updateOutputFileContent(info.path, info.contents);
35
35
  }
36
36
 
37
37
  /** Clear all cached file state. Called when a new render begins. */
@@ -11,6 +11,7 @@ import {
11
11
  debugWatch,
12
12
  } from "./cli.js";
13
13
  import {
14
+ ensureReactivePropertyRef,
14
15
  ensureRef,
15
16
  register,
16
17
  registerRef,
@@ -47,6 +48,7 @@ import {
47
48
  } from "./symbols.js";
48
49
  import { trace, type TracePhaseInfo } from "./trace.js";
49
50
 
51
+ export { isDevtoolsConnected } from "../devtools/devtools-server.js";
50
52
  export { captureSourceLocation } from "./effects.js";
51
53
  export type {
52
54
  EffectDebugInfo,
@@ -62,6 +64,7 @@ export type {
62
64
  } from "./render.js";
63
65
  export {
64
66
  isConsoleTraceEnabled,
67
+ isDebugEnabled,
65
68
  isDevtoolsEnabled,
66
69
  trace,
67
70
  TracePhase,
@@ -84,6 +87,7 @@ export const debug = {
84
87
  update,
85
88
  registerRef,
86
89
  ensureRef,
90
+ ensureReactivePropertyRef,
87
91
  track,
88
92
  trigger,
89
93
  reset,