@zeix/cause-effect 0.18.1 → 0.18.3
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/.ai-context.md +12 -4
- package/.github/copilot-instructions.md +10 -2
- package/ARCHITECTURE.md +44 -10
- package/CHANGELOG.md +24 -0
- package/CLAUDE.md +49 -1
- package/GUIDE.md +23 -1
- package/README.md +46 -1
- package/REQUIREMENTS.md +4 -3
- package/index.dev.js +170 -71
- package/index.js +1 -1
- package/index.ts +3 -1
- package/package.json +1 -1
- package/src/errors.ts +13 -0
- package/src/graph.ts +17 -3
- package/src/nodes/collection.ts +43 -33
- package/src/nodes/effect.ts +3 -3
- package/src/nodes/list.ts +16 -12
- package/src/nodes/slot.ts +134 -0
- package/src/nodes/store.ts +16 -12
- package/src/signal.ts +2 -0
- package/test/effect.test.ts +17 -0
- package/test/list.test.ts +192 -0
- package/test/signal.test.ts +2 -0
- package/test/slot.test.ts +118 -0
- package/types/index.d.ts +3 -2
- package/types/src/errors.d.ts +9 -1
- package/types/src/graph.d.ts +3 -1
- package/types/src/nodes/effect.d.ts +2 -2
- package/types/src/nodes/slot.d.ts +53 -0
package/index.dev.js
CHANGED
|
@@ -57,6 +57,13 @@ class InvalidCallbackError extends TypeError {
|
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
class ReadonlySignalError extends Error {
|
|
61
|
+
constructor(where) {
|
|
62
|
+
super(`[${where}] Signal is read-only`);
|
|
63
|
+
this.name = "ReadonlySignalError";
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
60
67
|
class RequiredOwnerError extends Error {
|
|
61
68
|
constructor(where) {
|
|
62
69
|
super(`[${where}] Active owner is required`);
|
|
@@ -92,10 +99,12 @@ var TYPE_SENSOR = "Sensor";
|
|
|
92
99
|
var TYPE_LIST = "List";
|
|
93
100
|
var TYPE_COLLECTION = "Collection";
|
|
94
101
|
var TYPE_STORE = "Store";
|
|
102
|
+
var TYPE_SLOT = "Slot";
|
|
95
103
|
var FLAG_CLEAN = 0;
|
|
96
104
|
var FLAG_CHECK = 1 << 0;
|
|
97
105
|
var FLAG_DIRTY = 1 << 1;
|
|
98
106
|
var FLAG_RUNNING = 1 << 2;
|
|
107
|
+
var FLAG_RELINK = 1 << 3;
|
|
99
108
|
var activeSink = null;
|
|
100
109
|
var activeOwner = null;
|
|
101
110
|
var queuedEffects = [];
|
|
@@ -154,9 +163,16 @@ function unlink(edge) {
|
|
|
154
163
|
prevSink.nextSink = nextSink;
|
|
155
164
|
else
|
|
156
165
|
source.sinks = nextSink;
|
|
157
|
-
if (!source.sinks
|
|
158
|
-
source.stop
|
|
159
|
-
|
|
166
|
+
if (!source.sinks) {
|
|
167
|
+
if (source.stop) {
|
|
168
|
+
source.stop();
|
|
169
|
+
source.stop = undefined;
|
|
170
|
+
}
|
|
171
|
+
if ("sources" in source && source.sources) {
|
|
172
|
+
const sinkNode = source;
|
|
173
|
+
sinkNode.sourcesTail = null;
|
|
174
|
+
trimSources(sinkNode);
|
|
175
|
+
}
|
|
160
176
|
}
|
|
161
177
|
return nextSource;
|
|
162
178
|
}
|
|
@@ -576,10 +592,8 @@ function createList(value, options) {
|
|
|
576
592
|
keys.splice(index, 1);
|
|
577
593
|
structural = true;
|
|
578
594
|
}
|
|
579
|
-
if (structural)
|
|
580
|
-
node.
|
|
581
|
-
node.sourcesTail = null;
|
|
582
|
-
}
|
|
595
|
+
if (structural)
|
|
596
|
+
node.flags |= FLAG_RELINK;
|
|
583
597
|
return changes.changed;
|
|
584
598
|
};
|
|
585
599
|
const watched = options?.watched;
|
|
@@ -619,8 +633,16 @@ function createList(value, options) {
|
|
|
619
633
|
subscribe();
|
|
620
634
|
if (node.sources) {
|
|
621
635
|
if (node.flags) {
|
|
636
|
+
const relink = node.flags & FLAG_RELINK;
|
|
622
637
|
node.value = untrack(buildValue);
|
|
623
|
-
|
|
638
|
+
if (relink) {
|
|
639
|
+
node.flags = FLAG_DIRTY;
|
|
640
|
+
refresh(node);
|
|
641
|
+
if (node.error)
|
|
642
|
+
throw node.error;
|
|
643
|
+
} else {
|
|
644
|
+
node.flags = FLAG_CLEAN;
|
|
645
|
+
}
|
|
624
646
|
}
|
|
625
647
|
} else {
|
|
626
648
|
refresh(node);
|
|
@@ -669,9 +691,7 @@ function createList(value, options) {
|
|
|
669
691
|
keys.push(key);
|
|
670
692
|
validateSignalValue(`${TYPE_LIST} item for key "${key}"`, value2);
|
|
671
693
|
signals.set(key, createState(value2));
|
|
672
|
-
node.
|
|
673
|
-
node.sourcesTail = null;
|
|
674
|
-
node.flags |= FLAG_DIRTY;
|
|
694
|
+
node.flags |= FLAG_DIRTY | FLAG_RELINK;
|
|
675
695
|
for (let e = node.sinks;e; e = e.nextSink)
|
|
676
696
|
propagate(e.sink);
|
|
677
697
|
if (batchDepth === 0)
|
|
@@ -685,9 +705,7 @@ function createList(value, options) {
|
|
|
685
705
|
const index = typeof keyOrIndex === "number" ? keyOrIndex : keys.indexOf(key);
|
|
686
706
|
if (index >= 0)
|
|
687
707
|
keys.splice(index, 1);
|
|
688
|
-
node.
|
|
689
|
-
node.sourcesTail = null;
|
|
690
|
-
node.flags |= FLAG_DIRTY;
|
|
708
|
+
node.flags |= FLAG_DIRTY | FLAG_RELINK;
|
|
691
709
|
for (let e = node.sinks;e; e = e.nextSink)
|
|
692
710
|
propagate(e.sink);
|
|
693
711
|
if (batchDepth === 0)
|
|
@@ -868,10 +886,9 @@ function isTask(value) {
|
|
|
868
886
|
// src/nodes/collection.ts
|
|
869
887
|
function deriveCollection(source, callback) {
|
|
870
888
|
validateCallback(TYPE_COLLECTION, callback);
|
|
871
|
-
if (!isCollectionSource(source))
|
|
872
|
-
throw new TypeError(`[${TYPE_COLLECTION}] Invalid collection source: expected a List or Collection`);
|
|
873
889
|
const isAsync = isAsyncFunction(callback);
|
|
874
890
|
const signals = new Map;
|
|
891
|
+
let keys = [];
|
|
875
892
|
const addSignal = (key) => {
|
|
876
893
|
const signal = isAsync ? createTask(async (prev, abort) => {
|
|
877
894
|
const sourceValue = source.byKey(key)?.get();
|
|
@@ -886,54 +903,84 @@ function deriveCollection(source, callback) {
|
|
|
886
903
|
});
|
|
887
904
|
signals.set(key, signal);
|
|
888
905
|
};
|
|
889
|
-
function syncKeys() {
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
if (!keysEqual(prevKeys, nextKeys)) {
|
|
893
|
-
const a = new Set(prevKeys);
|
|
906
|
+
function syncKeys(nextKeys) {
|
|
907
|
+
if (!keysEqual(keys, nextKeys)) {
|
|
908
|
+
const a = new Set(keys);
|
|
894
909
|
const b = new Set(nextKeys);
|
|
895
|
-
for (const key of
|
|
910
|
+
for (const key of keys)
|
|
896
911
|
if (!b.has(key))
|
|
897
912
|
signals.delete(key);
|
|
898
913
|
for (const key of nextKeys)
|
|
899
914
|
if (!a.has(key))
|
|
900
915
|
addSignal(key);
|
|
916
|
+
keys = nextKeys;
|
|
917
|
+
node.flags |= FLAG_RELINK;
|
|
918
|
+
}
|
|
919
|
+
}
|
|
920
|
+
function buildValue() {
|
|
921
|
+
syncKeys(Array.from(source.keys()));
|
|
922
|
+
const result = [];
|
|
923
|
+
for (const key of keys) {
|
|
924
|
+
try {
|
|
925
|
+
const v = signals.get(key)?.get();
|
|
926
|
+
if (v != null)
|
|
927
|
+
result.push(v);
|
|
928
|
+
} catch (e) {
|
|
929
|
+
if (!(e instanceof UnsetSignalValueError))
|
|
930
|
+
throw e;
|
|
931
|
+
}
|
|
901
932
|
}
|
|
902
|
-
return
|
|
933
|
+
return result;
|
|
903
934
|
}
|
|
935
|
+
const valuesEqual = (a, b) => {
|
|
936
|
+
if (a.length !== b.length)
|
|
937
|
+
return false;
|
|
938
|
+
for (let i = 0;i < a.length; i++)
|
|
939
|
+
if (a[i] !== b[i])
|
|
940
|
+
return false;
|
|
941
|
+
return true;
|
|
942
|
+
};
|
|
904
943
|
const node = {
|
|
905
|
-
fn:
|
|
944
|
+
fn: buildValue,
|
|
906
945
|
value: [],
|
|
907
946
|
flags: FLAG_DIRTY,
|
|
908
947
|
sources: null,
|
|
909
948
|
sourcesTail: null,
|
|
910
949
|
sinks: null,
|
|
911
950
|
sinksTail: null,
|
|
912
|
-
equals:
|
|
951
|
+
equals: valuesEqual,
|
|
913
952
|
error: undefined
|
|
914
953
|
};
|
|
915
|
-
function
|
|
954
|
+
function ensureFresh() {
|
|
916
955
|
if (node.sources) {
|
|
917
956
|
if (node.flags) {
|
|
918
|
-
node.value = untrack(
|
|
919
|
-
node.flags
|
|
957
|
+
node.value = untrack(buildValue);
|
|
958
|
+
if (node.flags & FLAG_RELINK) {
|
|
959
|
+
node.flags = FLAG_DIRTY;
|
|
960
|
+
refresh(node);
|
|
961
|
+
if (node.error)
|
|
962
|
+
throw node.error;
|
|
963
|
+
} else {
|
|
964
|
+
node.flags = FLAG_CLEAN;
|
|
965
|
+
}
|
|
920
966
|
}
|
|
921
|
-
} else {
|
|
967
|
+
} else if (node.sinks) {
|
|
922
968
|
refresh(node);
|
|
923
969
|
if (node.error)
|
|
924
970
|
throw node.error;
|
|
971
|
+
} else {
|
|
972
|
+
node.value = untrack(buildValue);
|
|
925
973
|
}
|
|
926
|
-
return node.value;
|
|
927
974
|
}
|
|
928
|
-
const initialKeys = Array.from(source.keys());
|
|
975
|
+
const initialKeys = Array.from(untrack(() => source.keys()));
|
|
929
976
|
for (const key of initialKeys)
|
|
930
977
|
addSignal(key);
|
|
931
|
-
|
|
978
|
+
keys = initialKeys;
|
|
932
979
|
const collection = {
|
|
933
980
|
[Symbol.toStringTag]: TYPE_COLLECTION,
|
|
934
981
|
[Symbol.isConcatSpreadable]: true,
|
|
935
982
|
*[Symbol.iterator]() {
|
|
936
|
-
for (const key of
|
|
983
|
+
for (const key of keys) {
|
|
937
984
|
const signal = signals.get(key);
|
|
938
985
|
if (signal)
|
|
939
986
|
yield signal;
|
|
@@ -942,41 +989,32 @@ function deriveCollection(source, callback) {
|
|
|
942
989
|
get length() {
|
|
943
990
|
if (activeSink)
|
|
944
991
|
link(node, activeSink);
|
|
945
|
-
|
|
992
|
+
ensureFresh();
|
|
993
|
+
return keys.length;
|
|
946
994
|
},
|
|
947
995
|
keys() {
|
|
948
996
|
if (activeSink)
|
|
949
997
|
link(node, activeSink);
|
|
950
|
-
|
|
998
|
+
ensureFresh();
|
|
999
|
+
return keys.values();
|
|
951
1000
|
},
|
|
952
1001
|
get() {
|
|
953
1002
|
if (activeSink)
|
|
954
1003
|
link(node, activeSink);
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
for (const key of currentKeys) {
|
|
958
|
-
try {
|
|
959
|
-
const v = signals.get(key)?.get();
|
|
960
|
-
if (v != null)
|
|
961
|
-
result.push(v);
|
|
962
|
-
} catch (e) {
|
|
963
|
-
if (!(e instanceof UnsetSignalValueError))
|
|
964
|
-
throw e;
|
|
965
|
-
}
|
|
966
|
-
}
|
|
967
|
-
return result;
|
|
1004
|
+
ensureFresh();
|
|
1005
|
+
return node.value;
|
|
968
1006
|
},
|
|
969
1007
|
at(index) {
|
|
970
|
-
return signals.get(
|
|
1008
|
+
return signals.get(keys[index]);
|
|
971
1009
|
},
|
|
972
1010
|
byKey(key) {
|
|
973
1011
|
return signals.get(key);
|
|
974
1012
|
},
|
|
975
1013
|
keyAt(index) {
|
|
976
|
-
return
|
|
1014
|
+
return keys[index];
|
|
977
1015
|
},
|
|
978
1016
|
indexOfKey(key) {
|
|
979
|
-
return
|
|
1017
|
+
return keys.indexOf(key);
|
|
980
1018
|
},
|
|
981
1019
|
deriveCollection(cb) {
|
|
982
1020
|
return deriveCollection(collection, cb);
|
|
@@ -1073,11 +1111,7 @@ function createCollection(watched, options) {
|
|
|
1073
1111
|
structural = true;
|
|
1074
1112
|
}
|
|
1075
1113
|
}
|
|
1076
|
-
|
|
1077
|
-
node.sources = null;
|
|
1078
|
-
node.sourcesTail = null;
|
|
1079
|
-
}
|
|
1080
|
-
node.flags = FLAG_DIRTY;
|
|
1114
|
+
node.flags = FLAG_DIRTY | (structural ? FLAG_RELINK : 0);
|
|
1081
1115
|
for (let e = node.sinks;e; e = e.nextSink)
|
|
1082
1116
|
propagate(e.sink);
|
|
1083
1117
|
});
|
|
@@ -1107,8 +1141,16 @@ function createCollection(watched, options) {
|
|
|
1107
1141
|
subscribe();
|
|
1108
1142
|
if (node.sources) {
|
|
1109
1143
|
if (node.flags) {
|
|
1144
|
+
const relink = node.flags & FLAG_RELINK;
|
|
1110
1145
|
node.value = untrack(buildValue);
|
|
1111
|
-
|
|
1146
|
+
if (relink) {
|
|
1147
|
+
node.flags = FLAG_DIRTY;
|
|
1148
|
+
refresh(node);
|
|
1149
|
+
if (node.error)
|
|
1150
|
+
throw node.error;
|
|
1151
|
+
} else {
|
|
1152
|
+
node.flags = FLAG_CLEAN;
|
|
1153
|
+
}
|
|
1112
1154
|
}
|
|
1113
1155
|
} else {
|
|
1114
1156
|
refresh(node);
|
|
@@ -1138,9 +1180,6 @@ function createCollection(watched, options) {
|
|
|
1138
1180
|
function isCollection(value) {
|
|
1139
1181
|
return isObjectOfType(value, TYPE_COLLECTION);
|
|
1140
1182
|
}
|
|
1141
|
-
function isCollectionSource(value) {
|
|
1142
|
-
return isList(value) || isCollection(value);
|
|
1143
|
-
}
|
|
1144
1183
|
// src/nodes/effect.ts
|
|
1145
1184
|
function createEffect(fn) {
|
|
1146
1185
|
validateCallback("Effect", fn);
|
|
@@ -1335,10 +1374,8 @@ function createStore(value, options) {
|
|
|
1335
1374
|
signals.delete(key);
|
|
1336
1375
|
structural = true;
|
|
1337
1376
|
}
|
|
1338
|
-
if (structural)
|
|
1339
|
-
node.
|
|
1340
|
-
node.sourcesTail = null;
|
|
1341
|
-
}
|
|
1377
|
+
if (structural)
|
|
1378
|
+
node.flags |= FLAG_RELINK;
|
|
1342
1379
|
return changes.changed;
|
|
1343
1380
|
};
|
|
1344
1381
|
const watched = options?.watched;
|
|
@@ -1375,8 +1412,16 @@ function createStore(value, options) {
|
|
|
1375
1412
|
subscribe();
|
|
1376
1413
|
if (node.sources) {
|
|
1377
1414
|
if (node.flags) {
|
|
1415
|
+
const relink = node.flags & FLAG_RELINK;
|
|
1378
1416
|
node.value = untrack(buildValue);
|
|
1379
|
-
|
|
1417
|
+
if (relink) {
|
|
1418
|
+
node.flags = FLAG_DIRTY;
|
|
1419
|
+
refresh(node);
|
|
1420
|
+
if (node.error)
|
|
1421
|
+
throw node.error;
|
|
1422
|
+
} else {
|
|
1423
|
+
node.flags = FLAG_CLEAN;
|
|
1424
|
+
}
|
|
1380
1425
|
}
|
|
1381
1426
|
} else {
|
|
1382
1427
|
refresh(node);
|
|
@@ -1403,9 +1448,7 @@ function createStore(value, options) {
|
|
|
1403
1448
|
if (signals.has(key))
|
|
1404
1449
|
throw new DuplicateKeyError(TYPE_STORE, key, value2);
|
|
1405
1450
|
addSignal(key, value2);
|
|
1406
|
-
node.
|
|
1407
|
-
node.sourcesTail = null;
|
|
1408
|
-
node.flags |= FLAG_DIRTY;
|
|
1451
|
+
node.flags |= FLAG_DIRTY | FLAG_RELINK;
|
|
1409
1452
|
for (let e = node.sinks;e; e = e.nextSink)
|
|
1410
1453
|
propagate(e.sink);
|
|
1411
1454
|
if (batchDepth === 0)
|
|
@@ -1415,9 +1458,7 @@ function createStore(value, options) {
|
|
|
1415
1458
|
remove(key) {
|
|
1416
1459
|
const ok = signals.delete(key);
|
|
1417
1460
|
if (ok) {
|
|
1418
|
-
node.
|
|
1419
|
-
node.sourcesTail = null;
|
|
1420
|
-
node.flags |= FLAG_DIRTY;
|
|
1461
|
+
node.flags |= FLAG_DIRTY | FLAG_RELINK;
|
|
1421
1462
|
for (let e = node.sinks;e; e = e.nextSink)
|
|
1422
1463
|
propagate(e.sink);
|
|
1423
1464
|
if (batchDepth === 0)
|
|
@@ -1458,6 +1499,7 @@ function createStore(value, options) {
|
|
|
1458
1499
|
function isStore(value) {
|
|
1459
1500
|
return isObjectOfType(value, TYPE_STORE);
|
|
1460
1501
|
}
|
|
1502
|
+
|
|
1461
1503
|
// src/signal.ts
|
|
1462
1504
|
function createComputed(callback, options) {
|
|
1463
1505
|
return isAsyncFunction(callback) ? createTask(callback, options) : createMemo(callback, options);
|
|
@@ -1497,6 +1539,7 @@ function isSignal(value) {
|
|
|
1497
1539
|
TYPE_MEMO,
|
|
1498
1540
|
TYPE_TASK,
|
|
1499
1541
|
TYPE_SENSOR,
|
|
1542
|
+
TYPE_SLOT,
|
|
1500
1543
|
TYPE_LIST,
|
|
1501
1544
|
TYPE_COLLECTION,
|
|
1502
1545
|
TYPE_STORE
|
|
@@ -1507,6 +1550,59 @@ function isSignal(value) {
|
|
|
1507
1550
|
function isMutableSignal(value) {
|
|
1508
1551
|
return isState(value) || isStore(value) || isList(value);
|
|
1509
1552
|
}
|
|
1553
|
+
|
|
1554
|
+
// src/nodes/slot.ts
|
|
1555
|
+
function createSlot(initialSignal, options) {
|
|
1556
|
+
validateSignalValue(TYPE_SLOT, initialSignal, isSignal);
|
|
1557
|
+
let delegated = initialSignal;
|
|
1558
|
+
const guard = options?.guard;
|
|
1559
|
+
const node = {
|
|
1560
|
+
fn: () => delegated.get(),
|
|
1561
|
+
value: undefined,
|
|
1562
|
+
flags: FLAG_DIRTY,
|
|
1563
|
+
sources: null,
|
|
1564
|
+
sourcesTail: null,
|
|
1565
|
+
sinks: null,
|
|
1566
|
+
sinksTail: null,
|
|
1567
|
+
equals: options?.equals ?? DEFAULT_EQUALITY,
|
|
1568
|
+
error: undefined
|
|
1569
|
+
};
|
|
1570
|
+
const get = () => {
|
|
1571
|
+
if (activeSink)
|
|
1572
|
+
link(node, activeSink);
|
|
1573
|
+
refresh(node);
|
|
1574
|
+
if (node.error)
|
|
1575
|
+
throw node.error;
|
|
1576
|
+
return node.value;
|
|
1577
|
+
};
|
|
1578
|
+
const set = (next) => {
|
|
1579
|
+
if (!isMutableSignal(delegated))
|
|
1580
|
+
throw new ReadonlySignalError(TYPE_SLOT);
|
|
1581
|
+
validateSignalValue(TYPE_SLOT, next, guard);
|
|
1582
|
+
delegated.set(next);
|
|
1583
|
+
};
|
|
1584
|
+
const replace = (next) => {
|
|
1585
|
+
validateSignalValue(TYPE_SLOT, next, isSignal);
|
|
1586
|
+
delegated = next;
|
|
1587
|
+
node.flags |= FLAG_DIRTY;
|
|
1588
|
+
for (let e = node.sinks;e; e = e.nextSink)
|
|
1589
|
+
propagate(e.sink);
|
|
1590
|
+
if (batchDepth === 0)
|
|
1591
|
+
flush();
|
|
1592
|
+
};
|
|
1593
|
+
return {
|
|
1594
|
+
[Symbol.toStringTag]: TYPE_SLOT,
|
|
1595
|
+
configurable: true,
|
|
1596
|
+
enumerable: true,
|
|
1597
|
+
get,
|
|
1598
|
+
set,
|
|
1599
|
+
replace,
|
|
1600
|
+
current: () => delegated
|
|
1601
|
+
};
|
|
1602
|
+
}
|
|
1603
|
+
function isSlot(value) {
|
|
1604
|
+
return isObjectOfType(value, TYPE_SLOT);
|
|
1605
|
+
}
|
|
1510
1606
|
export {
|
|
1511
1607
|
valueString,
|
|
1512
1608
|
untrack,
|
|
@@ -1514,6 +1610,7 @@ export {
|
|
|
1514
1610
|
isTask,
|
|
1515
1611
|
isStore,
|
|
1516
1612
|
isState,
|
|
1613
|
+
isSlot,
|
|
1517
1614
|
isSignal,
|
|
1518
1615
|
isSensor,
|
|
1519
1616
|
isRecord,
|
|
@@ -1529,6 +1626,7 @@ export {
|
|
|
1529
1626
|
createTask,
|
|
1530
1627
|
createStore,
|
|
1531
1628
|
createState,
|
|
1629
|
+
createSlot,
|
|
1532
1630
|
createSignal,
|
|
1533
1631
|
createSensor,
|
|
1534
1632
|
createScope,
|
|
@@ -1542,6 +1640,7 @@ export {
|
|
|
1542
1640
|
UnsetSignalValueError,
|
|
1543
1641
|
SKIP_EQUALITY,
|
|
1544
1642
|
RequiredOwnerError,
|
|
1643
|
+
ReadonlySignalError,
|
|
1545
1644
|
NullishSignalValueError,
|
|
1546
1645
|
InvalidSignalValueError,
|
|
1547
1646
|
InvalidCallbackError,
|
package/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function y($){return typeof $==="function"}function l($){return y($)&&$.constructor.name==="AsyncFunction"}function $$($){return y($)&&$.constructor.name!=="AsyncFunction"}function Y($,J){return Object.prototype.toString.call($)===`[object ${J}]`}function L($){return Y($,"Object")}function C$($,J=(z)=>z!=null){return Array.isArray($)&&$.every(J)}function V$($){return typeof $==="string"?`"${$}"`:!!$&&typeof $==="object"?JSON.stringify($):String($)}class J$ extends Error{constructor($){super(`[${$}] Circular dependency detected`);this.name="CircularDependencyError"}}class I$ extends TypeError{constructor($){super(`[${$}] Signal value cannot be null or undefined`);this.name="NullishSignalValueError"}}class t extends Error{constructor($){super(`[${$}] Signal value is unset`);this.name="UnsetSignalValueError"}}class z$ extends TypeError{constructor($,J){super(`[${$}] Signal value ${V$(J)} is invalid`);this.name="InvalidSignalValueError"}}class x$ extends TypeError{constructor($,J){super(`[${$}] Callback ${V$(J)} is invalid`);this.name="InvalidCallbackError"}}class G$ extends Error{constructor($){super(`[${$}] Active owner is required`);this.name="RequiredOwnerError"}}class n extends Error{constructor($,J,z){super(`[${$}] Could not add key "${J}"${z?` with value ${JSON.stringify(z)}`:""} because it already exists`);this.name="DuplicateKeyError"}}function K($,J,z){if(J==null)throw new I$($);if(z&&!z(J))throw new z$($,J)}function X$($,J){if(J==null)throw new t($)}function _($,J,z=y){if(!z(J))throw new x$($,J)}var k="State",v="Memo",u="Task",c="Sensor",b="List",g="Collection",d="Store",T=0,D$=1,D=2,H$=4,U=null,p=null,m$=[],C=0,A$=!1,r=($,J)=>$===J,w$=($,J)=>!1;function p$($,J){let z=J.sourcesTail;if(z){let X=J.sources;while(X){if(X===$)return!0;if(X===z)break;X=X.nextSource}}return!1}function O($,J){let z=J.sourcesTail;if(z?.source===$)return;let X=null,Q=J.flags&H$;if(Q){if(X=z?z.nextSource:J.sources,X?.source===$){J.sourcesTail=X;return}}let H=$.sinksTail;if(H?.sink===J&&(!Q||p$(H,J)))return;let B={source:$,sink:J,nextSource:X,prevSink:H,nextSink:null};if(J.sourcesTail=$.sinksTail=B,z)z.nextSource=B;else J.sources=B;if(H)H.nextSink=B;else $.sinks=B}function y$($){let{source:J,nextSource:z,nextSink:X,prevSink:Q}=$;if(X)X.prevSink=Q;else J.sinksTail=Q;if(Q)Q.nextSink=X;else J.sinks=X;if(!J.sinks&&J.stop)J.stop(),J.stop=void 0;return z}function Q$($){let J=$.sourcesTail,z=J?J.nextSource:$.sources;while(z)z=y$(z);if(J)J.nextSource=null;else $.sources=null}function I($,J=D){let z=$.flags;if("sinks"in $){if((z&(D|D$))>=J)return;if($.flags=z|J,"controller"in $&&$.controller)$.controller.abort(),$.controller=void 0;for(let X=$.sinks;X;X=X.nextSink)I(X.sink,D$)}else{if(z&D)return;$.flags=D,m$.push($)}}function B$($,J){if($.equals($.value,J))return;$.value=J;for(let z=$.sinks;z;z=z.nextSink)I(z.sink);if(C===0)A()}function a($,J){if(!$.cleanup)$.cleanup=J;else if(Array.isArray($.cleanup))$.cleanup.push(J);else $.cleanup=[$.cleanup,J]}function P$($){if(!$.cleanup)return;if(Array.isArray($.cleanup))for(let J=0;J<$.cleanup.length;J++)$.cleanup[J]();else $.cleanup();$.cleanup=null}function g$($){let J=U;U=$,$.sourcesTail=null,$.flags=H$;let z=!1;try{let X=$.fn($.value);if($.error||!$.equals(X,$.value))$.value=X,$.error=void 0,z=!0}catch(X){z=!0,$.error=X instanceof Error?X:Error(String(X))}finally{U=J,Q$($)}if(z){for(let X=$.sinks;X;X=X.nextSink)if(X.sink.flags&D$)X.sink.flags|=D}$.flags=T}function k$($){$.controller?.abort();let J=new AbortController;$.controller=J,$.error=void 0;let z=U;U=$,$.sourcesTail=null,$.flags=H$;let X;try{X=$.fn($.value,J.signal)}catch(Q){$.controller=void 0,$.error=Q instanceof Error?Q:Error(String(Q));return}finally{U=z,Q$($)}X.then((Q)=>{if(J.signal.aborted)return;if($.controller=void 0,$.error||!$.equals(Q,$.value)){$.value=Q,$.error=void 0;for(let H=$.sinks;H;H=H.nextSink)I(H.sink);if(C===0)A()}},(Q)=>{if(J.signal.aborted)return;$.controller=void 0;let H=Q instanceof Error?Q:Error(String(Q));if(!$.error||H.name!==$.error.name||H.message!==$.error.message){$.error=H;for(let B=$.sinks;B;B=B.nextSink)I(B.sink);if(C===0)A()}}),$.flags=T}function Y$($){P$($);let J=U,z=p;U=p=$,$.sourcesTail=null,$.flags=H$;try{let X=$.fn();if(typeof X==="function")a($,X)}finally{U=J,p=z,Q$($)}$.flags=T}function E($){if($.flags&D$)for(let J=$.sources;J;J=J.nextSource){if("fn"in J.source)E(J.source);if($.flags&D)break}if($.flags&H$)throw new J$("controller"in $?u:("value"in $)?v:"Effect");if($.flags&D)if("controller"in $)k$($);else if("value"in $)g$($);else Y$($);else $.flags=T}function A(){if(A$)return;A$=!0;try{for(let $=0;$<m$.length;$++){let J=m$[$];if(J.flags&D)E(J)}m$.length=0}finally{A$=!1}}function e($){C++;try{$()}finally{if(C--,C===0)A()}}function s($){let J=U;U=null;try{return $()}finally{U=J}}function v$($){let J=p,z={cleanup:null};p=z;try{let X=$();if(typeof X==="function")a(z,X);let Q=()=>P$(z);if(J)a(J,Q);return Q}finally{p=J}}function h($,J){K(k,$,J?.guard);let z={value:$,sinks:null,sinksTail:null,equals:J?.equals??r,guard:J?.guard};return{[Symbol.toStringTag]:k,get(){if(U)O(z,U);return z.value},set(X){K(k,X,z.guard),B$(z,X)},update(X){_(k,X);let Q=X(z.value);K(k,Q,z.guard),B$(z,Q)}}}function q$($){return Y($,k)}function i($,J,z){if(Object.is($,J))return!0;if(typeof $!==typeof J)return!1;if($==null||typeof $!=="object"||J==null||typeof J!=="object")return!1;if(!z)z=new WeakSet;if(z.has($)||z.has(J))throw new J$("isEqual");z.add($),z.add(J);try{let X=Array.isArray($);if(X!==Array.isArray(J))return!1;if(X){let Q=$,H=J;if(Q.length!==H.length)return!1;for(let B=0;B<Q.length;B++)if(!i(Q[B],H[B],z))return!1;return!0}if(L($)&&L(J)){let Q=Object.keys($),H=Object.keys(J);if(Q.length!==H.length)return!1;for(let B of Q){if(!(B in J))return!1;if(!i($[B],J[B],z))return!1}return!0}return!1}finally{z.delete($),z.delete(J)}}function M$($,J){if($.length!==J.length)return!1;for(let z=0;z<$.length;z++)if($[z]!==J[z])return!1;return!0}function f$($){let J=0,z=typeof $==="function";return[typeof $==="string"?()=>`${$}${J++}`:z?(X)=>$(X)||String(J++):()=>String(J++),z]}function u$($,J,z,X,Q){let H=new WeakSet,B={},q={},F={},P=[],W=!1,j=new Map;for(let G=0;G<$.length;G++){let Z=z[G];if(Z&&$[G])j.set(Z,$[G])}let N=new Set;for(let G=0;G<J.length;G++){let Z=J[G];if(Z===void 0)continue;let M=Q?X(Z):z[G]??X(Z);if(N.has(M))throw new n(b,M,Z);if(P.push(M),N.add(M),!j.has(M))B[M]=Z,W=!0;else if(!i(j.get(M),Z,H))q[M]=Z,W=!0}for(let[G]of j)if(!N.has(G))F[G]=null,W=!0;if(!W&&!M$(z,P))W=!0;return{add:B,change:q,remove:F,newKeys:P,changed:W}}function Z$($,J){K(b,$,Array.isArray);let z=new Map,X=[],[Q,H]=f$(J?.keyConfig),B=()=>X.map((Z)=>z.get(Z)?.get()).filter((Z)=>Z!==void 0),q={fn:B,value:$,flags:D,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:i,error:void 0},F=(Z)=>{let M={};for(let m=0;m<Z.length;m++){let V=Z[m];if(V===void 0)continue;let R=X[m];if(!R)R=Q(V),X[m]=R;M[R]=V}return M},P=(Z)=>{let M=!1;for(let m in Z.add){let V=Z.add[m];K(`${b} item for key "${m}"`,V),z.set(m,h(V)),M=!0}if(Object.keys(Z.change).length)e(()=>{for(let m in Z.change){let V=Z.change[m];K(`${b} item for key "${m}"`,V);let R=z.get(m);if(R)R.set(V)}});for(let m in Z.remove){z.delete(m);let V=X.indexOf(m);if(V!==-1)X.splice(V,1);M=!0}if(M)q.sources=null,q.sourcesTail=null;return Z.changed},W=J?.watched,j=W?()=>{if(U){if(!q.sinks)q.stop=W();O(q,U)}}:()=>{if(U)O(q,U)},N=F($);for(let Z in N){let M=N[Z];K(`${b} item for key "${Z}"`,M),z.set(Z,h(M))}q.value=$,q.flags=0;let G={[Symbol.toStringTag]:b,[Symbol.isConcatSpreadable]:!0,*[Symbol.iterator](){for(let Z of X){let M=z.get(Z);if(M)yield M}},get length(){return j(),X.length},get(){if(j(),q.sources){if(q.flags)q.value=s(B),q.flags=T}else if(E(q),q.error)throw q.error;return q.value},set(Z){let M=q.flags&D?B():q.value,m=u$(M,Z,X,Q,H);if(m.changed){X=m.newKeys,P(m),q.flags|=D;for(let V=q.sinks;V;V=V.nextSink)I(V.sink);if(C===0)A()}},update(Z){G.set(Z(G.get()))},at(Z){return z.get(X[Z])},keys(){return j(),X.values()},byKey(Z){return z.get(Z)},keyAt(Z){return X[Z]},indexOfKey(Z){return X.indexOf(Z)},add(Z){let M=Q(Z);if(z.has(M))throw new n(b,M,Z);if(!X.includes(M))X.push(M);K(`${b} item for key "${M}"`,Z),z.set(M,h(Z)),q.sources=null,q.sourcesTail=null,q.flags|=D;for(let m=q.sinks;m;m=m.nextSink)I(m.sink);if(C===0)A();return M},remove(Z){let M=typeof Z==="number"?X[Z]:Z;if(z.delete(M)){let V=typeof Z==="number"?Z:X.indexOf(M);if(V>=0)X.splice(V,1);q.sources=null,q.sourcesTail=null,q.flags|=D;for(let R=q.sinks;R;R=R.nextSink)I(R.sink);if(C===0)A()}},sort(Z){let m=X.map((V)=>[V,z.get(V)?.get()]).sort(y(Z)?(V,R)=>Z(V[1],R[1]):(V,R)=>String(V[1]).localeCompare(String(R[1]))).map(([V])=>V);if(!M$(X,m)){X=m,q.flags|=D;for(let V=q.sinks;V;V=V.nextSink)I(V.sink);if(C===0)A()}},splice(Z,M,...m){let V=X.length,R=Z<0?Math.max(0,V+Z):Math.min(Z,V),x=Math.max(0,Math.min(M??Math.max(0,V-Math.max(0,R)),V-R)),w={},f={};for(let S=0;S<x;S++){let o=R+S,O$=X[o];if(O$){let E$=z.get(O$);if(E$)f[O$]=E$.get()}}let K$=X.slice(0,R);for(let S of m){let o=Q(S);if(z.has(o)&&!(o in f))throw new n(b,o,S);K$.push(o),w[o]=S}K$.push(...X.slice(R+x));let T$=!!(Object.keys(w).length||Object.keys(f).length);if(T$){P({add:w,change:{},remove:f,changed:T$}),X=K$,q.flags|=D;for(let S=q.sinks;S;S=S.nextSink)I(S.sink);if(C===0)A()}return Object.values(f)},deriveCollection(Z){return F$(G,Z)}};return G}function U$($){return Y($,b)}function j$($,J){if(_(v,$,$$),J?.value!==void 0)K(v,J.value,J?.guard);let z={fn:$,value:J?.value,flags:D,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:J?.equals??r,error:void 0,stop:void 0},X=J?.watched,Q=X?()=>{if(U){if(!z.sinks)z.stop=X(()=>{z.flags|=D;for(let H=z.sinks;H;H=H.nextSink)I(H.sink);if(C===0)A()});O(z,U)}}:()=>{if(U)O(z,U)};return{[Symbol.toStringTag]:v,get(){if(Q(),E(z),z.error)throw z.error;return X$(v,z.value),z.value}}}function L$($){return Y($,v)}function W$($,J){if(_(u,$,l),J?.value!==void 0)K(u,J.value,J?.guard);let z={fn:$,value:J?.value,sources:null,sourcesTail:null,sinks:null,sinksTail:null,flags:D,equals:J?.equals??r,controller:void 0,error:void 0,stop:void 0},X=J?.watched,Q=X?()=>{if(U){if(!z.sinks)z.stop=X(()=>{z.flags|=D;for(let H=z.sinks;H;H=H.nextSink)I(H.sink);if(C===0)A()});O(z,U)}}:()=>{if(U)O(z,U)};return{[Symbol.toStringTag]:u,get(){if(Q(),E(z),z.error)throw z.error;return X$(u,z.value),z.value},isPending(){return!!z.controller},abort(){z.controller?.abort(),z.controller=void 0}}}function _$($){return Y($,u)}function F$($,J){if(_(g,J),!d$($))throw TypeError(`[${g}] Invalid collection source: expected a List or Collection`);let z=l(J),X=new Map,Q=(W)=>{let j=z?W$(async(N,G)=>{let Z=$.byKey(W)?.get();if(Z==null)return N;return J(Z,G)}):j$(()=>{let N=$.byKey(W)?.get();if(N==null)return;return J(N)});X.set(W,j)};function H(){let W=Array.from($.keys()),j=B.value;if(!M$(j,W)){let N=new Set(j),G=new Set(W);for(let Z of j)if(!G.has(Z))X.delete(Z);for(let Z of W)if(!N.has(Z))Q(Z)}return W}let B={fn:H,value:[],flags:D,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:M$,error:void 0};function q(){if(B.sources){if(B.flags)B.value=s(H),B.flags=T}else if(E(B),B.error)throw B.error;return B.value}let F=Array.from($.keys());for(let W of F)Q(W);B.value=F;let P={[Symbol.toStringTag]:g,[Symbol.isConcatSpreadable]:!0,*[Symbol.iterator](){for(let W of B.value){let j=X.get(W);if(j)yield j}},get length(){if(U)O(B,U);return q().length},keys(){if(U)O(B,U);return q().values()},get(){if(U)O(B,U);let W=q(),j=[];for(let N of W)try{let G=X.get(N)?.get();if(G!=null)j.push(G)}catch(G){if(!(G instanceof t))throw G}return j},at(W){return X.get(B.value[W])},byKey(W){return X.get(W)},keyAt(W){return B.value[W]},indexOfKey(W){return B.value.indexOf(W)},deriveCollection(W){return F$(P,W)}};return P}function c$($,J){let z=J?.value??[];if(z.length)K(g,z,Array.isArray);_(g,$,$$);let X=new Map,Q=[],H=new Map,[B,q]=f$(J?.keyConfig),F=(Z)=>H.get(Z)??(q?B(Z):void 0),P=J?.createItem??h;function W(){let Z=[];for(let M of Q)try{let m=X.get(M)?.get();if(m!=null)Z.push(m)}catch(m){if(!(m instanceof t))throw m}return Z}let j={fn:W,value:z,flags:D,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:w$,error:void 0};for(let Z of z){let M=B(Z);X.set(M,P(Z)),H.set(Z,M),Q.push(M)}j.value=z,j.flags=D;function N(){if(U){if(!j.sinks)j.stop=$((Z)=>{let{add:M,change:m,remove:V}=Z;if(!M?.length&&!m?.length&&!V?.length)return;let R=!1;e(()=>{if(M)for(let x of M){let w=B(x);if(X.set(w,P(x)),H.set(x,w),!Q.includes(w))Q.push(w);R=!0}if(m)for(let x of m){let w=F(x);if(!w)continue;let f=X.get(w);if(f&&q$(f))H.delete(f.get()),f.set(x),H.set(x,w)}if(V)for(let x of V){let w=F(x);if(!w)continue;H.delete(x),X.delete(w);let f=Q.indexOf(w);if(f!==-1)Q.splice(f,1);R=!0}if(R)j.sources=null,j.sourcesTail=null;j.flags=D;for(let x=j.sinks;x;x=x.nextSink)I(x.sink)})});O(j,U)}}let G={[Symbol.toStringTag]:g,[Symbol.isConcatSpreadable]:!0,*[Symbol.iterator](){for(let Z of Q){let M=X.get(Z);if(M)yield M}},get length(){return N(),Q.length},keys(){return N(),Q.values()},get(){if(N(),j.sources){if(j.flags)j.value=s(W),j.flags=T}else if(E(j),j.error)throw j.error;return j.value},at(Z){return X.get(Q[Z])},byKey(Z){return X.get(Z)},keyAt(Z){return Q[Z]},indexOfKey(Z){return Q.indexOf(Z)},deriveCollection(Z){return F$(G,Z)}};return G}function S$($){return Y($,g)}function d$($){return U$($)||S$($)}function l$($){_("Effect",$);let J={fn:$,flags:D,sources:null,sourcesTail:null,cleanup:null},z=()=>{P$(J),J.fn=void 0,J.flags=T,J.sourcesTail=null,Q$(J)};if(p)a(p,z);return Y$(J),z}function t$($,J){if(!p)throw new G$("match");let{ok:z,err:X=console.error,nil:Q}=J,H,B=!1,q=Array($.length);for(let P=0;P<$.length;P++)try{q[P]=$[P].get()}catch(W){if(W instanceof t){B=!0;continue}if(!H)H=[];H.push(W instanceof Error?W:Error(String(W)))}let F;try{if(B)F=Q?.();else if(H)F=X(H);else F=z(q)}catch(P){X([P instanceof Error?P:Error(String(P))])}if(typeof F==="function")return F;if(F instanceof Promise){let P=p,W=new AbortController;a(P,()=>W.abort()),F.then((j)=>{if(!W.signal.aborted&&typeof j==="function")a(P,j)}).catch((j)=>{X([j instanceof Error?j:Error(String(j))])})}}function r$($,J){if(_(c,$,$$),J?.value!==void 0)K(c,J.value,J?.guard);let z={value:J?.value,sinks:null,sinksTail:null,equals:J?.equals??r,guard:J?.guard,stop:void 0};return{[Symbol.toStringTag]:c,get(){if(U){if(!z.sinks)z.stop=$((X)=>{K(c,X,z.guard),B$(z,X)});O(z,U)}return X$(c,z.value),z.value}}}function s$($){return Y($,c)}function i$($,J){let z=L($)||Array.isArray($),X=L(J)||Array.isArray(J);if(!z||!X){let j=!Object.is($,J);return{changed:j,add:j&&X?J:{},change:{},remove:j&&z?$:{}}}let Q=new WeakSet,H={},B={},q={},F=!1,P=Object.keys($),W=Object.keys(J);for(let j of W)if(j in $){if(!i($[j],J[j],Q))B[j]=J[j],F=!0}else H[j]=J[j],F=!0;for(let j of P)if(!(j in J))q[j]=void 0,F=!0;return{add:H,change:B,remove:q,changed:F}}function N$($,J){K(d,$,L);let z=new Map,X=(W,j)=>{if(K(`${d} for key "${W}"`,j),Array.isArray(j))z.set(W,Z$(j));else if(L(j))z.set(W,N$(j));else z.set(W,h(j))},Q=()=>{let W={};return z.forEach((j,N)=>{W[N]=j.get()}),W},H={fn:Q,value:$,flags:D,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:i,error:void 0},B=(W)=>{let j=!1;for(let N in W.add)X(N,W.add[N]),j=!0;if(Object.keys(W.change).length)e(()=>{for(let N in W.change){let G=W.change[N];K(`${d} for key "${N}"`,G);let Z=z.get(N);if(Z)if(L(G)!==R$(Z))X(N,G),j=!0;else Z.set(G)}});for(let N in W.remove)z.delete(N),j=!0;if(j)H.sources=null,H.sourcesTail=null;return W.changed},q=J?.watched,F=q?()=>{if(U){if(!H.sinks)H.stop=q();O(H,U)}}:()=>{if(U)O(H,U)};for(let W of Object.keys($))X(W,$[W]);let P={[Symbol.toStringTag]:d,[Symbol.isConcatSpreadable]:!1,*[Symbol.iterator](){for(let W of Array.from(z.keys())){let j=z.get(W);if(j)yield[W,j]}},keys(){return F(),z.keys()},byKey(W){return z.get(W)},get(){if(F(),H.sources){if(H.flags)H.value=s(Q),H.flags=T}else if(E(H),H.error)throw H.error;return H.value},set(W){let j=H.flags&D?Q():H.value,N=i$(j,W);if(B(N)){H.flags|=D;for(let G=H.sinks;G;G=G.nextSink)I(G.sink);if(C===0)A()}},update(W){P.set(W(P.get()))},add(W,j){if(z.has(W))throw new n(d,W,j);X(W,j),H.sources=null,H.sourcesTail=null,H.flags|=D;for(let N=H.sinks;N;N=N.nextSink)I(N.sink);if(C===0)A();return W},remove(W){if(z.delete(W)){H.sources=null,H.sourcesTail=null,H.flags|=D;for(let N=H.sinks;N;N=N.nextSink)I(N.sink);if(C===0)A()}}};return new Proxy(P,{get(W,j){if(j in W)return Reflect.get(W,j);if(typeof j!=="symbol")return W.byKey(j)},has(W,j){if(j in W)return!0;return W.byKey(String(j))!==void 0},ownKeys(W){return Array.from(W.keys())},getOwnPropertyDescriptor(W,j){if(j in W)return Reflect.getOwnPropertyDescriptor(W,j);if(typeof j==="symbol")return;let N=W.byKey(String(j));return N?{enumerable:!0,configurable:!0,writable:!0,value:N}:void 0}})}function R$($){return Y($,d)}function o$($,J){return l($)?W$($,J):j$($,J)}function n$($){if(b$($))return $;if($==null)throw new z$("createSignal",$);if(l($))return W$($);if(y($))return j$($);if(C$($))return Z$($);if(L($))return N$($);return h($)}function a$($){if(h$($))return $;if($==null||y($)||b$($))throw new z$("createMutableSignal",$);if(C$($))return Z$($);if(L($))return N$($);return h($)}function e$($){return L$($)||_$($)}function b$($){let J=[k,v,u,c,b,g,d],z=Object.prototype.toString.call($).slice(8,-1);return J.includes(z)}function h$($){return q$($)||R$($)||U$($)}export{V$ as valueString,s as untrack,t$ as match,_$ as isTask,R$ as isStore,q$ as isState,b$ as isSignal,s$ as isSensor,L as isRecord,Y as isObjectOfType,h$ as isMutableSignal,L$ as isMemo,U$ as isList,y as isFunction,i as isEqual,e$ as isComputed,S$ as isCollection,l as isAsyncFunction,W$ as createTask,N$ as createStore,h as createState,n$ as createSignal,r$ as createSensor,v$ as createScope,a$ as createMutableSignal,j$ as createMemo,Z$ as createList,l$ as createEffect,o$ as createComputed,c$ as createCollection,e as batch,t as UnsetSignalValueError,w$ as SKIP_EQUALITY,G$ as RequiredOwnerError,I$ as NullishSignalValueError,z$ as InvalidSignalValueError,x$ as InvalidCallbackError,J$ as CircularDependencyError};
|
|
1
|
+
function g($){return typeof $==="function"}function i($){return g($)&&$.constructor.name==="AsyncFunction"}function z$($){return g($)&&$.constructor.name!=="AsyncFunction"}function A($,J){return Object.prototype.toString.call($)===`[object ${J}]`}function L($){return A($,"Object")}function A$($,J=(z)=>z!=null){return Array.isArray($)&&$.every(J)}function m$($){return typeof $==="string"?`"${$}"`:!!$&&typeof $==="object"?JSON.stringify($):String($)}class X$ extends Error{constructor($){super(`[${$}] Circular dependency detected`);this.name="CircularDependencyError"}}class Y$ extends TypeError{constructor($){super(`[${$}] Signal value cannot be null or undefined`);this.name="NullishSignalValueError"}}class o extends Error{constructor($){super(`[${$}] Signal value is unset`);this.name="UnsetSignalValueError"}}class Z$ extends TypeError{constructor($,J){super(`[${$}] Signal value ${m$(J)} is invalid`);this.name="InvalidSignalValueError"}}class b$ extends TypeError{constructor($,J){super(`[${$}] Callback ${m$(J)} is invalid`);this.name="InvalidCallbackError"}}class P$ extends Error{constructor($){super(`[${$}] Signal is read-only`);this.name="ReadonlySignalError"}}class D$ extends Error{constructor($){super(`[${$}] Active owner is required`);this.name="RequiredOwnerError"}}class e extends Error{constructor($,J,z){super(`[${$}] Could not add key "${J}"${z?` with value ${JSON.stringify(z)}`:""} because it already exists`);this.name="DuplicateKeyError"}}function K($,J,z){if(J==null)throw new Y$($);if(z&&!z(J))throw new Z$($,J)}function j$($,J){if(J==null)throw new o($)}function T($,J,z=g){if(!z(J))throw new b$($,J)}var c="State",u="Memo",d="Task",t="Sensor",E="List",l="Collection",r="Store",s="Slot",S=0,C$=1,D=2,M$=4,b=8,N=null,y=null,G$=[],R=0,_$=!1,k=($,J)=>$===J,L$=($,J)=>!1;function g$($,J){let z=J.sourcesTail;if(z){let X=J.sources;while(X){if(X===$)return!0;if(X===z)break;X=X.nextSource}}return!1}function F($,J){let z=J.sourcesTail;if(z?.source===$)return;let X=null,W=J.flags&M$;if(W){if(X=z?z.nextSource:J.sources,X?.source===$){J.sourcesTail=X;return}}let H=$.sinksTail;if(H?.sink===J&&(!W||g$(H,J)))return;let P={source:$,sink:J,nextSource:X,prevSink:H,nextSink:null};if(J.sourcesTail=$.sinksTail=P,z)z.nextSource=P;else J.sources=P;if(H)H.nextSink=P;else $.sinks=P}function k$($){let{source:J,nextSource:z,nextSink:X,prevSink:W}=$;if(X)X.prevSink=W;else J.sinksTail=W;if(W)W.nextSink=X;else J.sinks=X;if(!J.sinks){if(J.stop)J.stop(),J.stop=void 0;if("sources"in J&&J.sources){let H=J;H.sourcesTail=null,W$(H)}}return z}function W$($){let J=$.sourcesTail,z=J?J.nextSource:$.sources;while(z)z=k$(z);if(J)J.nextSource=null;else $.sources=null}function x($,J=D){let z=$.flags;if("sinks"in $){if((z&(D|C$))>=J)return;if($.flags=z|J,"controller"in $&&$.controller)$.controller.abort(),$.controller=void 0;for(let X=$.sinks;X;X=X.nextSink)x(X.sink,C$)}else{if(z&D)return;$.flags=D,G$.push($)}}function U$($,J){if($.equals($.value,J))return;$.value=J;for(let z=$.sinks;z;z=z.nextSink)x(z.sink);if(R===0)w()}function $$($,J){if(!$.cleanup)$.cleanup=J;else if(Array.isArray($.cleanup))$.cleanup.push(J);else $.cleanup=[$.cleanup,J]}function K$($){if(!$.cleanup)return;if(Array.isArray($.cleanup))for(let J=0;J<$.cleanup.length;J++)$.cleanup[J]();else $.cleanup();$.cleanup=null}function v$($){let J=N;N=$,$.sourcesTail=null,$.flags=M$;let z=!1;try{let X=$.fn($.value);if($.error||!$.equals(X,$.value))$.value=X,$.error=void 0,z=!0}catch(X){z=!0,$.error=X instanceof Error?X:Error(String(X))}finally{N=J,W$($)}if(z){for(let X=$.sinks;X;X=X.nextSink)if(X.sink.flags&C$)X.sink.flags|=D}$.flags=S}function c$($){$.controller?.abort();let J=new AbortController;$.controller=J,$.error=void 0;let z=N;N=$,$.sourcesTail=null,$.flags=M$;let X;try{X=$.fn($.value,J.signal)}catch(W){$.controller=void 0,$.error=W instanceof Error?W:Error(String(W));return}finally{N=z,W$($)}X.then((W)=>{if(J.signal.aborted)return;if($.controller=void 0,$.error||!$.equals(W,$.value)){$.value=W,$.error=void 0;for(let H=$.sinks;H;H=H.nextSink)x(H.sink);if(R===0)w()}},(W)=>{if(J.signal.aborted)return;$.controller=void 0;let H=W instanceof Error?W:Error(String(W));if(!$.error||H.name!==$.error.name||H.message!==$.error.message){$.error=H;for(let P=$.sinks;P;P=P.nextSink)x(P.sink);if(R===0)w()}}),$.flags=S}function T$($){K$($);let J=N,z=y;N=y=$,$.sourcesTail=null,$.flags=M$;try{let X=$.fn();if(typeof X==="function")$$($,X)}finally{N=J,y=z,W$($)}$.flags=S}function I($){if($.flags&C$)for(let J=$.sources;J;J=J.nextSource){if("fn"in J.source)I(J.source);if($.flags&D)break}if($.flags&M$)throw new X$("controller"in $?d:("value"in $)?u:"Effect");if($.flags&D)if("controller"in $)c$($);else if("value"in $)v$($);else T$($);else $.flags=S}function w(){if(_$)return;_$=!0;try{for(let $=0;$<G$.length;$++){let J=G$[$];if(J.flags&D)I(J)}G$.length=0}finally{_$=!1}}function J$($){R++;try{$()}finally{if(R--,R===0)w()}}function v($){let J=N;N=null;try{return $()}finally{N=J}}function u$($){let J=y,z={cleanup:null};y=z;try{let X=$();if(typeof X==="function")$$(z,X);let W=()=>K$(z);if(J)$$(J,W);return W}finally{y=J}}function p($,J){K(c,$,J?.guard);let z={value:$,sinks:null,sinksTail:null,equals:J?.equals??k,guard:J?.guard};return{[Symbol.toStringTag]:c,get(){if(N)F(z,N);return z.value},set(X){K(c,X,z.guard),U$(z,X)},update(X){T(c,X);let W=X(z.value);K(c,W,z.guard),U$(z,W)}}}function N$($){return A($,c)}function n($,J,z){if(Object.is($,J))return!0;if(typeof $!==typeof J)return!1;if($==null||typeof $!=="object"||J==null||typeof J!=="object")return!1;if(!z)z=new WeakSet;if(z.has($)||z.has(J))throw new X$("isEqual");z.add($),z.add(J);try{let X=Array.isArray($);if(X!==Array.isArray(J))return!1;if(X){let W=$,H=J;if(W.length!==H.length)return!1;for(let P=0;P<W.length;P++)if(!n(W[P],H[P],z))return!1;return!0}if(L($)&&L(J)){let W=Object.keys($),H=Object.keys(J);if(W.length!==H.length)return!1;for(let P of W){if(!(P in J))return!1;if(!n($[P],J[P],z))return!1}return!0}return!1}finally{z.delete($),z.delete(J)}}function O$($,J){if($.length!==J.length)return!1;for(let z=0;z<$.length;z++)if($[z]!==J[z])return!1;return!0}function E$($){let J=0,z=typeof $==="function";return[typeof $==="string"?()=>`${$}${J++}`:z?(X)=>$(X)||String(J++):()=>String(J++),z]}function d$($,J,z,X,W){let H=new WeakSet,P={},M={},C={},U=[],Q=!1,j=new Map;for(let q=0;q<$.length;q++){let Z=z[q];if(Z&&$[q])j.set(Z,$[q])}let G=new Set;for(let q=0;q<J.length;q++){let Z=J[q];if(Z===void 0)continue;let B=W?X(Z):z[q]??X(Z);if(G.has(B))throw new e(E,B,Z);if(U.push(B),G.add(B),!j.has(B))P[B]=Z,Q=!0;else if(!n(j.get(B),Z,H))M[B]=Z,Q=!0}for(let[q]of j)if(!G.has(q))C[q]=null,Q=!0;if(!Q&&!O$(z,U))Q=!0;return{add:P,change:M,remove:C,newKeys:U,changed:Q}}function H$($,J){K(E,$,Array.isArray);let z=new Map,X=[],[W,H]=E$(J?.keyConfig),P=()=>X.map((Z)=>z.get(Z)?.get()).filter((Z)=>Z!==void 0),M={fn:P,value:$,flags:D,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:n,error:void 0},C=(Z)=>{let B={};for(let V=0;V<Z.length;V++){let m=Z[V];if(m===void 0)continue;let O=X[V];if(!O)O=W(m),X[V]=O;B[O]=m}return B},U=(Z)=>{let B=!1;for(let V in Z.add){let m=Z.add[V];K(`${E} item for key "${V}"`,m),z.set(V,p(m)),B=!0}if(Object.keys(Z.change).length)J$(()=>{for(let V in Z.change){let m=Z.change[V];K(`${E} item for key "${V}"`,m);let O=z.get(V);if(O)O.set(m)}});for(let V in Z.remove){z.delete(V);let m=X.indexOf(V);if(m!==-1)X.splice(m,1);B=!0}if(B)M.flags|=b;return Z.changed},Q=J?.watched,j=Q?()=>{if(N){if(!M.sinks)M.stop=Q();F(M,N)}}:()=>{if(N)F(M,N)},G=C($);for(let Z in G){let B=G[Z];K(`${E} item for key "${Z}"`,B),z.set(Z,p(B))}M.value=$,M.flags=0;let q={[Symbol.toStringTag]:E,[Symbol.isConcatSpreadable]:!0,*[Symbol.iterator](){for(let Z of X){let B=z.get(Z);if(B)yield B}},get length(){return j(),X.length},get(){if(j(),M.sources){if(M.flags){let Z=M.flags&b;if(M.value=v(P),Z){if(M.flags=D,I(M),M.error)throw M.error}else M.flags=S}}else if(I(M),M.error)throw M.error;return M.value},set(Z){let B=M.flags&D?P():M.value,V=d$(B,Z,X,W,H);if(V.changed){X=V.newKeys,U(V),M.flags|=D;for(let m=M.sinks;m;m=m.nextSink)x(m.sink);if(R===0)w()}},update(Z){q.set(Z(q.get()))},at(Z){return z.get(X[Z])},keys(){return j(),X.values()},byKey(Z){return z.get(Z)},keyAt(Z){return X[Z]},indexOfKey(Z){return X.indexOf(Z)},add(Z){let B=W(Z);if(z.has(B))throw new e(E,B,Z);if(!X.includes(B))X.push(B);K(`${E} item for key "${B}"`,Z),z.set(B,p(Z)),M.flags|=D|b;for(let V=M.sinks;V;V=V.nextSink)x(V.sink);if(R===0)w();return B},remove(Z){let B=typeof Z==="number"?X[Z]:Z;if(z.delete(B)){let m=typeof Z==="number"?Z:X.indexOf(B);if(m>=0)X.splice(m,1);M.flags|=D|b;for(let O=M.sinks;O;O=O.nextSink)x(O.sink);if(R===0)w()}},sort(Z){let V=X.map((m)=>[m,z.get(m)?.get()]).sort(g(Z)?(m,O)=>Z(m[1],O[1]):(m,O)=>String(m[1]).localeCompare(String(O[1]))).map(([m])=>m);if(!O$(X,V)){X=V,M.flags|=D;for(let m=M.sinks;m;m=m.nextSink)x(m.sink);if(R===0)w()}},splice(Z,B,...V){let m=X.length,O=Z<0?Math.max(0,m+Z):Math.min(Z,m),f=Math.max(0,Math.min(B??Math.max(0,m-Math.max(0,O)),m-O)),Y={},_={};for(let h=0;h<f;h++){let a=O+h,f$=X[a];if(f$){let y$=z.get(f$);if(y$)_[f$]=y$.get()}}let I$=X.slice(0,O);for(let h of V){let a=W(h);if(z.has(a)&&!(a in _))throw new e(E,a,h);I$.push(a),Y[a]=h}I$.push(...X.slice(O+f));let p$=!!(Object.keys(Y).length||Object.keys(_).length);if(p$){U({add:Y,change:{},remove:_,changed:p$}),X=I$,M.flags|=D;for(let h=M.sinks;h;h=h.nextSink)x(h.sink);if(R===0)w()}return Object.values(_)},deriveCollection(Z){return R$(q,Z)}};return q}function F$($){return A($,E)}function Q$($,J){if(T(u,$,z$),J?.value!==void 0)K(u,J.value,J?.guard);let z={fn:$,value:J?.value,flags:D,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:J?.equals??k,error:void 0,stop:void 0},X=J?.watched,W=X?()=>{if(N){if(!z.sinks)z.stop=X(()=>{z.flags|=D;for(let H=z.sinks;H;H=H.nextSink)x(H.sink);if(R===0)w()});F(z,N)}}:()=>{if(N)F(z,N)};return{[Symbol.toStringTag]:u,get(){if(W(),I(z),z.error)throw z.error;return j$(u,z.value),z.value}}}function S$($){return A($,u)}function B$($,J){if(T(d,$,i),J?.value!==void 0)K(d,J.value,J?.guard);let z={fn:$,value:J?.value,sources:null,sourcesTail:null,sinks:null,sinksTail:null,flags:D,equals:J?.equals??k,controller:void 0,error:void 0,stop:void 0},X=J?.watched,W=X?()=>{if(N){if(!z.sinks)z.stop=X(()=>{z.flags|=D;for(let H=z.sinks;H;H=H.nextSink)x(H.sink);if(R===0)w()});F(z,N)}}:()=>{if(N)F(z,N)};return{[Symbol.toStringTag]:d,get(){if(W(),I(z),z.error)throw z.error;return j$(d,z.value),z.value},isPending(){return!!z.controller},abort(){z.controller?.abort(),z.controller=void 0}}}function h$($){return A($,d)}function R$($,J){T(l,J);let z=i(J),X=new Map,W=[],H=(q)=>{let Z=z?B$(async(B,V)=>{let m=$.byKey(q)?.get();if(m==null)return B;return J(m,V)}):Q$(()=>{let B=$.byKey(q)?.get();if(B==null)return;return J(B)});X.set(q,Z)};function P(q){if(!O$(W,q)){let Z=new Set(W),B=new Set(q);for(let V of W)if(!B.has(V))X.delete(V);for(let V of q)if(!Z.has(V))H(V);W=q,U.flags|=b}}function M(){P(Array.from($.keys()));let q=[];for(let Z of W)try{let B=X.get(Z)?.get();if(B!=null)q.push(B)}catch(B){if(!(B instanceof o))throw B}return q}let U={fn:M,value:[],flags:D,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:(q,Z)=>{if(q.length!==Z.length)return!1;for(let B=0;B<q.length;B++)if(q[B]!==Z[B])return!1;return!0},error:void 0};function Q(){if(U.sources){if(U.flags)if(U.value=v(M),U.flags&b){if(U.flags=D,I(U),U.error)throw U.error}else U.flags=S}else if(U.sinks){if(I(U),U.error)throw U.error}else U.value=v(M)}let j=Array.from(v(()=>$.keys()));for(let q of j)H(q);W=j;let G={[Symbol.toStringTag]:l,[Symbol.isConcatSpreadable]:!0,*[Symbol.iterator](){for(let q of W){let Z=X.get(q);if(Z)yield Z}},get length(){if(N)F(U,N);return Q(),W.length},keys(){if(N)F(U,N);return Q(),W.values()},get(){if(N)F(U,N);return Q(),U.value},at(q){return X.get(W[q])},byKey(q){return X.get(q)},keyAt(q){return W[q]},indexOfKey(q){return W.indexOf(q)},deriveCollection(q){return R$(G,q)}};return G}function t$($,J){let z=J?.value??[];if(z.length)K(l,z,Array.isArray);T(l,$,z$);let X=new Map,W=[],H=new Map,[P,M]=E$(J?.keyConfig),C=(Z)=>H.get(Z)??(M?P(Z):void 0),U=J?.createItem??p;function Q(){let Z=[];for(let B of W)try{let V=X.get(B)?.get();if(V!=null)Z.push(V)}catch(V){if(!(V instanceof o))throw V}return Z}let j={fn:Q,value:z,flags:D,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:L$,error:void 0};for(let Z of z){let B=P(Z);X.set(B,U(Z)),H.set(Z,B),W.push(B)}j.value=z,j.flags=D;function G(){if(N){if(!j.sinks)j.stop=$((Z)=>{let{add:B,change:V,remove:m}=Z;if(!B?.length&&!V?.length&&!m?.length)return;let O=!1;J$(()=>{if(B)for(let f of B){let Y=P(f);if(X.set(Y,U(f)),H.set(f,Y),!W.includes(Y))W.push(Y);O=!0}if(V)for(let f of V){let Y=C(f);if(!Y)continue;let _=X.get(Y);if(_&&N$(_))H.delete(_.get()),_.set(f),H.set(f,Y)}if(m)for(let f of m){let Y=C(f);if(!Y)continue;H.delete(f),X.delete(Y);let _=W.indexOf(Y);if(_!==-1)W.splice(_,1);O=!0}j.flags=D|(O?b:0);for(let f=j.sinks;f;f=f.nextSink)x(f.sink)})});F(j,N)}}let q={[Symbol.toStringTag]:l,[Symbol.isConcatSpreadable]:!0,*[Symbol.iterator](){for(let Z of W){let B=X.get(Z);if(B)yield B}},get length(){return G(),W.length},keys(){return G(),W.values()},get(){if(G(),j.sources){if(j.flags){let Z=j.flags&b;if(j.value=v(Q),Z){if(j.flags=D,I(j),j.error)throw j.error}else j.flags=S}}else if(I(j),j.error)throw j.error;return j.value},at(Z){return X.get(W[Z])},byKey(Z){return X.get(Z)},keyAt(Z){return W[Z]},indexOfKey(Z){return W.indexOf(Z)},deriveCollection(Z){return R$(q,Z)}};return q}function l$($){return A($,l)}function r$($){T("Effect",$);let J={fn:$,flags:D,sources:null,sourcesTail:null,cleanup:null},z=()=>{K$(J),J.fn=void 0,J.flags=S,J.sourcesTail=null,W$(J)};if(y)$$(y,z);return T$(J),z}function s$($,J){if(!y)throw new D$("match");let{ok:z,err:X=console.error,nil:W}=J,H,P=!1,M=Array($.length);for(let U=0;U<$.length;U++)try{M[U]=$[U].get()}catch(Q){if(Q instanceof o){P=!0;continue}if(!H)H=[];H.push(Q instanceof Error?Q:Error(String(Q)))}let C;try{if(P)C=W?.();else if(H)C=X(H);else C=z(M)}catch(U){X([U instanceof Error?U:Error(String(U))])}if(typeof C==="function")return C;if(C instanceof Promise){let U=y,Q=new AbortController;$$(U,()=>Q.abort()),C.then((j)=>{if(!Q.signal.aborted&&typeof j==="function")$$(U,j)}).catch((j)=>{X([j instanceof Error?j:Error(String(j))])})}}function i$($,J){if(T(t,$,z$),J?.value!==void 0)K(t,J.value,J?.guard);let z={value:J?.value,sinks:null,sinksTail:null,equals:J?.equals??k,guard:J?.guard,stop:void 0};return{[Symbol.toStringTag]:t,get(){if(N){if(!z.sinks)z.stop=$((X)=>{K(t,X,z.guard),U$(z,X)});F(z,N)}return j$(t,z.value),z.value}}}function o$($){return A($,t)}function n$($,J){let z=L($)||Array.isArray($),X=L(J)||Array.isArray(J);if(!z||!X){let j=!Object.is($,J);return{changed:j,add:j&&X?J:{},change:{},remove:j&&z?$:{}}}let W=new WeakSet,H={},P={},M={},C=!1,U=Object.keys($),Q=Object.keys(J);for(let j of Q)if(j in $){if(!n($[j],J[j],W))P[j]=J[j],C=!0}else H[j]=J[j],C=!0;for(let j of U)if(!(j in J))M[j]=void 0,C=!0;return{add:H,change:P,remove:M,changed:C}}function V$($,J){K(r,$,L);let z=new Map,X=(Q,j)=>{if(K(`${r} for key "${Q}"`,j),Array.isArray(j))z.set(Q,H$(j));else if(L(j))z.set(Q,V$(j));else z.set(Q,p(j))},W=()=>{let Q={};return z.forEach((j,G)=>{Q[G]=j.get()}),Q},H={fn:W,value:$,flags:D,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:n,error:void 0},P=(Q)=>{let j=!1;for(let G in Q.add)X(G,Q.add[G]),j=!0;if(Object.keys(Q.change).length)J$(()=>{for(let G in Q.change){let q=Q.change[G];K(`${r} for key "${G}"`,q);let Z=z.get(G);if(Z)if(L(q)!==x$(Z))X(G,q),j=!0;else Z.set(q)}});for(let G in Q.remove)z.delete(G),j=!0;if(j)H.flags|=b;return Q.changed},M=J?.watched,C=M?()=>{if(N){if(!H.sinks)H.stop=M();F(H,N)}}:()=>{if(N)F(H,N)};for(let Q of Object.keys($))X(Q,$[Q]);let U={[Symbol.toStringTag]:r,[Symbol.isConcatSpreadable]:!1,*[Symbol.iterator](){for(let Q of Array.from(z.keys())){let j=z.get(Q);if(j)yield[Q,j]}},keys(){return C(),z.keys()},byKey(Q){return z.get(Q)},get(){if(C(),H.sources){if(H.flags){let Q=H.flags&b;if(H.value=v(W),Q){if(H.flags=D,I(H),H.error)throw H.error}else H.flags=S}}else if(I(H),H.error)throw H.error;return H.value},set(Q){let j=H.flags&D?W():H.value,G=n$(j,Q);if(P(G)){H.flags|=D;for(let q=H.sinks;q;q=q.nextSink)x(q.sink);if(R===0)w()}},update(Q){U.set(Q(U.get()))},add(Q,j){if(z.has(Q))throw new e(r,Q,j);X(Q,j),H.flags|=D|b;for(let G=H.sinks;G;G=G.nextSink)x(G.sink);if(R===0)w();return Q},remove(Q){if(z.delete(Q)){H.flags|=D|b;for(let G=H.sinks;G;G=G.nextSink)x(G.sink);if(R===0)w()}}};return new Proxy(U,{get(Q,j){if(j in Q)return Reflect.get(Q,j);if(typeof j!=="symbol")return Q.byKey(j)},has(Q,j){if(j in Q)return!0;return Q.byKey(String(j))!==void 0},ownKeys(Q){return Array.from(Q.keys())},getOwnPropertyDescriptor(Q,j){if(j in Q)return Reflect.getOwnPropertyDescriptor(Q,j);if(typeof j==="symbol")return;let G=Q.byKey(String(j));return G?{enumerable:!0,configurable:!0,writable:!0,value:G}:void 0}})}function x$($){return A($,r)}function a$($,J){return i($)?B$($,J):Q$($,J)}function e$($){if(q$($))return $;if($==null)throw new Z$("createSignal",$);if(i($))return B$($);if(g($))return Q$($);if(A$($))return H$($);if(L($))return V$($);return p($)}function $J($){if(w$($))return $;if($==null||g($)||q$($))throw new Z$("createMutableSignal",$);if(A$($))return H$($);if(L($))return V$($);return p($)}function JJ($){return S$($)||h$($)}function q$($){let J=[c,u,d,t,s,E,l,r],z=Object.prototype.toString.call($).slice(8,-1);return J.includes(z)}function w$($){return N$($)||x$($)||F$($)}function zJ($,J){K(s,$,q$);let z=$,X=J?.guard,W={fn:()=>z.get(),value:void 0,flags:D,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:J?.equals??k,error:void 0},H=()=>{if(N)F(W,N);if(I(W),W.error)throw W.error;return W.value},P=(C)=>{if(!w$(z))throw new P$(s);K(s,C,X),z.set(C)},M=(C)=>{K(s,C,q$),z=C,W.flags|=D;for(let U=W.sinks;U;U=U.nextSink)x(U.sink);if(R===0)w()};return{[Symbol.toStringTag]:s,configurable:!0,enumerable:!0,get:H,set:P,replace:M,current:()=>z}}function XJ($){return A($,s)}export{m$ as valueString,v as untrack,s$ as match,h$ as isTask,x$ as isStore,N$ as isState,XJ as isSlot,q$ as isSignal,o$ as isSensor,L as isRecord,A as isObjectOfType,w$ as isMutableSignal,S$ as isMemo,F$ as isList,g as isFunction,n as isEqual,JJ as isComputed,l$ as isCollection,i as isAsyncFunction,B$ as createTask,V$ as createStore,p as createState,zJ as createSlot,e$ as createSignal,i$ as createSensor,u$ as createScope,$J as createMutableSignal,Q$ as createMemo,H$ as createList,r$ as createEffect,a$ as createComputed,t$ as createCollection,J$ as batch,o as UnsetSignalValueError,L$ as SKIP_EQUALITY,D$ as RequiredOwnerError,P$ as ReadonlySignalError,Y$ as NullishSignalValueError,Z$ as InvalidSignalValueError,b$ as InvalidCallbackError,X$ as CircularDependencyError};
|
package/index.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @name Cause & Effect
|
|
3
|
-
* @version 0.18.
|
|
3
|
+
* @version 0.18.3
|
|
4
4
|
* @author Esther Brunner
|
|
5
5
|
*/
|
|
6
6
|
|
|
@@ -10,6 +10,7 @@ export {
|
|
|
10
10
|
InvalidCallbackError,
|
|
11
11
|
InvalidSignalValueError,
|
|
12
12
|
NullishSignalValueError,
|
|
13
|
+
ReadonlySignalError,
|
|
13
14
|
RequiredOwnerError,
|
|
14
15
|
UnsetSignalValueError,
|
|
15
16
|
} from './src/errors'
|
|
@@ -58,6 +59,7 @@ export {
|
|
|
58
59
|
type SensorCallback,
|
|
59
60
|
type SensorOptions,
|
|
60
61
|
} from './src/nodes/sensor'
|
|
62
|
+
export { createSlot, isSlot, type Slot } from './src/nodes/slot'
|
|
61
63
|
export {
|
|
62
64
|
createState,
|
|
63
65
|
isState,
|
package/package.json
CHANGED
package/src/errors.ts
CHANGED
|
@@ -91,6 +91,18 @@ class InvalidCallbackError extends TypeError {
|
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
+
class ReadonlySignalError extends Error {
|
|
95
|
+
/**
|
|
96
|
+
* Constructs a new ReadonlySignalError.
|
|
97
|
+
*
|
|
98
|
+
* @param where - The location where the error occurred.
|
|
99
|
+
*/
|
|
100
|
+
constructor(where: string) {
|
|
101
|
+
super(`[${where}] Signal is read-only`)
|
|
102
|
+
this.name = 'ReadonlySignalError'
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
94
106
|
/**
|
|
95
107
|
* Error thrown when an API requiring an owner is called without one.
|
|
96
108
|
*/
|
|
@@ -159,6 +171,7 @@ export {
|
|
|
159
171
|
InvalidSignalValueError,
|
|
160
172
|
UnsetSignalValueError,
|
|
161
173
|
InvalidCallbackError,
|
|
174
|
+
ReadonlySignalError,
|
|
162
175
|
RequiredOwnerError,
|
|
163
176
|
DuplicateKeyError,
|
|
164
177
|
validateSignalValue,
|
package/src/graph.ts
CHANGED
|
@@ -156,11 +156,13 @@ const TYPE_SENSOR = 'Sensor'
|
|
|
156
156
|
const TYPE_LIST = 'List'
|
|
157
157
|
const TYPE_COLLECTION = 'Collection'
|
|
158
158
|
const TYPE_STORE = 'Store'
|
|
159
|
+
const TYPE_SLOT = 'Slot'
|
|
159
160
|
|
|
160
161
|
const FLAG_CLEAN = 0
|
|
161
162
|
const FLAG_CHECK = 1 << 0
|
|
162
163
|
const FLAG_DIRTY = 1 << 1
|
|
163
164
|
const FLAG_RUNNING = 1 << 2
|
|
165
|
+
const FLAG_RELINK = 1 << 3
|
|
164
166
|
|
|
165
167
|
/* === Module State === */
|
|
166
168
|
|
|
@@ -244,9 +246,19 @@ function unlink(edge: Edge): Edge | null {
|
|
|
244
246
|
if (prevSink) prevSink.nextSink = nextSink
|
|
245
247
|
else source.sinks = nextSink
|
|
246
248
|
|
|
247
|
-
if (!source.sinks
|
|
248
|
-
source.stop
|
|
249
|
-
|
|
249
|
+
if (!source.sinks) {
|
|
250
|
+
if (source.stop) {
|
|
251
|
+
source.stop()
|
|
252
|
+
source.stop = undefined
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Cascade: if the source is also a sink (e.g. MemoNode, derived collection),
|
|
256
|
+
// trim its own sources so upstream watched callbacks can clean up
|
|
257
|
+
if ('sources' in source && source.sources) {
|
|
258
|
+
const sinkNode = source as SinkNode
|
|
259
|
+
sinkNode.sourcesTail = null
|
|
260
|
+
trimSources(sinkNode)
|
|
261
|
+
}
|
|
250
262
|
}
|
|
251
263
|
|
|
252
264
|
return nextSource
|
|
@@ -591,6 +603,7 @@ export {
|
|
|
591
603
|
SKIP_EQUALITY,
|
|
592
604
|
FLAG_CLEAN,
|
|
593
605
|
FLAG_DIRTY,
|
|
606
|
+
FLAG_RELINK,
|
|
594
607
|
flush,
|
|
595
608
|
link,
|
|
596
609
|
propagate,
|
|
@@ -605,6 +618,7 @@ export {
|
|
|
605
618
|
TYPE_MEMO,
|
|
606
619
|
TYPE_SENSOR,
|
|
607
620
|
TYPE_STATE,
|
|
621
|
+
TYPE_SLOT,
|
|
608
622
|
TYPE_STORE,
|
|
609
623
|
TYPE_TASK,
|
|
610
624
|
unlink,
|