@fluixi/reactive 1.0.0-alpha.104 → 1.0.0-alpha.106
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/cdn/reactive.cjs +74 -34
- package/dist/cdn/reactive.global.js +2 -2
- package/dist/cdn/reactive.mjs +74 -34
- package/dist/cdn/signal.cjs +23 -3
- package/dist/cdn/signal.global.js +2 -2
- package/dist/cdn/signal.mjs +23 -3
- package/dist/index.cjs +74 -34
- package/dist/index.mjs +74 -34
- package/dist/lib/index.cjs +75 -35
- package/dist/lib/index.mjs +75 -35
- package/dist/lib/observable/index.cjs +1 -1
- package/dist/lib/observable/index.mjs +1 -1
- package/dist/lib/signal/api.cjs +40 -14
- package/dist/lib/signal/api.mjs +40 -14
- package/dist/lib/signal/cached-resource.cjs +36 -13
- package/dist/lib/signal/cached-resource.mjs +36 -13
- package/dist/lib/signal/graph/children.cjs +25 -6
- package/dist/lib/signal/graph/children.mjs +25 -6
- package/dist/lib/signal/graph/compat.cjs +41 -15
- package/dist/lib/signal/graph/compat.d.ts.map +1 -1
- package/dist/lib/signal/graph/compat.js +20 -11
- package/dist/lib/signal/graph/compat.mjs +41 -15
- package/dist/lib/signal/graph/context-children.cjs +1 -1
- package/dist/lib/signal/graph/context-children.mjs +1 -1
- package/dist/lib/signal/graph/core.cjs +24 -4
- package/dist/lib/signal/graph/core.d.ts +10 -0
- package/dist/lib/signal/graph/core.d.ts.map +1 -1
- package/dist/lib/signal/graph/core.js +27 -2
- package/dist/lib/signal/graph/core.mjs +24 -4
- package/dist/lib/signal/graph/debounced.cjs +35 -12
- package/dist/lib/signal/graph/debounced.mjs +35 -12
- package/dist/lib/signal/graph/derived.cjs +35 -12
- package/dist/lib/signal/graph/derived.mjs +35 -12
- package/dist/lib/signal/graph/detect.cjs +1 -1
- package/dist/lib/signal/graph/detect.mjs +1 -1
- package/dist/lib/signal/graph/error-boundary.cjs +10 -8
- package/dist/lib/signal/graph/error-boundary.mjs +10 -8
- package/dist/lib/signal/graph/index.cjs +24 -4
- package/dist/lib/signal/graph/index.mjs +24 -4
- package/dist/lib/signal/graph/observe.cjs +1 -1
- package/dist/lib/signal/graph/observe.mjs +1 -1
- package/dist/lib/signal/graph/resource.cjs +35 -12
- package/dist/lib/signal/graph/resource.mjs +35 -12
- package/dist/lib/signal/graph/runtime.cjs +29 -5
- package/dist/lib/signal/graph/runtime.d.ts.map +1 -1
- package/dist/lib/signal/graph/runtime.js +5 -3
- package/dist/lib/signal/graph/runtime.mjs +29 -5
- package/dist/lib/signal/graph/signal-next.cjs +67 -29
- package/dist/lib/signal/graph/signal-next.mjs +67 -29
- package/dist/lib/signal/graph/state.cjs +1 -1
- package/dist/lib/signal/graph/state.mjs +1 -1
- package/dist/lib/signal/graph/suspense.cjs +10 -8
- package/dist/lib/signal/graph/suspense.mjs +10 -8
- package/dist/lib/signal/index-legacy.cjs +67 -29
- package/dist/lib/signal/index-legacy.mjs +67 -29
- package/dist/lib/signal/index.cjs +67 -29
- package/dist/lib/signal/index.mjs +67 -29
- package/dist/lib/signal/list.cjs +58 -25
- package/dist/lib/signal/list.d.ts +3 -8
- package/dist/lib/signal/list.d.ts.map +1 -1
- package/dist/lib/signal/list.js +40 -18
- package/dist/lib/signal/list.mjs +58 -25
- package/dist/lib/signal/resource-api.cjs +35 -12
- package/dist/lib/signal/resource-api.mjs +35 -12
- package/dist/lib/signal/signal.cjs +41 -15
- package/dist/lib/signal/signal.mjs +41 -15
- package/dist/lib/signal/utilities.cjs +41 -15
- package/dist/lib/signal/utilities.mjs +41 -15
- package/dist/lib/store/api.cjs +9 -7
- package/dist/lib/store/api.mjs +9 -7
- package/dist/lib/store/index.cjs +10 -8
- package/dist/lib/store/index.mjs +10 -8
- package/dist/lib/store/store.cjs +9 -7
- package/dist/lib/store/store.d.ts.map +1 -1
- package/dist/lib/store/store.js +8 -6
- package/dist/lib/store/store.mjs +9 -7
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/dist/version.generated.cjs +2 -2
- package/dist/version.generated.d.ts +1 -1
- package/dist/version.generated.js +1 -1
- package/dist/version.generated.mjs +2 -2
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @fluixi/reactive v1.0.0-alpha.
|
|
1
|
+
/*! @fluixi/reactive v1.0.0-alpha.106 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
|
|
2
2
|
"use strict";
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -84,7 +84,7 @@ __export(signal_next_exports, {
|
|
|
84
84
|
module.exports = __toCommonJS(signal_next_exports);
|
|
85
85
|
|
|
86
86
|
// src/version.generated.ts
|
|
87
|
-
var VERSION = "1.0.0-alpha.
|
|
87
|
+
var VERSION = "1.0.0-alpha.106";
|
|
88
88
|
|
|
89
89
|
// src/lib/signal/graph/state.ts
|
|
90
90
|
var MAJOR = VERSION.split(".")[0];
|
|
@@ -234,6 +234,7 @@ var Computed = class extends Source {
|
|
|
234
234
|
super();
|
|
235
235
|
this._threw = false;
|
|
236
236
|
this._initialized = false;
|
|
237
|
+
this._disposed = false;
|
|
237
238
|
this.state = DIRTY;
|
|
238
239
|
/** Nodes this computation read on its last run. Rebuilt on every run. */
|
|
239
240
|
this.sources = null;
|
|
@@ -249,8 +250,23 @@ var Computed = class extends Source {
|
|
|
249
250
|
if (this._threw) throw this._error;
|
|
250
251
|
return this._value;
|
|
251
252
|
}
|
|
253
|
+
/**
|
|
254
|
+
* Unlink from every source, for good. Without this, a source outlives the
|
|
255
|
+
* computation and keeps it (and everything its function captured) reachable
|
|
256
|
+
* through its observers set: a disposed list row stayed in memory that way.
|
|
257
|
+
* The last value stays readable; the node simply never updates again.
|
|
258
|
+
*/
|
|
259
|
+
dispose() {
|
|
260
|
+
if (this._disposed) return;
|
|
261
|
+
this._disposed = true;
|
|
262
|
+
if (this.sources) {
|
|
263
|
+
for (const s of this.sources) s.observers?.delete(this);
|
|
264
|
+
this.sources = null;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
252
267
|
/** Settle, if CHECK, verify sources; if DIRTY (or never run), recompute. */
|
|
253
268
|
updateIfNecessary() {
|
|
269
|
+
if (this._disposed) return;
|
|
254
270
|
if (this.state === CHECK) {
|
|
255
271
|
if (this.sources) {
|
|
256
272
|
for (const s of this.sources) {
|
|
@@ -294,7 +310,7 @@ var Computed = class extends Source {
|
|
|
294
310
|
reportReactiveRun(this);
|
|
295
311
|
if (changed) {
|
|
296
312
|
this.version++;
|
|
297
|
-
if (this.observers) for (const o of
|
|
313
|
+
if (this.observers) for (const o of this.observers) o.markDirty(DIRTY);
|
|
298
314
|
notifyWatchers(this);
|
|
299
315
|
}
|
|
300
316
|
}
|
|
@@ -308,7 +324,7 @@ var Computed = class extends Source {
|
|
|
308
324
|
const wasClean = this.state === CLEAN;
|
|
309
325
|
this.state = level;
|
|
310
326
|
if (wasClean) {
|
|
311
|
-
if (this.observers) for (const o of
|
|
327
|
+
if (this.observers) for (const o of this.observers) o.markDirty(CHECK);
|
|
312
328
|
notifyWatchers(this);
|
|
313
329
|
}
|
|
314
330
|
}
|
|
@@ -347,6 +363,10 @@ var Watcher = class {
|
|
|
347
363
|
this._pending.clear();
|
|
348
364
|
return out;
|
|
349
365
|
}
|
|
366
|
+
/** Drain pending without the array, for callers that only need it empty. */
|
|
367
|
+
clearPending() {
|
|
368
|
+
this._pending.clear();
|
|
369
|
+
}
|
|
350
370
|
/** @internal, a watched node became non-clean. Edge-triggered: notify once. */
|
|
351
371
|
_notify(node) {
|
|
352
372
|
if (!this._watched.has(node) || this._pending.has(node)) return;
|
|
@@ -564,14 +584,14 @@ var EffectNode = class {
|
|
|
564
584
|
if (typeof r === "function") (this.owner.cleanups ??= []).push(r);
|
|
565
585
|
});
|
|
566
586
|
});
|
|
567
|
-
reportReactiveNode({ kind: "effect", node: this.computed, handle: this, internal: !report, ...name ? { name } : {} });
|
|
587
|
+
if (isObserved()) reportReactiveNode({ kind: "effect", node: this.computed, handle: this, internal: !report, ...name ? { name } : {} });
|
|
568
588
|
this.watcher = new Watcher(() => enqueue(this));
|
|
569
589
|
this.run();
|
|
570
590
|
this.watcher.watch(this.computed);
|
|
571
591
|
}
|
|
572
592
|
run() {
|
|
573
593
|
if (this.disposed) return;
|
|
574
|
-
this.watcher.
|
|
594
|
+
this.watcher.clearPending();
|
|
575
595
|
try {
|
|
576
596
|
this.computed.get();
|
|
577
597
|
} catch (e) {
|
|
@@ -588,6 +608,7 @@ var EffectNode = class {
|
|
|
588
608
|
this.disposed = true;
|
|
589
609
|
reportReactiveDispose(this.computed);
|
|
590
610
|
this.watcher.unwatch(this.computed);
|
|
611
|
+
this.computed.dispose();
|
|
591
612
|
disposeOwner(this.owner);
|
|
592
613
|
}
|
|
593
614
|
};
|
|
@@ -626,13 +647,15 @@ function createSignal(value, options) {
|
|
|
626
647
|
},
|
|
627
648
|
enumerable: false
|
|
628
649
|
});
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
650
|
+
if (isObserved()) {
|
|
651
|
+
reportReactiveNode({
|
|
652
|
+
kind: "signal",
|
|
653
|
+
node: state,
|
|
654
|
+
handle: read,
|
|
655
|
+
name: options?.name,
|
|
656
|
+
set: write
|
|
657
|
+
});
|
|
658
|
+
}
|
|
636
659
|
if (isObserved()) onCleanup(() => reportReactiveDispose(state));
|
|
637
660
|
return [read, write];
|
|
638
661
|
}
|
|
@@ -656,8 +679,11 @@ function createMemo(fn, value, options) {
|
|
|
656
679
|
const read = (() => c.get());
|
|
657
680
|
Object.defineProperty(read, $SIGNAL, { value: true, enumerable: true });
|
|
658
681
|
Object.defineProperty(read, $MEMO, { value: true, enumerable: true });
|
|
659
|
-
reportReactiveNode({ kind: "memo", node: c, handle: read, name: options?.name });
|
|
660
|
-
|
|
682
|
+
if (isObserved()) reportReactiveNode({ kind: "memo", node: c, handle: read, name: options?.name });
|
|
683
|
+
onCleanup(() => {
|
|
684
|
+
c.dispose();
|
|
685
|
+
if (isObserved()) reportReactiveDispose(c);
|
|
686
|
+
});
|
|
661
687
|
return read;
|
|
662
688
|
}
|
|
663
689
|
function createEffect(fn, value, options) {
|
|
@@ -714,6 +740,20 @@ function on(deps, fn, options) {
|
|
|
714
740
|
}
|
|
715
741
|
|
|
716
742
|
// src/lib/signal/list.ts
|
|
743
|
+
function lazyIndex(initial) {
|
|
744
|
+
let current = initial;
|
|
745
|
+
let state = null;
|
|
746
|
+
return {
|
|
747
|
+
index: () => {
|
|
748
|
+
if (!state) state = createSignal(current, { name: "row index" });
|
|
749
|
+
return state[0]();
|
|
750
|
+
},
|
|
751
|
+
set: (n) => {
|
|
752
|
+
current = n;
|
|
753
|
+
if (state) state[1](n);
|
|
754
|
+
}
|
|
755
|
+
};
|
|
756
|
+
}
|
|
717
757
|
function mapArray(list, mapFn, options) {
|
|
718
758
|
let items = [];
|
|
719
759
|
onCleanup(() => {
|
|
@@ -743,9 +783,9 @@ function mapArray(list, mapFn, options) {
|
|
|
743
783
|
let rendered, setIndex, dispose;
|
|
744
784
|
createRoot((d) => {
|
|
745
785
|
dispose = d;
|
|
746
|
-
const
|
|
747
|
-
setIndex =
|
|
748
|
-
rendered = mapFn(value, index);
|
|
786
|
+
const idx = lazyIndex(i);
|
|
787
|
+
setIndex = idx.set;
|
|
788
|
+
rendered = mapFn(value, idx.index);
|
|
749
789
|
});
|
|
750
790
|
const entry = { item: value, rendered, dispose, setIndex };
|
|
751
791
|
result.push(entry);
|
|
@@ -785,21 +825,19 @@ function keyArray(list, keyFn, mapFn, options) {
|
|
|
785
825
|
const reuse = prevByKey.get(key);
|
|
786
826
|
if (reuse && !usedKeys.has(key)) {
|
|
787
827
|
reuse.setIndex(i);
|
|
828
|
+
reuse.setItem(next[i]);
|
|
788
829
|
resultEntries.push(reuse);
|
|
789
830
|
} else {
|
|
790
|
-
let rendered, setIndex, dispose;
|
|
831
|
+
let rendered, setIndex, setItem, dispose;
|
|
791
832
|
createRoot((d) => {
|
|
792
833
|
dispose = d;
|
|
793
|
-
const
|
|
794
|
-
setIndex =
|
|
795
|
-
const item =
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
return v !== void 0 && v !== null ? v : prev;
|
|
799
|
-
}, next[i]);
|
|
800
|
-
rendered = mapFn(item, index);
|
|
834
|
+
const idx = lazyIndex(i);
|
|
835
|
+
setIndex = idx.set;
|
|
836
|
+
const [item, writeItem] = createSignal(next[i]);
|
|
837
|
+
setItem = (v) => writeItem(() => v);
|
|
838
|
+
rendered = mapFn(item, idx.index);
|
|
801
839
|
});
|
|
802
|
-
resultEntries.push({ rendered, dispose, setIndex });
|
|
840
|
+
resultEntries.push({ rendered, dispose, setIndex, setItem });
|
|
803
841
|
}
|
|
804
842
|
resultKeys.push(key);
|
|
805
843
|
usedKeys.add(key);
|
|
@@ -849,7 +887,7 @@ function indexArray(list, mapFn, options) {
|
|
|
849
887
|
|
|
850
888
|
// src/lib/signal/graph/detect.ts
|
|
851
889
|
var __BROWSER_PROD__ = typeof window === "undefined" ? false : window.__FLUIXI_PROD__ === true;
|
|
852
|
-
var __DEV__ = typeof process === "undefined" ? __BROWSER_PROD__ :
|
|
890
|
+
var __DEV__ = typeof process === "undefined" ? __BROWSER_PROD__ : process.env.NODE_ENV !== "production";
|
|
853
891
|
var $SIGNAL2 = /* @__PURE__ */ Symbol.for("signal");
|
|
854
892
|
var $MEMO2 = /* @__PURE__ */ Symbol.for("memo");
|
|
855
893
|
var $RESOURCE = /* @__PURE__ */ Symbol.for("resource");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/*! @fluixi/reactive v1.0.0-alpha.
|
|
1
|
+
/*! @fluixi/reactive v1.0.0-alpha.106 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
|
|
2
2
|
|
|
3
3
|
// src/version.generated.ts
|
|
4
|
-
var VERSION = "1.0.0-alpha.
|
|
4
|
+
var VERSION = "1.0.0-alpha.106";
|
|
5
5
|
|
|
6
6
|
// src/lib/signal/graph/state.ts
|
|
7
7
|
var MAJOR = VERSION.split(".")[0];
|
|
@@ -151,6 +151,7 @@ var Computed = class extends Source {
|
|
|
151
151
|
super();
|
|
152
152
|
this._threw = false;
|
|
153
153
|
this._initialized = false;
|
|
154
|
+
this._disposed = false;
|
|
154
155
|
this.state = DIRTY;
|
|
155
156
|
/** Nodes this computation read on its last run. Rebuilt on every run. */
|
|
156
157
|
this.sources = null;
|
|
@@ -166,8 +167,23 @@ var Computed = class extends Source {
|
|
|
166
167
|
if (this._threw) throw this._error;
|
|
167
168
|
return this._value;
|
|
168
169
|
}
|
|
170
|
+
/**
|
|
171
|
+
* Unlink from every source, for good. Without this, a source outlives the
|
|
172
|
+
* computation and keeps it (and everything its function captured) reachable
|
|
173
|
+
* through its observers set: a disposed list row stayed in memory that way.
|
|
174
|
+
* The last value stays readable; the node simply never updates again.
|
|
175
|
+
*/
|
|
176
|
+
dispose() {
|
|
177
|
+
if (this._disposed) return;
|
|
178
|
+
this._disposed = true;
|
|
179
|
+
if (this.sources) {
|
|
180
|
+
for (const s of this.sources) s.observers?.delete(this);
|
|
181
|
+
this.sources = null;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
169
184
|
/** Settle, if CHECK, verify sources; if DIRTY (or never run), recompute. */
|
|
170
185
|
updateIfNecessary() {
|
|
186
|
+
if (this._disposed) return;
|
|
171
187
|
if (this.state === CHECK) {
|
|
172
188
|
if (this.sources) {
|
|
173
189
|
for (const s of this.sources) {
|
|
@@ -211,7 +227,7 @@ var Computed = class extends Source {
|
|
|
211
227
|
reportReactiveRun(this);
|
|
212
228
|
if (changed) {
|
|
213
229
|
this.version++;
|
|
214
|
-
if (this.observers) for (const o of
|
|
230
|
+
if (this.observers) for (const o of this.observers) o.markDirty(DIRTY);
|
|
215
231
|
notifyWatchers(this);
|
|
216
232
|
}
|
|
217
233
|
}
|
|
@@ -225,7 +241,7 @@ var Computed = class extends Source {
|
|
|
225
241
|
const wasClean = this.state === CLEAN;
|
|
226
242
|
this.state = level;
|
|
227
243
|
if (wasClean) {
|
|
228
|
-
if (this.observers) for (const o of
|
|
244
|
+
if (this.observers) for (const o of this.observers) o.markDirty(CHECK);
|
|
229
245
|
notifyWatchers(this);
|
|
230
246
|
}
|
|
231
247
|
}
|
|
@@ -264,6 +280,10 @@ var Watcher = class {
|
|
|
264
280
|
this._pending.clear();
|
|
265
281
|
return out;
|
|
266
282
|
}
|
|
283
|
+
/** Drain pending without the array, for callers that only need it empty. */
|
|
284
|
+
clearPending() {
|
|
285
|
+
this._pending.clear();
|
|
286
|
+
}
|
|
267
287
|
/** @internal, a watched node became non-clean. Edge-triggered: notify once. */
|
|
268
288
|
_notify(node) {
|
|
269
289
|
if (!this._watched.has(node) || this._pending.has(node)) return;
|
|
@@ -481,14 +501,14 @@ var EffectNode = class {
|
|
|
481
501
|
if (typeof r === "function") (this.owner.cleanups ??= []).push(r);
|
|
482
502
|
});
|
|
483
503
|
});
|
|
484
|
-
reportReactiveNode({ kind: "effect", node: this.computed, handle: this, internal: !report, ...name ? { name } : {} });
|
|
504
|
+
if (isObserved()) reportReactiveNode({ kind: "effect", node: this.computed, handle: this, internal: !report, ...name ? { name } : {} });
|
|
485
505
|
this.watcher = new Watcher(() => enqueue(this));
|
|
486
506
|
this.run();
|
|
487
507
|
this.watcher.watch(this.computed);
|
|
488
508
|
}
|
|
489
509
|
run() {
|
|
490
510
|
if (this.disposed) return;
|
|
491
|
-
this.watcher.
|
|
511
|
+
this.watcher.clearPending();
|
|
492
512
|
try {
|
|
493
513
|
this.computed.get();
|
|
494
514
|
} catch (e) {
|
|
@@ -505,6 +525,7 @@ var EffectNode = class {
|
|
|
505
525
|
this.disposed = true;
|
|
506
526
|
reportReactiveDispose(this.computed);
|
|
507
527
|
this.watcher.unwatch(this.computed);
|
|
528
|
+
this.computed.dispose();
|
|
508
529
|
disposeOwner(this.owner);
|
|
509
530
|
}
|
|
510
531
|
};
|
|
@@ -543,13 +564,15 @@ function createSignal(value, options) {
|
|
|
543
564
|
},
|
|
544
565
|
enumerable: false
|
|
545
566
|
});
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
567
|
+
if (isObserved()) {
|
|
568
|
+
reportReactiveNode({
|
|
569
|
+
kind: "signal",
|
|
570
|
+
node: state,
|
|
571
|
+
handle: read,
|
|
572
|
+
name: options?.name,
|
|
573
|
+
set: write
|
|
574
|
+
});
|
|
575
|
+
}
|
|
553
576
|
if (isObserved()) onCleanup(() => reportReactiveDispose(state));
|
|
554
577
|
return [read, write];
|
|
555
578
|
}
|
|
@@ -573,8 +596,11 @@ function createMemo(fn, value, options) {
|
|
|
573
596
|
const read = (() => c.get());
|
|
574
597
|
Object.defineProperty(read, $SIGNAL, { value: true, enumerable: true });
|
|
575
598
|
Object.defineProperty(read, $MEMO, { value: true, enumerable: true });
|
|
576
|
-
reportReactiveNode({ kind: "memo", node: c, handle: read, name: options?.name });
|
|
577
|
-
|
|
599
|
+
if (isObserved()) reportReactiveNode({ kind: "memo", node: c, handle: read, name: options?.name });
|
|
600
|
+
onCleanup(() => {
|
|
601
|
+
c.dispose();
|
|
602
|
+
if (isObserved()) reportReactiveDispose(c);
|
|
603
|
+
});
|
|
578
604
|
return read;
|
|
579
605
|
}
|
|
580
606
|
function createEffect(fn, value, options) {
|
|
@@ -631,6 +657,20 @@ function on(deps, fn, options) {
|
|
|
631
657
|
}
|
|
632
658
|
|
|
633
659
|
// src/lib/signal/list.ts
|
|
660
|
+
function lazyIndex(initial) {
|
|
661
|
+
let current = initial;
|
|
662
|
+
let state = null;
|
|
663
|
+
return {
|
|
664
|
+
index: () => {
|
|
665
|
+
if (!state) state = createSignal(current, { name: "row index" });
|
|
666
|
+
return state[0]();
|
|
667
|
+
},
|
|
668
|
+
set: (n) => {
|
|
669
|
+
current = n;
|
|
670
|
+
if (state) state[1](n);
|
|
671
|
+
}
|
|
672
|
+
};
|
|
673
|
+
}
|
|
634
674
|
function mapArray(list, mapFn, options) {
|
|
635
675
|
let items = [];
|
|
636
676
|
onCleanup(() => {
|
|
@@ -660,9 +700,9 @@ function mapArray(list, mapFn, options) {
|
|
|
660
700
|
let rendered, setIndex, dispose;
|
|
661
701
|
createRoot((d) => {
|
|
662
702
|
dispose = d;
|
|
663
|
-
const
|
|
664
|
-
setIndex =
|
|
665
|
-
rendered = mapFn(value, index);
|
|
703
|
+
const idx = lazyIndex(i);
|
|
704
|
+
setIndex = idx.set;
|
|
705
|
+
rendered = mapFn(value, idx.index);
|
|
666
706
|
});
|
|
667
707
|
const entry = { item: value, rendered, dispose, setIndex };
|
|
668
708
|
result.push(entry);
|
|
@@ -702,21 +742,19 @@ function keyArray(list, keyFn, mapFn, options) {
|
|
|
702
742
|
const reuse = prevByKey.get(key);
|
|
703
743
|
if (reuse && !usedKeys.has(key)) {
|
|
704
744
|
reuse.setIndex(i);
|
|
745
|
+
reuse.setItem(next[i]);
|
|
705
746
|
resultEntries.push(reuse);
|
|
706
747
|
} else {
|
|
707
|
-
let rendered, setIndex, dispose;
|
|
748
|
+
let rendered, setIndex, setItem, dispose;
|
|
708
749
|
createRoot((d) => {
|
|
709
750
|
dispose = d;
|
|
710
|
-
const
|
|
711
|
-
setIndex =
|
|
712
|
-
const item =
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
return v !== void 0 && v !== null ? v : prev;
|
|
716
|
-
}, next[i]);
|
|
717
|
-
rendered = mapFn(item, index);
|
|
751
|
+
const idx = lazyIndex(i);
|
|
752
|
+
setIndex = idx.set;
|
|
753
|
+
const [item, writeItem] = createSignal(next[i]);
|
|
754
|
+
setItem = (v) => writeItem(() => v);
|
|
755
|
+
rendered = mapFn(item, idx.index);
|
|
718
756
|
});
|
|
719
|
-
resultEntries.push({ rendered, dispose, setIndex });
|
|
757
|
+
resultEntries.push({ rendered, dispose, setIndex, setItem });
|
|
720
758
|
}
|
|
721
759
|
resultKeys.push(key);
|
|
722
760
|
usedKeys.add(key);
|
|
@@ -766,7 +804,7 @@ function indexArray(list, mapFn, options) {
|
|
|
766
804
|
|
|
767
805
|
// src/lib/signal/graph/detect.ts
|
|
768
806
|
var __BROWSER_PROD__ = typeof window === "undefined" ? false : window.__FLUIXI_PROD__ === true;
|
|
769
|
-
var __DEV__ = typeof process === "undefined" ? __BROWSER_PROD__ :
|
|
807
|
+
var __DEV__ = typeof process === "undefined" ? __BROWSER_PROD__ : process.env.NODE_ENV !== "production";
|
|
770
808
|
var $SIGNAL2 = /* @__PURE__ */ Symbol.for("signal");
|
|
771
809
|
var $MEMO2 = /* @__PURE__ */ Symbol.for("memo");
|
|
772
810
|
var $RESOURCE = /* @__PURE__ */ Symbol.for("resource");
|
|
@@ -27,7 +27,7 @@ __export(suspense_exports, {
|
|
|
27
27
|
module.exports = __toCommonJS(suspense_exports);
|
|
28
28
|
|
|
29
29
|
// src/version.generated.ts
|
|
30
|
-
var VERSION = "1.0.0-alpha.
|
|
30
|
+
var VERSION = "1.0.0-alpha.106";
|
|
31
31
|
|
|
32
32
|
// src/lib/signal/graph/state.ts
|
|
33
33
|
var MAJOR = VERSION.split(".")[0];
|
|
@@ -280,13 +280,15 @@ function createSignal(value, options) {
|
|
|
280
280
|
},
|
|
281
281
|
enumerable: false
|
|
282
282
|
});
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
283
|
+
if (isObserved()) {
|
|
284
|
+
reportReactiveNode({
|
|
285
|
+
kind: "signal",
|
|
286
|
+
node: state,
|
|
287
|
+
handle: read,
|
|
288
|
+
name: options?.name,
|
|
289
|
+
set: write
|
|
290
|
+
});
|
|
291
|
+
}
|
|
290
292
|
if (isObserved()) onCleanup(() => reportReactiveDispose(state));
|
|
291
293
|
return [read, write];
|
|
292
294
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/version.generated.ts
|
|
2
|
-
var VERSION = "1.0.0-alpha.
|
|
2
|
+
var VERSION = "1.0.0-alpha.106";
|
|
3
3
|
|
|
4
4
|
// src/lib/signal/graph/state.ts
|
|
5
5
|
var MAJOR = VERSION.split(".")[0];
|
|
@@ -252,13 +252,15 @@ function createSignal(value, options) {
|
|
|
252
252
|
},
|
|
253
253
|
enumerable: false
|
|
254
254
|
});
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
255
|
+
if (isObserved()) {
|
|
256
|
+
reportReactiveNode({
|
|
257
|
+
kind: "signal",
|
|
258
|
+
node: state,
|
|
259
|
+
handle: read,
|
|
260
|
+
name: options?.name,
|
|
261
|
+
set: write
|
|
262
|
+
});
|
|
263
|
+
}
|
|
262
264
|
if (isObserved()) onCleanup(() => reportReactiveDispose(state));
|
|
263
265
|
return [read, write];
|
|
264
266
|
}
|