@praxisjs/runtime 0.7.1 → 0.8.0

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 (138) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/children.d.ts.map +1 -1
  3. package/dist/children.js +2 -1
  4. package/dist/children.js.map +1 -1
  5. package/dist/component.d.ts +2 -3
  6. package/dist/component.d.ts.map +1 -1
  7. package/dist/component.js +133 -60
  8. package/dist/component.js.map +1 -1
  9. package/dist/context.d.ts +13 -0
  10. package/dist/context.d.ts.map +1 -1
  11. package/dist/context.js +24 -2
  12. package/dist/context.js.map +1 -1
  13. package/dist/dom/constants.d.ts +1 -1
  14. package/dist/dom/constants.d.ts.map +1 -1
  15. package/dist/dom/constants.js +24 -83
  16. package/dist/dom/constants.js.map +1 -1
  17. package/dist/dom/create.d.ts +1 -1
  18. package/dist/dom/create.d.ts.map +1 -1
  19. package/dist/dom/create.js +3 -3
  20. package/dist/dom/create.js.map +1 -1
  21. package/dist/dom/events.d.ts +28 -0
  22. package/dist/dom/events.d.ts.map +1 -1
  23. package/dist/dom/events.js +163 -17
  24. package/dist/dom/events.js.map +1 -1
  25. package/dist/dom/props.d.ts +4 -0
  26. package/dist/dom/props.d.ts.map +1 -1
  27. package/dist/dom/props.js +55 -7
  28. package/dist/dom/props.js.map +1 -1
  29. package/dist/dom/range.d.ts +4 -0
  30. package/dist/dom/range.d.ts.map +1 -0
  31. package/dist/dom/range.js +43 -0
  32. package/dist/dom/range.js.map +1 -0
  33. package/dist/dom/remove.d.ts.map +1 -1
  34. package/dist/dom/remove.js +2 -8
  35. package/dist/dom/remove.js.map +1 -1
  36. package/dist/element.d.ts.map +1 -1
  37. package/dist/element.js +7 -5
  38. package/dist/element.js.map +1 -1
  39. package/dist/hmr.d.ts +35 -0
  40. package/dist/hmr.d.ts.map +1 -0
  41. package/dist/hmr.js +85 -0
  42. package/dist/hmr.js.map +1 -0
  43. package/dist/hydration-context.d.ts +9 -1
  44. package/dist/hydration-context.d.ts.map +1 -1
  45. package/dist/hydration-context.js +34 -13
  46. package/dist/hydration-context.js.map +1 -1
  47. package/dist/hydration.d.ts.map +1 -1
  48. package/dist/hydration.js +4 -11
  49. package/dist/hydration.js.map +1 -1
  50. package/dist/index.d.ts +16 -5
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +31 -7
  53. package/dist/index.js.map +1 -1
  54. package/dist/list.d.ts +72 -0
  55. package/dist/list.d.ts.map +1 -0
  56. package/dist/list.js +786 -0
  57. package/dist/list.js.map +1 -0
  58. package/dist/portal.d.ts.map +1 -1
  59. package/dist/portal.js +3 -0
  60. package/dist/portal.js.map +1 -1
  61. package/dist/reactive.d.ts +2 -2
  62. package/dist/reactive.d.ts.map +1 -1
  63. package/dist/reactive.js +109 -34
  64. package/dist/reactive.js.map +1 -1
  65. package/dist/scope.d.ts +14 -4
  66. package/dist/scope.d.ts.map +1 -1
  67. package/dist/scope.js +55 -15
  68. package/dist/scope.js.map +1 -1
  69. package/dist/template.d.ts +48 -0
  70. package/dist/template.d.ts.map +1 -0
  71. package/dist/template.js +270 -0
  72. package/dist/template.js.map +1 -0
  73. package/package.json +15 -6
  74. package/src/children.ts +2 -1
  75. package/src/component.ts +135 -63
  76. package/src/context.ts +35 -4
  77. package/src/dom/constants.ts +25 -82
  78. package/src/dom/create.ts +3 -3
  79. package/src/dom/events.ts +184 -16
  80. package/src/dom/props.ts +65 -8
  81. package/src/dom/range.ts +45 -0
  82. package/src/dom/remove.ts +3 -7
  83. package/src/element.ts +8 -6
  84. package/src/hmr.ts +110 -0
  85. package/src/hydration-context.ts +34 -13
  86. package/src/hydration.ts +4 -9
  87. package/src/index.ts +54 -7
  88. package/src/list.ts +886 -0
  89. package/src/portal.ts +3 -0
  90. package/src/reactive.ts +147 -40
  91. package/src/scope.ts +63 -16
  92. package/src/template.ts +271 -0
  93. package/dist/__tests__/children.test.d.ts +0 -2
  94. package/dist/__tests__/children.test.d.ts.map +0 -1
  95. package/dist/__tests__/children.test.js +0 -241
  96. package/dist/__tests__/children.test.js.map +0 -1
  97. package/dist/__tests__/component.test.d.ts +0 -2
  98. package/dist/__tests__/component.test.d.ts.map +0 -1
  99. package/dist/__tests__/component.test.js +0 -347
  100. package/dist/__tests__/component.test.js.map +0 -1
  101. package/dist/__tests__/context.test.d.ts +0 -2
  102. package/dist/__tests__/context.test.d.ts.map +0 -1
  103. package/dist/__tests__/context.test.js +0 -111
  104. package/dist/__tests__/context.test.js.map +0 -1
  105. package/dist/__tests__/dom.test.d.ts +0 -2
  106. package/dist/__tests__/dom.test.d.ts.map +0 -1
  107. package/dist/__tests__/dom.test.js +0 -429
  108. package/dist/__tests__/dom.test.js.map +0 -1
  109. package/dist/__tests__/hydration.test.d.ts +0 -2
  110. package/dist/__tests__/hydration.test.d.ts.map +0 -1
  111. package/dist/__tests__/hydration.test.js +0 -299
  112. package/dist/__tests__/hydration.test.js.map +0 -1
  113. package/dist/__tests__/portal.test.d.ts +0 -2
  114. package/dist/__tests__/portal.test.d.ts.map +0 -1
  115. package/dist/__tests__/portal.test.js +0 -157
  116. package/dist/__tests__/portal.test.js.map +0 -1
  117. package/dist/__tests__/remove.test.d.ts +0 -2
  118. package/dist/__tests__/remove.test.d.ts.map +0 -1
  119. package/dist/__tests__/remove.test.js +0 -45
  120. package/dist/__tests__/remove.test.js.map +0 -1
  121. package/dist/__tests__/render.test.d.ts +0 -2
  122. package/dist/__tests__/render.test.d.ts.map +0 -1
  123. package/dist/__tests__/render.test.js +0 -97
  124. package/dist/__tests__/render.test.js.map +0 -1
  125. package/dist/__tests__/scope.test.d.ts +0 -2
  126. package/dist/__tests__/scope.test.d.ts.map +0 -1
  127. package/dist/__tests__/scope.test.js +0 -110
  128. package/dist/__tests__/scope.test.js.map +0 -1
  129. package/src/__tests__/children.test.ts +0 -276
  130. package/src/__tests__/component.test.ts +0 -381
  131. package/src/__tests__/context.test.ts +0 -128
  132. package/src/__tests__/dom.test.ts +0 -483
  133. package/src/__tests__/hydration.test.ts +0 -360
  134. package/src/__tests__/portal.test.ts +0 -177
  135. package/src/__tests__/remove.test.ts +0 -51
  136. package/src/__tests__/render.test.ts +0 -119
  137. package/src/__tests__/scope.test.ts +0 -120
  138. package/tsconfig.json +0 -8
