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

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 (310) hide show
  1. package/CHANGELOG.md +0 -22
  2. package/dist/devtools/index.html +68 -0
  3. package/dist/src/binder.d.ts +2 -0
  4. package/dist/src/binder.d.ts.map +1 -1
  5. package/dist/src/binder.js +55 -12
  6. package/dist/src/binder.js.map +1 -1
  7. package/dist/src/components/AccessExpression.d.ts +78 -0
  8. package/dist/src/components/AccessExpression.d.ts.map +1 -0
  9. package/dist/src/components/AccessExpression.js +218 -0
  10. package/dist/src/components/AccessExpression.js.map +1 -0
  11. package/dist/src/components/AccessExpression.test.d.ts +2 -0
  12. package/dist/src/components/AccessExpression.test.d.ts.map +1 -0
  13. package/dist/src/components/AccessExpression.test.js +137 -0
  14. package/dist/src/components/AccessExpression.test.js.map +1 -0
  15. package/dist/src/components/AppendFile.d.ts.map +1 -1
  16. package/dist/src/components/AppendFile.js +14 -3
  17. package/dist/src/components/AppendFile.js.map +1 -1
  18. package/dist/src/components/Block.js +1 -1
  19. package/dist/src/components/Block.js.map +1 -1
  20. package/dist/src/components/Declaration.d.ts.map +1 -1
  21. package/dist/src/components/Declaration.js +2 -1
  22. package/dist/src/components/Declaration.js.map +1 -1
  23. package/dist/src/components/Prose.js +2 -2
  24. package/dist/src/components/Prose.js.map +1 -1
  25. package/dist/src/components/Scope.d.ts.map +1 -1
  26. package/dist/src/components/Scope.js +6 -1
  27. package/dist/src/components/Scope.js.map +1 -1
  28. package/dist/src/components/SourceDirectory.d.ts.map +1 -1
  29. package/dist/src/components/SourceDirectory.js +1 -2
  30. package/dist/src/components/SourceDirectory.js.map +1 -1
  31. package/dist/src/components/TemplateFile.d.ts.map +1 -1
  32. package/dist/src/components/TemplateFile.js +18 -3
  33. package/dist/src/components/TemplateFile.js.map +1 -1
  34. package/dist/src/components/index.d.ts +1 -0
  35. package/dist/src/components/index.d.ts.map +1 -1
  36. package/dist/src/components/index.js +1 -0
  37. package/dist/src/components/index.js.map +1 -1
  38. package/dist/src/content-slot.d.ts.map +1 -1
  39. package/dist/src/content-slot.js +7 -6
  40. package/dist/src/content-slot.js.map +1 -1
  41. package/dist/src/context.d.ts.map +1 -1
  42. package/dist/src/context.js +10 -3
  43. package/dist/src/context.js.map +1 -1
  44. package/dist/src/debug/cli.d.ts +6 -0
  45. package/dist/src/debug/cli.d.ts.map +1 -0
  46. package/dist/src/{debug.js → debug/cli.js} +79 -82
  47. package/dist/src/debug/cli.js.map +1 -0
  48. package/dist/src/debug/diagnostics.test.d.ts +2 -0
  49. package/dist/src/debug/diagnostics.test.d.ts.map +1 -0
  50. package/dist/src/debug/diagnostics.test.js +45 -0
  51. package/dist/src/debug/diagnostics.test.js.map +1 -0
  52. package/dist/src/debug/effects.d.ts +73 -0
  53. package/dist/src/debug/effects.d.ts.map +1 -0
  54. package/dist/src/debug/effects.js +228 -0
  55. package/dist/src/debug/effects.js.map +1 -0
  56. package/dist/src/debug/effects.test.d.ts +2 -0
  57. package/dist/src/debug/effects.test.d.ts.map +1 -0
  58. package/dist/src/debug/effects.test.js +84 -0
  59. package/dist/src/debug/effects.test.js.map +1 -0
  60. package/dist/src/debug/files.d.ts +14 -0
  61. package/dist/src/debug/files.d.ts.map +1 -0
  62. package/dist/src/debug/files.js +40 -0
  63. package/dist/src/debug/files.js.map +1 -0
  64. package/dist/src/debug/files.test.d.ts +2 -0
  65. package/dist/src/debug/files.test.d.ts.map +1 -0
  66. package/dist/src/debug/files.test.js +89 -0
  67. package/dist/src/debug/files.test.js.map +1 -0
  68. package/dist/src/debug/index.d.ts +61 -0
  69. package/dist/src/debug/index.d.ts.map +1 -0
  70. package/dist/src/debug/index.js +69 -0
  71. package/dist/src/debug/index.js.map +1 -0
  72. package/dist/src/debug/render.d.ts +57 -0
  73. package/dist/src/debug/render.d.ts.map +1 -0
  74. package/dist/src/debug/render.js +519 -0
  75. package/dist/src/debug/render.js.map +1 -0
  76. package/dist/src/debug/render.test.d.ts +2 -0
  77. package/dist/src/debug/render.test.d.ts.map +1 -0
  78. package/dist/src/debug/render.test.js +328 -0
  79. package/dist/src/debug/render.test.js.map +1 -0
  80. package/dist/src/debug/serialize.d.ts +9 -0
  81. package/dist/src/debug/serialize.d.ts.map +1 -0
  82. package/dist/src/debug/serialize.js +70 -0
  83. package/dist/src/debug/serialize.js.map +1 -0
  84. package/dist/src/debug/symbols.d.ts +15 -0
  85. package/dist/src/debug/symbols.d.ts.map +1 -0
  86. package/dist/src/debug/symbols.js +173 -0
  87. package/dist/src/debug/symbols.js.map +1 -0
  88. package/dist/src/debug/symbols.test.d.ts +2 -0
  89. package/dist/src/debug/symbols.test.d.ts.map +1 -0
  90. package/dist/src/debug/symbols.test.js +104 -0
  91. package/dist/src/debug/symbols.test.js.map +1 -0
  92. package/dist/src/debug/trace.d.ts +342 -0
  93. package/dist/src/debug/trace.d.ts.map +1 -0
  94. package/dist/src/debug/trace.js +443 -0
  95. package/dist/src/debug/trace.js.map +1 -0
  96. package/dist/src/devtools/devtools-protocol.d.ts +232 -0
  97. package/dist/src/devtools/devtools-protocol.d.ts.map +1 -0
  98. package/dist/src/devtools/devtools-protocol.js +2 -0
  99. package/dist/src/devtools/devtools-protocol.js.map +1 -0
  100. package/dist/src/devtools/devtools-server.browser.d.ts +28 -0
  101. package/dist/src/devtools/devtools-server.browser.d.ts.map +1 -0
  102. package/dist/src/devtools/devtools-server.browser.js +36 -0
  103. package/dist/src/devtools/devtools-server.browser.js.map +1 -0
  104. package/dist/src/devtools/devtools-server.d.ts +72 -0
  105. package/dist/src/devtools/devtools-server.d.ts.map +1 -0
  106. package/dist/src/devtools/devtools-server.js +256 -0
  107. package/dist/src/devtools/devtools-server.js.map +1 -0
  108. package/dist/src/devtools/devtools-transport.d.ts +23 -0
  109. package/dist/src/devtools/devtools-transport.d.ts.map +1 -0
  110. package/dist/src/devtools/devtools-transport.js +114 -0
  111. package/dist/src/devtools/devtools-transport.js.map +1 -0
  112. package/dist/src/devtools-entry.browser.d.ts +4 -0
  113. package/dist/src/devtools-entry.browser.d.ts.map +1 -0
  114. package/dist/src/devtools-entry.browser.js +2 -0
  115. package/dist/src/devtools-entry.browser.js.map +1 -0
  116. package/dist/src/devtools-entry.d.ts +4 -0
  117. package/dist/src/devtools-entry.d.ts.map +1 -0
  118. package/dist/src/devtools-entry.js +2 -0
  119. package/dist/src/devtools-entry.js.map +1 -0
  120. package/dist/src/diagnostics.d.ts +34 -0
  121. package/dist/src/diagnostics.d.ts.map +1 -0
  122. package/dist/src/diagnostics.js +89 -0
  123. package/dist/src/diagnostics.js.map +1 -0
  124. package/dist/src/index.d.ts +3 -2
  125. package/dist/src/index.d.ts.map +1 -1
  126. package/dist/src/index.js +3 -2
  127. package/dist/src/index.js.map +1 -1
  128. package/dist/src/print-hook.d.ts +14 -0
  129. package/dist/src/print-hook.d.ts.map +1 -0
  130. package/dist/src/print-hook.js +10 -0
  131. package/dist/src/print-hook.js.map +1 -0
  132. package/dist/src/reactive-union-set.d.ts.map +1 -1
  133. package/dist/src/reactive-union-set.js +28 -3
  134. package/dist/src/reactive-union-set.js.map +1 -1
  135. package/dist/src/reactivity.d.ts +50 -8
  136. package/dist/src/reactivity.d.ts.map +1 -1
  137. package/dist/src/reactivity.js +225 -39
  138. package/dist/src/reactivity.js.map +1 -1
  139. package/dist/src/render-stack.d.ts +18 -1
  140. package/dist/src/render-stack.d.ts.map +1 -1
  141. package/dist/src/render-stack.js +61 -1
  142. package/dist/src/render-stack.js.map +1 -1
  143. package/dist/src/render.d.ts +8 -15
  144. package/dist/src/render.d.ts.map +1 -1
  145. package/dist/src/render.js +370 -109
  146. package/dist/src/render.js.map +1 -1
  147. package/dist/src/resource.d.ts.map +1 -1
  148. package/dist/src/resource.js +5 -0
  149. package/dist/src/resource.js.map +1 -1
  150. package/dist/src/scheduler.d.ts +8 -0
  151. package/dist/src/scheduler.d.ts.map +1 -1
  152. package/dist/src/scheduler.js +69 -3
  153. package/dist/src/scheduler.js.map +1 -1
  154. package/dist/src/symbols/basic-symbol.d.ts.map +1 -1
  155. package/dist/src/symbols/basic-symbol.js +6 -1
  156. package/dist/src/symbols/basic-symbol.js.map +1 -1
  157. package/dist/src/symbols/decl.d.ts.map +1 -1
  158. package/dist/src/symbols/decl.js +5 -1
  159. package/dist/src/symbols/decl.js.map +1 -1
  160. package/dist/src/symbols/output-scope.d.ts +2 -1
  161. package/dist/src/symbols/output-scope.d.ts.map +1 -1
  162. package/dist/src/symbols/output-scope.js +13 -8
  163. package/dist/src/symbols/output-scope.js.map +1 -1
  164. package/dist/src/symbols/output-symbol.d.ts +1 -0
  165. package/dist/src/symbols/output-symbol.d.ts.map +1 -1
  166. package/dist/src/symbols/output-symbol.js +25 -8
  167. package/dist/src/symbols/output-symbol.js.map +1 -1
  168. package/dist/src/symbols/symbol-flow.d.ts.map +1 -1
  169. package/dist/src/symbols/symbol-flow.js +24 -8
  170. package/dist/src/symbols/symbol-flow.js.map +1 -1
  171. package/dist/src/symbols/symbol-slot.d.ts.map +1 -1
  172. package/dist/src/symbols/symbol-slot.js +15 -0
  173. package/dist/src/symbols/symbol-slot.js.map +1 -1
  174. package/dist/src/symbols/symbol-slot.test.d.ts +2 -0
  175. package/dist/src/symbols/symbol-slot.test.d.ts.map +1 -0
  176. package/dist/src/symbols/symbol-slot.test.js +35 -0
  177. package/dist/src/symbols/symbol-slot.test.js.map +1 -0
  178. package/dist/src/symbols/symbol-table.d.ts.map +1 -1
  179. package/dist/src/symbols/symbol-table.js +6 -5
  180. package/dist/src/symbols/symbol-table.js.map +1 -1
  181. package/dist/src/trace.d.ts +2 -0
  182. package/dist/src/trace.d.ts.map +1 -0
  183. package/dist/src/trace.js +2 -0
  184. package/dist/src/trace.js.map +1 -0
  185. package/dist/src/tracer.d.ts +2 -228
  186. package/dist/src/tracer.d.ts.map +1 -1
  187. package/dist/src/tracer.js +5 -298
  188. package/dist/src/tracer.js.map +1 -1
  189. package/dist/src/utils.d.ts.map +1 -1
  190. package/dist/src/utils.js +7 -5
  191. package/dist/src/utils.js.map +1 -1
  192. package/dist/test/components/append-file.test.d.ts.map +1 -1
  193. package/dist/test/components/append-file.test.js +18 -10
  194. package/dist/test/components/append-file.test.js.map +1 -1
  195. package/dist/test/components/template-file.test.d.ts.map +1 -1
  196. package/dist/test/components/template-file.test.js +6 -4
  197. package/dist/test/components/template-file.test.js.map +1 -1
  198. package/dist/test/lazy-isempty.test.d.ts +2 -0
  199. package/dist/test/lazy-isempty.test.d.ts.map +1 -0
  200. package/dist/test/lazy-isempty.test.js +89 -0
  201. package/dist/test/lazy-isempty.test.js.map +1 -0
  202. package/dist/test/reactive-union-set-disposers.test.d.ts +2 -0
  203. package/dist/test/reactive-union-set-disposers.test.d.ts.map +1 -0
  204. package/dist/test/reactive-union-set-disposers.test.js +98 -0
  205. package/dist/test/reactive-union-set-disposers.test.js.map +1 -0
  206. package/dist/test/reactivity/shallow-reactive.test.d.ts +2 -0
  207. package/dist/test/reactivity/shallow-reactive.test.d.ts.map +1 -0
  208. package/dist/test/reactivity/shallow-reactive.test.js +52 -0
  209. package/dist/test/reactivity/shallow-reactive.test.js.map +1 -0
  210. package/dist/test/rendering/basic.test.js +3 -0
  211. package/dist/test/rendering/basic.test.js.map +1 -1
  212. package/dist/test/rendering/print-render-stack.test.d.ts.map +1 -1
  213. package/dist/test/rendering/print-render-stack.test.js +91 -98
  214. package/dist/test/rendering/print-render-stack.test.js.map +1 -1
  215. package/dist/test/scheduler-extended.test.d.ts +2 -0
  216. package/dist/test/scheduler-extended.test.d.ts.map +1 -0
  217. package/dist/test/scheduler-extended.test.js +96 -0
  218. package/dist/test/scheduler-extended.test.js.map +1 -0
  219. package/dist/test/scheduler.test.d.ts +2 -0
  220. package/dist/test/scheduler.test.d.ts.map +1 -0
  221. package/dist/test/scheduler.test.js +46 -0
  222. package/dist/test/scheduler.test.js.map +1 -0
  223. package/dist/testing/create-test-wrapper.d.ts +1 -1
  224. package/dist/testing/create-test-wrapper.d.ts.map +1 -1
  225. package/dist/testing/create-test-wrapper.js +1 -1
  226. package/dist/testing/create-test-wrapper.js.map +1 -1
  227. package/dist/testing/devtools-utils.d.ts +26 -0
  228. package/dist/testing/devtools-utils.d.ts.map +1 -0
  229. package/dist/testing/devtools-utils.js +140 -0
  230. package/dist/testing/devtools-utils.js.map +1 -0
  231. package/dist/testing/extend-expect.d.ts.map +1 -1
  232. package/dist/testing/extend-expect.js +63 -1
  233. package/dist/testing/extend-expect.js.map +1 -1
  234. package/dist/testing/render.d.ts +2 -2
  235. package/dist/testing/render.d.ts.map +1 -1
  236. package/dist/testing/render.js +2 -2
  237. package/dist/testing/render.js.map +1 -1
  238. package/dist/tsconfig.tsbuildinfo +1 -1
  239. package/package.json +21 -7
  240. package/scripts/copy-devtools-ui.mjs +26 -0
  241. package/src/binder.ts +71 -16
  242. package/src/components/AccessExpression.test.tsx +132 -0
  243. package/src/components/AccessExpression.tsx +344 -0
  244. package/src/components/AppendFile.tsx +14 -9
  245. package/src/components/Block.tsx +1 -1
  246. package/src/components/Declaration.tsx +2 -1
  247. package/src/components/Prose.tsx +1 -1
  248. package/src/components/Scope.tsx +6 -1
  249. package/src/components/SourceDirectory.tsx +1 -2
  250. package/src/components/TemplateFile.tsx +18 -9
  251. package/src/components/index.tsx +1 -0
  252. package/src/content-slot.tsx +7 -7
  253. package/src/context.ts +17 -6
  254. package/src/{debug.ts → debug/cli.ts} +114 -125
  255. package/src/debug/diagnostics.test.tsx +55 -0
  256. package/src/debug/effects.test.tsx +89 -0
  257. package/src/debug/effects.ts +317 -0
  258. package/src/debug/files.test.tsx +96 -0
  259. package/src/debug/files.ts +40 -0
  260. package/src/debug/index.ts +128 -0
  261. package/src/debug/render.test.tsx +379 -0
  262. package/src/debug/render.ts +639 -0
  263. package/src/debug/serialize.ts +85 -0
  264. package/src/debug/symbols.test.tsx +106 -0
  265. package/src/debug/symbols.ts +239 -0
  266. package/src/debug/trace.ts +312 -0
  267. package/src/devtools/devtools-protocol.ts +312 -0
  268. package/src/devtools/devtools-server.browser.ts +71 -0
  269. package/src/devtools/devtools-server.ts +290 -0
  270. package/src/devtools/devtools-transport.ts +154 -0
  271. package/src/devtools-entry.browser.ts +52 -0
  272. package/src/devtools-entry.ts +54 -0
  273. package/src/diagnostics.ts +141 -0
  274. package/src/index.ts +2 -7
  275. package/src/print-hook.ts +22 -0
  276. package/src/reactive-union-set.ts +85 -44
  277. package/src/reactivity.ts +301 -59
  278. package/src/render-stack.ts +73 -1
  279. package/src/render.ts +470 -161
  280. package/src/resource.ts +28 -19
  281. package/src/scheduler.ts +80 -4
  282. package/src/symbols/basic-symbol.ts +6 -1
  283. package/src/symbols/decl.ts +5 -1
  284. package/src/symbols/output-scope.ts +21 -13
  285. package/src/symbols/output-symbol.ts +34 -14
  286. package/src/symbols/symbol-flow.ts +76 -39
  287. package/src/symbols/symbol-slot.test.tsx +41 -0
  288. package/src/symbols/symbol-slot.tsx +47 -20
  289. package/src/symbols/symbol-table.ts +6 -10
  290. package/src/trace.ts +1 -0
  291. package/src/tracer.ts +13 -242
  292. package/src/utils.tsx +24 -17
  293. package/temp/api.json +5658 -3095
  294. package/test/components/append-file.test.tsx +36 -29
  295. package/test/components/template-file.test.tsx +11 -11
  296. package/test/lazy-isempty.test.tsx +106 -0
  297. package/test/reactive-union-set-disposers.test.tsx +112 -0
  298. package/test/reactivity/shallow-reactive.test.tsx +56 -0
  299. package/test/rendering/basic.test.tsx +4 -0
  300. package/test/rendering/print-render-stack.test.tsx +52 -43
  301. package/test/scheduler-extended.test.tsx +122 -0
  302. package/test/scheduler.test.tsx +50 -0
  303. package/testing/create-test-wrapper.tsx +1 -1
  304. package/testing/devtools-utils.ts +203 -0
  305. package/testing/extend-expect.ts +89 -0
  306. package/testing/render.ts +2 -2
  307. package/testing/vitest.d.ts +9 -0
  308. package/dist/src/debug.d.ts +0 -14
  309. package/dist/src/debug.d.ts.map +0 -1
  310. package/dist/src/debug.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["writeFileSync","tmpdir","join","describe","expect","it","TemplateFile","TemplateVariable","renderAsync","d","templatePath","templateContent","result","_$createComponent","src","path","children","name","value","toRenderToAsync","rejects","toThrow"],"sources":["../../../test/components/template-file.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["writeFileSync","tmpdir","join","describe","expect","it","TemplateFile","TemplateVariable","d","templatePath","templateContent","result","_$createComponent","src","path","children","name","value","toRenderToAsync","toHaveDiagnosticsAsync","message","severity"],"sources":["../../../test/components/template-file.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import "../testing/extend-expect.js";
2
+ //# sourceMappingURL=lazy-isempty.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lazy-isempty.test.d.ts","sourceRoot":"","sources":["../../test/lazy-isempty.test.tsx"],"names":[],"mappings":"AAMA,OAAO,6BAA6B,CAAC"}
@@ -0,0 +1,89 @@
1
+ import { createComponent as _$createComponent, memo as _$memo } from "@alloy-js/core/jsx-runtime";
2
+ import { ref } from "@vue/reactivity";
3
+ import { describe, expect, it } from "vitest";
4
+ import { Show } from "../src/components/Show.js";
5
+ import { createContentSlot } from "../src/content-slot.js";
6
+ import { ensureIsEmpty, getContext } from "../src/reactivity.js";
7
+ import { printTree, renderTree } from "../src/render.js";
8
+ import "../testing/extend-expect.js";
9
+ describe("lazy isEmpty / _lastEmpty", () => {
10
+ it("context starts without isEmpty ref allocated", () => {
11
+ let ctx = null;
12
+ function Capture() {
13
+ ctx = getContext();
14
+ return "content";
15
+ }
16
+ renderTree(_$createComponent(Capture, {}));
17
+
18
+ // The isEmpty ref should NOT be allocated unless someone observes it.
19
+ expect(ctx).not.toBeNull();
20
+ expect(ctx.isEmpty).toBeUndefined();
21
+ expect(ctx._lastEmpty).toBe(false);
22
+ });
23
+ it("ensureIsEmpty lazily allocates the isEmpty ref", () => {
24
+ let ctx = null;
25
+ function Capture() {
26
+ ctx = getContext();
27
+ return "content";
28
+ }
29
+ renderTree(_$createComponent(Capture, {}));
30
+ expect(ctx.isEmpty).toBeUndefined();
31
+ const isEmptyRef = ensureIsEmpty(ctx);
32
+ expect(ctx.isEmpty).toBeDefined();
33
+ expect(isEmptyRef).toBe(ctx.isEmpty);
34
+ });
35
+ it("_lastEmpty is true for empty component, false for non-empty", () => {
36
+ let emptyCtx = null;
37
+ let fullCtx = null;
38
+ function EmptyCapture() {
39
+ emptyCtx = getContext();
40
+ return false;
41
+ }
42
+ function FullCapture() {
43
+ fullCtx = getContext();
44
+ return "has content";
45
+ }
46
+ renderTree([_$createComponent(EmptyCapture, {}), _$createComponent(FullCapture, {})]);
47
+ expect(emptyCtx._lastEmpty).toBe(true);
48
+ expect(fullCtx._lastEmpty).toBe(false);
49
+ });
50
+ it("ContentSlot triggers ensureIsEmpty and tracks reactively", () => {
51
+ const ContentSlot = createContentSlot();
52
+ const showContent = ref(false);
53
+ const tree = renderTree([_$memo(() => ContentSlot.isEmpty && "empty"), _$createComponent(ContentSlot, {
54
+ get children() {
55
+ return _$createComponent(Show, {
56
+ get when() {
57
+ return showContent.value;
58
+ },
59
+ children: "content"
60
+ });
61
+ }
62
+ })]);
63
+ expect(printTree(tree)).toBe("empty");
64
+ showContent.value = true;
65
+ expect(printTree(tree)).toBe("content");
66
+ });
67
+ it("propagates empty state up through parent contexts", () => {
68
+ const OuterSlot = createContentSlot();
69
+ const showContent = ref(false);
70
+ const tree = renderTree([_$memo(() => OuterSlot.isEmpty && "outer-empty"), _$createComponent(OuterSlot, {
71
+ get children() {
72
+ return _$createComponent(Show, {
73
+ get when() {
74
+ return showContent.value;
75
+ },
76
+ children: "content"
77
+ });
78
+ }
79
+ })]);
80
+
81
+ // Outer should be empty initially.
82
+ expect(printTree(tree)).toBe("outer-empty");
83
+
84
+ // Show content — outer should become non-empty.
85
+ showContent.value = true;
86
+ expect(printTree(tree)).toBe("content");
87
+ });
88
+ });
89
+ //# sourceMappingURL=lazy-isempty.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ref","describe","expect","it","Show","createContentSlot","ensureIsEmpty","getContext","printTree","renderTree","ctx","Capture","_$createComponent","not","toBeNull","isEmpty","toBeUndefined","_lastEmpty","toBe","isEmptyRef","toBeDefined","emptyCtx","fullCtx","EmptyCapture","FullCapture","ContentSlot","showContent","tree","_$memo","children","when","value","OuterSlot"],"sources":["../../test/lazy-isempty.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=reactive-union-set-disposers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactive-union-set-disposers.test.d.ts","sourceRoot":"","sources":["../../test/reactive-union-set-disposers.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,98 @@
1
+ import { reactive } from "@vue/reactivity";
2
+ import { describe, expect, it } from "vitest";
3
+ import { ReactiveUnionSet } from "../src/reactive-union-set.js";
4
+ import { effect } from "../src/reactivity.js";
5
+ import { flushJobs } from "../src/scheduler.js";
6
+ describe("ReactiveUnionSet: per-item disposers via addSubset", () => {
7
+ it("calls onDelete when item is removed from subset", () => {
8
+ const parentSet = new ReactiveUnionSet();
9
+ const subset = reactive(new Set());
10
+ const deleted = [];
11
+ parentSet.addSubset(subset, {
12
+ onDelete(value) {
13
+ deleted.push(value);
14
+ }
15
+ });
16
+ subset.add("a");
17
+ subset.add("b");
18
+ flushJobs();
19
+ expect(parentSet.has("a")).toBe(true);
20
+ expect(parentSet.has("b")).toBe(true);
21
+ subset.delete("a");
22
+ flushJobs();
23
+ expect(parentSet.has("a")).toBe(false);
24
+ expect(deleted).toContain("a");
25
+ });
26
+ it("calls onDelete for all items when subset is cleared", () => {
27
+ const parentSet = new ReactiveUnionSet();
28
+ const subset = reactive(new Set());
29
+ const deleted = [];
30
+ parentSet.addSubset(subset, {
31
+ onDelete(value) {
32
+ deleted.push(value);
33
+ }
34
+ });
35
+ subset.add("a");
36
+ subset.add("b");
37
+ subset.add("c");
38
+ flushJobs();
39
+ expect(parentSet.size).toBe(3);
40
+ subset.clear();
41
+ flushJobs();
42
+ expect(parentSet.size).toBe(0);
43
+ expect(deleted.sort()).toEqual(["a", "b", "c"]);
44
+ });
45
+ it("disposes root scopes created by onAdd when item is removed", () => {
46
+ const parentSet = new ReactiveUnionSet();
47
+ const subset = reactive(new Set());
48
+ let disposeCount = 0;
49
+
50
+ // Use the constructor-level onAdd so items are still added to the set,
51
+ // plus per-subset onAdd with root scope tracking.
52
+ parentSet.addSubset(subset, {
53
+ onAdd(value) {
54
+ // The onAdd in addSubset wraps in root() internally.
55
+ // Side-effects created here are cleaned up when the item is removed.
56
+ effect(() => {
57
+ void value; // track nothing real, just proving the effect exists
58
+ });
59
+ return value;
60
+ },
61
+ onDelete() {
62
+ disposeCount++;
63
+ }
64
+ });
65
+ subset.add("x");
66
+ flushJobs();
67
+
68
+ // Remove item — root scope (and its effects) should be disposed.
69
+ subset.delete("x");
70
+ flushJobs();
71
+ expect(disposeCount).toBe(1);
72
+ });
73
+ it("re-adding after delete triggers fresh onAdd", () => {
74
+ const parentSet = new ReactiveUnionSet();
75
+ const subset = reactive(new Set());
76
+ let addCount = 0;
77
+ const deleted = [];
78
+ parentSet.addSubset(subset, {
79
+ onAdd(value) {
80
+ addCount++;
81
+ return value;
82
+ },
83
+ onDelete(value) {
84
+ deleted.push(value);
85
+ }
86
+ });
87
+ subset.add("a");
88
+ flushJobs();
89
+ expect(addCount).toBe(1);
90
+ subset.delete("a");
91
+ flushJobs();
92
+ expect(deleted).toEqual(["a"]);
93
+ subset.add("a");
94
+ flushJobs();
95
+ expect(addCount).toBe(2);
96
+ });
97
+ });
98
+ //# sourceMappingURL=reactive-union-set-disposers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["reactive","describe","expect","it","ReactiveUnionSet","effect","flushJobs","parentSet","subset","Set","deleted","addSubset","onDelete","value","push","add","has","toBe","delete","toContain","size","clear","sort","toEqual","disposeCount","onAdd","addCount"],"sources":["../../test/reactive-union-set-disposers.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shallow-reactive.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shallow-reactive.test.d.ts","sourceRoot":"","sources":["../../../test/reactivity/shallow-reactive.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,52 @@
1
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
2
+ import { getReactiveCreationLocation, shallowReactive } from "../../src/reactivity.js";
3
+ describe("shallowReactive creation location", () => {
4
+ let origDebug;
5
+ beforeEach(() => {
6
+ origDebug = process.env.ALLOY_DEBUG;
7
+ process.env.ALLOY_DEBUG = "1";
8
+ });
9
+ afterEach(() => {
10
+ if (origDebug === undefined) {
11
+ delete process.env.ALLOY_DEBUG;
12
+ } else {
13
+ process.env.ALLOY_DEBUG = origDebug;
14
+ }
15
+ });
16
+ it("stores creation location keyed by raw target when debug enabled", () => {
17
+ const raw = {
18
+ x: 1
19
+ };
20
+ shallowReactive(raw);
21
+ const location = getReactiveCreationLocation(raw);
22
+ // When ALLOY_DEBUG is set, captureSourceLocation should return something.
23
+ expect(location).toBeDefined();
24
+ });
25
+ it("does not store location when debug is disabled", () => {
26
+ delete process.env.ALLOY_DEBUG;
27
+ const raw = {
28
+ y: 2
29
+ };
30
+ shallowReactive(raw);
31
+ const location = getReactiveCreationLocation(raw);
32
+ expect(location).toBeUndefined();
33
+ });
34
+ it("location is keyed by raw target, not proxy", () => {
35
+ const raw = {
36
+ z: 3
37
+ };
38
+ const proxy = shallowReactive(raw);
39
+
40
+ // Proxy and raw are different objects.
41
+ expect(proxy).not.toBe(raw);
42
+
43
+ // Location should be on the raw target.
44
+ const location = getReactiveCreationLocation(raw);
45
+ expect(location).toBeDefined();
46
+
47
+ // The proxy itself should NOT have a location stored (WeakMap keyed by raw).
48
+ // Note: Vue may unwrap the proxy to raw internally, but our code explicitly
49
+ // stores on `target` (the raw object passed to shallowReactive).
50
+ });
51
+ });
52
+ //# sourceMappingURL=shallow-reactive.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["afterEach","beforeEach","describe","expect","it","getReactiveCreationLocation","shallowReactive","origDebug","process","env","ALLOY_DEBUG","undefined","raw","x","location","toBeDefined","y","toBeUndefined","z","proxy","not","toBe"],"sources":["../../../test/reactivity/shallow-reactive.test.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAS,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AACpE,SACEC,2BAA2B,EAC3BC,eAAe,QACV,yBAAyB;AAEhCJ,QAAQ,CAAC,mCAAmC,EAAE,MAAM;EAClD,IAAIK,SAA6B;EAEjCN,UAAU,CAAC,MAAM;IACfM,SAAS,GAAGC,OAAO,CAACC,GAAG,CAACC,WAAW;IACnCF,OAAO,CAACC,GAAG,CAACC,WAAW,GAAG,GAAG;EAC/B,CAAC,CAAC;EAEFV,SAAS,CAAC,MAAM;IACd,IAAIO,SAAS,KAAKI,SAAS,EAAE;MAC3B,OAAOH,OAAO,CAACC,GAAG,CAACC,WAAW;IAChC,CAAC,MAAM;MACLF,OAAO,CAACC,GAAG,CAACC,WAAW,GAAGH,SAAS;IACrC;EACF,CAAC,CAAC;EAEFH,EAAE,CAAC,iEAAiE,EAAE,MAAM;IAC1E,MAAMQ,GAAG,GAAG;MAAEC,CAAC,EAAE;IAAE,CAAC;IACpBP,eAAe,CAACM,GAAG,CAAC;IAEpB,MAAME,QAAQ,GAAGT,2BAA2B,CAACO,GAAG,CAAC;IACjD;IACAT,MAAM,CAACW,QAAQ,CAAC,CAACC,WAAW,CAAC,CAAC;EAChC,CAAC,CAAC;EAEFX,EAAE,CAAC,gDAAgD,EAAE,MAAM;IACzD,OAAOI,OAAO,CAACC,GAAG,CAACC,WAAW;IAC9B,MAAME,GAAG,GAAG;MAAEI,CAAC,EAAE;IAAE,CAAC;IACpBV,eAAe,CAACM,GAAG,CAAC;IAEpB,MAAME,QAAQ,GAAGT,2BAA2B,CAACO,GAAG,CAAC;IACjDT,MAAM,CAACW,QAAQ,CAAC,CAACG,aAAa,CAAC,CAAC;EAClC,CAAC,CAAC;EAEFb,EAAE,CAAC,4CAA4C,EAAE,MAAM;IACrD,MAAMQ,GAAG,GAAG;MAAEM,CAAC,EAAE;IAAE,CAAC;IACpB,MAAMC,KAAK,GAAGb,eAAe,CAACM,GAAG,CAAC;;IAElC;IACAT,MAAM,CAACgB,KAAK,CAAC,CAACC,GAAG,CAACC,IAAI,CAACT,GAAG,CAAC;;IAE3B;IACA,MAAME,QAAQ,GAAGT,2BAA2B,CAACO,GAAG,CAAC;IACjDT,MAAM,CAACW,QAAQ,CAAC,CAACC,WAAW,CAAC,CAAC;;IAE9B;IACA;IACA;EACF,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -116,4 +116,7 @@ it("keeps spaces between expressions", () => {
116
116
  }
