@alloy-js/core 0.23.0-dev.11 → 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 (347) 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/src/debug/effects.d.ts.map +1 -1
  326. package/dist/src/debug/effects.js +2 -67
  327. package/dist/src/debug/effects.js.map +1 -1
  328. package/dist/src/debug/render.d.ts.map +1 -1
  329. package/dist/src/debug/render.js +15 -8
  330. package/dist/src/debug/render.js.map +1 -1
  331. package/dist/src/debug/source-map.d.ts +22 -0
  332. package/dist/src/debug/source-map.d.ts.map +1 -0
  333. package/dist/src/debug/source-map.js +111 -0
  334. package/dist/src/debug/source-map.js.map +1 -0
  335. package/dist/src/debug/trace.d.ts.map +1 -1
  336. package/dist/src/debug/trace.js +13 -0
  337. package/dist/src/debug/trace.js.map +1 -1
  338. package/dist/test/browser-build.test.js +1 -1
  339. package/dist/test/browser-build.test.js.map +1 -1
  340. package/dist/tsconfig.tsbuildinfo +1 -1
  341. package/package.json +9 -3
  342. package/src/debug/effects.ts +2 -82
  343. package/src/debug/render.ts +25 -13
  344. package/src/debug/source-map.ts +135 -0
  345. package/src/debug/trace.ts +16 -0
  346. package/test/browser-build.test.ts +1 -1
  347. package/vitest.config.ts +8 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alloy-js/core",
3
- "version": "0.23.0-dev.11",
3
+ "version": "0.23.0-dev.12",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",
@@ -10,27 +10,33 @@
10
10
  "exports": {
11
11
  ".": {
12
12
  "browser": "./dist/src/index.browser.js",
13
+ "development": "./dist/dev/src/index.js",
13
14
  "import": "./dist/src/index.js"
14
15
  },
15
16
  "./jsx-runtime": {
16
17
  "types": "./dist/src/jsx-runtime.d.ts",
18
+ "development": "./dist/dev/src/jsx-runtime.js",
17
19
  "import": "./dist/src/jsx-runtime.js"
18
20
  },
19
21
  "./testing": {
22
+ "development": "./dist/dev/testing/index.js",
20
23
  "import": "./dist/testing/index.js"
21
24
  },
22
25
  "./testing/matchers": {
23
26
  "types": "./testing/vitest.d.ts"
24
27
  },
25
28
  "./stc": {
29
+ "development": "./dist/dev/src/components/stc/index.js",
26
30
  "import": "./dist/src/components/stc/index.js"
27
31
  },
28
32
  "./components": {
33
+ "development": "./dist/dev/src/components/index.js",
29
34
  "import": "./dist/src/components/index.js"
30
35
  },
31
36
  "./devtools": {
32
37
  "types": "./dist/src/devtools-entry.d.ts",
33
38
  "browser": "./dist/src/devtools-entry.browser.js",
39
+ "development": "./dist/dev/src/devtools-entry.js",
34
40
  "import": "./dist/src/devtools-entry.js"
35
41
  }
36
42
  },
@@ -56,7 +62,7 @@
56
62
  "ws": "^8.19.0"
57
63
  },