@@ -1,241 +0,0 @@
1
- // @vitest-environment jsdom
2
- import { describe, it, expect } from "vitest";
3
- import { signal } from "@praxisjs/core/internal";
4
- import { mountChildren } from "../children";
5
- import { getCurrentScope } from "../context";
6
- import { mountReactive } from "../reactive";
7
- import { Scope } from "../scope";
8
- function container() {
9
- return document.createElement("div");
10
- }
11
- describe("mountChildren", () => {
12
- it("does nothing for null, undefined, or false", () => {
13
- const el = container();
14
- const scope = new Scope();
15
- mountChildren(el, null, scope);
16
- mountChildren(el, undefined, scope);
17
- mountChildren(el, false, scope);
18
- expect(el.childNodes.length).toBe(0);
19
- });
20
- it("appends a text node for a string", () => {
21
- const el = container();
22
- const scope = new Scope();
23
- mountChildren(el, "hello", scope);
24
- expect(el.textContent).toBe("hello");
25
- });
26
- it("appends a text node for a number", () => {
27
- const el = container();
28
- const scope = new Scope();
29
- mountChildren(el, 42, scope);
30
- expect(el.textContent).toBe("42");
31
- });
32
- it("appends a DOM node directly", () => {
33
- const el = container();
34
- const scope = new Scope();
35
- const span = document.createElement("span");
36
- mountChildren(el, span, scope);
37
- expect(el.firstChild).toBe(span);
38
- });
39
- it("recursively mounts arrays", () => {
40
- const el = container();
41
- const scope = new Scope();
42
- mountChildren(el, ["a", "b", "c"], scope);
43
- expect(el.textContent).toBe("abc");
44
- });
45
- it("mounts a reactive function — updates when signal changes", () => {
46
- const el = container();
47
- const scope = new Scope();
48
- const s = signal("first");
49
- mountChildren(el, () => s(), scope);
50
- expect(el.textContent).toBe("first");
51
- s.set("second");
52
- expect(el.textContent).toBe("second");
53
- scope.dispose();
54
- });
55
- it("reactive children clean up old nodes on update", () => {
56
- const el = container();
57
- const scope = new Scope();
58
- const s = signal("visible");
59
- mountChildren(el, () => s(), scope);
60
- expect(el.textContent).toBe("visible");
61
- s.set(null);
62
- expect(el.textContent).toBe("");
63
- scope.dispose();
64
- });
65
- it("reactive function returning an array of nodes renders all of them", () => {
66
- const el = container();
67
- const scope = new Scope();
68
- mountChildren(el, () => ["x", "y", "z"], scope);
69
- expect(el.textContent).toBe("xyz");
70
- scope.dispose();
71
- });
72
- it("reactive function returning a Node renders it", () => {
73
- const el = container();
74
- const scope = new Scope();
75
- const node = document.createElement("em");
76
- node.textContent = "em";
77
- mountChildren(el, () => node, scope);
78
- expect(el.textContent).toBe("em");
79
- scope.dispose();
80
- });
81
- it("reactive function returning a number renders it", () => {
82
- const el = container();
83
- const scope = new Scope();
84
- mountChildren(el, () => 42, scope);
85
- expect(el.textContent).toBe("42");
86
- scope.dispose();
87
- });
88
- it("reactive function returning an unrecognized type renders nothing", () => {
89
- const el = container();
90
- const scope = new Scope();
91
- mountChildren(el, () => ({ unknown: "object" }), scope);
92
- expect(el.textContent).toBe(""); // normalizeToNodes returns [] for unknown types
93
- scope.dispose();
94
- });
95
- it("deeply nested arrays [[[[\"text\"]]]] — all values flattened", () => {
96
- const el = container();
97
- const scope = new Scope();
98
- mountChildren(el, [[[["deep"]]]], scope);
99
- expect(el.textContent).toBe("deep");
100
- scope.dispose();
101
- });
102
- it("mixed content [\"text\", 42, null, false, domNode, () => \"reactive\"] — each handled correctly", () => {
103
- const el = container();
104
- const scope = new Scope();
105
- const span = document.createElement("span");
106
- span.textContent = "node";
107
- mountChildren(el, ["text", 42, null, false, span, () => "reactive"], scope);
108
- // "text", "42", span ("node"), "reactive" — null and false are skipped
109
- expect(el.textContent).toBe("text42nodereactive");
110
- scope.dispose();
111
- });
112
- it("reactive function that changes return type (string → array → null) — old nodes cleaned up", () => {
113
- const el = container();
114
- const scope = new Scope();
115
- const s = signal("hello");
116
- mountChildren(el, () => s(), scope);
117
- expect(el.textContent).toBe("hello");
118
- s.set(["a", "b"]);
119
- expect(el.textContent).toBe("ab");
120
- s.set(null);
121
- expect(el.textContent).toBe("");
122
- scope.dispose();
123
- });
124
- it("disposes only the active reactive child scope on parent dispose", () => {
125
- const el = container();
126
- const scope = new Scope();
127
- const s = signal("first");
128
- const cleanups = [];
129
- mountChildren(el, () => {
130
- const value = s();
131
- getCurrentScope().add(() => cleanups.push(value));
132
- return value;
133
- }, scope);
134
- s.set("second");
135
- expect(cleanups).toEqual(["first"]);
136
- scope.dispose();
137
- expect(cleanups).toEqual(["first", "second"]);
138
- });
139
- it("non-array object passed directly — falls through and mounts nothing", () => {
140
- const el = container();
141
- const scope = new Scope();
142
- mountChildren(el, { some: "object" }, scope);
143
- expect(el.childNodes.length).toBe(0);
144
- });
145
- it("same Node instance passed twice — second append moves the node (not duplicated)", () => {
146
- const el = container();
147
- const scope = new Scope();
148
- const node = document.createElement("span");
149
- node.textContent = "x";
150
- mountChildren(el, [node, node], scope);
151
- // DOM spec: inserting an already-inserted node moves it, so there's only one instance
152
- expect(el.querySelectorAll("span").length).toBe(1);
153
- scope.dispose();
154
- });
155
- it("reactive function returning null after returning content — content is removed", () => {
156
- const el = container();
157
- const scope = new Scope();
158
- const s = signal("visible");
159
- mountChildren(el, () => s(), scope);
160
- expect(el.textContent).toBe("visible");
161
- s.set(null);
162
- expect(el.textContent).toBe("");
163
- scope.dispose();
164
- });
165
- });
166
- // ── mountReactive (direct) ────────────────────────────────────────────────────
167
- describe("mountReactive", () => {
168
- it("falls back to parent as anchor when the end comment is detached (parentNode ?? parent branch)", () => {
169
- const parent = document.createElement("div");
170
- document.body.appendChild(parent);
171
- const scope = new Scope();
172
- const s = signal(0);
173
- // fn reads s (subscribes) but always returns null → never creates DOM nodes
174
- mountReactive(parent, () => { s(); return null; }, scope);
175
- // Remove the end-anchor comment so end.parentNode becomes null
176
- const endComment = Array.from(parent.childNodes).find((n) => n.nodeType === Node.COMMENT_NODE);
177
- expect(endComment).toBeDefined();
178
- parent.removeChild(endComment);
179
- // Trigger re-run: s was 0, now 1 → Object.is differs → effect fires
180
- // end.parentNode === null → anchor = null ?? parent = parent (the ?? branch)
181
- // currentNodes = [], newNodes = [] → no remove/insert, no crash
182
- expect(() => s.set(1)).not.toThrow();
183
- scope.dispose();
184
- document.body.removeChild(parent);
185
- });
186
- });
187
- describe("fine-grained rows", () => {
188
- function setup() {
189
- const ids = signal([1, 2]);
190
- const titles = signal({ 1: "a", 2: "b" });
191
- let listRuns = 0;
192
- const ul = container();
193
- const scope = new Scope();
194
- mountChildren(ul, () => {
195
- listRuns++;
196
- return ids().map((id) => {
197
- const li = document.createElement("li");
198
- mountChildren(li, () => titles()[id], scope);
199
- return li;
200
- });
201
- }, scope);
202
- return { ids, titles, ul, scope, runs: () => listRuns };
203
- }
204
- it("changing row content updates text in place without re-running the list function", () => {
205
- const { titles, ul, scope, runs } = setup();
206
- const rows = [...ul.querySelectorAll("li")];
207
- titles.set({ 1: "A", 2: "b" });
208
- expect(runs()).toBe(1);
209
- expect([...ul.querySelectorAll("li")]).toEqual(rows);
210
- expect(rows.map((r) => r.textContent)).toEqual(["A", "b"]);
211
- scope.dispose();
212
- });
213
- it("changing the structure rebuilds the list", () => {
214
- const { ids, titles, ul, scope, runs } = setup();
215
- titles.set({ 1: "a", 2: "b", 3: "c" });
216
- ids.set([1, 2, 3]);
217
- expect(runs()).toBe(2);
218
- expect(ul.querySelectorAll("li")).toHaveLength(3);
219
- scope.dispose();
220
- });
221
- });
222
- describe("mountReactive multi-node replacement", () => {
223
- it("removes nodes that were inserted between the tracked ones after mount", () => {
224
- const toggle = signal(0);
225
- const parent = container();
226
- const scope = new Scope();
227
- let a;
228
- mountChildren(parent, () => {
229
- void toggle();
230
- a = document.createElement("a");
231
- return [a, document.createElement("b")];
232
- }, scope);
233
- const stray = document.createElement("stray");
234
- parent.insertBefore(stray, a.nextSibling);
235
- toggle.set(1);
236
- expect(parent.contains(stray)).toBe(false);
237
- expect([...parent.children].map((c) => c.localName)).toEqual(["a", "b"]);
238
- scope.dispose();
239
- });
240
- });
241
- //# sourceMappingURL=children.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"children.test.js","sourceRoot":"","sources":["../../src/__tests__/children.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=component.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"component.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/component.test.ts"],"names":[],"mappings":""}
@@ -1,347 +0,0 @@
1
- // @vitest-environment jsdom
2
- import { describe, it, expect, vi, afterEach } from "vitest";
3
- import { StatefulComponent } from "@praxisjs/core";
4
- import { getComponentProps } from "@praxisjs/core/internal";
5
- import { mountComponent } from "../component";
6
- import { getCurrentScope } from "../context";
7
- import { mountElement } from "../element";
8
- import { Scope } from "../scope";
9
- class SimpleComp extends StatefulComponent {
10
- static __isComponent = true;
11
- static __isStateless = false;
12
- render() {
13
- return document.createTextNode("hello");
14
- }
15
- }
16
- class NullComp extends StatefulComponent {
17
- static __isComponent = true;
18
- static __isStateless = false;
19
- render() { return null; }
20
- }
21
- class MultiComp extends StatefulComponent {
22
- static __isComponent = true;
23
- static __isStateless = false;
24
- render() {
25
- return [
26
- document.createTextNode("a"),
27
- document.createTextNode("b"),
28
- ];
29
- }
30
- }
31
- class ErrorComp extends StatefulComponent {
32
- static __isComponent = true;
33
- static __isStateless = false;
34
- onError(_err) { }
35
- render() {
36
- throw new Error("render error");
37
- }
38
- }
39
- class NonErrorThrowComp extends StatefulComponent {
40
- static __isComponent = true;
41
- static __isStateless = false;
42
- onError(_err) { }
43
- render() {
44
- // eslint-disable-next-line @typescript-eslint/only-throw-error
45
- throw "string render error";
46
- }
47
- }
48
- class LifecycleComp extends StatefulComponent {
49
- static __isComponent = true;
50
- static __isStateless = false;
51
- onBeforeMount() { }
52
- onMount() { }
53
- onUnmount() { }
54
- render() { return null; }
55
- }
56
- describe("mountComponent", () => {
57
- it("returns an array of nodes", () => {
58
- const scope = new Scope();
59
- const nodes = mountComponent(SimpleComp, {}, scope);
60
- expect(Array.isArray(nodes)).toBe(true);
61
- expect(nodes.length).toBeGreaterThan(0);
62
- scope.dispose();
63
- });
64
- it("wraps output with start/end comment anchors", () => {
65
- const scope = new Scope();
66
- const nodes = mountComponent(SimpleComp, {}, scope);
67
- expect(nodes[0].nodeType).toBe(Node.COMMENT_NODE);
68
- expect(nodes[nodes.length - 1].nodeType).toBe(Node.COMMENT_NODE);
69
- scope.dispose();
70
- });
71
- it("mounts the rendered content between comments", () => {
72
- const scope = new Scope();
73
- const container = document.createElement("div");
74
- const nodes = mountComponent(SimpleComp, {}, scope);
75
- nodes.forEach((n) => container.appendChild(n));
76
- expect(container.textContent).toContain("hello");
77
- scope.dispose();
78
- });
79
- it("calls onBeforeMount before render", () => {
80
- const scope = new Scope();
81
- const order = [];
82
- class OrderComp extends StatefulComponent {
83
- static __isComponent = true;
84
- static __isStateless = false;
85
- onBeforeMount() { order.push("before"); }
86
- render() {
87
- order.push("render");
88
- return null;
89
- }
90
- }
91
- mountComponent(OrderComp, {}, scope);
92
- expect(order).toEqual(["before", "render"]);
93
- scope.dispose();
94
- });
95
- it("calls onMount asynchronously after mount", async () => {
96
- const scope = new Scope();
97
- const onMount = vi.spyOn(LifecycleComp.prototype, "onMount");
98
- mountComponent(LifecycleComp, {}, scope);
99
- expect(onMount).not.toHaveBeenCalled(); // not called synchronously
100
- await Promise.resolve(); // flush microtask
101
- expect(onMount).toHaveBeenCalled();
102
- onMount.mockRestore();
103
- scope.dispose();
104
- });
105
- it("calls onUnmount when scope is disposed", async () => {
106
- const scope = new Scope();
107
- const onUnmount = vi.spyOn(LifecycleComp.prototype, "onUnmount");
108
- mountComponent(LifecycleComp, {}, scope);
109
- await Promise.resolve();
110
- scope.dispose();
111
- expect(onUnmount).toHaveBeenCalled();
112
- onUnmount.mockRestore();
113
- });
114
- it("calls onError when render throws", () => {
115
- const scope = new Scope();
116
- const onError = vi.spyOn(ErrorComp.prototype, "onError");
117
- mountComponent(ErrorComp, {}, scope);
118
- expect(onError).toHaveBeenCalledWith(expect.any(Error));
119
- onError.mockRestore();
120
- scope.dispose();
121
- });
122
- it("wraps non-Error throws in Error before passing to onError", () => {
123
- const scope = new Scope();
124
- const onError = vi.spyOn(NonErrorThrowComp.prototype, "onError");
125
- mountComponent(NonErrorThrowComp, {}, scope);
126
- expect(onError).toHaveBeenCalledWith(expect.any(Error));
127
- expect(onError.mock.calls[0][0].message).toBe("string render error");
128
- onError.mockRestore();
129
- scope.dispose();
130
- });
131
- it("passes props to the component instance", () => {
132
- let receivedProp;
133
- class PropsComp extends StatefulComponent {
134
- static __isComponent = true;
135
- static __isStateless = false;
136
- render() {
137
- receivedProp = getComponentProps(this).msg;
138
- return null;
139
- }
140
- }
141
- const scope = new Scope();
142
- mountComponent(PropsComp, { msg: "hello" }, scope);
143
- expect(receivedProp).toBe("hello");
144
- scope.dispose();
145
- });
146
- it("mounts array of children", () => {
147
- const scope = new Scope();
148
- const container = document.createElement("div");
149
- const nodes = mountComponent(MultiComp, {}, scope);
150
- nodes.forEach((n) => container.appendChild(n));
151
- expect(container.textContent).toBe("ab");
152
- scope.dispose();
153
- });
154
- it("onError handler that itself throws — outer error propagates", () => {
155
- class ThrowingErrorComp extends StatefulComponent {
156
- static __isComponent = true;
157
- static __isStateless = false;
158
- onError(_err) {
159
- throw new Error("onError also throws");
160
- }
161
- render() {
162
- throw new Error("render error");
163
- }
164
- }
165
- const scope = new Scope();
166
- expect(() => mountComponent(ThrowingErrorComp, {}, scope)).toThrow("onError also throws");
167
- scope.dispose();
168
- });
169
- it("onError returning a Node mounts it as fallback UI", () => {
170
- class FallbackComp extends StatefulComponent {
171
- static __isComponent = true;
172
- static __isStateless = false;
173
- onError(_err) {
174
- const p = document.createElement("p");
175
- p.textContent = "error boundary";
176
- return p;
177
- }
178
- render() {
179
- throw new Error("render error");
180
- }
181
- }
182
- const scope = new Scope();
183
- const container = document.createElement("div");
184
- const nodes = mountComponent(FallbackComp, {}, scope);
185
- nodes.forEach((n) => container.appendChild(n));
186
- expect(container.querySelector("p")?.textContent).toBe("error boundary");
187
- scope.dispose();
188
- });
189
- it("onError returning null renders nothing as fallback", () => {
190
- class NullFallbackComp extends StatefulComponent {
191
- static __isComponent = true;
192
- static __isStateless = false;
193
- onError(_err) {
194
- return null;
195
- }
196
- render() {
197
- throw new Error("render error");
198
- }
199
- }
200
- const scope = new Scope();
201
- const container = document.createElement("div");
202
- const nodes = mountComponent(NullFallbackComp, {}, scope);
203
- nodes.forEach((n) => container.appendChild(n));
204
- expect(container.textContent).toBe("");
205
- scope.dispose();
206
- });
207
- it("skips onMount and instance ref when disposed before the mount microtask", async () => {
208
- class MountAfterDisposeComp extends StatefulComponent {
209
- static __isComponent = true;
210
- static __isStateless = false;
211
- onMount() { }
212
- render() { return null; }
213
- }
214
- const scope = new Scope();
215
- const onMount = vi.spyOn(MountAfterDisposeComp.prototype, "onMount");
216
- const refs = [];
217
- mountComponent(MountAfterDisposeComp, { ref: (inst) => { refs.push(inst); } }, scope);
218
- scope.dispose(); // dispose before microtask flushes
219
- await Promise.resolve(); // flush microtask
220
- expect(onMount).not.toHaveBeenCalled();
221
- expect(refs).toEqual([null]);
222
- onMount.mockRestore();
223
- });
224
- it("ref callback receives the instance after onMount", async () => {
225
- const scope = new Scope();
226
- const refs = [];
227
- const nodes = mountComponent(LifecycleComp, { ref: (inst) => { refs.push(inst); } }, scope);
228
- expect(refs).toHaveLength(0); // not called synchronously
229
- await Promise.resolve();
230
- expect(refs).toHaveLength(1);
231
- expect(refs[0]).toBeInstanceOf(LifecycleComp);
232
- nodes.length; // suppress unused warning
233
- scope.dispose();
234
- });
235
- it("ref callback is called with null on unmount", async () => {
236
- const scope = new Scope();
237
- const refs = [];
238
- mountComponent(LifecycleComp, { ref: (inst) => { refs.push(inst); } }, scope);
239
- await Promise.resolve();
240
- scope.dispose();
241
- expect(refs).toEqual([expect.any(LifecycleComp), null]);
242
- });
243
- it("ref is not forwarded to component props", () => {
244
- let seenRef = "not-checked";
245
- class RefCheckComp extends StatefulComponent {
246
- static __isComponent = true;
247
- static __isStateless = false;
248
- render() {
249
- seenRef = getComponentProps(this).ref;
250
- return null;
251
- }
252
- }
253
- const scope = new Scope();
254
- const refFn = () => { };
255
- mountComponent(RefCheckComp, { ref: refFn }, scope);
256
- expect(seenRef).toBeUndefined();
257
- scope.dispose();
258
- });
259
- it("component with no render() method — error reaches onError handler", () => {
260
- let caughtError;
261
- class NoRenderComp extends StatefulComponent {
262
- static __isComponent = true;
263
- static __isStateless = false;
264
- onError(err) { caughtError = err; }
265
- render() { throw new TypeError("render is not implemented"); }
266
- }
267
- const scope = new Scope();
268
- // mountComponent catches the TypeError and routes it through onError
269
- expect(() => mountComponent(NoRenderComp, {}, scope)).not.toThrow();
270
- expect(caughtError).toBeInstanceOf(Error);
271
- scope.dispose();
272
- });
273
- });
274
- describe("mountComponent onMount scheduling", () => {
275
- afterEach(() => {
276
- vi.unstubAllGlobals();
277
- });
278
- function stubMicrotasks() {
279
- const jobs = [];
280
- vi.stubGlobal("queueMicrotask", (fn) => { jobs.push(fn); });
281
- return jobs;
282
- }
283
- function lifecycleComp(onMount) {
284
- return class extends StatefulComponent {
285
- static __isComponent = true;
286
- static __isStateless = false;
287
- onMount() { onMount(); }
288
- render() { return null; }
289
- };
290
- }
291
- it("drains every component mounted in the same pass with a single microtask, in mount order", () => {
292
- const jobs = stubMicrotasks();
293
- const order = [];
294
- const scope = new Scope();
295
- mountComponent(lifecycleComp(() => order.push("a")), {}, scope);
296
- mountComponent(lifecycleComp(() => order.push("b")), {}, scope);
297
- expect(jobs).toHaveLength(1);
298
- jobs.shift()?.();
299
- expect(order).toEqual(["a", "b"]);
300
- });
301
- it("schedules a new microtask for components mounted after a drain", () => {
302
- const jobs = stubMicrotasks();
303
- const onMount = vi.fn();
304
- const scope = new Scope();
305
- mountComponent(lifecycleComp(onMount), {}, scope);
306
- jobs.shift()?.();
307
- mountComponent(lifecycleComp(onMount), {}, scope);
308
- expect(jobs).toHaveLength(1);
309
- jobs.shift()?.();
310
- expect(onMount).toHaveBeenCalledTimes(2);
311
- });
312
- it("a throwing onMount does not stop the others and is rethrown on its own microtask", () => {
313
- const jobs = stubMicrotasks();
314
- const second = vi.fn();
315
- const scope = new Scope();
316
- mountComponent(lifecycleComp(() => { throw new Error("mount boom"); }), {}, scope);
317
- mountComponent(lifecycleComp(second), {}, scope);
318
- jobs.shift()?.();
319
- expect(second).toHaveBeenCalledOnce();
320
- expect(jobs).toHaveLength(1);
321
- expect(() => { jobs.shift()?.(); }).toThrow("mount boom");
322
- });
323
- it("skips onMount for a component disposed before the drain", () => {
324
- const jobs = stubMicrotasks();
325
- const onMount = vi.fn();
326
- const scope = new Scope();
327
- mountComponent(lifecycleComp(onMount), {}, scope);
328
- scope.dispose();
329
- jobs.shift()?.();
330
- expect(onMount).not.toHaveBeenCalled();
331
- });
332
- });
333
- describe("mountComponent with optional event handlers", () => {
334
- class OptionalHandlers extends StatefulComponent {
335
- static __isComponent = true;
336
- static __isStateless = false;
337
- render() {
338
- return mountElement("form", { onSubmit: undefined, onClick: null, children: "content" }, getCurrentScope());
339
- }
340
- }
341
- it("renders the element instead of failing when a forwarded handler is not provided", () => {
342
- const nodes = mountComponent(OptionalHandlers, {}, new Scope());
343
- const form = nodes.find((n) => n instanceof HTMLFormElement);
344
- expect(form?.textContent).toBe("content");
345
- });
346
- });
347
- //# sourceMappingURL=component.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"component.test.js","sourceRoot":"","sources":["../../src/__tests__/component.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=context.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/context.test.ts"],"names":[],"mappings":""}