fibrae 0.2.2 → 0.3.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.
- package/dist/cli/build.d.ts +34 -0
- package/dist/cli/build.js +92 -0
- package/dist/cli/build.js.map +1 -0
- package/dist/cli/cli.d.ts +10 -0
- package/dist/cli/cli.js +43 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/config.d.ts +19 -0
- package/dist/cli/config.js +5 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/html.d.ts +13 -0
- package/dist/cli/html.js +101 -0
- package/dist/cli/html.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/vite-plugin.d.ts +9 -0
- package/dist/cli/vite-plugin.js +143 -0
- package/dist/cli/vite-plugin.js.map +1 -0
- package/dist/components.d.ts +27 -29
- package/dist/components.js +32 -52
- package/dist/components.js.map +1 -1
- package/dist/core.js +7 -10
- package/dist/core.js.map +1 -1
- package/dist/dom.d.ts +13 -4
- package/dist/dom.js +91 -26
- package/dist/dom.js.map +1 -1
- package/dist/fiber-boundary.d.ts +39 -0
- package/dist/fiber-boundary.js +151 -0
- package/dist/fiber-boundary.js.map +1 -0
- package/dist/fiber-commit.d.ts +27 -0
- package/dist/fiber-commit.js +243 -0
- package/dist/fiber-commit.js.map +1 -0
- package/dist/fiber-render.d.ts +9 -9
- package/dist/fiber-render.js +165 -958
- package/dist/fiber-render.js.map +1 -1
- package/dist/fiber-tree.d.ts +77 -0
- package/dist/fiber-tree.js +152 -0
- package/dist/fiber-tree.js.map +1 -0
- package/dist/fiber-update.d.ts +46 -0
- package/dist/fiber-update.js +515 -0
- package/dist/fiber-update.js.map +1 -0
- package/dist/h.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/jsx-runtime/index.d.ts +253 -2
- package/dist/live/atom.d.ts +31 -0
- package/dist/live/atom.js +33 -0
- package/dist/live/atom.js.map +1 -0
- package/dist/live/client.d.ts +50 -0
- package/dist/live/client.js +90 -0
- package/dist/live/client.js.map +1 -0
- package/dist/live/codec.d.ts +39 -0
- package/dist/live/codec.js +41 -0
- package/dist/live/codec.js.map +1 -0
- package/dist/live/config.d.ts +13 -0
- package/dist/live/config.js +11 -0
- package/dist/live/config.js.map +1 -0
- package/dist/live/index.d.ts +25 -0
- package/dist/live/index.js +19 -0
- package/dist/live/index.js.map +1 -0
- package/dist/live/server.d.ts +83 -0
- package/dist/live/server.js +106 -0
- package/dist/live/server.js.map +1 -0
- package/dist/live/sse-stream.d.ts +14 -0
- package/dist/live/sse-stream.js +30 -0
- package/dist/live/sse-stream.js.map +1 -0
- package/dist/live/types.d.ts +40 -0
- package/dist/live/types.js +20 -0
- package/dist/live/types.js.map +1 -0
- package/dist/router/History.d.ts +2 -2
- package/dist/router/History.js.map +1 -1
- package/dist/router/Link.d.ts +8 -4
- package/dist/router/Link.js +13 -34
- package/dist/router/Link.js.map +1 -1
- package/dist/router/Navigator.d.ts +12 -1
- package/dist/router/Navigator.js +31 -68
- package/dist/router/Navigator.js.map +1 -1
- package/dist/router/Route.d.ts +16 -3
- package/dist/router/Route.js +32 -25
- package/dist/router/Route.js.map +1 -1
- package/dist/router/Router.d.ts +27 -19
- package/dist/router/Router.js +78 -101
- package/dist/router/Router.js.map +1 -1
- package/dist/router/RouterBuilder.d.ts +106 -34
- package/dist/router/RouterBuilder.js +78 -39
- package/dist/router/RouterBuilder.js.map +1 -1
- package/dist/router/RouterOutlet.d.ts +1 -18
- package/dist/router/RouterOutlet.js +25 -8
- package/dist/router/RouterOutlet.js.map +1 -1
- package/dist/router/RouterState.d.ts +1 -1
- package/dist/router/index.d.ts +4 -4
- package/dist/router/index.js +4 -2
- package/dist/router/index.js.map +1 -1
- package/dist/router/utils.d.ts +36 -0
- package/dist/router/utils.js +48 -0
- package/dist/router/utils.js.map +1 -0
- package/dist/runtime.d.ts +10 -7
- package/dist/runtime.js +20 -2
- package/dist/runtime.js.map +1 -1
- package/dist/server.d.ts +2 -2
- package/dist/server.js +15 -29
- package/dist/server.js.map +1 -1
- package/dist/shared.d.ts +58 -59
- package/dist/shared.js +51 -13
- package/dist/shared.js.map +1 -1
- package/dist/tracking.d.ts +4 -3
- package/dist/tracking.js +6 -1
- package/dist/tracking.js.map +1 -1
- package/package.json +32 -7
- package/dist/hydration.d.ts +0 -30
- package/dist/hydration.js +0 -355
- package/dist/hydration.js.map +0 -1
- package/dist/render.d.ts +0 -19
- package/dist/render.js +0 -285
- package/dist/render.js.map +0 -1
- package/dist/scope-utils.d.ts +0 -14
- package/dist/scope-utils.js +0 -29
- package/dist/scope-utils.js.map +0 -1
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fiber commit phase — DOM mutations.
|
|
3
|
+
*
|
|
4
|
+
* This module contains the commit phase of the fiber reconciler: creating and
|
|
5
|
+
* updating real DOM nodes, processing deletions, and walking the fiber tree
|
|
6
|
+
* to apply placement/update/deletion effect tags to the DOM.
|
|
7
|
+
*
|
|
8
|
+
* Extracted from fiber-render.ts.
|
|
9
|
+
*/
|
|
10
|
+
import * as Effect from "effect/Effect";
|
|
11
|
+
import * as Option from "effect/Option";
|
|
12
|
+
import * as Scope from "effect/Scope";
|
|
13
|
+
import * as Ref from "effect/Ref";
|
|
14
|
+
import * as Exit from "effect/Exit";
|
|
15
|
+
import * as Deferred from "effect/Deferred";
|
|
16
|
+
import { isEvent, isProperty } from "./shared.js";
|
|
17
|
+
import { FibraeRuntime } from "./runtime.js";
|
|
18
|
+
import { setDomProperty, createEventWrapper } from "./dom.js";
|
|
19
|
+
import { findDomParent } from "./fiber-tree.js";
|
|
20
|
+
import { handleFiberError } from "./fiber-boundary.js";
|
|
21
|
+
// =============================================================================
|
|
22
|
+
// Create DOM
|
|
23
|
+
// =============================================================================
|
|
24
|
+
export const createDom = (fiber, runtime) => Effect.gen(function* () {
|
|
25
|
+
const dom = yield* Option.match(fiber.type, {
|
|
26
|
+
onNone: () => Effect.die("createDom called with no type"),
|
|
27
|
+
onSome: (type) => {
|
|
28
|
+
if (typeof type !== "string") {
|
|
29
|
+
return Effect.die("createDom called on function component");
|
|
30
|
+
}
|
|
31
|
+
const node = type === "TEXT_ELEMENT" ? document.createTextNode("") : document.createElement(type);
|
|
32
|
+
return Effect.succeed(node);
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
yield* updateDom(dom, {}, fiber.props, fiber, runtime);
|
|
36
|
+
// Handle ref
|
|
37
|
+
const ref = fiber.props.ref;
|
|
38
|
+
if (ref && typeof ref === "object" && "current" in ref) {
|
|
39
|
+
ref.current = dom;
|
|
40
|
+
}
|
|
41
|
+
return dom;
|
|
42
|
+
});
|
|
43
|
+
// =============================================================================
|
|
44
|
+
// Update DOM
|
|
45
|
+
// =============================================================================
|
|
46
|
+
export const isNew = (prev, next) => (key) => prev[key] !== next[key];
|
|
47
|
+
export const updateDom = (dom, prevProps, nextProps, ownerFiber, runtime) => Effect.gen(function* () {
|
|
48
|
+
const stateRef = runtime.fiberState;
|
|
49
|
+
const element = dom;
|
|
50
|
+
if (element instanceof Text) {
|
|
51
|
+
if (nextProps.nodeValue !== prevProps.nodeValue) {
|
|
52
|
+
const value = nextProps.nodeValue;
|
|
53
|
+
element.nodeValue =
|
|
54
|
+
typeof value === "string" || typeof value === "number" ? String(value) : "";
|
|
55
|
+
}
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const stateSnapshot = yield* Ref.get(stateRef);
|
|
59
|
+
const el = element;
|
|
60
|
+
const stored = stateSnapshot.listenerStore.get(el) ?? {};
|
|
61
|
+
// Remove old event listeners
|
|
62
|
+
const eventsToRemove = Object.keys(prevProps)
|
|
63
|
+
.filter(isEvent)
|
|
64
|
+
.filter((key) => !(key in nextProps) || isNew(prevProps, nextProps)(key));
|
|
65
|
+
eventsToRemove.forEach((name) => {
|
|
66
|
+
const eventType = name.toLowerCase().substring(2);
|
|
67
|
+
const wrapper = stored[eventType];
|
|
68
|
+
if (wrapper) {
|
|
69
|
+
el.removeEventListener(eventType, wrapper);
|
|
70
|
+
delete stored[eventType];
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
// Remove properties that were in prevProps but not in nextProps
|
|
74
|
+
Object.keys(prevProps)
|
|
75
|
+
.filter(isProperty)
|
|
76
|
+
.filter((key) => !(key in nextProps))
|
|
77
|
+
.forEach((name) => {
|
|
78
|
+
if (el instanceof HTMLElement) {
|
|
79
|
+
setDomProperty(el, name, null);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
// Handle dangerouslySetInnerHTML
|
|
83
|
+
if (nextProps.dangerouslySetInnerHTML != null) {
|
|
84
|
+
if (el instanceof HTMLElement &&
|
|
85
|
+
nextProps.dangerouslySetInnerHTML !== prevProps.dangerouslySetInnerHTML) {
|
|
86
|
+
el.innerHTML = String(nextProps.dangerouslySetInnerHTML);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Update changed properties
|
|
90
|
+
Object.keys(nextProps)
|
|
91
|
+
.filter(isProperty)
|
|
92
|
+
.filter(isNew(prevProps, nextProps))
|
|
93
|
+
.forEach((name) => {
|
|
94
|
+
if (el instanceof HTMLElement) {
|
|
95
|
+
setDomProperty(el, name, nextProps[name]);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
// Add new event listeners
|
|
99
|
+
Object.keys(nextProps)
|
|
100
|
+
.filter(isEvent)
|
|
101
|
+
.filter(isNew(prevProps, nextProps))
|
|
102
|
+
.forEach((name) => {
|
|
103
|
+
const eventType = name.toLowerCase().substring(2);
|
|
104
|
+
const handler = nextProps[name];
|
|
105
|
+
const wrapper = createEventWrapper(handler, eventType, runtime, ownerFiber ? (error) => handleFiberError(ownerFiber, error) : undefined);
|
|
106
|
+
const existing = stored[eventType];
|
|
107
|
+
if (existing) {
|
|
108
|
+
el.removeEventListener(eventType, existing);
|
|
109
|
+
}
|
|
110
|
+
el.addEventListener(eventType, wrapper);
|
|
111
|
+
stored[eventType] = wrapper;
|
|
112
|
+
});
|
|
113
|
+
stateSnapshot.listenerStore.set(el, stored);
|
|
114
|
+
});
|
|
115
|
+
// =============================================================================
|
|
116
|
+
// Commit Phase
|
|
117
|
+
// =============================================================================
|
|
118
|
+
export const deleteFiber = (fiber) => Effect.gen(function* () {
|
|
119
|
+
// Close component scope (unless fiber is parked - its scope must stay alive)
|
|
120
|
+
if (!fiber.isParked && Option.isSome(fiber.componentScope)) {
|
|
121
|
+
yield* Scope.close(fiber.componentScope.value, Exit.void);
|
|
122
|
+
}
|
|
123
|
+
// Recursively delete children
|
|
124
|
+
if (Option.isSome(fiber.child)) {
|
|
125
|
+
yield* deleteFiber(fiber.child.value);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
export const commitDeletion = (fiber, domParent) => Option.match(fiber.dom, {
|
|
129
|
+
onSome: (dom) => Effect.sync(() => {
|
|
130
|
+
domParent.removeChild(dom);
|
|
131
|
+
}),
|
|
132
|
+
onNone: () =>
|
|
133
|
+
// Function component - find DOM children
|
|
134
|
+
Effect.iterate(fiber.child, {
|
|
135
|
+
while: (opt) => Option.isSome(opt),
|
|
136
|
+
body: (childOpt) => Effect.gen(function* () {
|
|
137
|
+
const child = childOpt.value;
|
|
138
|
+
yield* commitDeletion(child, domParent);
|
|
139
|
+
return child.sibling;
|
|
140
|
+
}),
|
|
141
|
+
}),
|
|
142
|
+
});
|
|
143
|
+
export const commitRoot = (runtime) => Effect.gen(function* () {
|
|
144
|
+
const stateRef = runtime.fiberState;
|
|
145
|
+
const currentState = yield* Ref.get(stateRef);
|
|
146
|
+
// Process deletions first
|
|
147
|
+
yield* Effect.forEach(currentState.deletions, (fiber) => Effect.gen(function* () {
|
|
148
|
+
const domParent = findDomParent(fiber);
|
|
149
|
+
if (Option.isSome(domParent)) {
|
|
150
|
+
yield* commitDeletion(fiber, domParent.value);
|
|
151
|
+
}
|
|
152
|
+
yield* deleteFiber(fiber);
|
|
153
|
+
}), { discard: true });
|
|
154
|
+
// Commit work starting from wipRoot.child
|
|
155
|
+
const firstChild = currentState.wipRoot.pipe(Option.flatMap((root) => root.child), Option.getOrUndefined);
|
|
156
|
+
if (firstChild) {
|
|
157
|
+
yield* commitWork(firstChild, runtime);
|
|
158
|
+
}
|
|
159
|
+
// Swap wipRoot to currentRoot
|
|
160
|
+
yield* Ref.update(stateRef, (s) => ({
|
|
161
|
+
...s,
|
|
162
|
+
currentRoot: currentState.wipRoot,
|
|
163
|
+
wipRoot: Option.none(),
|
|
164
|
+
deletions: [],
|
|
165
|
+
}));
|
|
166
|
+
});
|
|
167
|
+
export const commitWork = (fiber, runtime) => Effect.gen(function* () {
|
|
168
|
+
// KEY INSIGHT: If fiber has no DOM (function component), just process children
|
|
169
|
+
if (Option.isNone(fiber.dom)) {
|
|
170
|
+
if (Option.isSome(fiber.child)) {
|
|
171
|
+
yield* commitWork(fiber.child.value, runtime);
|
|
172
|
+
}
|
|
173
|
+
// Signal mounted after subtree commits (for function components)
|
|
174
|
+
yield* Option.match(fiber.mountedDeferred, {
|
|
175
|
+
onNone: () => Effect.void,
|
|
176
|
+
onSome: (deferred) => Effect.gen(function* () {
|
|
177
|
+
const done = yield* Deferred.isDone(deferred);
|
|
178
|
+
if (!done) {
|
|
179
|
+
yield* Deferred.succeed(deferred, undefined);
|
|
180
|
+
}
|
|
181
|
+
}),
|
|
182
|
+
});
|
|
183
|
+
if (Option.isSome(fiber.sibling)) {
|
|
184
|
+
yield* commitWork(fiber.sibling.value, runtime);
|
|
185
|
+
}
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
// Find DOM parent by walking up to nearest fiber with dom
|
|
189
|
+
const domParentOpt = findDomParent(fiber);
|
|
190
|
+
if (Option.isNone(domParentOpt)) {
|
|
191
|
+
// No DOM parent found - continue with children/siblings
|
|
192
|
+
if (Option.isSome(fiber.child)) {
|
|
193
|
+
yield* commitWork(fiber.child.value, runtime);
|
|
194
|
+
}
|
|
195
|
+
if (Option.isSome(fiber.sibling)) {
|
|
196
|
+
yield* commitWork(fiber.sibling.value, runtime);
|
|
197
|
+
}
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const domParent = domParentOpt.value;
|
|
201
|
+
// Process effect tag
|
|
202
|
+
const tag = fiber.effectTag.pipe(Option.getOrUndefined);
|
|
203
|
+
if (tag === "PLACEMENT") {
|
|
204
|
+
// Append DOM node
|
|
205
|
+
if (Option.isSome(fiber.dom)) {
|
|
206
|
+
domParent.appendChild(fiber.dom.value);
|
|
207
|
+
}
|
|
208
|
+
// Signal first child committed (for Suspense)
|
|
209
|
+
const deferred = fiber.parent.pipe(Option.flatMap((p) => p.childFirstCommitDeferred), Option.getOrUndefined);
|
|
210
|
+
if (deferred) {
|
|
211
|
+
const done = yield* Deferred.isDone(deferred);
|
|
212
|
+
if (!done) {
|
|
213
|
+
yield* Deferred.succeed(deferred, undefined);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
else if (tag === "UPDATE") {
|
|
218
|
+
const prevProps = fiber.alternate.pipe(Option.map((alt) => alt.props), Option.getOrElse(() => ({})));
|
|
219
|
+
if (Option.isSome(fiber.dom)) {
|
|
220
|
+
yield* updateDom(fiber.dom.value, prevProps, fiber.props, fiber, runtime);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
else if (tag === "DELETION") {
|
|
224
|
+
yield* commitDeletion(fiber, domParent);
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
// Continue with children and siblings
|
|
228
|
+
if (Option.isSome(fiber.child)) {
|
|
229
|
+
yield* commitWork(fiber.child.value, runtime);
|
|
230
|
+
}
|
|
231
|
+
// After children are committed, apply deferred properties.
|
|
232
|
+
// <select> value must be set after <option> children exist in the DOM.
|
|
233
|
+
if (Option.isSome(fiber.dom)) {
|
|
234
|
+
const node = fiber.dom.value;
|
|
235
|
+
if (node instanceof HTMLSelectElement && "value" in fiber.props) {
|
|
236
|
+
node.value = String(fiber.props.value);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (Option.isSome(fiber.sibling)) {
|
|
240
|
+
yield* commitWork(fiber.sibling.value, runtime);
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
//# sourceMappingURL=fiber-commit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fiber-commit.js","sourceRoot":"","sources":["../src/fiber-commit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,YAAY,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,gFAAgF;AAChF,aAAa;AACb,gFAAgF;AAEhF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAY,EAAE,OAAsB,EAAE,EAAE,CAChE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;QAC1C,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,+BAA+B,CAAC;QACzD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACf,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,OAAO,MAAM,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;YAC9D,CAAC;YACD,MAAM,IAAI,GACR,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACvF,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;KACF,CAAC,CAAC;IAEH,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAEvD,aAAa;IACb,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IAC5B,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;QACtD,GAA4B,CAAC,OAAO,GAAG,GAAG,CAAC;IAC9C,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC,CAAC,CAAC;AAEL,gFAAgF;AAChF,aAAa;AACb,gFAAgF;AAEhF,MAAM,CAAC,MAAM,KAAK,GAChB,CAAC,IAAgC,EAAE,IAAgC,EAAE,EAAE,CAAC,CAAC,GAAW,EAAE,EAAE,CACtF,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC;AAE5B,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,GAAS,EACT,SAAqC,EACrC,SAAqC,EACrC,UAAiB,EACjB,OAAsB,EACtB,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IACpC,MAAM,OAAO,GAAG,GAAyB,CAAC;IAE1C,IAAI,OAAO,YAAY,IAAI,EAAE,CAAC;QAC5B,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC;YAClC,OAAO,CAAC,SAAS;gBACf,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,EAAE,GAAG,OAAO,CAAC;IACnB,MAAM,MAAM,GAAG,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;IAEzD,6BAA6B;IAC7B,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;SAC1C,MAAM,CAAC,OAAO,CAAC;SACf,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAE5E,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,OAAO,EAAE,CAAC;YACZ,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC3C,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,gEAAgE;IAChE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;SACnB,MAAM,CAAC,UAAU,CAAC;SAClB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC;SACpC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAChB,IAAI,EAAE,YAAY,WAAW,EAAE,CAAC;YAC9B,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,iCAAiC;IACjC,IAAI,SAAS,CAAC,uBAAuB,IAAI,IAAI,EAAE,CAAC;QAC9C,IACE,EAAE,YAAY,WAAW;YACzB,SAAS,CAAC,uBAAuB,KAAK,SAAS,CAAC,uBAAuB,EACvE,CAAC;YACD,EAAE,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;SACnB,MAAM,CAAC,UAAU,CAAC;SAClB,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;SACnC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAChB,IAAI,EAAE,YAAY,WAAW,EAAE,CAAC;YAC9B,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,0BAA0B;IAC1B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;SACnB,MAAM,CAAC,OAAO,CAAC;SACf,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;SACnC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAA8B,CAAC;QAC7D,MAAM,OAAO,GAAG,kBAAkB,CAChC,OAAO,EACP,SAAS,EACT,OAAO,EACP,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CACxE,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,QAAQ,EAAE,CAAC;YACb,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC;QACD,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEL,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC,CAAC,CAAC;AAEL,gFAAgF;AAChF,eAAe;AACf,gFAAgF;AAEhF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAY,EAAqC,EAAE,CAC7E,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,6EAA6E;IAC7E,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;QAC3D,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED,8BAA8B;IAC9B,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAY,EAAE,SAAe,EAAqC,EAAE,CACjG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;IACtB,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CACd,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QACf,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC,CAAC;IACJ,MAAM,EAAE,GAAG,EAAE;IACX,yCAAyC;IACzC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE;QAC1B,KAAK,EAAE,CAAC,GAAG,EAA6B,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;QAC7D,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CACjB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC7B,KAAK,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACxC,OAAO,KAAK,CAAC,OAAO,CAAC;QACvB,CAAC,CAAC;KACL,CAAC;CACL,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAsB,EAAE,EAAE,CACnD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IACpC,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE9C,0BAA0B;IAC1B,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CACnB,YAAY,CAAC,SAAS,EACtB,CAAC,KAAK,EAAE,EAAE,CACR,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC;QACD,KAAK,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC,EACJ,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC;IAEF,0CAA0C;IAC1C,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EACpC,MAAM,CAAC,cAAc,CACtB,CAAC;IACF,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,8BAA8B;IAC9B,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClC,GAAG,CAAC;QACJ,WAAW,EAAE,YAAY,CAAC,OAAO;QACjC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;QACtB,SAAS,EAAE,EAAE;KACd,CAAC,CAAC,CAAC;AACN,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,KAAY,EACZ,OAAsB,EACqB,EAAE,CAC7C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,+EAA+E;IAC/E,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QACD,iEAAiE;QACjE,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE;YACzC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;YACzB,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CACnB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAClB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC,CAAC;SACL,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QACD,OAAO;IACT,CAAC;IAED,0DAA0D;IAC1D,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,wDAAwD;QACxD,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QACD,OAAO;IACT,CAAC;IACD,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;IAErC,qBAAqB;IACrB,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACxD,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;QACxB,kBAAkB;QAClB,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;QAED,8CAA8C;QAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAChC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC,EACjD,MAAM,CAAC,cAAc,CACtB,CAAC;QACF,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CACpC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAC9B,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAC7B,CAAC;QACF,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;SAAM,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;QAC9B,KAAK,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IAED,sCAAsC;IACtC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,2DAA2D;IAC3D,uEAAuE;IACvE,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QAC7B,IAAI,IAAI,YAAY,iBAAiB,IAAI,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;AACH,CAAC,CAAC,CAAC"}
|
package/dist/fiber-render.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Fiber-based rendering
|
|
2
|
+
* Fiber-based rendering — public API and orchestration.
|
|
3
3
|
*
|
|
4
|
-
* This module
|
|
5
|
-
* -
|
|
6
|
-
* -
|
|
7
|
-
* -
|
|
8
|
-
* - Function components have `dom: Option.none()` - no wrapper spans!
|
|
4
|
+
* This module provides:
|
|
5
|
+
* - `renderFiber` — mount a VElement tree to the DOM
|
|
6
|
+
* - `hydrateFiber` — hydrate an existing SSR DOM tree
|
|
7
|
+
* - `renderMailboxConsumer` — batched re-render work loop
|
|
9
8
|
*
|
|
10
|
-
*
|
|
9
|
+
* The actual reconciliation, commit, boundary, and tree logic
|
|
10
|
+
* are split across fiber-tree, fiber-update, fiber-commit, and fiber-boundary.
|
|
11
11
|
*/
|
|
12
12
|
import * as Effect from "effect/Effect";
|
|
13
13
|
import { type VElement } from "./shared.js";
|
|
@@ -23,7 +23,7 @@ import { FibraeRuntime } from "./runtime.js";
|
|
|
23
23
|
* @param element - VElement to render
|
|
24
24
|
* @param container - DOM container to render into
|
|
25
25
|
*/
|
|
26
|
-
export declare const renderFiber: (element: VElement, container: HTMLElement) => Effect.Effect<
|
|
26
|
+
export declare const renderFiber: (element: VElement, container: HTMLElement) => Effect.Effect<void, never, FibraeRuntime>;
|
|
27
27
|
/**
|
|
28
28
|
* Hydrate an existing DOM tree by building a fiber tree that references
|
|
29
29
|
* the existing DOM nodes. This enables event handlers and reactivity
|
|
@@ -32,4 +32,4 @@ export declare const renderFiber: (element: VElement, container: HTMLElement) =>
|
|
|
32
32
|
* Uses cursor-based DOM walking (like React) to match VElement tree
|
|
33
33
|
* against existing DOM, skipping whitespace-only text nodes and comments.
|
|
34
34
|
*/
|
|
35
|
-
export declare const hydrateFiber: (element: VElement, container: HTMLElement) => Effect.Effect<
|
|
35
|
+
export declare const hydrateFiber: (element: VElement, container: HTMLElement) => Effect.Effect<void, never, FibraeRuntime>;
|