@fictjs/runtime 0.4.0 → 0.5.1
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/advanced.cjs +10 -8
- package/dist/advanced.cjs.map +1 -1
- package/dist/advanced.d.cts +4 -3
- package/dist/advanced.d.ts +4 -3
- package/dist/advanced.js +10 -8
- package/dist/advanced.js.map +1 -1
- package/dist/{chunk-L4DIV3RC.cjs → chunk-4ZPZM5IG.cjs} +9 -7
- package/dist/chunk-4ZPZM5IG.cjs.map +1 -0
- package/dist/{chunk-XLIZJMMJ.js → chunk-5OYBRKE4.js} +8 -6
- package/dist/{chunk-XLIZJMMJ.js.map → chunk-5OYBRKE4.js.map} +1 -1
- package/dist/chunk-6RCEIWZL.cjs +2380 -0
- package/dist/chunk-6RCEIWZL.cjs.map +1 -0
- package/dist/chunk-7BO6P2KP.js +2380 -0
- package/dist/chunk-7BO6P2KP.js.map +1 -0
- package/dist/{chunk-TWELIZRY.js → chunk-AR6NSCZM.js} +5 -3
- package/dist/{chunk-TWELIZRY.js.map → chunk-AR6NSCZM.js.map} +1 -1
- package/dist/{chunk-M2TSXZ4C.cjs → chunk-LFMXNQZC.cjs} +18 -16
- package/dist/chunk-LFMXNQZC.cjs.map +1 -0
- package/dist/{chunk-SO6X7G5S.js → chunk-RY5CY4CI.js} +501 -1880
- package/dist/chunk-RY5CY4CI.js.map +1 -0
- package/dist/chunk-WJHXPF7M.cjs +2259 -0
- package/dist/chunk-WJHXPF7M.cjs.map +1 -0
- package/dist/{context-B25xyQrJ.d.cts → context-CTBE00S_.d.cts} +1 -1
- package/dist/{context-CGdP7_Jb.d.ts → context-lkLhbkFJ.d.ts} +1 -1
- package/dist/{effect-D6kaLM2-.d.cts → effect-BpSNEJJz.d.cts} +7 -67
- package/dist/{effect-D6kaLM2-.d.ts → effect-BpSNEJJz.d.ts} +7 -67
- package/dist/index.cjs +40 -38
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -4
- package/dist/index.d.ts +5 -4
- package/dist/index.dev.js +125 -22
- package/dist/index.dev.js.map +1 -1
- package/dist/index.js +19 -17
- package/dist/index.js.map +1 -1
- package/dist/internal.cjs +202 -203
- package/dist/internal.cjs.map +1 -1
- package/dist/internal.d.cts +13 -23
- package/dist/internal.d.ts +13 -23
- package/dist/internal.js +207 -208
- package/dist/internal.js.map +1 -1
- package/dist/loader.cjs +280 -0
- package/dist/loader.cjs.map +1 -0
- package/dist/loader.d.cts +57 -0
- package/dist/loader.d.ts +57 -0
- package/dist/loader.js +280 -0
- package/dist/loader.js.map +1 -0
- package/dist/{props-BIfromL0.d.cts → props-XTHYD19o.d.cts} +13 -2
- package/dist/{props-BEgIVMRx.d.ts → props-x-HbI-jX.d.ts} +13 -2
- package/dist/resume-BrAkmSTY.d.cts +79 -0
- package/dist/resume-Dx8_l72o.d.ts +79 -0
- package/dist/{scope-CzNkn587.d.ts → scope-CdbGmsFf.d.ts} +1 -1
- package/dist/{scope-Cx_3CjIZ.d.cts → scope-DfcP9I-A.d.cts} +1 -1
- package/dist/signal-C4ISF17w.d.cts +66 -0
- package/dist/signal-C4ISF17w.d.ts +66 -0
- package/package.json +6 -1
- package/src/binding.ts +254 -5
- package/src/cycle-guard.ts +1 -1
- package/src/dom.ts +103 -5
- package/src/hooks.ts +15 -2
- package/src/hydration.ts +75 -0
- package/src/internal.ts +34 -2
- package/src/list-helpers.ts +127 -11
- package/src/loader.ts +437 -0
- package/src/node-ops.ts +65 -0
- package/src/resume.ts +517 -0
- package/src/signal.ts +47 -22
- package/src/store.ts +8 -0
- package/dist/chunk-ID3WBWNO.cjs +0 -3638
- package/dist/chunk-ID3WBWNO.cjs.map +0 -1
- package/dist/chunk-L4DIV3RC.cjs.map +0 -1
- package/dist/chunk-M2TSXZ4C.cjs.map +0 -1
- package/dist/chunk-SO6X7G5S.js.map +0 -1
package/dist/internal.js
CHANGED
|
@@ -1,31 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runInScope
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-AR6NSCZM.js";
|
|
4
4
|
import {
|
|
5
|
-
Aliases,
|
|
6
|
-
BooleanAttributes,
|
|
7
|
-
ChildProperties,
|
|
8
|
-
DelegatedEvents,
|
|
9
5
|
Fragment,
|
|
10
|
-
Properties,
|
|
11
|
-
SVGElements,
|
|
12
|
-
SVGNamespace,
|
|
13
|
-
UnitlessStyles,
|
|
14
|
-
__fictPopContext,
|
|
15
6
|
__fictProp,
|
|
16
7
|
__fictPropsRest,
|
|
17
|
-
__fictPushContext,
|
|
18
|
-
__fictRender,
|
|
19
|
-
__fictResetContext,
|
|
20
|
-
__fictUseContext,
|
|
21
|
-
__fictUseEffect,
|
|
22
|
-
__fictUseMemo,
|
|
23
|
-
__fictUseSignal,
|
|
24
|
-
__resetReactiveState,
|
|
25
8
|
addEventListener,
|
|
26
9
|
assign,
|
|
27
10
|
batch,
|
|
28
|
-
batch2,
|
|
29
11
|
bindAttribute,
|
|
30
12
|
bindClass,
|
|
31
13
|
bindEvent,
|
|
@@ -37,194 +19,90 @@ import {
|
|
|
37
19
|
classList,
|
|
38
20
|
clearDelegatedEvents,
|
|
39
21
|
createConditional,
|
|
40
|
-
createEffect,
|
|
41
22
|
createElement,
|
|
42
|
-
createMemo,
|
|
43
23
|
createPortal,
|
|
44
24
|
createPropsProxy,
|
|
25
|
+
delegateEvents,
|
|
26
|
+
getSlotEnd,
|
|
27
|
+
hydrateComponent,
|
|
28
|
+
insert,
|
|
29
|
+
insertBetween,
|
|
30
|
+
insertNodesBefore,
|
|
31
|
+
isHydratingActive,
|
|
32
|
+
isReactive,
|
|
33
|
+
keyed,
|
|
34
|
+
mergeProps,
|
|
35
|
+
prop,
|
|
36
|
+
removeNodes,
|
|
37
|
+
render,
|
|
38
|
+
resolvePath,
|
|
39
|
+
spread,
|
|
40
|
+
template,
|
|
41
|
+
toNodeArray,
|
|
42
|
+
unwrap,
|
|
43
|
+
withHydrationRange
|
|
44
|
+
} from "./chunk-RY5CY4CI.js";
|
|
45
|
+
import {
|
|
46
|
+
Aliases,
|
|
47
|
+
BooleanAttributes,
|
|
48
|
+
ChildProperties,
|
|
49
|
+
DelegatedEvents,
|
|
50
|
+
Properties,
|
|
51
|
+
SVGElements,
|
|
52
|
+
SVGNamespace,
|
|
53
|
+
UnitlessStyles,
|
|
54
|
+
__fictDisableResumable,
|
|
55
|
+
__fictDisableSSR,
|
|
56
|
+
__fictEnableResumable,
|
|
57
|
+
__fictEnableSSR,
|
|
58
|
+
__fictEnsureScope,
|
|
59
|
+
__fictEnterHydration,
|
|
60
|
+
__fictExitHydration,
|
|
61
|
+
__fictGetResume,
|
|
62
|
+
__fictGetSSRScope,
|
|
63
|
+
__fictGetScopeProps,
|
|
64
|
+
__fictGetScopeRegistry,
|
|
65
|
+
__fictIsHydrating,
|
|
66
|
+
__fictIsResumable,
|
|
67
|
+
__fictIsSSR,
|
|
68
|
+
__fictPopContext,
|
|
69
|
+
__fictPrepareContext,
|
|
70
|
+
__fictPushContext,
|
|
71
|
+
__fictQrl,
|
|
72
|
+
__fictRegisterResume,
|
|
73
|
+
__fictRegisterScope,
|
|
74
|
+
__fictRender,
|
|
75
|
+
__fictResetContext,
|
|
76
|
+
__fictSerializeSSRState,
|
|
77
|
+
__fictSetSSRState,
|
|
78
|
+
__fictUseContext,
|
|
79
|
+
__fictUseEffect,
|
|
80
|
+
__fictUseLexicalScope,
|
|
81
|
+
__fictUseMemo,
|
|
82
|
+
__fictUseSignal,
|
|
83
|
+
__resetReactiveState,
|
|
84
|
+
createEffect,
|
|
85
|
+
createMemo,
|
|
45
86
|
createRenderEffect,
|
|
46
87
|
createRootContext,
|
|
47
88
|
createSelector,
|
|
48
|
-
|
|
89
|
+
createStore,
|
|
90
|
+
deserializeValue,
|
|
49
91
|
destroyRoot,
|
|
50
92
|
effectScope,
|
|
51
93
|
flush,
|
|
52
94
|
flushOnMount,
|
|
53
95
|
getCurrentRoot,
|
|
54
96
|
getPropAlias,
|
|
55
|
-
|
|
56
|
-
insertNodesBefore,
|
|
57
|
-
isReactive,
|
|
58
|
-
keyed,
|
|
59
|
-
mergeProps,
|
|
97
|
+
isStoreProxy,
|
|
60
98
|
onDestroy,
|
|
61
99
|
popRoot,
|
|
62
|
-
prop,
|
|
63
100
|
pushRoot,
|
|
64
|
-
|
|
101
|
+
serializeValue,
|
|
65
102
|
setActiveSub,
|
|
66
103
|
signal,
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
toNodeArray,
|
|
70
|
-
unwrap
|
|
71
|
-
} from "./chunk-SO6X7G5S.js";
|
|
72
|
-
|
|
73
|
-
// src/store.ts
|
|
74
|
-
var PROXY = Symbol("fict:store-proxy");
|
|
75
|
-
var TARGET = Symbol("fict:store-target");
|
|
76
|
-
var ITERATE_KEY = Symbol("fict:iterate");
|
|
77
|
-
function createStore(initialValue) {
|
|
78
|
-
const unwrapped = unwrap2(initialValue);
|
|
79
|
-
const wrapped = wrap(unwrapped);
|
|
80
|
-
function setStore(fn) {
|
|
81
|
-
batch(() => {
|
|
82
|
-
const result = fn(wrapped);
|
|
83
|
-
if (result !== void 0) {
|
|
84
|
-
reconcile(wrapped, result);
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
return [wrapped, setStore];
|
|
89
|
-
}
|
|
90
|
-
var proxyCache = /* @__PURE__ */ new WeakMap();
|
|
91
|
-
var signalCache = /* @__PURE__ */ new WeakMap();
|
|
92
|
-
function wrap(value) {
|
|
93
|
-
if (value === null || typeof value !== "object") return value;
|
|
94
|
-
if (Reflect.get(value, PROXY)) return value;
|
|
95
|
-
if (proxyCache.has(value)) return proxyCache.get(value);
|
|
96
|
-
const handler = {
|
|
97
|
-
get(target, prop2, receiver) {
|
|
98
|
-
if (prop2 === PROXY) return true;
|
|
99
|
-
if (prop2 === TARGET) return target;
|
|
100
|
-
const value2 = Reflect.get(target, prop2, receiver);
|
|
101
|
-
track(target, prop2);
|
|
102
|
-
return wrap(value2);
|
|
103
|
-
},
|
|
104
|
-
has(target, prop2) {
|
|
105
|
-
const result = Reflect.has(target, prop2);
|
|
106
|
-
track(target, prop2);
|
|
107
|
-
return result;
|
|
108
|
-
},
|
|
109
|
-
ownKeys(target) {
|
|
110
|
-
track(target, ITERATE_KEY);
|
|
111
|
-
return Reflect.ownKeys(target);
|
|
112
|
-
},
|
|
113
|
-
getOwnPropertyDescriptor(target, prop2) {
|
|
114
|
-
track(target, prop2);
|
|
115
|
-
return Reflect.getOwnPropertyDescriptor(target, prop2);
|
|
116
|
-
},
|
|
117
|
-
set(target, prop2, value2, receiver) {
|
|
118
|
-
if (prop2 === PROXY || prop2 === TARGET) return false;
|
|
119
|
-
const isArrayLength = Array.isArray(target) && prop2 === "length";
|
|
120
|
-
const oldLength = isArrayLength ? target.length : void 0;
|
|
121
|
-
const hadKey = Object.prototype.hasOwnProperty.call(target, prop2);
|
|
122
|
-
const oldValue = Reflect.get(target, prop2, receiver);
|
|
123
|
-
if (oldValue === value2) return true;
|
|
124
|
-
const result = Reflect.set(target, prop2, value2, receiver);
|
|
125
|
-
if (result) {
|
|
126
|
-
trigger(target, prop2);
|
|
127
|
-
if (!hadKey) {
|
|
128
|
-
trigger(target, ITERATE_KEY);
|
|
129
|
-
}
|
|
130
|
-
if (isArrayLength) {
|
|
131
|
-
const nextLength = target.length;
|
|
132
|
-
if (typeof oldLength === "number" && nextLength < oldLength) {
|
|
133
|
-
const signals = signalCache.get(target);
|
|
134
|
-
if (signals) {
|
|
135
|
-
for (const key of signals.keys()) {
|
|
136
|
-
if (typeof key !== "string") continue;
|
|
137
|
-
const index = Number(key);
|
|
138
|
-
if (!Number.isInteger(index) || String(index) !== key) continue;
|
|
139
|
-
if (index >= nextLength && index < oldLength) {
|
|
140
|
-
trigger(target, key);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
trigger(target, ITERATE_KEY);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
return result;
|
|
149
|
-
},
|
|
150
|
-
deleteProperty(target, prop2) {
|
|
151
|
-
const hadKey = Object.prototype.hasOwnProperty.call(target, prop2);
|
|
152
|
-
const result = Reflect.deleteProperty(target, prop2);
|
|
153
|
-
if (result) {
|
|
154
|
-
trigger(target, prop2);
|
|
155
|
-
if (hadKey) {
|
|
156
|
-
trigger(target, ITERATE_KEY);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
return result;
|
|
160
|
-
}
|
|
161
|
-
};
|
|
162
|
-
const proxy = new Proxy(value, handler);
|
|
163
|
-
proxyCache.set(value, proxy);
|
|
164
|
-
return proxy;
|
|
165
|
-
}
|
|
166
|
-
function unwrap2(value) {
|
|
167
|
-
if (value && typeof value === "object" && Reflect.get(value, PROXY)) {
|
|
168
|
-
return Reflect.get(value, TARGET);
|
|
169
|
-
}
|
|
170
|
-
return value;
|
|
171
|
-
}
|
|
172
|
-
function track(target, prop2) {
|
|
173
|
-
let signals = signalCache.get(target);
|
|
174
|
-
if (!signals) {
|
|
175
|
-
signals = /* @__PURE__ */ new Map();
|
|
176
|
-
signalCache.set(target, signals);
|
|
177
|
-
}
|
|
178
|
-
let s = signals.get(prop2);
|
|
179
|
-
if (!s) {
|
|
180
|
-
const initial = prop2 === ITERATE_KEY ? Reflect.ownKeys(target).length : getLastValue(target, prop2);
|
|
181
|
-
s = signal(initial);
|
|
182
|
-
signals.set(prop2, s);
|
|
183
|
-
}
|
|
184
|
-
s();
|
|
185
|
-
}
|
|
186
|
-
function trigger(target, prop2) {
|
|
187
|
-
const signals = signalCache.get(target);
|
|
188
|
-
if (signals) {
|
|
189
|
-
const s = signals.get(prop2);
|
|
190
|
-
if (s) {
|
|
191
|
-
if (prop2 === ITERATE_KEY) {
|
|
192
|
-
s(Reflect.ownKeys(target).length);
|
|
193
|
-
} else {
|
|
194
|
-
s(getLastValue(target, prop2));
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
function getLastValue(target, prop2) {
|
|
200
|
-
return Reflect.get(target, prop2);
|
|
201
|
-
}
|
|
202
|
-
function reconcile(target, value) {
|
|
203
|
-
if (target === value) return;
|
|
204
|
-
if (value === null || typeof value !== "object") {
|
|
205
|
-
throw new Error(
|
|
206
|
-
`[Fict] Cannot replace store with primitive value: ${String(
|
|
207
|
-
value
|
|
208
|
-
)}. setStore should return an object/array to merge.`
|
|
209
|
-
);
|
|
210
|
-
}
|
|
211
|
-
const realTarget = unwrap2(target);
|
|
212
|
-
const realValue = unwrap2(value);
|
|
213
|
-
const keys = /* @__PURE__ */ new Set([...Object.keys(realTarget), ...Object.keys(realValue)]);
|
|
214
|
-
for (const key of keys) {
|
|
215
|
-
const rTarget = realTarget;
|
|
216
|
-
const rValue = realValue;
|
|
217
|
-
if (rValue[key] === void 0 && rTarget[key] !== void 0) {
|
|
218
|
-
delete target[key];
|
|
219
|
-
} else if (rTarget[key] !== rValue[key]) {
|
|
220
|
-
;
|
|
221
|
-
target[key] = rValue[key];
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
if (Array.isArray(target) && Array.isArray(realValue) && target.length !== realValue.length) {
|
|
225
|
-
target.length = realValue.length;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
104
|
+
unwrapStore
|
|
105
|
+
} from "./chunk-7BO6P2KP.js";
|
|
228
106
|
|
|
229
107
|
// src/reconcile.ts
|
|
230
108
|
function reconcileArrays(parentNode, a, b) {
|
|
@@ -314,6 +192,7 @@ function reconcileArrays(parentNode, a, b) {
|
|
|
314
192
|
|
|
315
193
|
// src/list-helpers.ts
|
|
316
194
|
var isDev = typeof __DEV__ !== "undefined" ? __DEV__ : typeof process === "undefined" || process.env?.NODE_ENV !== "production";
|
|
195
|
+
var isShadowRoot = (node) => typeof ShadowRoot !== "undefined" && node instanceof ShadowRoot;
|
|
317
196
|
function moveNodesBefore(parent, nodes, anchor) {
|
|
318
197
|
for (let i = nodes.length - 1; i >= 0; i--) {
|
|
319
198
|
const node = nodes[i];
|
|
@@ -353,21 +232,21 @@ var MAX_SAFE_VERSION = 9007199254740991;
|
|
|
353
232
|
function createVersionedSignalAccessor(initialValue) {
|
|
354
233
|
let current = initialValue;
|
|
355
234
|
let version = 0;
|
|
356
|
-
const
|
|
235
|
+
const track = signal(version);
|
|
357
236
|
function accessor(value) {
|
|
358
237
|
if (arguments.length === 0) {
|
|
359
|
-
|
|
238
|
+
track();
|
|
360
239
|
return current;
|
|
361
240
|
}
|
|
362
241
|
current = value;
|
|
363
242
|
version = version >= MAX_SAFE_VERSION ? 1 : version + 1;
|
|
364
|
-
|
|
243
|
+
track(version);
|
|
365
244
|
}
|
|
366
245
|
return accessor;
|
|
367
246
|
}
|
|
368
|
-
function createKeyedListContainer() {
|
|
369
|
-
const startMarker = document.createComment("fict:list:start");
|
|
370
|
-
const endMarker = document.createComment("fict:list:end");
|
|
247
|
+
function createKeyedListContainer(startOverride, endOverride) {
|
|
248
|
+
const startMarker = startOverride ?? document.createComment("fict:list:start");
|
|
249
|
+
const endMarker = endOverride ?? document.createComment("fict:list:end");
|
|
371
250
|
const dispose = () => {
|
|
372
251
|
for (const block of container.blocks.values()) {
|
|
373
252
|
destroyRoot(block.root);
|
|
@@ -407,7 +286,7 @@ function createKeyedListContainer() {
|
|
|
407
286
|
};
|
|
408
287
|
return container;
|
|
409
288
|
}
|
|
410
|
-
function createKeyedBlock(key, item, index,
|
|
289
|
+
function createKeyedBlock(key, item, index, render2, needsIndex = true, hostRoot) {
|
|
411
290
|
const itemSig = createVersionedSignalAccessor(item);
|
|
412
291
|
const indexSig = needsIndex ? signal(index) : ((next) => {
|
|
413
292
|
if (arguments.length === 0) return index;
|
|
@@ -421,7 +300,7 @@ function createKeyedBlock(key, item, index, render, needsIndex = true, hostRoot)
|
|
|
421
300
|
const prevSub = setActiveSub(void 0);
|
|
422
301
|
try {
|
|
423
302
|
scopeDispose = effectScope(() => {
|
|
424
|
-
const rendered =
|
|
303
|
+
const rendered = render2(itemSig, indexSig, key);
|
|
425
304
|
if (rendered instanceof Node || Array.isArray(rendered) && rendered.every((n) => n instanceof Node)) {
|
|
426
305
|
nodes = toNodeArray(rendered);
|
|
427
306
|
} else {
|
|
@@ -534,20 +413,41 @@ function reorderByLIS(parent, endMarker, prev, next) {
|
|
|
534
413
|
}
|
|
535
414
|
return moved;
|
|
536
415
|
}
|
|
537
|
-
function createKeyedList(getItems, keyFn, renderItem, needsIndex) {
|
|
416
|
+
function createKeyedList(getItems, keyFn, renderItem, needsIndex, startMarker, endMarker) {
|
|
538
417
|
const resolvedNeedsIndex = arguments.length >= 4 ? !!needsIndex : renderItem.length > 1;
|
|
539
|
-
return createFineGrainedKeyedList(
|
|
418
|
+
return createFineGrainedKeyedList(
|
|
419
|
+
getItems,
|
|
420
|
+
keyFn,
|
|
421
|
+
renderItem,
|
|
422
|
+
resolvedNeedsIndex,
|
|
423
|
+
startMarker,
|
|
424
|
+
endMarker
|
|
425
|
+
);
|
|
540
426
|
}
|
|
541
|
-
function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex) {
|
|
542
|
-
const container = createKeyedListContainer();
|
|
427
|
+
function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex, startOverride, endOverride) {
|
|
428
|
+
const container = createKeyedListContainer(startOverride, endOverride);
|
|
543
429
|
const hostRoot = getCurrentRoot();
|
|
544
|
-
const
|
|
545
|
-
fragment
|
|
430
|
+
const useProvided = !!(startOverride && endOverride);
|
|
431
|
+
const fragment = useProvided ? container.startMarker : document.createDocumentFragment();
|
|
432
|
+
if (!useProvided) {
|
|
433
|
+
;
|
|
434
|
+
fragment.append(container.startMarker, container.endMarker);
|
|
435
|
+
}
|
|
546
436
|
let disposed = false;
|
|
547
437
|
let effectDispose;
|
|
548
438
|
let connectObserver = null;
|
|
549
439
|
let effectStarted = false;
|
|
550
440
|
let startScheduled = false;
|
|
441
|
+
let initialHydrating = __fictIsHydrating();
|
|
442
|
+
const collectBetween = () => {
|
|
443
|
+
const nodes = [];
|
|
444
|
+
let cursor = container.startMarker.nextSibling;
|
|
445
|
+
while (cursor && cursor !== container.endMarker) {
|
|
446
|
+
nodes.push(cursor);
|
|
447
|
+
cursor = cursor.nextSibling;
|
|
448
|
+
}
|
|
449
|
+
return nodes;
|
|
450
|
+
};
|
|
551
451
|
const getConnectedParent = () => {
|
|
552
452
|
const endParent = container.endMarker.parentNode;
|
|
553
453
|
const startParent = container.startMarker.parentNode;
|
|
@@ -556,19 +456,82 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex) {
|
|
|
556
456
|
if ("isConnected" in parentNode && !parentNode.isConnected) return null;
|
|
557
457
|
return parentNode;
|
|
558
458
|
}
|
|
459
|
+
if (endParent && startParent && endParent === startParent && isShadowRoot(endParent)) {
|
|
460
|
+
const shadowRoot = endParent;
|
|
461
|
+
const host = shadowRoot.host;
|
|
462
|
+
if ("isConnected" in host && !host.isConnected) return null;
|
|
463
|
+
return shadowRoot;
|
|
464
|
+
}
|
|
559
465
|
return null;
|
|
560
466
|
};
|
|
561
467
|
const performDiff = () => {
|
|
562
468
|
if (disposed) return;
|
|
563
|
-
const
|
|
469
|
+
const isSSR = __fictIsSSR();
|
|
470
|
+
const parent = isSSR ? container.startMarker.parentNode : getConnectedParent();
|
|
564
471
|
if (!parent) return;
|
|
565
|
-
|
|
472
|
+
batch(() => {
|
|
566
473
|
const oldBlocks = container.blocks;
|
|
567
474
|
const newBlocks = container.nextBlocks;
|
|
568
475
|
const prevOrderedBlocks = container.orderedBlocks;
|
|
569
476
|
const nextOrderedBlocks = container.nextOrderedBlocks;
|
|
570
477
|
const orderedIndexByKey = container.orderedIndexByKey;
|
|
571
478
|
const newItems = getItems();
|
|
479
|
+
if (initialHydrating && isHydratingActive()) {
|
|
480
|
+
initialHydrating = false;
|
|
481
|
+
newBlocks.clear();
|
|
482
|
+
nextOrderedBlocks.length = 0;
|
|
483
|
+
orderedIndexByKey.clear();
|
|
484
|
+
if (newItems.length === 0) {
|
|
485
|
+
oldBlocks.clear();
|
|
486
|
+
prevOrderedBlocks.length = 0;
|
|
487
|
+
container.currentNodes = [container.startMarker, container.endMarker];
|
|
488
|
+
container.nextNodes.length = 0;
|
|
489
|
+
return;
|
|
490
|
+
}
|
|
491
|
+
const createdBlocks2 = [];
|
|
492
|
+
withHydrationRange(
|
|
493
|
+
container.startMarker.nextSibling,
|
|
494
|
+
container.endMarker,
|
|
495
|
+
parent.ownerDocument ?? document,
|
|
496
|
+
() => {
|
|
497
|
+
for (let index = 0; index < newItems.length; index++) {
|
|
498
|
+
const item = newItems[index];
|
|
499
|
+
const key = keyFn(item, index);
|
|
500
|
+
if (newBlocks.has(key)) {
|
|
501
|
+
if (isDev) {
|
|
502
|
+
console.warn(
|
|
503
|
+
`[fict] Duplicate key "${String(key)}" detected in list hydration. Each item should have a unique key.`
|
|
504
|
+
);
|
|
505
|
+
}
|
|
506
|
+
const existing = newBlocks.get(key);
|
|
507
|
+
if (existing) {
|
|
508
|
+
destroyRoot(existing.root);
|
|
509
|
+
removeNodes(existing.nodes);
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
const block = createKeyedBlock(key, item, index, renderItem, needsIndex, hostRoot);
|
|
513
|
+
createdBlocks2.push(block);
|
|
514
|
+
newBlocks.set(key, block);
|
|
515
|
+
orderedIndexByKey.set(key, nextOrderedBlocks.length);
|
|
516
|
+
nextOrderedBlocks.push(block);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
);
|
|
520
|
+
container.blocks = newBlocks;
|
|
521
|
+
container.nextBlocks = oldBlocks;
|
|
522
|
+
container.orderedBlocks = nextOrderedBlocks;
|
|
523
|
+
container.nextOrderedBlocks = prevOrderedBlocks;
|
|
524
|
+
oldBlocks.clear();
|
|
525
|
+
prevOrderedBlocks.length = 0;
|
|
526
|
+
container.currentNodes = [container.startMarker, ...collectBetween(), container.endMarker];
|
|
527
|
+
container.nextNodes.length = 0;
|
|
528
|
+
for (const block of createdBlocks2) {
|
|
529
|
+
if (newBlocks.get(block.key) === block) {
|
|
530
|
+
flushOnMount(block.root);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
return;
|
|
534
|
+
}
|
|
572
535
|
if (newItems.length === 0) {
|
|
573
536
|
if (oldBlocks.size > 0) {
|
|
574
537
|
for (const block of oldBlocks.values()) {
|
|
@@ -798,7 +761,8 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex) {
|
|
|
798
761
|
};
|
|
799
762
|
const ensureEffectStarted = () => {
|
|
800
763
|
if (disposed || effectStarted) return effectStarted;
|
|
801
|
-
const
|
|
764
|
+
const isSSR = __fictIsSSR();
|
|
765
|
+
const parent = isSSR ? container.startMarker.parentNode : getConnectedParent();
|
|
802
766
|
if (!parent) return false;
|
|
803
767
|
const start = () => {
|
|
804
768
|
effectDispose = createRenderEffect(performDiff);
|
|
@@ -818,6 +782,8 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex) {
|
|
|
818
782
|
};
|
|
819
783
|
const waitForConnection = () => {
|
|
820
784
|
if (connectObserver || typeof MutationObserver === "undefined") return;
|
|
785
|
+
const root = container.startMarker.getRootNode?.() ?? document;
|
|
786
|
+
const shadowRoot = root && root.nodeType === 11 && isShadowRoot(root) ? root : null;
|
|
821
787
|
connectObserver = new MutationObserver(() => {
|
|
822
788
|
if (disposed) return;
|
|
823
789
|
if (getConnectedParent()) {
|
|
@@ -828,6 +794,9 @@ function createFineGrainedKeyedList(getItems, keyFn, renderItem, needsIndex) {
|
|
|
828
794
|
}
|
|
829
795
|
});
|
|
830
796
|
connectObserver.observe(document, { childList: true, subtree: true });
|
|
797
|
+
if (shadowRoot) {
|
|
798
|
+
connectObserver.observe(shadowRoot, { childList: true, subtree: true });
|
|
799
|
+
}
|
|
831
800
|
};
|
|
832
801
|
const scheduleStart = () => {
|
|
833
802
|
if (startScheduled || disposed || effectStarted) return;
|
|
@@ -880,14 +849,35 @@ export {
|
|
|
880
849
|
SVGElements,
|
|
881
850
|
SVGNamespace,
|
|
882
851
|
UnitlessStyles,
|
|
852
|
+
__fictDisableResumable,
|
|
853
|
+
__fictDisableSSR,
|
|
854
|
+
__fictEnableResumable,
|
|
855
|
+
__fictEnableSSR,
|
|
856
|
+
__fictEnsureScope,
|
|
857
|
+
__fictEnterHydration,
|
|
858
|
+
__fictExitHydration,
|
|
859
|
+
__fictGetResume,
|
|
860
|
+
__fictGetSSRScope,
|
|
861
|
+
__fictGetScopeProps,
|
|
862
|
+
__fictGetScopeRegistry,
|
|
863
|
+
__fictIsHydrating,
|
|
864
|
+
__fictIsResumable,
|
|
865
|
+
__fictIsSSR,
|
|
883
866
|
__fictPopContext,
|
|
867
|
+
__fictPrepareContext,
|
|
884
868
|
__fictProp,
|
|
885
869
|
__fictPropsRest,
|
|
886
870
|
__fictPushContext,
|
|
871
|
+
__fictQrl,
|
|
872
|
+
__fictRegisterResume,
|
|
873
|
+
__fictRegisterScope,
|
|
887
874
|
__fictRender,
|
|
888
875
|
__fictResetContext,
|
|
876
|
+
__fictSerializeSSRState,
|
|
877
|
+
__fictSetSSRState,
|
|
889
878
|
__fictUseContext,
|
|
890
879
|
__fictUseEffect,
|
|
880
|
+
__fictUseLexicalScope,
|
|
891
881
|
__fictUseMemo,
|
|
892
882
|
__fictUseSignal,
|
|
893
883
|
__resetReactiveState,
|
|
@@ -915,11 +905,16 @@ export {
|
|
|
915
905
|
signal as createSignal,
|
|
916
906
|
createStore,
|
|
917
907
|
delegateEvents,
|
|
908
|
+
deserializeValue,
|
|
918
909
|
getPropAlias,
|
|
910
|
+
getSlotEnd,
|
|
911
|
+
hydrateComponent,
|
|
919
912
|
insert,
|
|
913
|
+
insertBetween,
|
|
920
914
|
insertNodesBefore,
|
|
921
915
|
isNodeBetweenMarkers,
|
|
922
916
|
isReactive,
|
|
917
|
+
isStoreProxy,
|
|
923
918
|
keyed,
|
|
924
919
|
mergeProps,
|
|
925
920
|
moveNodesBefore,
|
|
@@ -927,10 +922,14 @@ export {
|
|
|
927
922
|
prop,
|
|
928
923
|
reconcileArrays,
|
|
929
924
|
removeNodes,
|
|
925
|
+
render,
|
|
926
|
+
resolvePath,
|
|
930
927
|
runInScope,
|
|
928
|
+
serializeValue,
|
|
931
929
|
spread,
|
|
932
930
|
template,
|
|
933
931
|
toNodeArray,
|
|
934
|
-
unwrap
|
|
932
|
+
unwrap,
|
|
933
|
+
unwrapStore
|
|
935
934
|
};
|
|
936
935
|
//# sourceMappingURL=internal.js.map
|