@zeix/cause-effect 0.18.2 → 0.18.4
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 +21 -9
- package/CHANGELOG.md +22 -0
- package/CLAUDE.md +28 -4
- package/GUIDE.md +22 -0
- package/README.md +33 -1
- package/REQUIREMENTS.md +4 -3
- package/index.dev.js +178 -81
- 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 +8 -4
- package/src/nodes/collection.ts +0 -4
- package/src/nodes/effect.ts +3 -3
- package/src/nodes/memo.ts +1 -3
- package/src/nodes/slot.ts +134 -0
- package/src/nodes/task.ts +1 -3
- package/src/signal.ts +2 -0
- package/test/effect.test.ts +221 -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 +4 -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
|
}
|
|
@@ -183,10 +199,12 @@ function propagate(node, newFlag = FLAG_DIRTY) {
|
|
|
183
199
|
for (let e = node.sinks;e; e = e.nextSink)
|
|
184
200
|
propagate(e.sink, FLAG_CHECK);
|
|
185
201
|
} else {
|
|
186
|
-
if (flags & FLAG_DIRTY)
|
|
202
|
+
if ((flags & (FLAG_DIRTY | FLAG_CHECK)) >= newFlag)
|
|
187
203
|
return;
|
|
188
|
-
|
|
189
|
-
|
|
204
|
+
const wasQueued = flags & (FLAG_DIRTY | FLAG_CHECK);
|
|
205
|
+
node.flags = newFlag;
|
|
206
|
+
if (!wasQueued)
|
|
207
|
+
queuedEffects.push(node);
|
|
190
208
|
}
|
|
191
209
|
}
|
|
192
210
|
function setState(node, next) {
|
|
@@ -338,7 +356,7 @@ function flush() {
|
|
|
338
356
|
try {
|
|
339
357
|
for (let i = 0;i < queuedEffects.length; i++) {
|
|
340
358
|
const effect = queuedEffects[i];
|
|
341
|
-
if (effect.flags & FLAG_DIRTY)
|
|
359
|
+
if (effect.flags & (FLAG_DIRTY | FLAG_CHECK))
|
|
342
360
|
refresh(effect);
|
|
343
361
|
}
|
|
344
362
|
queuedEffects.length = 0;
|
|
@@ -576,10 +594,8 @@ function createList(value, options) {
|
|
|
576
594
|
keys.splice(index, 1);
|
|
577
595
|
structural = true;
|
|
578
596
|
}
|
|
579
|
-
if (structural)
|
|
580
|
-
node.
|
|
581
|
-
node.sourcesTail = null;
|
|
582
|
-
}
|
|
597
|
+
if (structural)
|
|
598
|
+
node.flags |= FLAG_RELINK;
|
|
583
599
|
return changes.changed;
|
|
584
600
|
};
|
|
585
601
|
const watched = options?.watched;
|
|
@@ -619,8 +635,16 @@ function createList(value, options) {
|
|
|
619
635
|
subscribe();
|
|
620
636
|
if (node.sources) {
|
|
621
637
|
if (node.flags) {
|
|
638
|
+
const relink = node.flags & FLAG_RELINK;
|
|
622
639
|
node.value = untrack(buildValue);
|
|
623
|
-
|
|
640
|
+
if (relink) {
|
|
641
|
+
node.flags = FLAG_DIRTY;
|
|
642
|
+
refresh(node);
|
|
643
|
+
if (node.error)
|
|
644
|
+
throw node.error;
|
|
645
|
+
} else {
|
|
646
|
+
node.flags = FLAG_CLEAN;
|
|
647
|
+
}
|
|
624
648
|
}
|
|
625
649
|
} else {
|
|
626
650
|
refresh(node);
|
|
@@ -669,9 +693,7 @@ function createList(value, options) {
|
|
|
669
693
|
keys.push(key);
|
|
670
694
|
validateSignalValue(`${TYPE_LIST} item for key "${key}"`, value2);
|
|
671
695
|
signals.set(key, createState(value2));
|
|
672
|
-
node.
|
|
673
|
-
node.sourcesTail = null;
|
|
674
|
-
node.flags |= FLAG_DIRTY;
|
|
696
|
+
node.flags |= FLAG_DIRTY | FLAG_RELINK;
|
|
675
697
|
for (let e = node.sinks;e; e = e.nextSink)
|
|
676
698
|
propagate(e.sink);
|
|
677
699
|
if (batchDepth === 0)
|
|
@@ -685,9 +707,7 @@ function createList(value, options) {
|
|
|
685
707
|
const index = typeof keyOrIndex === "number" ? keyOrIndex : keys.indexOf(key);
|
|
686
708
|
if (index >= 0)
|
|
687
709
|
keys.splice(index, 1);
|
|
688
|
-
node.
|
|
689
|
-
node.sourcesTail = null;
|
|
690
|
-
node.flags |= FLAG_DIRTY;
|
|
710
|
+
node.flags |= FLAG_DIRTY | FLAG_RELINK;
|
|
691
711
|
for (let e = node.sinks;e; e = e.nextSink)
|
|
692
712
|
propagate(e.sink);
|
|
693
713
|
if (batchDepth === 0)
|
|
@@ -779,9 +799,7 @@ function createMemo(fn, options) {
|
|
|
779
799
|
if (activeSink) {
|
|
780
800
|
if (!node.sinks)
|
|
781
801
|
node.stop = watched(() => {
|
|
782
|
-
node
|
|
783
|
-
for (let e = node.sinks;e; e = e.nextSink)
|
|
784
|
-
propagate(e.sink);
|
|
802
|
+
propagate(node);
|
|
785
803
|
if (batchDepth === 0)
|
|
786
804
|
flush();
|
|
787
805
|
});
|
|
@@ -830,9 +848,7 @@ function createTask(fn, options) {
|
|
|
830
848
|
if (activeSink) {
|
|
831
849
|
if (!node.sinks)
|
|
832
850
|
node.stop = watched(() => {
|
|
833
|
-
node
|
|
834
|
-
for (let e = node.sinks;e; e = e.nextSink)
|
|
835
|
-
propagate(e.sink);
|
|
851
|
+
propagate(node);
|
|
836
852
|
if (batchDepth === 0)
|
|
837
853
|
flush();
|
|
838
854
|
});
|
|
@@ -868,10 +884,9 @@ function isTask(value) {
|
|
|
868
884
|
// src/nodes/collection.ts
|
|
869
885
|
function deriveCollection(source, callback) {
|
|
870
886
|
validateCallback(TYPE_COLLECTION, callback);
|
|
871
|
-
if (!isCollectionSource(source))
|
|
872
|
-
throw new TypeError(`[${TYPE_COLLECTION}] Invalid collection source: expected a List or Collection`);
|
|
873
887
|
const isAsync = isAsyncFunction(callback);
|
|
874
888
|
const signals = new Map;
|
|
889
|
+
let keys = [];
|
|
875
890
|
const addSignal = (key) => {
|
|
876
891
|
const signal = isAsync ? createTask(async (prev, abort) => {
|
|
877
892
|
const sourceValue = source.byKey(key)?.get();
|
|
@@ -886,54 +901,84 @@ function deriveCollection(source, callback) {
|
|
|
886
901
|
});
|
|
887
902
|
signals.set(key, signal);
|
|
888
903
|
};
|
|
889
|
-
function syncKeys() {
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
if (!keysEqual(prevKeys, nextKeys)) {
|
|
893
|
-
const a = new Set(prevKeys);
|
|
904
|
+
function syncKeys(nextKeys) {
|
|
905
|
+
if (!keysEqual(keys, nextKeys)) {
|
|
906
|
+
const a = new Set(keys);
|
|
894
907
|
const b = new Set(nextKeys);
|
|
895
|
-
for (const key of
|
|
908
|
+
for (const key of keys)
|
|
896
909
|
if (!b.has(key))
|
|
897
910
|
signals.delete(key);
|
|
898
911
|
for (const key of nextKeys)
|
|
899
912
|
if (!a.has(key))
|
|
900
913
|
addSignal(key);
|
|
914
|
+
keys = nextKeys;
|
|
915
|
+
node.flags |= FLAG_RELINK;
|
|
901
916
|
}
|
|
902
|
-
return nextKeys;
|
|
903
917
|
}
|
|
918
|
+
function buildValue() {
|
|
919
|
+
syncKeys(Array.from(source.keys()));
|
|
920
|
+
const result = [];
|
|
921
|
+
for (const key of keys) {
|
|
922
|
+
try {
|
|
923
|
+
const v = signals.get(key)?.get();
|
|
924
|
+
if (v != null)
|
|
925
|
+
result.push(v);
|
|
926
|
+
} catch (e) {
|
|
927
|
+
if (!(e instanceof UnsetSignalValueError))
|
|
928
|
+
throw e;
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
return result;
|
|
932
|
+
}
|
|
933
|
+
const valuesEqual = (a, b) => {
|
|
934
|
+
if (a.length !== b.length)
|
|
935
|
+
return false;
|
|
936
|
+
for (let i = 0;i < a.length; i++)
|
|
937
|
+
if (a[i] !== b[i])
|
|
938
|
+
return false;
|
|
939
|
+
return true;
|
|
940
|
+
};
|
|
904
941
|
const node = {
|
|
905
|
-
fn:
|
|
942
|
+
fn: buildValue,
|
|
906
943
|
value: [],
|
|
907
944
|
flags: FLAG_DIRTY,
|
|
908
945
|
sources: null,
|
|
909
946
|
sourcesTail: null,
|
|
910
947
|
sinks: null,
|
|
911
948
|
sinksTail: null,
|
|
912
|
-
equals:
|
|
949
|
+
equals: valuesEqual,
|
|
913
950
|
error: undefined
|
|
914
951
|
};
|
|
915
|
-
function
|
|
952
|
+
function ensureFresh() {
|
|
916
953
|
if (node.sources) {
|
|
917
954
|
if (node.flags) {
|
|
918
|
-
node.value = untrack(
|
|
919
|
-
node.flags
|
|
955
|
+
node.value = untrack(buildValue);
|
|
956
|
+
if (node.flags & FLAG_RELINK) {
|
|
957
|
+
node.flags = FLAG_DIRTY;
|
|
958
|
+
refresh(node);
|
|
959
|
+
if (node.error)
|
|
960
|
+
throw node.error;
|
|
961
|
+
} else {
|
|
962
|
+
node.flags = FLAG_CLEAN;
|
|
963
|
+
}
|
|
920
964
|
}
|
|
921
|
-
} else {
|
|
965
|
+
} else if (node.sinks) {
|
|
922
966
|
refresh(node);
|
|
923
967
|
if (node.error)
|
|
924
968
|
throw node.error;
|
|
969
|
+
} else {
|
|
970
|
+
node.value = untrack(buildValue);
|
|
925
971
|
}
|
|
926
|
-
return node.value;
|
|
927
972
|
}
|
|
928
|
-
const initialKeys = Array.from(source.keys());
|
|
973
|
+
const initialKeys = Array.from(untrack(() => source.keys()));
|
|
929
974
|
for (const key of initialKeys)
|
|
930
975
|
addSignal(key);
|
|
931
|
-
|
|
976
|
+
keys = initialKeys;
|
|
932
977
|
const collection = {
|
|
933
978
|
[Symbol.toStringTag]: TYPE_COLLECTION,
|
|
934
979
|
[Symbol.isConcatSpreadable]: true,
|
|
935
980
|
*[Symbol.iterator]() {
|
|
936
|
-
for (const key of
|
|
981
|
+
for (const key of keys) {
|
|
937
982
|
const signal = signals.get(key);
|
|
938
983
|
if (signal)
|
|
939
984
|
yield signal;
|
|
@@ -942,41 +987,32 @@ function deriveCollection(source, callback) {
|
|
|
942
987
|
get length() {
|
|
943
988
|
if (activeSink)
|
|
944
989
|
link(node, activeSink);
|
|
945
|
-
|
|
990
|
+
ensureFresh();
|
|
991
|
+
return keys.length;
|
|
946
992
|
},
|
|
947
993
|
keys() {
|
|
948
994
|
if (activeSink)
|
|
949
995
|
link(node, activeSink);
|
|
950
|
-
|
|
996
|
+
ensureFresh();
|
|
997
|
+
return keys.values();
|
|
951
998
|
},
|
|
952
999
|
get() {
|
|
953
1000
|
if (activeSink)
|
|
954
1001
|
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;
|
|
1002
|
+
ensureFresh();
|
|
1003
|
+
return node.value;
|
|
968
1004
|
},
|
|
969
1005
|
at(index) {
|
|
970
|
-
return signals.get(
|
|
1006
|
+
return signals.get(keys[index]);
|
|
971
1007
|
},
|
|
972
1008
|
byKey(key) {
|
|
973
1009
|
return signals.get(key);
|
|
974
1010
|
},
|
|
975
1011
|
keyAt(index) {
|
|
976
|
-
return
|
|
1012
|
+
return keys[index];
|
|
977
1013
|
},
|
|
978
1014
|
indexOfKey(key) {
|
|
979
|
-
return
|
|
1015
|
+
return keys.indexOf(key);
|
|
980
1016
|
},
|
|
981
1017
|
deriveCollection(cb) {
|
|
982
1018
|
return deriveCollection(collection, cb);
|
|
@@ -1073,11 +1109,7 @@ function createCollection(watched, options) {
|
|
|
1073
1109
|
structural = true;
|
|
1074
1110
|
}
|
|
1075
1111
|
}
|
|
1076
|
-
|
|
1077
|
-
node.sources = null;
|
|
1078
|
-
node.sourcesTail = null;
|
|
1079
|
-
}
|
|
1080
|
-
node.flags = FLAG_DIRTY;
|
|
1112
|
+
node.flags = FLAG_DIRTY | (structural ? FLAG_RELINK : 0);
|
|
1081
1113
|
for (let e = node.sinks;e; e = e.nextSink)
|
|
1082
1114
|
propagate(e.sink);
|
|
1083
1115
|
});
|
|
@@ -1107,8 +1139,16 @@ function createCollection(watched, options) {
|
|
|
1107
1139
|
subscribe();
|
|
1108
1140
|
if (node.sources) {
|
|
1109
1141
|
if (node.flags) {
|
|
1142
|
+
const relink = node.flags & FLAG_RELINK;
|
|
1110
1143
|
node.value = untrack(buildValue);
|
|
1111
|
-
|
|
1144
|
+
if (relink) {
|
|
1145
|
+
node.flags = FLAG_DIRTY;
|
|
1146
|
+
refresh(node);
|
|
1147
|
+
if (node.error)
|
|
1148
|
+
throw node.error;
|
|
1149
|
+
} else {
|
|
1150
|
+
node.flags = FLAG_CLEAN;
|
|
1151
|
+
}
|
|
1112
1152
|
}
|
|
1113
1153
|
} else {
|
|
1114
1154
|
refresh(node);
|
|
@@ -1138,9 +1178,6 @@ function createCollection(watched, options) {
|
|
|
1138
1178
|
function isCollection(value) {
|
|
1139
1179
|
return isObjectOfType(value, TYPE_COLLECTION);
|
|
1140
1180
|
}
|
|
1141
|
-
function isCollectionSource(value) {
|
|
1142
|
-
return isList(value) || isCollection(value);
|
|
1143
|
-
}
|
|
1144
1181
|
// src/nodes/effect.ts
|
|
1145
1182
|
function createEffect(fn) {
|
|
1146
1183
|
validateCallback("Effect", fn);
|
|
@@ -1335,10 +1372,8 @@ function createStore(value, options) {
|
|
|
1335
1372
|
signals.delete(key);
|
|
1336
1373
|
structural = true;
|
|
1337
1374
|
}
|
|
1338
|
-
if (structural)
|
|
1339
|
-
node.
|
|
1340
|
-
node.sourcesTail = null;
|
|
1341
|
-
}
|
|
1375
|
+
if (structural)
|
|
1376
|
+
node.flags |= FLAG_RELINK;
|
|
1342
1377
|
return changes.changed;
|
|
1343
1378
|
};
|
|
1344
1379
|
const watched = options?.watched;
|
|
@@ -1375,8 +1410,16 @@ function createStore(value, options) {
|
|
|
1375
1410
|
subscribe();
|
|
1376
1411
|
if (node.sources) {
|
|
1377
1412
|
if (node.flags) {
|
|
1413
|
+
const relink = node.flags & FLAG_RELINK;
|
|
1378
1414
|
node.value = untrack(buildValue);
|
|
1379
|
-
|
|
1415
|
+
if (relink) {
|
|
1416
|
+
node.flags = FLAG_DIRTY;
|
|
1417
|
+
refresh(node);
|
|
1418
|
+
if (node.error)
|
|
1419
|
+
throw node.error;
|
|
1420
|
+
} else {
|
|
1421
|
+
node.flags = FLAG_CLEAN;
|
|
1422
|
+
}
|
|
1380
1423
|
}
|
|
1381
1424
|
} else {
|
|
1382
1425
|
refresh(node);
|
|
@@ -1403,9 +1446,7 @@ function createStore(value, options) {
|
|
|
1403
1446
|
if (signals.has(key))
|
|
1404
1447
|
throw new DuplicateKeyError(TYPE_STORE, key, value2);
|
|
1405
1448
|
addSignal(key, value2);
|
|
1406
|
-
node.
|
|
1407
|
-
node.sourcesTail = null;
|
|
1408
|
-
node.flags |= FLAG_DIRTY;
|
|
1449
|
+
node.flags |= FLAG_DIRTY | FLAG_RELINK;
|
|
1409
1450
|
for (let e = node.sinks;e; e = e.nextSink)
|
|
1410
1451
|
propagate(e.sink);
|
|
1411
1452
|
if (batchDepth === 0)
|
|
@@ -1415,9 +1456,7 @@ function createStore(value, options) {
|
|
|
1415
1456
|
remove(key) {
|
|
1416
1457
|
const ok = signals.delete(key);
|
|
1417
1458
|
if (ok) {
|
|
1418
|
-
node.
|
|
1419
|
-
node.sourcesTail = null;
|
|
1420
|
-
node.flags |= FLAG_DIRTY;
|
|
1459
|
+
node.flags |= FLAG_DIRTY | FLAG_RELINK;
|
|
1421
1460
|
for (let e = node.sinks;e; e = e.nextSink)
|
|
1422
1461
|
propagate(e.sink);
|
|
1423
1462
|
if (batchDepth === 0)
|
|
@@ -1458,6 +1497,7 @@ function createStore(value, options) {
|
|
|
1458
1497
|
function isStore(value) {
|
|
1459
1498
|
return isObjectOfType(value, TYPE_STORE);
|
|
1460
1499
|
}
|
|
1500
|
+
|
|
1461
1501
|
// src/signal.ts
|
|
1462
1502
|
function createComputed(callback, options) {
|
|
1463
1503
|
return isAsyncFunction(callback) ? createTask(callback, options) : createMemo(callback, options);
|
|
@@ -1497,6 +1537,7 @@ function isSignal(value) {
|
|
|
1497
1537
|
TYPE_MEMO,
|
|
1498
1538
|
TYPE_TASK,
|
|
1499
1539
|
TYPE_SENSOR,
|
|
1540
|
+
TYPE_SLOT,
|
|
1500
1541
|
TYPE_LIST,
|
|
1501
1542
|
TYPE_COLLECTION,
|
|
1502
1543
|
TYPE_STORE
|
|
@@ -1507,6 +1548,59 @@ function isSignal(value) {
|
|
|
1507
1548
|
function isMutableSignal(value) {
|
|
1508
1549
|
return isState(value) || isStore(value) || isList(value);
|
|
1509
1550
|
}
|
|
1551
|
+
|
|
1552
|
+
// src/nodes/slot.ts
|
|
1553
|
+
function createSlot(initialSignal, options) {
|
|
1554
|
+
validateSignalValue(TYPE_SLOT, initialSignal, isSignal);
|
|
1555
|
+
let delegated = initialSignal;
|
|
1556
|
+
const guard = options?.guard;
|
|
1557
|
+
const node = {
|
|
1558
|
+
fn: () => delegated.get(),
|
|
1559
|
+
value: undefined,
|
|
1560
|
+
flags: FLAG_DIRTY,
|
|
1561
|
+
sources: null,
|
|
1562
|
+
sourcesTail: null,
|
|
1563
|
+
sinks: null,
|
|
1564
|
+
sinksTail: null,
|
|
1565
|
+
equals: options?.equals ?? DEFAULT_EQUALITY,
|
|
1566
|
+
error: undefined
|
|
1567
|
+
};
|
|
1568
|
+
const get = () => {
|
|
1569
|
+
if (activeSink)
|
|
1570
|
+
link(node, activeSink);
|
|
1571
|
+
refresh(node);
|
|
1572
|
+
if (node.error)
|
|
1573
|
+
throw node.error;
|
|
1574
|
+
return node.value;
|
|
1575
|
+
};
|
|
1576
|
+
const set = (next) => {
|
|
1577
|
+
if (!isMutableSignal(delegated))
|
|
1578
|
+
throw new ReadonlySignalError(TYPE_SLOT);
|
|
1579
|
+
validateSignalValue(TYPE_SLOT, next, guard);
|
|
1580
|
+
delegated.set(next);
|
|
1581
|
+
};
|
|
1582
|
+
const replace = (next) => {
|
|
1583
|
+
validateSignalValue(TYPE_SLOT, next, isSignal);
|
|
1584
|
+
delegated = next;
|
|
1585
|
+
node.flags |= FLAG_DIRTY;
|
|
1586
|
+
for (let e = node.sinks;e; e = e.nextSink)
|
|
1587
|
+
propagate(e.sink);
|
|
1588
|
+
if (batchDepth === 0)
|
|
1589
|
+
flush();
|
|
1590
|
+
};
|
|
1591
|
+
return {
|
|
1592
|
+
[Symbol.toStringTag]: TYPE_SLOT,
|
|
1593
|
+
configurable: true,
|
|
1594
|
+
enumerable: true,
|
|
1595
|
+
get,
|
|
1596
|
+
set,
|
|
1597
|
+
replace,
|
|
1598
|
+
current: () => delegated
|
|
1599
|
+
};
|
|
1600
|
+
}
|
|
1601
|
+
function isSlot(value) {
|
|
1602
|
+
return isObjectOfType(value, TYPE_SLOT);
|
|
1603
|
+
}
|
|
1510
1604
|
export {
|
|
1511
1605
|
valueString,
|
|
1512
1606
|
untrack,
|
|
@@ -1514,6 +1608,7 @@ export {
|
|
|
1514
1608
|
isTask,
|
|
1515
1609
|
isStore,
|
|
1516
1610
|
isState,
|
|
1611
|
+
isSlot,
|
|
1517
1612
|
isSignal,
|
|
1518
1613
|
isSensor,
|
|
1519
1614
|
isRecord,
|
|
@@ -1529,6 +1624,7 @@ export {
|
|
|
1529
1624
|
createTask,
|
|
1530
1625
|
createStore,
|
|
1531
1626
|
createState,
|
|
1627
|
+
createSlot,
|
|
1532
1628
|
createSignal,
|
|
1533
1629
|
createSensor,
|
|
1534
1630
|
createScope,
|
|
@@ -1542,6 +1638,7 @@ export {
|
|
|
1542
1638
|
UnsetSignalValueError,
|
|
1543
1639
|
SKIP_EQUALITY,
|
|
1544
1640
|
RequiredOwnerError,
|
|
1641
|
+
ReadonlySignalError,
|
|
1545
1642
|
NullishSignalValueError,
|
|
1546
1643
|
InvalidSignalValueError,
|
|
1547
1644
|
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 X$($){return g($)&&$.constructor.name!=="AsyncFunction"}function Y($,J){return Object.prototype.toString.call($)===`[object ${J}]`}function L($){return Y($,"Object")}function Y$($,J=(z)=>z!=null){return Array.isArray($)&&$.every(J)}function D$($){return typeof $==="string"?`"${$}"`:!!$&&typeof $==="object"?JSON.stringify($):String($)}class Z$ extends Error{constructor($){super(`[${$}] Circular dependency detected`);this.name="CircularDependencyError"}}class A$ 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 j$ extends TypeError{constructor($,J){super(`[${$}] Signal value ${D$(J)} is invalid`);this.name="InvalidSignalValueError"}}class b$ extends TypeError{constructor($,J){super(`[${$}] Callback ${D$(J)} is invalid`);this.name="InvalidCallbackError"}}class P$ extends Error{constructor($){super(`[${$}] Signal is read-only`);this.name="ReadonlySignalError"}}class G$ 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 C($,J,z){if(J==null)throw new A$($);if(z&&!z(J))throw new j$($,J)}function W$($,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,$$=1,G=2,U$=4,b=8,N=null,y=null,O$=[],x=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 R($,J){let z=J.sourcesTail;if(z?.source===$)return;let X=null,W=J.flags&U$;if(W){if(X=z?z.nextSource:J.sources,X?.source===$){J.sourcesTail=X;return}}let Q=$.sinksTail;if(Q?.sink===J&&(!W||g$(Q,J)))return;let D={source:$,sink:J,nextSource:X,prevSink:Q,nextSink:null};if(J.sourcesTail=$.sinksTail=D,z)z.nextSource=D;else J.sources=D;if(Q)Q.nextSink=D;else $.sinks=D}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 Q=J;Q.sourcesTail=null,H$(Q)}}return z}function H$($){let J=$.sourcesTail,z=J?J.nextSource:$.sources;while(z)z=k$(z);if(J)J.nextSource=null;else $.sources=null}function F($,J=G){let z=$.flags;if("sinks"in $){if((z&(G|$$))>=J)return;if($.flags=z|J,"controller"in $&&$.controller)$.controller.abort(),$.controller=void 0;for(let X=$.sinks;X;X=X.nextSink)F(X.sink,$$)}else{if((z&(G|$$))>=J)return;let X=z&(G|$$);if($.flags=J,!X)O$.push($)}}function N$($,J){if($.equals($.value,J))return;$.value=J;for(let z=$.sinks;z;z=z.nextSink)F(z.sink);if(x===0)I()}function J$($,J){if(!$.cleanup)$.cleanup=J;else if(Array.isArray($.cleanup))$.cleanup.push(J);else $.cleanup=[$.cleanup,J]}function C$($){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=U$;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,H$($)}if(z){for(let X=$.sinks;X;X=X.nextSink)if(X.sink.flags&$$)X.sink.flags|=G}$.flags=S}function c$($){$.controller?.abort();let J=new AbortController;$.controller=J,$.error=void 0;let z=N;N=$,$.sourcesTail=null,$.flags=U$;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,H$($)}X.then((W)=>{if(J.signal.aborted)return;if($.controller=void 0,$.error||!$.equals(W,$.value)){$.value=W,$.error=void 0;for(let Q=$.sinks;Q;Q=Q.nextSink)F(Q.sink);if(x===0)I()}},(W)=>{if(J.signal.aborted)return;$.controller=void 0;let Q=W instanceof Error?W:Error(String(W));if(!$.error||Q.name!==$.error.name||Q.message!==$.error.message){$.error=Q;for(let D=$.sinks;D;D=D.nextSink)F(D.sink);if(x===0)I()}}),$.flags=S}function T$($){C$($);let J=N,z=y;N=y=$,$.sourcesTail=null,$.flags=U$;try{let X=$.fn();if(typeof X==="function")J$($,X)}finally{N=J,y=z,H$($)}$.flags=S}function w($){if($.flags&$$)for(let J=$.sources;J;J=J.nextSource){if("fn"in J.source)w(J.source);if($.flags&G)break}if($.flags&U$)throw new Z$("controller"in $?d:("value"in $)?u:"Effect");if($.flags&G)if("controller"in $)c$($);else if("value"in $)v$($);else T$($);else $.flags=S}function I(){if(_$)return;_$=!0;try{for(let $=0;$<O$.length;$++){let J=O$[$];if(J.flags&(G|$$))w(J)}O$.length=0}finally{_$=!1}}function z$($){x++;try{$()}finally{if(x--,x===0)I()}}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")J$(z,X);let W=()=>C$(z);if(J)J$(J,W);return W}finally{y=J}}function p($,J){C(c,$,J?.guard);let z={value:$,sinks:null,sinksTail:null,equals:J?.equals??k,guard:J?.guard};return{[Symbol.toStringTag]:c,get(){if(N)R(z,N);return z.value},set(X){C(c,X,z.guard),N$(z,X)},update(X){T(c,X);let W=X(z.value);C(c,W,z.guard),N$(z,W)}}}function V$($){return Y($,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 Z$("isEqual");z.add($),z.add(J);try{let X=Array.isArray($);if(X!==Array.isArray(J))return!1;if(X){let W=$,Q=J;if(W.length!==Q.length)return!1;for(let D=0;D<W.length;D++)if(!n(W[D],Q[D],z))return!1;return!0}if(L($)&&L(J)){let W=Object.keys($),Q=Object.keys(J);if(W.length!==Q.length)return!1;for(let D of W){if(!(D in J))return!1;if(!n($[D],J[D],z))return!1}return!0}return!1}finally{z.delete($),z.delete(J)}}function K$($,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 Q=new WeakSet,D={},M={},O={},U=[],H=!1,j=new Map;for(let q=0;q<$.length;q++){let Z=z[q];if(Z&&$[q])j.set(Z,$[q])}let P=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(P.has(B))throw new e(E,B,Z);if(U.push(B),P.add(B),!j.has(B))D[B]=Z,H=!0;else if(!n(j.get(B),Z,Q))M[B]=Z,H=!0}for(let[q]of j)if(!P.has(q))O[q]=null,H=!0;if(!H&&!K$(z,U))H=!0;return{add:D,change:M,remove:O,newKeys:U,changed:H}}function Q$($,J){C(E,$,Array.isArray);let z=new Map,X=[],[W,Q]=E$(J?.keyConfig),D=()=>X.map((Z)=>z.get(Z)?.get()).filter((Z)=>Z!==void 0),M={fn:D,value:$,flags:G,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:n,error:void 0},O=(Z)=>{let B={};for(let V=0;V<Z.length;V++){let m=Z[V];if(m===void 0)continue;let K=X[V];if(!K)K=W(m),X[V]=K;B[K]=m}return B},U=(Z)=>{let B=!1;for(let V in Z.add){let m=Z.add[V];C(`${E} item for key "${V}"`,m),z.set(V,p(m)),B=!0}if(Object.keys(Z.change).length)z$(()=>{for(let V in Z.change){let m=Z.change[V];C(`${E} item for key "${V}"`,m);let K=z.get(V);if(K)K.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},H=J?.watched,j=H?()=>{if(N){if(!M.sinks)M.stop=H();R(M,N)}}:()=>{if(N)R(M,N)},P=O($);for(let Z in P){let B=P[Z];C(`${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(D),Z){if(M.flags=G,w(M),M.error)throw M.error}else M.flags=S}}else if(w(M),M.error)throw M.error;return M.value},set(Z){let B=M.flags&G?D():M.value,V=d$(B,Z,X,W,Q);if(V.changed){X=V.newKeys,U(V),M.flags|=G;for(let m=M.sinks;m;m=m.nextSink)F(m.sink);if(x===0)I()}},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);C(`${E} item for key "${B}"`,Z),z.set(B,p(Z)),M.flags|=G|b;for(let V=M.sinks;V;V=V.nextSink)F(V.sink);if(x===0)I();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|=G|b;for(let K=M.sinks;K;K=K.nextSink)F(K.sink);if(x===0)I()}},sort(Z){let V=X.map((m)=>[m,z.get(m)?.get()]).sort(g(Z)?(m,K)=>Z(m[1],K[1]):(m,K)=>String(m[1]).localeCompare(String(K[1]))).map(([m])=>m);if(!K$(X,V)){X=V,M.flags|=G;for(let m=M.sinks;m;m=m.nextSink)F(m.sink);if(x===0)I()}},splice(Z,B,...V){let m=X.length,K=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,K)),m-K)),A={},_={};for(let h=0;h<f;h++){let a=K+h,f$=X[a];if(f$){let y$=z.get(f$);if(y$)_[f$]=y$.get()}}let w$=X.slice(0,K);for(let h of V){let a=W(h);if(z.has(a)&&!(a in _))throw new e(E,a,h);w$.push(a),A[a]=h}w$.push(...X.slice(K+f));let p$=!!(Object.keys(A).length||Object.keys(_).length);if(p$){U({add:A,change:{},remove:_,changed:p$}),X=w$,M.flags|=G;for(let h=M.sinks;h;h=h.nextSink)F(h.sink);if(x===0)I()}return Object.values(_)},deriveCollection(Z){return x$(q,Z)}};return q}function R$($){return Y($,E)}function B$($,J){if(T(u,$,X$),J?.value!==void 0)C(u,J.value,J?.guard);let z={fn:$,value:J?.value,flags:G,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(()=>{if(F(z),x===0)I()});R(z,N)}}:()=>{if(N)R(z,N)};return{[Symbol.toStringTag]:u,get(){if(W(),w(z),z.error)throw z.error;return W$(u,z.value),z.value}}}function S$($){return Y($,u)}function q$($,J){if(T(d,$,i),J?.value!==void 0)C(d,J.value,J?.guard);let z={fn:$,value:J?.value,sources:null,sourcesTail:null,sinks:null,sinksTail:null,flags:G,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(()=>{if(F(z),x===0)I()});R(z,N)}}:()=>{if(N)R(z,N)};return{[Symbol.toStringTag]:d,get(){if(W(),w(z),z.error)throw z.error;return W$(d,z.value),z.value},isPending(){return!!z.controller},abort(){z.controller?.abort(),z.controller=void 0}}}function h$($){return Y($,d)}function x$($,J){T(l,J);let z=i(J),X=new Map,W=[],Q=(q)=>{let Z=z?q$(async(B,V)=>{let m=$.byKey(q)?.get();if(m==null)return B;return J(m,V)}):B$(()=>{let B=$.byKey(q)?.get();if(B==null)return;return J(B)});X.set(q,Z)};function D(q){if(!K$(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))Q(V);W=q,U.flags|=b}}function M(){D(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:G,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 H(){if(U.sources){if(U.flags)if(U.value=v(M),U.flags&b){if(U.flags=G,w(U),U.error)throw U.error}else U.flags=S}else if(U.sinks){if(w(U),U.error)throw U.error}else U.value=v(M)}let j=Array.from(v(()=>$.keys()));for(let q of j)Q(q);W=j;let P={[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)R(U,N);return H(),W.length},keys(){if(N)R(U,N);return H(),W.values()},get(){if(N)R(U,N);return H(),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 x$(P,q)}};return P}function t$($,J){let z=J?.value??[];if(z.length)C(l,z,Array.isArray);T(l,$,X$);let X=new Map,W=[],Q=new Map,[D,M]=E$(J?.keyConfig),O=(Z)=>Q.get(Z)??(M?D(Z):void 0),U=J?.createItem??p;function H(){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:H,value:z,flags:G,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:L$,error:void 0};for(let Z of z){let B=D(Z);X.set(B,U(Z)),Q.set(Z,B),W.push(B)}j.value=z,j.flags=G;function P(){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 K=!1;z$(()=>{if(B)for(let f of B){let A=D(f);if(X.set(A,U(f)),Q.set(f,A),!W.includes(A))W.push(A);K=!0}if(V)for(let f of V){let A=O(f);if(!A)continue;let _=X.get(A);if(_&&V$(_))Q.delete(_.get()),_.set(f),Q.set(f,A)}if(m)for(let f of m){let A=O(f);if(!A)continue;Q.delete(f),X.delete(A);let _=W.indexOf(A);if(_!==-1)W.splice(_,1);K=!0}j.flags=G|(K?b:0);for(let f=j.sinks;f;f=f.nextSink)F(f.sink)})});R(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 P(),W.length},keys(){return P(),W.values()},get(){if(P(),j.sources){if(j.flags){let Z=j.flags&b;if(j.value=v(H),Z){if(j.flags=G,w(j),j.error)throw j.error}else j.flags=S}}else if(w(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 x$(q,Z)}};return q}function l$($){return Y($,l)}function r$($){T("Effect",$);let J={fn:$,flags:G,sources:null,sourcesTail:null,cleanup:null},z=()=>{C$(J),J.fn=void 0,J.flags=S,J.sourcesTail=null,H$(J)};if(y)J$(y,z);return T$(J),z}function s$($,J){if(!y)throw new G$("match");let{ok:z,err:X=console.error,nil:W}=J,Q,D=!1,M=Array($.length);for(let U=0;U<$.length;U++)try{M[U]=$[U].get()}catch(H){if(H instanceof o){D=!0;continue}if(!Q)Q=[];Q.push(H instanceof Error?H:Error(String(H)))}let O;try{if(D)O=W?.();else if(Q)O=X(Q);else O=z(M)}catch(U){X([U instanceof Error?U:Error(String(U))])}if(typeof O==="function")return O;if(O instanceof Promise){let U=y,H=new AbortController;J$(U,()=>H.abort()),O.then((j)=>{if(!H.signal.aborted&&typeof j==="function")J$(U,j)}).catch((j)=>{X([j instanceof Error?j:Error(String(j))])})}}function i$($,J){if(T(t,$,X$),J?.value!==void 0)C(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)=>{C(t,X,z.guard),N$(z,X)});R(z,N)}return W$(t,z.value),z.value}}}function o$($){return Y($,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,Q={},D={},M={},O=!1,U=Object.keys($),H=Object.keys(J);for(let j of H)if(j in $){if(!n($[j],J[j],W))D[j]=J[j],O=!0}else Q[j]=J[j],O=!0;for(let j of U)if(!(j in J))M[j]=void 0,O=!0;return{add:Q,change:D,remove:M,changed:O}}function m$($,J){C(r,$,L);let z=new Map,X=(H,j)=>{if(C(`${r} for key "${H}"`,j),Array.isArray(j))z.set(H,Q$(j));else if(L(j))z.set(H,m$(j));else z.set(H,p(j))},W=()=>{let H={};return z.forEach((j,P)=>{H[P]=j.get()}),H},Q={fn:W,value:$,flags:G,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:n,error:void 0},D=(H)=>{let j=!1;for(let P in H.add)X(P,H.add[P]),j=!0;if(Object.keys(H.change).length)z$(()=>{for(let P in H.change){let q=H.change[P];C(`${r} for key "${P}"`,q);let Z=z.get(P);if(Z)if(L(q)!==F$(Z))X(P,q),j=!0;else Z.set(q)}});for(let P in H.remove)z.delete(P),j=!0;if(j)Q.flags|=b;return H.changed},M=J?.watched,O=M?()=>{if(N){if(!Q.sinks)Q.stop=M();R(Q,N)}}:()=>{if(N)R(Q,N)};for(let H of Object.keys($))X(H,$[H]);let U={[Symbol.toStringTag]:r,[Symbol.isConcatSpreadable]:!1,*[Symbol.iterator](){for(let H of Array.from(z.keys())){let j=z.get(H);if(j)yield[H,j]}},keys(){return O(),z.keys()},byKey(H){return z.get(H)},get(){if(O(),Q.sources){if(Q.flags){let H=Q.flags&b;if(Q.value=v(W),H){if(Q.flags=G,w(Q),Q.error)throw Q.error}else Q.flags=S}}else if(w(Q),Q.error)throw Q.error;return Q.value},set(H){let j=Q.flags&G?W():Q.value,P=n$(j,H);if(D(P)){Q.flags|=G;for(let q=Q.sinks;q;q=q.nextSink)F(q.sink);if(x===0)I()}},update(H){U.set(H(U.get()))},add(H,j){if(z.has(H))throw new e(r,H,j);X(H,j),Q.flags|=G|b;for(let P=Q.sinks;P;P=P.nextSink)F(P.sink);if(x===0)I();return H},remove(H){if(z.delete(H)){Q.flags|=G|b;for(let P=Q.sinks;P;P=P.nextSink)F(P.sink);if(x===0)I()}}};return new Proxy(U,{get(H,j){if(j in H)return Reflect.get(H,j);if(typeof j!=="symbol")return H.byKey(j)},has(H,j){if(j in H)return!0;return H.byKey(String(j))!==void 0},ownKeys(H){return Array.from(H.keys())},getOwnPropertyDescriptor(H,j){if(j in H)return Reflect.getOwnPropertyDescriptor(H,j);if(typeof j==="symbol")return;let P=H.byKey(String(j));return P?{enumerable:!0,configurable:!0,writable:!0,value:P}:void 0}})}function F$($){return Y($,r)}function a$($,J){return i($)?q$($,J):B$($,J)}function e$($){if(M$($))return $;if($==null)throw new j$("createSignal",$);if(i($))return q$($);if(g($))return B$($);if(Y$($))return Q$($);if(L($))return m$($);return p($)}function $J($){if(I$($))return $;if($==null||g($)||M$($))throw new j$("createMutableSignal",$);if(Y$($))return Q$($);if(L($))return m$($);return p($)}function JJ($){return S$($)||h$($)}function M$($){let J=[c,u,d,t,s,E,l,r],z=Object.prototype.toString.call($).slice(8,-1);return J.includes(z)}function I$($){return V$($)||F$($)||R$($)}function zJ($,J){C(s,$,M$);let z=$,X=J?.guard,W={fn:()=>z.get(),value:void 0,flags:G,sources:null,sourcesTail:null,sinks:null,sinksTail:null,equals:J?.equals??k,error:void 0},Q=()=>{if(N)R(W,N);if(w(W),W.error)throw W.error;return W.value},D=(O)=>{if(!I$(z))throw new P$(s);C(s,O,X),z.set(O)},M=(O)=>{C(s,O,M$),z=O,W.flags|=G;for(let U=W.sinks;U;U=U.nextSink)F(U.sink);if(x===0)I()};return{[Symbol.toStringTag]:s,configurable:!0,enumerable:!0,get:Q,set:D,replace:M,current:()=>z}}function XJ($){return Y($,s)}export{D$ as valueString,v as untrack,s$ as match,h$ as isTask,F$ as isStore,V$ as isState,XJ as isSlot,M$ as isSignal,o$ as isSensor,L as isRecord,Y as isObjectOfType,I$ as isMutableSignal,S$ as isMemo,R$ as isList,g as isFunction,n as isEqual,JJ as isComputed,l$ as isCollection,i as isAsyncFunction,q$ as createTask,m$ as createStore,p as createState,zJ as createSlot,e$ as createSignal,i$ as createSensor,u$ as createScope,$J as createMutableSignal,B$ as createMemo,Q$ as createList,r$ as createEffect,a$ as createComputed,t$ as createCollection,z$ as batch,o as UnsetSignalValueError,L$ as SKIP_EQUALITY,G$ as RequiredOwnerError,P$ as ReadonlySignalError,A$ as NullishSignalValueError,j$ as InvalidSignalValueError,b$ as InvalidCallbackError,Z$ 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.4
|
|
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,
|