117
117
  expect(["a ", str, " ", str, " ", _$memo(getStr), " ", _$memo(getStr), " c"]).toRenderTo("a str str getStr getStr c");
118
118
  });
119
+ it("renders numbers", () => {
120
+ expect(["200"]).toRenderTo("200");
121
+ });
119
122
  //# sourceMappingURL=basic.test.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["describe","expect","it","RENDERABLE","str","_$createIntrinsic","toRenderTo","Str","Arr","Nested","_$createComponent","customElement","e1","e2","getStr","Foo","getFoo","getArr","_$memo","Bar","props","children"],"sources":["../../../test/rendering/basic.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["describe","expect","it","RENDERABLE","str","_$createIntrinsic","toRenderTo","Str","Arr","Nested","_$createComponent","customElement","e1","e2","getStr","Foo","getFoo","getArr","_$memo","Bar","props","children"],"sources":["../../../test/rendering/basic.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"print-render-stack.test.d.ts","sourceRoot":"","sources":["../../../test/rendering/print-render-stack.test.tsx"],"names":[],"mappings":"AAKA,OAAO,gCAAgC,CAAC"}
1
+ {"version":3,"file":"print-render-stack.test.d.ts","sourceRoot":"","sources":["../../../test/rendering/print-render-stack.test.tsx"],"names":[],"mappings":"AAcA,OAAO,gCAAgC,CAAC"}
@@ -1,9 +1,10 @@
1
1
  import { createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
2
- import { Output, SourceDirectory, SourceFile } from "@alloy-js/core";
2
+ import { Output, SourceDirectory, SourceFile, renderAsync } from "@alloy-js/core";
3
3
  import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
4
+ import WebSocket from "ws";
4
5
  import { createNamedContext } from "../../src/context.js";
6
+ import { enableDevtools, resetDevtoolsServerForTests } from "../../src/devtools/devtools-server.js";
5
7
  import { clearRenderStack } from "../../src/render-stack.js";
6
- import { renderTree } from "../../src/render.js";
7
8
  import "../../testing/extend-expect.js";
8
9
 
9
10
  // Strip ANSI escape codes from a string for consistent testing across environments
@@ -18,24 +19,28 @@ function expectErrorContaining(spy, substring) {
18
19
  expect(calls.some(msg => msg.includes(substring))).toBe(true);
19
20
  }
20
21
  describe("printRenderStack", () => {
21
- let originalEnv;
22
- beforeEach(() => {
23
- // Enable debug mode
24
- originalEnv = process.env.ALLOY_DEBUG;
25
- process.env.ALLOY_DEBUG = "1";
22
+ let socket;
23
+ beforeEach(async () => {
24
+ const server = await enableDevtools({
25
+ port: 0
26
+ });
27
+ socket = new WebSocket(`ws://127.0.0.1:${server.port}`);
28
+ await new Promise((resolve, reject) => {
29
+ socket?.once("open", resolve);
30
+ socket?.once("error", reject);
31
+ });
26
32
  });
27
- afterEach(() => {
28
- // Restore environment
29
- if (originalEnv === undefined) {
30
- delete process.env.ALLOY_DEBUG;
31
- } else {
32
- process.env.ALLOY_DEBUG = originalEnv;
33
+ afterEach(async () => {
34
+ if (socket) {
35
+ socket.close();
36
+ socket = undefined;
33
37
  }
38
+ await resetDevtoolsServerForTests();
34
39
 
35
40
  // Clear render stack to prevent state leakage between tests
36
41
  clearRenderStack();
37
42
  });
38
- it("prints the current file when an error occurs", () => {
43
+ it("prints the current file when an error occurs", async () => {
39
44
  const consoleErrorSpy = vi.spyOn(console, "error");
40
45
  function ThrowingComponent() {
41
46
  throw new Error("Test error");
@@ -43,19 +48,17 @@ describe("printRenderStack", () => {
43
48
  function ParentComponent() {
44
49
  return _$createComponent(ThrowingComponent, {});
45
50
  }
46
- expect(() => {
47
- renderTree(_$createComponent(Output, {
48
- get children() {
49
- return _$createComponent(SourceFile, {
50
- path: "test.ts",
51
- filetype: "typescript",
52
- get children() {
53
- return _$createComponent(ParentComponent, {});
54
- }
55
- });
56
- }
57
- }));
58
- }).toThrow("Test error");
51
+ await expect(renderAsync(_$createComponent(Output, {
52
+ get children() {
53
+ return _$createComponent(SourceFile, {
54
+ path: "test.ts",
55
+ filetype: "typescript",
56
+ get children() {
57
+ return _$createComponent(ParentComponent, {});
58
+ }
59
+ });
60
+ }
61
+ }))).rejects.toThrow("Test error");
59
62
 
60
63
  // Check that console.error was called with file path
61
64
  expectErrorContaining(consoleErrorSpy, "Error rendering in file test.ts");
@@ -63,40 +66,38 @@ describe("printRenderStack", () => {
63
66
  expectErrorContaining(consoleErrorSpy, "ThrowingComponent");
64
67
  consoleErrorSpy.mockRestore();
65
68
  });
66
- it("prints joined path from nested directories", () => {
69
+ it("prints joined path from nested directories", async () => {
67
70
  const consoleErrorSpy = vi.spyOn(console, "error");
68
71
  function ThrowingComponent() {
69
72
  throw new Error("Nested error");
70
73
  }
71
- expect(() => {
72
- renderTree(_$createComponent(Output, {
73
- get children() {
74
- return _$createComponent(SourceDirectory, {
75
- path: "dir1",
76
- get children() {
77
- return _$createComponent(SourceDirectory, {
78
- path: "dir2",
79
- get children() {
80
- return _$createComponent(SourceFile, {
81
- path: "test.ts",
82
- filetype: "typescript",
83
- get children() {
84
- return _$createComponent(ThrowingComponent, {});
85
- }
86
- });
87
- }
88
- });
89
- }
90
- });
91
- }
92
- }));
93
- }).toThrow("Nested error");
74
+ await expect(renderAsync(_$createComponent(Output, {
75
+ get children() {
76
+ return _$createComponent(SourceDirectory, {
77
+ path: "dir1",
78
+ get children() {
79
+ return _$createComponent(SourceDirectory, {
80
+ path: "dir2",
81
+ get children() {
82
+ return _$createComponent(SourceFile, {
83
+ path: "test.ts",
84
+ filetype: "typescript",
85
+ get children() {
86
+ return _$createComponent(ThrowingComponent, {});
87
+ }
88
+ });
89
+ }
90
+ });
91
+ }
92
+ });
93
+ }
94
+ }))).rejects.toThrow("Nested error");
94
95
 
95
96
  // Should show the joined path of all directories
96
97
  expectErrorContaining(consoleErrorSpy, "Error rendering in file dir1/dir2/test.ts");
97
98
  consoleErrorSpy.mockRestore();
98
99
  });
99
- it("works when no file context is present", () => {
100
+ it("works when no file context is present", async () => {
100
101
  const consoleErrorSpy = vi.spyOn(console, "error");
101
102
  function ThrowingComponent() {
102
103
  throw new Error("No file context error");
@@ -104,13 +105,11 @@ describe("printRenderStack", () => {
104
105
 
105
106
  // Track the number of calls before our test
106
107
  const callsBefore = consoleErrorSpy.mock.calls.length;
107
- expect(() => {
108
- renderTree(_$createComponent(Output, {
109
- get children() {
110
- return _$createComponent(ThrowingComponent, {});
111
- }
112
- }));
113
- }).toThrow("No file context error");
108
+ await expect(renderAsync(_$createComponent(Output, {
109
+ get children() {
110
+ return _$createComponent(ThrowingComponent, {});
111
+ }
112
+ }))).rejects.toThrow("No file context error");
114
113
 
115
114
  // Get only the calls from THIS test (after callsBefore)
116
115
  const callsFromThisTest = consoleErrorSpy.mock.calls.slice(callsBefore);
@@ -121,7 +120,7 @@ describe("printRenderStack", () => {
121
120
  expect(messagesFromThisTest.some(msg => msg && msg.includes("Error rendering in file ./"))).toBe(true);
122
121
  consoleErrorSpy.mockRestore();
123
122
  });
124
- it("includes component stack with props", () => {
123
+ it("includes component stack with props", async () => {
125
124
  const consoleErrorSpy = vi.spyOn(console, "error");
126
125
  function ThrowingComponent(props) {
127
126
  throw new Error("Component error");
@@ -134,21 +133,19 @@ describe("printRenderStack", () => {
134
133
  count: 42
135
134
  });
136
135
  }
137
- expect(() => {
138
- renderTree(_$createComponent(Output, {
139
- get children() {
140
- return _$createComponent(SourceFile, {
141
- path: "props-test.ts",
142
- filetype: "typescript",
143
- get children() {
144
- return _$createComponent(WrapperComponent, {
145
- value: "test"
146
- });
147
- }
148
- });
149
- }
150
- }));
151
- }).toThrow("Component error");
136
+ await expect(renderAsync(_$createComponent(Output, {
137
+ get children() {
138
+ return _$createComponent(SourceFile, {
139
+ path: "props-test.ts",
140
+ filetype: "typescript",
141
+ get children() {
142
+ return _$createComponent(WrapperComponent, {
143
+ value: "test"
144
+ });
145
+ }
146
+ });
147
+ }
148
+ }))).rejects.toThrow("Component error");
152
149
  expectErrorContaining(consoleErrorSpy, "Error rendering in file props-test.ts");
153
150
  expectErrorContaining(consoleErrorSpy, "WrapperComponent");
154
151
  expectErrorContaining(consoleErrorSpy, 'value: "test"');
@@ -156,7 +153,7 @@ describe("printRenderStack", () => {
156
153
  expectErrorContaining(consoleErrorSpy, 'message: "test", count: 42');
157
154
  consoleErrorSpy.mockRestore();
158
155
  });
159
- it("prints 'Error rendering:' when no file or directory context is present", () => {
156
+ it("prints 'Error rendering:' when no file or directory context is present", async () => {
160
157
  const consoleErrorSpy = vi.spyOn(console, "error");
161
158
  function ThrowingComponent() {
162
159
  throw new Error("No context error");
@@ -166,9 +163,7 @@ describe("printRenderStack", () => {
166
163
  const callsBefore = consoleErrorSpy.mock.calls.length;
167
164
 
168
165
  // Don't use Output wrapper to avoid SourceDirectory context
169
- expect(() => {
170
- renderTree(_$createComponent(ThrowingComponent, {}));
171
- }).toThrow();
166
+ await expect(renderAsync(_$createComponent(ThrowingComponent, {}))).rejects.toThrow();
172
167
 
173
168
  // Get only the calls from THIS test (after callsBefore)
174
169
  const callsFromThisTest = consoleErrorSpy.mock.calls.slice(callsBefore);
@@ -180,30 +175,28 @@ describe("printRenderStack", () => {
180
175
  expect(messagesFromThisTest.some(msg => msg && msg.includes("in file"))).toBe(false);
181
176
  consoleErrorSpy.mockRestore();
182
177
  });
183
- it("shows context name for named context providers", () => {
178
+ it("shows context name for named context providers", async () => {
184
179
  const consoleErrorSpy = vi.spyOn(console, "error");
185
180
  const MyContext = createNamedContext("MyContext");
186
181
  function ThrowingComponent() {
187
182
  throw new Error("Context error");
188
183
  }
189
- expect(() => {
190
- renderTree(_$createComponent(Output, {
191
- get children() {
192
- return _$createComponent(SourceFile, {
193
- path: "context-test.ts",
194
- filetype: "typescript",
195
- get children() {
196
- return _$createComponent(MyContext.Provider, {
197
- value: "test-value",
198
- get children() {
199
- return _$createComponent(ThrowingComponent, {});
200
- }
201
- });
202
- }
203
- });
204
- }
205
- }));
206
- }).toThrow("Context error");
184
+ await expect(renderAsync(_$createComponent(Output, {
185
+ get children() {
186
+ return _$createComponent(SourceFile, {
187
+ path: "context-test.ts",
188
+ filetype: "typescript",
189
+ get children() {
190
+ return _$createComponent(MyContext.Provider, {
191
+ value: "test-value",
192
+ get children() {
193
+ return _$createComponent(ThrowingComponent, {});
194
+ }
195
+ });
196
+ }
197
+ });
198
+ }
199
+ }))).rejects.toThrow("Context error");
207
200
 
208
201
  // Check that the named context provider is shown as a separate component
209
202
  expectErrorContaining(consoleErrorSpy, "at MyContext");