58
64
  "devDependencies": {
59
- "@alloy-js/cli": "~0.22.0 || >= 0.23.0-dev.3",
65
+ "@alloy-js/cli": "~0.22.0 || >= 0.23.0-dev.4",
60
66
  "@alloy-js/rollup-plugin": "~0.1.0 || >= 0.1.1-dev.1",
61
67
  "@microsoft/api-extractor": "~7.52.8",
62
68
  "@rollup/plugin-typescript": "^12.1.2",
@@ -68,7 +74,7 @@
68
74
  "type": "module",
69
75
  "scripts": {
70
76
  "generate-docs": "api-extractor run",
71
- "build": "alloy build && pnpm run generate-docs",
77
+ "build": "alloy build --with-dev && pnpm run generate-docs",
72
78
  "clean": "rimraf dist/ .temp/",
73
79
  "test": "vitest run",
74
80
  "test:watch": "vitest -w",
@@ -4,6 +4,7 @@ import {
4
4
  getReactiveCreationLocation,
5
5
  nextReactiveId,
6
6
  } from "../reactivity.js";
7
+ import { loadSourceMapSupport, resolveSourceMap } from "./source-map.js";
7
8
  import { insertEdge, insertEffect, insertRef } from "./trace-writer.js";
8
9
  import {
9
10
  isDebugEnabled,
@@ -112,68 +113,6 @@ const VUE_REACTIVITY_MARKERS = [
112
113
  // Fast source location capture using V8 structured CallSite API
113
114
  // ─────────────────────────────────────────────────────────────────────────────
114
115
 
115
- // Lazily loaded findSourceMap from node:module
116
- let findSourceMap:
117
- | ((path: string) =>
118
- | {
119
- findEntry: (
120
- line: number,
121
- col: number,
122
- ) =>
123
- | {
124
- originalSource: string;
125
- originalLine: number;
126
- originalColumn: number;
127
- }
128
- | undefined;
129
- }
130
- | undefined)
131
- | undefined;
132
- let findSourceMapLoaded = false;
133
- let realpathSync: ((path: string) => string) | undefined;
134
- // Cache realpath lookups to avoid repeated fs calls
135
- const realpathCache = new Map<string, string>();
136
-
137
- function loadFindSourceMap() {
138
- if (findSourceMapLoaded) return;
139
- findSourceMapLoaded = true;
140
- // process.getBuiltinModule works in both ESM and CJS contexts
141
- try {
142
- const mod = process.getBuiltinModule?.("node:module") as
143
- | typeof import("node:module")
144
- | undefined;
145
- if (mod && typeof mod.findSourceMap === "function") {
146
- findSourceMap = mod.findSourceMap as typeof findSourceMap;
147
- }
148
- } catch {
149
- // not available
150
- }
151
- try {
152
- const fs = process.getBuiltinModule?.("node:fs") as
153
- | typeof import("node:fs")
154
- | undefined;
155
- if (fs) {
156
- realpathSync = fs.realpathSync;
157
- }
158
- } catch {
159
- // not available
160
- }
161
- }
162
-
163
- function getRealPath(fileName: string): string {
164
- if (!realpathSync) return fileName;
165
- let real = realpathCache.get(fileName);
166
- if (real === undefined) {
167
- try {
168
- real = realpathSync(fileName);
169
- } catch {
170
- real = fileName;
171
- }
172
- realpathCache.set(fileName, real);
173
- }
174
- return real;
175
- }
176
-
177
116
  function isSkipFile(fileName: string): boolean {
178
117
  for (const skip of STACK_SKIP) {
179
118
  if (fileName.includes(skip)) return true;
@@ -188,25 +127,6 @@ function isVueReactivityFile(fileName: string): boolean {
188
127
  return false;
189
128
  }
190
129
 
191
- function resolveSourceMap(
192
- fileName: string,
193
- line: number,
194
- col: number,
195
- ): { fileName: string; line: number; col: number } {
196
- if (!findSourceMap) return { fileName, line, col };
197
- // pnpm uses symlinks; findSourceMap only matches the real path
198
- const real = getRealPath(fileName);
199
- const map = findSourceMap(real);
200
- if (!map) return { fileName, line, col };
201
- const entry = map.findEntry(line - 1, col - 1);
202
- if (!entry) return { fileName, line, col };
203
- return {
204
- fileName: entry.originalSource,
205
- line: entry.originalLine + 1,
206
- col: entry.originalColumn + 1,
207
- };
208
- }
209
-
210
130
  // V8 structured stack capture — avoids string formatting entirely
211
131
  const structuredPrepare = (
212
132
  _err: Error,
@@ -227,7 +147,7 @@ export function captureSourceLocation(
227
147
  skipReactives = true,
228
148
  ): SourceLocation | undefined {
229
149
  if (!isDebugEnabled()) return undefined;
230
- loadFindSourceMap();
150
+ loadSourceMapSupport();
231
151
 
232
152
  const sites = captureCallSites();
233
153
 
@@ -17,6 +17,7 @@ import { getContext, untrack } from "../reactivity.js";
17
17
  import type { ComponentCreator } from "../runtime/component.js";
18
18
  import { flushJobsAsync } from "../scheduler.js";
19
19
  import { sanitizeRecord } from "./serialize.js";
20
+ import { resolveComponentSource } from "./source-map.js";
20
21
  import {
21
22
  deleteDirectory,
22
23
  deleteOutputFile,
@@ -79,7 +80,10 @@ type TrackedNode = RenderedTextTree | PrintHook;
79
80
  let nodeIds = new WeakMap<TrackedNode, number>();
80
81
  let idToNode = new Map<number, TrackedNode>();
81
82
  let entryIds = new WeakMap<RenderedTextTree, number[]>();
82
- let nodeKinds = new WeakMap<TrackedNode, { kind: string; name?: string }>();
83
+ let nodeKinds = new WeakMap<
84
+ TrackedNode,
85
+ { kind: string; name?: string; source?: RenderTreeNodeInfo["source"] }
86
+ >();
83
87
  let fileNodes = new Map<number, { path: string; filetype: string }>();
84
88
  let directoryNodes = new Map<number, { path: string }>();
85
89
  let nodeProps = new Map<number, string | undefined>();
@@ -269,8 +273,12 @@ function recordNodeAdded(
269
273
  if (info.propsSerialized !== undefined) {
270
274
  nodeProps.set(id, info.propsSerialized);
271
275
  }
272
- // Remember the kind so cached re-adds preserve it
273
- nodeKinds.set(node, { kind: info.kind, name: info.name });
276
+ // Remember the kind and source so cached re-adds preserve them
277
+ nodeKinds.set(node, {
278
+ kind: info.kind,
279
+ name: info.name,
280
+ source: info.source,
281
+ });
274
282
  setEntryId(parent, index, id);
275
283
  insertRenderNode(
276
284
  id,
@@ -297,8 +305,11 @@ function recordSubtreeAdded(
297
305
  const existingId = nodeIds.get(subtree);
298
306
  const isCached = existingId !== undefined;
299
307
  const id = isCached ? existingId : getOrCreateNodeId(subtree);
300
- // Remember the kind so cached re-adds preserve it
301
- nodeKinds.set(subtree, { kind: info.kind, name: info.name });
308
+ // Merge source from previously-saved nodeKinds if the caller didn't provide one
309
+ const savedKind = nodeKinds.get(subtree);
310
+ const source = info.source ?? savedKind?.source;
311
+ // Remember the kind and source so cached re-adds preserve them
312
+ nodeKinds.set(subtree, { kind: info.kind, name: info.name, source });
302
313
  // Track in entryIds so clearRenderTreeChildren can find and remove it
303
314
  if (Array.isArray(parentNode)) {
304
315
  const list = getEntryList(parentNode);
@@ -310,9 +321,9 @@ function recordSubtreeAdded(
310
321
  info.kind,
311
322
  info.name,
312
323
  info.propsSerialized,
313
- info.source?.fileName,
314
- info.source?.lineNumber,
315
- info.source?.columnNumber,
324
+ source?.fileName,
325
+ source?.lineNumber,
326
+ source?.columnNumber,
316
327
  null,
317
328
  undefined,
318
329
  );
@@ -366,7 +377,7 @@ function recordCachedSubtreeChildrenRecursively(node: RenderedTextTree) {
366
377
  );
367
378
  }
368
379
  } else if (Array.isArray(child)) {
369
- // Nested RenderedTextTree - record and recurse, preserving original kind
380
+ // Nested RenderedTextTree - record and recurse, preserving original kind and source
370
381
  const id = getOrCreateNodeId(child);
371
382
  list.push(id);
372
383
  const savedKind = nodeKinds.get(child);
@@ -376,9 +387,9 @@ function recordCachedSubtreeChildrenRecursively(node: RenderedTextTree) {
376
387
  savedKind?.kind ?? "fragment",
377
388
  savedKind?.name,
378
389
  undefined,
379
- undefined,
380
- undefined,
381
- undefined,
390
+ savedKind?.source?.fileName,
391
+ savedKind?.source?.lineNumber,
392
+ savedKind?.source?.columnNumber,
382
393
  null,
383
394
  undefined,
384
395
  );
@@ -544,6 +555,7 @@ export function beginComponent(
544
555
  }
545
556
  }
546
557
  const propsSerialized = serializeRenderTreeProps(propsSource);
558
+ const resolvedSource = resolveComponentSource(source);
547
559
  if (isExisting) {
548
560
  clearRenderTreeChildren(node);
549
561
  } else {
@@ -551,7 +563,7 @@ export function beginComponent(
551
563
  kind: "component",
552
564
  name: componentName,
553
565
  propsSerialized,
554
- source,
566
+ source: resolvedSource,
555
567
  });
556
568
  }
557
569
 
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Shared source-map resolution utilities.
3
+ *
4
+ * Used by both effect source capture (effects.ts) and component source
5
+ * resolution (render.ts) to convert file paths and resolve source maps.
6
+ */
7
+
8
+ import type { SourceLocation } from "../devtools/devtools-protocol.js";
9
+
10
+ // Lazily loaded findSourceMap from node:module
11
+ let findSourceMap:
12
+ | ((path: string) =>
13
+ | {
14
+ findEntry: (
15
+ line: number,
16
+ col: number,
17
+ ) =>
18
+ | {
19
+ originalSource: string;
20
+ originalLine: number;
21
+ originalColumn: number;
22
+ }
23
+ | undefined;
24
+ }
25
+ | undefined)
26
+ | undefined;
27
+ let loaded = false;
28
+ let realpathSync: ((path: string) => string) | undefined;
29
+ let fileURLToPath: ((url: string | URL) => string) | undefined;
30
+ const realpathCache = new Map<string, string>();
31
+
32
+ export function loadSourceMapSupport() {
33
+ if (loaded) return;
34
+ loaded = true;
35
+ try {
36
+ const mod = process.getBuiltinModule?.("node:module") as
37
+ | typeof import("node:module")
38
+ | undefined;
39
+ if (mod && typeof mod.findSourceMap === "function") {
40
+ findSourceMap = mod.findSourceMap as typeof findSourceMap;
41
+ }
42
+ } catch {
43
+ // not available
44
+ }
45
+ try {
46
+ const fs = process.getBuiltinModule?.("node:fs") as
47
+ | typeof import("node:fs")
48
+ | undefined;
49
+ if (fs) {
50
+ realpathSync = fs.realpathSync;
51
+ }
52
+ } catch {
53
+ // not available
54
+ }
55
+ try {
56
+ const url = process.getBuiltinModule?.("node:url") as
57
+ | typeof import("node:url")
58
+ | undefined;
59
+ if (url) {
60
+ fileURLToPath = url.fileURLToPath;
61
+ }
62
+ } catch {
63
+ // not available
64
+ }
65
+ }
66
+
67
+ export function getRealPath(fileName: string): string {
68
+ if (!realpathSync) return fileName;
69
+ let real = realpathCache.get(fileName);
70
+ if (real === undefined) {
71
+ try {
72
+ real = realpathSync(fileName);
73
+ } catch {
74
+ real = fileName;
75
+ }
76
+ realpathCache.set(fileName, real);
77
+ }
78
+ return real;
79
+ }
80
+
81
+ export function resolveSourceMap(
82
+ fileName: string,
83
+ line: number,
84
+ col: number,
85
+ ): { fileName: string; line: number; col: number } {
86
+ if (!findSourceMap) return { fileName, line, col };
87
+ // pnpm uses symlinks; findSourceMap only matches the real path
88
+ const real = getRealPath(fileName);
89
+ const map = findSourceMap(real);
90
+ if (!map) return { fileName, line, col };
91
+ const entry = map.findEntry(line - 1, col - 1);
92
+ if (!entry) return { fileName, line, col };
93
+ return {
94
+ fileName: entry.originalSource,
95
+ line: entry.originalLine + 1,
96
+ col: entry.originalColumn + 1,
97
+ };
98
+ }
99
+
100
+ function stripFileUrl(path: string): string {
101
+ if (!path.startsWith("file://")) return path;
102
+ if (fileURLToPath) return fileURLToPath(path);
103
+ return new URL(path).pathname;
104
+ }
105
+
106
+ /**
107
+ * Resolve a component source location. Handles:
108
+ * - `file://` URLs from import.meta.url (converts to file path)
109
+ * - Source map resolution (maps compiled .js to original .tsx)
110
+ * - Plain absolute paths (legacy format, returned as-is)
111
+ */
112
+ export function resolveComponentSource(
113
+ source: SourceLocation | undefined,
114
+ ): SourceLocation | undefined {
115
+ if (!source?.fileName) return source;
116
+ loadSourceMapSupport();
117
+
118
+ const fileName = stripFileUrl(source.fileName);
119
+
120
+ if (source.lineNumber != null && source.columnNumber != null) {
121
+ // Resolve through source maps to get the original .tsx path
122
+ const resolved = resolveSourceMap(
123
+ fileName,
124
+ source.lineNumber,
125
+ source.columnNumber,
126
+ );
127
+ return {
128
+ fileName: stripFileUrl(resolved.fileName),
129
+ lineNumber: resolved.line,
130
+ columnNumber: resolved.col,
131
+ };
132
+ }
133
+
134
+ return { ...source, fileName };
135
+ }
@@ -71,12 +71,28 @@ if (traceDbEnv) {
71
71
  traceDbEnv === "1" || traceDbEnv === "true" ? "alloy-trace.db" : traceDbEnv;
72
72
  try {
73
73
  await initTrace(traceDbPath);
74
+ // eslint-disable-next-line no-console
75
+ console.log(` Trace database: ${traceDbPath}`);
74
76
  } catch (e) {
75
77
  // eslint-disable-next-line no-console
76
78
  console.warn(`Failed to initialize trace database at ${traceDbPath}:`, e);
77
79
  }
78
80
  }
79
81
 
82
+ if (import.meta.url.includes("/dist/dev/")) {
83
+ // eslint-disable-next-line no-console
84
+ console.log("Alloy debug build loaded.");
85
+ if (process.sourceMapsEnabled) {
86
+ // eslint-disable-next-line no-console
87
+ console.log(" Source maps enabled.");
88
+ } else {
89
+ // eslint-disable-next-line no-console
90
+ console.log(
91
+ " Source maps disabled. Run with --enable-source-maps for better stack traces.",
92
+ );
93
+ }
94
+ }
95
+
80
96
  // ─────────────────────────────────────────────────────────────────────────────
81
97
  // Trace phases
82
98
  // ─────────────────────────────────────────────────────────────────────────────
@@ -80,7 +80,7 @@ describe("Browser Build Test", () => {
80
80
  expect(() => {
81
81
  execSync("npm run build", { cwd: testDir, stdio: "inherit" });
82
82
  }).not.toThrow();
83
- });
83
+ }, 10000);
84
84
 
85
85
  afterAll(() => {
86
86
  // Ensure testDir exists before attempting to remove it
package/vitest.config.ts CHANGED
@@ -2,6 +2,14 @@ import alloyPlugin from "@alloy-js/rollup-plugin";
2
2
  import { defineConfig } from "vitest/config";
3
3
 
4
4
  export default defineConfig({
5
+ resolve: {
6
+ conditions: ["source"],
7
+ },
8
+ ssr: {
9
+ resolve: {
10
+ conditions: ["source"],
11
+ },
12
+ },
5
13
  esbuild: {
6
14
  jsx: "preserve",
7
15
  sourcemap: "both",