@solidjs/signals 0.9.2 → 0.9.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/dist/dev.js +135 -50
- package/dist/node.cjs +509 -426
- package/dist/prod.js +130 -45
- package/dist/types/core/constants.d.ts +1 -0
- package/dist/types/core/core.d.ts +4 -2
- package/dist/types/core/index.d.ts +1 -1
- package/dist/types/core/scheduler.d.ts +5 -3
- package/dist/types/index.d.ts +1 -1
- package/dist/types/store/projection.d.ts +8 -3
- package/dist/types/store/store.d.ts +10 -6
- package/package.json +3 -3
package/dist/prod.js
CHANGED
|
@@ -32,6 +32,7 @@ const EFFECT_USER = 2;
|
|
|
32
32
|
const NOT_PENDING = {};
|
|
33
33
|
const SUPPORTS_PROXY = typeof Proxy === "function";
|
|
34
34
|
const defaultContext = {};
|
|
35
|
+
const $REFRESH = Symbol("refresh");
|
|
35
36
|
function actualInsertIntoHeap(e, t) {
|
|
36
37
|
const n = (e.i?.t ? e.i.u?.o : e.i?.o) ?? -1;
|
|
37
38
|
if (n >= e.o) e.o = n + 1;
|
|
@@ -138,7 +139,7 @@ let scheduled = false;
|
|
|
138
139
|
function schedule() {
|
|
139
140
|
if (scheduled) return;
|
|
140
141
|
scheduled = true;
|
|
141
|
-
if (!globalQueue.k) queueMicrotask(flush);
|
|
142
|
+
if (!globalQueue.k) Promise.resolve().then(() => queueMicrotask(flush));
|
|
142
143
|
}
|
|
143
144
|
class Queue {
|
|
144
145
|
i = null;
|
|
@@ -223,6 +224,8 @@ class GlobalQueue extends Queue {
|
|
|
223
224
|
return;
|
|
224
225
|
}
|
|
225
226
|
this.$.push(...activeTransition.pendingNodes);
|
|
227
|
+
this.L !== activeTransition.optimisticNodes &&
|
|
228
|
+
this.L.push(...activeTransition.optimisticNodes);
|
|
226
229
|
this.restoreQueues(activeTransition.queueStash);
|
|
227
230
|
transitions.delete(activeTransition);
|
|
228
231
|
activeTransition = null;
|
|
@@ -252,11 +255,12 @@ class GlobalQueue extends Queue {
|
|
|
252
255
|
initTransition(e) {
|
|
253
256
|
if (activeTransition && activeTransition.time === clock) return;
|
|
254
257
|
if (!activeTransition) {
|
|
255
|
-
activeTransition = e
|
|
258
|
+
activeTransition = e?.K ?? {
|
|
256
259
|
time: clock,
|
|
257
260
|
pendingNodes: [],
|
|
258
261
|
asyncNodes: [],
|
|
259
262
|
optimisticNodes: [],
|
|
263
|
+
actions: [],
|
|
260
264
|
queueStash: { G: [[], []], H: [] },
|
|
261
265
|
done: false
|
|
262
266
|
};
|
|
@@ -336,6 +340,7 @@ function runQueue(e, t) {
|
|
|
336
340
|
}
|
|
337
341
|
function transitionComplete(e) {
|
|
338
342
|
if (e.done) return true;
|
|
343
|
+
if (e.actions.length) return false;
|
|
339
344
|
let t = true;
|
|
340
345
|
for (let n = 0; n < e.asyncNodes.length; n++) {
|
|
341
346
|
if (e.asyncNodes[n].J & STATUS_PENDING) {
|
|
@@ -348,9 +353,38 @@ function transitionComplete(e) {
|
|
|
348
353
|
}
|
|
349
354
|
function runInTransition(e, t) {
|
|
350
355
|
const n = activeTransition;
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
356
|
+
try {
|
|
357
|
+
activeTransition = e;
|
|
358
|
+
return t();
|
|
359
|
+
} finally {
|
|
360
|
+
activeTransition = n;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
function action(e) {
|
|
364
|
+
return (...t) => {
|
|
365
|
+
const n = e(...t);
|
|
366
|
+
globalQueue.initTransition();
|
|
367
|
+
let i = activeTransition;
|
|
368
|
+
i.actions.push(n);
|
|
369
|
+
const step = e => {
|
|
370
|
+
let t = n.next(e);
|
|
371
|
+
if (t instanceof Promise) return t.then(process);
|
|
372
|
+
process(t);
|
|
373
|
+
};
|
|
374
|
+
const process = e => {
|
|
375
|
+
if (e.done) {
|
|
376
|
+
i.actions.splice(i.actions.indexOf(n), 1);
|
|
377
|
+
activeTransition = i;
|
|
378
|
+
schedule();
|
|
379
|
+
flush();
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
const t = e.value;
|
|
383
|
+
if (t instanceof Promise) return t.then(step);
|
|
384
|
+
runInTransition(i, () => step(t));
|
|
385
|
+
};
|
|
386
|
+
runInTransition(i, () => step());
|
|
387
|
+
};
|
|
354
388
|
}
|
|
355
389
|
GlobalQueue.F = recompute;
|
|
356
390
|
GlobalQueue.W = disposeChildren;
|
|
@@ -410,7 +444,7 @@ function recompute(e, t = false) {
|
|
|
410
444
|
else e.D = null;
|
|
411
445
|
}
|
|
412
446
|
}
|
|
413
|
-
const c = !e.ue || !e.ue(e.M === NOT_PENDING || e.oe || n ? e.Y : e.M, r);
|
|
447
|
+
const c = !e.ue || !e.ue(e.M === NOT_PENDING || (e.oe && e.K) || n ? e.Y : e.M, r);
|
|
414
448
|
const a = e.J !== o || e.j !== u;
|
|
415
449
|
e.le?.(a, o);
|
|
416
450
|
if (c || a) {
|
|
@@ -427,7 +461,7 @@ function recompute(e, t = false) {
|
|
|
427
461
|
}
|
|
428
462
|
e.oe && !optimisticRun && globalQueue.L.push(e);
|
|
429
463
|
(!t || e.J & STATUS_PENDING) && !e.K && globalQueue.$.push(e);
|
|
430
|
-
e.K && n && runInTransition(e, recompute);
|
|
464
|
+
e.K && n && runInTransition(e.K, () => recompute(e));
|
|
431
465
|
}
|
|
432
466
|
function handleAsync(e, t, n) {
|
|
433
467
|
const i = typeof t === "object" && t !== null;
|
|
@@ -725,17 +759,6 @@ function read(e) {
|
|
|
725
759
|
}
|
|
726
760
|
}
|
|
727
761
|
}
|
|
728
|
-
if (pendingCheck) {
|
|
729
|
-
if (!e.q) {
|
|
730
|
-
e.q = signal(false);
|
|
731
|
-
e.q.oe = true;
|
|
732
|
-
e.q.Z = t => setSignal(e.q, t);
|
|
733
|
-
}
|
|
734
|
-
const t = pendingCheck;
|
|
735
|
-
pendingCheck = null;
|
|
736
|
-
t.Y = read(e.q) || t.Y;
|
|
737
|
-
pendingCheck = t;
|
|
738
|
-
}
|
|
739
762
|
if (pendingValueCheck) {
|
|
740
763
|
if (!e.ce) {
|
|
741
764
|
e.ce = signal(e.Y);
|
|
@@ -748,10 +771,22 @@ function read(e) {
|
|
|
748
771
|
pendingValueCheck = true;
|
|
749
772
|
}
|
|
750
773
|
}
|
|
751
|
-
|
|
752
|
-
|
|
774
|
+
const n = e.m || e;
|
|
775
|
+
if (pendingCheck) {
|
|
776
|
+
if (!n.q) {
|
|
777
|
+
n.q = signal(false);
|
|
778
|
+
n.q.oe = true;
|
|
779
|
+
n.q.Z = e => setSignal(n.q, e);
|
|
780
|
+
}
|
|
781
|
+
const e = pendingCheck;
|
|
782
|
+
pendingCheck = null;
|
|
783
|
+
e.Y = read(n.q) || e.Y;
|
|
784
|
+
pendingCheck = e;
|
|
785
|
+
}
|
|
786
|
+
if (!pendingCheck && n.J & STATUS_PENDING) {
|
|
787
|
+
if ((t && !stale) || n.J & STATUS_UNINITIALIZED || e.m) throw n.j;
|
|
753
788
|
else if (t && stale) {
|
|
754
|
-
setStatusFlags(t, t.J |
|
|
789
|
+
setStatusFlags(t, t.J | STATUS_PENDING, n.j);
|
|
755
790
|
}
|
|
756
791
|
}
|
|
757
792
|
if (e.J & STATUS_ERROR) {
|
|
@@ -773,7 +808,7 @@ function setSignal(e, t) {
|
|
|
773
808
|
if (typeof t === "function") {
|
|
774
809
|
t = t(e.M === NOT_PENDING || (e.oe && e.K) ? e.Y : e.M);
|
|
775
810
|
}
|
|
776
|
-
const n = !e.ue || !e.ue(e.M === NOT_PENDING || e.oe ? e.Y : e.M, t);
|
|
811
|
+
const n = !e.ue || !e.ue(e.M === NOT_PENDING || (e.oe && e.K) ? e.Y : e.M, t);
|
|
777
812
|
if (!n && !e.J) return t;
|
|
778
813
|
if (n) {
|
|
779
814
|
if (e.oe) e.Y = t;
|
|
@@ -885,6 +920,10 @@ function refresh(e) {
|
|
|
885
920
|
let t = refreshing;
|
|
886
921
|
refreshing = true;
|
|
887
922
|
try {
|
|
923
|
+
if (typeof e !== "function") {
|
|
924
|
+
recompute(e[$REFRESH]);
|
|
925
|
+
return e;
|
|
926
|
+
}
|
|
888
927
|
return untrack(e);
|
|
889
928
|
} finally {
|
|
890
929
|
refreshing = t;
|
|
@@ -1076,7 +1115,7 @@ function unwrap(e) {
|
|
|
1076
1115
|
return e?.[$TARGET]?.[STORE_NODE] ?? e;
|
|
1077
1116
|
}
|
|
1078
1117
|
function getOverrideValue(e, t, n, i) {
|
|
1079
|
-
return
|
|
1118
|
+
return t && i in t ? t[i] : e[i];
|
|
1080
1119
|
}
|
|
1081
1120
|
function getAllKeys(e, t, n) {
|
|
1082
1121
|
const i = getKeys(e, t);
|
|
@@ -1157,10 +1196,12 @@ function applyState(e, t, n, i) {
|
|
|
1157
1196
|
} else r[STORE_NODE][a] && setSignal(r[STORE_NODE][a], wrap(e[a], r));
|
|
1158
1197
|
}
|
|
1159
1198
|
if (f < e.length) t = true;
|
|
1160
|
-
} else if (
|
|
1199
|
+
} else if (e.length) {
|
|
1161
1200
|
for (let t = 0, l = e.length; t < l; t++) {
|
|
1162
1201
|
const l = getOverrideValue(s, o, u, t);
|
|
1163
|
-
isWrappable(l)
|
|
1202
|
+
isWrappable(l)
|
|
1203
|
+
? applyState(e[t], wrap(l, r), n, i)
|
|
1204
|
+
: r[STORE_NODE][t] && setSignal(r[STORE_NODE][t], e[t]);
|
|
1164
1205
|
}
|
|
1165
1206
|
}
|
|
1166
1207
|
if (l !== e.length) {
|
|
@@ -1206,34 +1247,70 @@ function reconcile(e, t, n = false) {
|
|
|
1206
1247
|
function createProjectionInternal(e, t = {}, n) {
|
|
1207
1248
|
let i;
|
|
1208
1249
|
const r = new WeakMap();
|
|
1250
|
+
const wrapper = e => {
|
|
1251
|
+
e[STORE_WRAP] = wrapProjection;
|
|
1252
|
+
e[STORE_LOOKUP] = r;
|
|
1253
|
+
Object.defineProperty(e, STORE_FIREWALL, {
|
|
1254
|
+
get() {
|
|
1255
|
+
return i;
|
|
1256
|
+
},
|
|
1257
|
+
configurable: true
|
|
1258
|
+
});
|
|
1259
|
+
};
|
|
1209
1260
|
const wrapProjection = e => {
|
|
1210
1261
|
if (r.has(e)) return r.get(e);
|
|
1211
1262
|
if (e[$TARGET]?.[STORE_WRAP] === wrapProjection) return e;
|
|
1212
|
-
const t = createStoreProxy(e, storeTraps,
|
|
1213
|
-
[STORE_WRAP]: wrapProjection,
|
|
1214
|
-
[STORE_LOOKUP]: r,
|
|
1215
|
-
[STORE_FIREWALL]() {
|
|
1216
|
-
return i;
|
|
1217
|
-
}
|
|
1218
|
-
});
|
|
1263
|
+
const t = createStoreProxy(e, storeTraps, wrapper);
|
|
1219
1264
|
r.set(e, t);
|
|
1220
1265
|
return t;
|
|
1221
1266
|
};
|
|
1222
1267
|
const s = wrapProjection(t);
|
|
1223
1268
|
i = computed(() => {
|
|
1224
1269
|
const t = i || getOwner();
|
|
1225
|
-
storeSetter(s,
|
|
1226
|
-
const
|
|
1227
|
-
e !==
|
|
1270
|
+
storeSetter(new Proxy(s, writeTraps), r => {
|
|
1271
|
+
const o = handleAsync(t, e(r), e => {
|
|
1272
|
+
e !== s && e !== undefined && storeSetter(s, reconcile(e, n?.key || "id", n?.all));
|
|
1273
|
+
setSignal(i, undefined);
|
|
1228
1274
|
});
|
|
1229
|
-
|
|
1275
|
+
o !== s && o !== undefined && reconcile(o, n?.key || "id", n?.all)(s);
|
|
1230
1276
|
});
|
|
1231
1277
|
});
|
|
1278
|
+
i.Te = true;
|
|
1232
1279
|
return { store: s, node: i };
|
|
1233
1280
|
}
|
|
1234
1281
|
function createProjection(e, t = {}, n) {
|
|
1235
1282
|
return createProjectionInternal(e, t, n).store;
|
|
1236
1283
|
}
|
|
1284
|
+
const writeTraps = {
|
|
1285
|
+
get(e, t) {
|
|
1286
|
+
let n;
|
|
1287
|
+
setWriteOverride(true);
|
|
1288
|
+
try {
|
|
1289
|
+
n = e[t];
|
|
1290
|
+
} finally {
|
|
1291
|
+
setWriteOverride(false);
|
|
1292
|
+
}
|
|
1293
|
+
return typeof n === "object" && n !== null ? new Proxy(n, writeTraps) : n;
|
|
1294
|
+
},
|
|
1295
|
+
set(e, t, n) {
|
|
1296
|
+
setWriteOverride(true);
|
|
1297
|
+
try {
|
|
1298
|
+
e[t] = n;
|
|
1299
|
+
} finally {
|
|
1300
|
+
setWriteOverride(false);
|
|
1301
|
+
}
|
|
1302
|
+
return true;
|
|
1303
|
+
},
|
|
1304
|
+
deleteProperty(e, t) {
|
|
1305
|
+
setWriteOverride(true);
|
|
1306
|
+
try {
|
|
1307
|
+
delete e[t];
|
|
1308
|
+
} finally {
|
|
1309
|
+
setWriteOverride(false);
|
|
1310
|
+
}
|
|
1311
|
+
return true;
|
|
1312
|
+
}
|
|
1313
|
+
};
|
|
1237
1314
|
const $TRACK = Symbol(0),
|
|
1238
1315
|
$DEEP = Symbol(0),
|
|
1239
1316
|
$TARGET = Symbol(0),
|
|
@@ -1253,7 +1330,7 @@ function createStoreProxy(e, t = storeTraps, n) {
|
|
|
1253
1330
|
i = [];
|
|
1254
1331
|
i.v = e;
|
|
1255
1332
|
} else i = { v: e };
|
|
1256
|
-
n &&
|
|
1333
|
+
n && n(i);
|
|
1257
1334
|
return (i[$PROXY] = new Proxy(i, t));
|
|
1258
1335
|
}
|
|
1259
1336
|
const storeLookup = new WeakMap();
|
|
@@ -1266,6 +1343,13 @@ function wrap(e, t) {
|
|
|
1266
1343
|
function isWrappable(e) {
|
|
1267
1344
|
return e != null && typeof e === "object" && !Object.isFrozen(e);
|
|
1268
1345
|
}
|
|
1346
|
+
let writeOverride = false;
|
|
1347
|
+
function setWriteOverride(e) {
|
|
1348
|
+
writeOverride = e;
|
|
1349
|
+
}
|
|
1350
|
+
function writeOnly(e) {
|
|
1351
|
+
return writeOverride || !!Writing?.has(e);
|
|
1352
|
+
}
|
|
1269
1353
|
function getNodes(e, t) {
|
|
1270
1354
|
let n = e[t];
|
|
1271
1355
|
if (!n) e[t] = n = Object.create(null);
|
|
@@ -1285,8 +1369,7 @@ function getNode(e, t, n, i, r = isEqual) {
|
|
|
1285
1369
|
));
|
|
1286
1370
|
}
|
|
1287
1371
|
function trackSelf(e, t = $TRACK) {
|
|
1288
|
-
getObserver() &&
|
|
1289
|
-
read(getNode(getNodes(e, STORE_NODE), t, undefined, e[STORE_FIREWALL]?.(), false));
|
|
1372
|
+
getObserver() && read(getNode(getNodes(e, STORE_NODE), t, undefined, e[STORE_FIREWALL], false));
|
|
1290
1373
|
}
|
|
1291
1374
|
function getKeys(e, t, n = true) {
|
|
1292
1375
|
const i = untrack(() => (n ? Object.keys(e) : Reflect.ownKeys(e)));
|
|
@@ -1312,6 +1395,7 @@ const storeTraps = {
|
|
|
1312
1395
|
get(e, t, n) {
|
|
1313
1396
|
if (t === $TARGET) return e;
|
|
1314
1397
|
if (t === $PROXY) return n;
|
|
1398
|
+
if (t === $REFRESH) return e[STORE_FIREWALL];
|
|
1315
1399
|
if (t === $TRACK || t === $DEEP) {
|
|
1316
1400
|
trackSelf(e, t);
|
|
1317
1401
|
return n;
|
|
@@ -1325,12 +1409,12 @@ const storeTraps = {
|
|
|
1325
1409
|
const e = Object.getOwnPropertyDescriptor(u, t);
|
|
1326
1410
|
if (e && e.get) return e.get.call(n);
|
|
1327
1411
|
}
|
|
1328
|
-
if (
|
|
1412
|
+
if (writeOnly(n)) {
|
|
1329
1413
|
let n = r && (s || !o) ? (r.M !== NOT_PENDING ? r.M : r.Y) : u[t];
|
|
1330
1414
|
n === $DELETED && (n = undefined);
|
|
1331
1415
|
if (!isWrappable(n)) return n;
|
|
1332
1416
|
const i = wrap(n, e);
|
|
1333
|
-
Writing
|
|
1417
|
+
Writing?.add(i);
|
|
1334
1418
|
return i;
|
|
1335
1419
|
}
|
|
1336
1420
|
let l = r ? (s || !o ? read(i[t]) : (read(i[t]), u[t])) : u[t];
|
|
@@ -1344,7 +1428,7 @@ const storeTraps = {
|
|
|
1344
1428
|
? l.bind(u)
|
|
1345
1429
|
: l;
|
|
1346
1430
|
} else if (getObserver()) {
|
|
1347
|
-
return read(getNode(i, t, isWrappable(l) ? wrap(l, e) : l, e[STORE_FIREWALL]
|
|
1431
|
+
return read(getNode(i, t, isWrappable(l) ? wrap(l, e) : l, e[STORE_FIREWALL]));
|
|
1348
1432
|
}
|
|
1349
1433
|
}
|
|
1350
1434
|
return isWrappable(l) ? wrap(l, e) : l;
|
|
@@ -1355,12 +1439,12 @@ const storeTraps = {
|
|
|
1355
1439
|
e[STORE_OVERRIDE] && t in e[STORE_OVERRIDE]
|
|
1356
1440
|
? e[STORE_OVERRIDE][t] !== $DELETED
|
|
1357
1441
|
: t in e[STORE_VALUE];
|
|
1358
|
-
getObserver() && read(getNode(getNodes(e, STORE_HAS), t, n, e[STORE_FIREWALL]
|
|
1442
|
+
getObserver() && read(getNode(getNodes(e, STORE_HAS), t, n, e[STORE_FIREWALL]));
|
|
1359
1443
|
return n;
|
|
1360
1444
|
},
|
|
1361
1445
|
set(e, t, n) {
|
|
1362
1446
|
const i = e[$PROXY];
|
|
1363
|
-
if (
|
|
1447
|
+
if (writeOnly(i)) {
|
|
1364
1448
|
untrack(() => {
|
|
1365
1449
|
const r = e[STORE_VALUE];
|
|
1366
1450
|
const s = r[t];
|
|
@@ -1389,7 +1473,7 @@ const storeTraps = {
|
|
|
1389
1473
|
return true;
|
|
1390
1474
|
},
|
|
1391
1475
|
deleteProperty(e, t) {
|
|
1392
|
-
if (
|
|
1476
|
+
if (writeOnly(e[$PROXY]) && e[STORE_OVERRIDE]?.[t] !== $DELETED) {
|
|
1393
1477
|
untrack(() => {
|
|
1394
1478
|
const n =
|
|
1395
1479
|
e[STORE_OVERRIDE] && t in e[STORE_OVERRIDE] ? e[STORE_OVERRIDE][t] : e[STORE_VALUE][t];
|
|
@@ -2088,6 +2172,7 @@ export {
|
|
|
2088
2172
|
NoOwnerError,
|
|
2089
2173
|
NotReadyError,
|
|
2090
2174
|
SUPPORTS_PROXY,
|
|
2175
|
+
action,
|
|
2091
2176
|
createBoundary,
|
|
2092
2177
|
createContext,
|
|
2093
2178
|
createEffect,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { NOT_PENDING } from "./constants.js";
|
|
1
|
+
import { $REFRESH, NOT_PENDING } from "./constants.js";
|
|
2
2
|
import { type IQueue, type Transition } from "./scheduler.js";
|
|
3
3
|
export interface Disposable {
|
|
4
4
|
(): void;
|
|
@@ -118,5 +118,7 @@ export declare function runWithOwner<T>(owner: Owner | null, fn: () => T): T;
|
|
|
118
118
|
export declare function staleValues<T>(fn: () => T, set?: boolean): T;
|
|
119
119
|
export declare function pending<T>(fn: () => T): T;
|
|
120
120
|
export declare function isPending(fn: () => any): boolean;
|
|
121
|
-
export declare function refresh<T>(fn: () => T)
|
|
121
|
+
export declare function refresh<T>(fn: (() => T) | (T & {
|
|
122
|
+
[$REFRESH]: any;
|
|
123
|
+
})): T;
|
|
122
124
|
export declare function isRefreshing(): boolean;
|
|
@@ -2,5 +2,5 @@ export { ContextNotFoundError, NoOwnerError, NotReadyError } from "./error.js";
|
|
|
2
2
|
export { createContext, getContext, setContext, type Context, type ContextRecord } from "./context.js";
|
|
3
3
|
export { getObserver, isEqual, untrack, getOwner, runWithOwner, createOwner, createRoot, computed, dispose, signal, read, setSignal, onCleanup, getNextChildId, isPending, pending, refresh, isRefreshing, staleValues, handleAsync, type Owner, type Computed, type Root, type Signal, type SignalOptions } from "./core.js";
|
|
4
4
|
export { effect, type Effect } from "./effect.js";
|
|
5
|
-
export { flush, Queue, type IQueue, type QueueCallback } from "./scheduler.js";
|
|
5
|
+
export { action, flush, Queue, type IQueue, type QueueCallback } from "./scheduler.js";
|
|
6
6
|
export * from "./constants.js";
|
|
@@ -15,8 +15,9 @@ export interface Transition {
|
|
|
15
15
|
asyncNodes: Computed<any>[];
|
|
16
16
|
pendingNodes: Signal<any>[];
|
|
17
17
|
optimisticNodes: Signal<any>[];
|
|
18
|
+
actions: Array<Generator<any, any, any> | AsyncGenerator<any, any, any>>;
|
|
18
19
|
queueStash: QueueStub;
|
|
19
|
-
done: boolean;
|
|
20
|
+
done: boolean | Transition;
|
|
20
21
|
}
|
|
21
22
|
export declare function schedule(): void;
|
|
22
23
|
export interface IQueue {
|
|
@@ -51,7 +52,7 @@ export declare class GlobalQueue extends Queue {
|
|
|
51
52
|
static _dispose: (el: Computed<unknown>, self: boolean, zombie: boolean) => void;
|
|
52
53
|
flush(): void;
|
|
53
54
|
notify(node: Computed<any>, mask: number, flags: number): boolean;
|
|
54
|
-
initTransition(node
|
|
55
|
+
initTransition(node?: Computed<any>): void;
|
|
55
56
|
}
|
|
56
57
|
export declare function notifySubs(node: Signal<any> | Computed<any>): void;
|
|
57
58
|
export declare function runOptimistic(activeTransition?: Transition | null): void;
|
|
@@ -61,5 +62,6 @@ export declare const globalQueue: GlobalQueue;
|
|
|
61
62
|
* the queue synchronously to get the latest updates by calling `flush()`.
|
|
62
63
|
*/
|
|
63
64
|
export declare function flush(): void;
|
|
64
|
-
export declare function runInTransition(
|
|
65
|
+
export declare function runInTransition<T>(transition: Transition, fn: () => T): T;
|
|
66
|
+
export declare function action<Args extends any[], Y, R>(genFn: (...args: Args) => Generator<Y, R, any> | AsyncGenerator<Y, R, any>): (...args: Args) => void;
|
|
65
67
|
export {};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ContextNotFoundError, NoOwnerError, NotReadyError, createContext, createRoot, runWithOwner, flush, getNextChildId, getContext, setContext, getOwner, onCleanup, getObserver, isEqual, untrack, isPending, pending, isRefreshing, refresh, SUPPORTS_PROXY } from "./core/index.js";
|
|
1
|
+
export { ContextNotFoundError, NoOwnerError, NotReadyError, action, createContext, createRoot, runWithOwner, flush, getNextChildId, getContext, setContext, getOwner, onCleanup, getObserver, isEqual, untrack, isPending, pending, isRefreshing, refresh, SUPPORTS_PROXY } from "./core/index.js";
|
|
2
2
|
export type { Owner, SignalOptions, Context, ContextRecord, IQueue } from "./core/index.js";
|
|
3
3
|
export * from "./signals.js";
|
|
4
4
|
export { mapArray, repeat, type Maybe } from "./map.js";
|
|
@@ -1,11 +1,16 @@
|
|
|
1
|
+
import { $REFRESH, type Computed } from "../core/index.js";
|
|
1
2
|
import { type Store, type StoreOptions } from "./store.js";
|
|
2
3
|
export declare function createProjectionInternal<T extends object = {}>(fn: (draft: T) => void | T | Promise<void | T> | AsyncIterable<void | T>, initialValue?: T, options?: StoreOptions): {
|
|
3
|
-
store:
|
|
4
|
-
|
|
4
|
+
store: Store<T> & {
|
|
5
|
+
[$REFRESH]: any;
|
|
6
|
+
};
|
|
7
|
+
node: Computed<void | T>;
|
|
5
8
|
};
|
|
6
9
|
/**
|
|
7
10
|
* Creates a mutable derived value
|
|
8
11
|
*
|
|
9
12
|
* @see {@link https://github.com/solidjs/x-reactivity#createprojection}
|
|
10
13
|
*/
|
|
11
|
-
export declare function createProjection<T extends
|
|
14
|
+
export declare function createProjection<T extends object = {}>(fn: (draft: T) => void | T | Promise<void | T> | AsyncIterable<void | T>, initialValue?: T, options?: StoreOptions): Store<T> & {
|
|
15
|
+
[$REFRESH]: any;
|
|
16
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Computed, type Signal } from "../core/index.js";
|
|
1
|
+
import { $REFRESH, type Computed, type Signal } from "../core/index.js";
|
|
2
2
|
export type Store<T> = Readonly<T>;
|
|
3
3
|
export type StoreSetter<T> = (fn: (state: T) => T | void) => void;
|
|
4
4
|
export type StoreOptions = {
|
|
@@ -17,22 +17,26 @@ export type StoreNode = {
|
|
|
17
17
|
[STORE_HAS]?: DataNodes;
|
|
18
18
|
[STORE_WRAP]?: (value: any, target?: StoreNode) => any;
|
|
19
19
|
[STORE_LOOKUP]?: WeakMap<any, any>;
|
|
20
|
-
[STORE_FIREWALL]?:
|
|
20
|
+
[STORE_FIREWALL]?: Computed<any>;
|
|
21
21
|
};
|
|
22
22
|
export declare namespace SolidStore {
|
|
23
23
|
interface Unwrappable {
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
export type NotWrappable = string | number | bigint | symbol | boolean | Function | null | undefined | SolidStore.Unwrappable[keyof SolidStore.Unwrappable];
|
|
27
|
-
export declare function createStoreProxy<T extends object>(value: T, traps?: ProxyHandler<StoreNode>, extend?:
|
|
28
|
-
export declare const storeLookup: WeakMap<
|
|
27
|
+
export declare function createStoreProxy<T extends object>(value: T, traps?: ProxyHandler<StoreNode>, extend?: (target: StoreNode) => void): any;
|
|
28
|
+
export declare const storeLookup: WeakMap<WeakKey, any>;
|
|
29
29
|
export declare function wrap<T extends Record<PropertyKey, any>>(value: T, target?: StoreNode): T;
|
|
30
30
|
export declare function isWrappable<T>(obj: T | NotWrappable): obj is T;
|
|
31
|
+
export declare function setWriteOverride(value: boolean): void;
|
|
31
32
|
export declare function getKeys(source: Record<PropertyKey, any>, override: Record<PropertyKey, any> | undefined, enumerable?: boolean): PropertyKey[];
|
|
32
33
|
export declare function getPropertyDescriptor(source: Record<PropertyKey, any>, override: Record<PropertyKey, any> | undefined, property: PropertyKey): PropertyDescriptor | undefined;
|
|
33
34
|
export declare const storeTraps: ProxyHandler<StoreNode>;
|
|
34
35
|
export declare function storeSetter<T extends object>(store: Store<T>, fn: (draft: T) => T | void): void;
|
|
35
|
-
|
|
36
|
-
export declare function createStore<T extends object = {}>(
|
|
36
|
+
type NoFn<T> = T extends Function ? never : T;
|
|
37
|
+
export declare function createStore<T extends object = {}>(store: NoFn<T> | Store<NoFn<T>>): [get: Store<T>, set: StoreSetter<T>];
|
|
38
|
+
export declare function createStore<T extends object = {}>(fn: (store: T) => void | T | Promise<void | T> | AsyncIterable<void | T>, store?: NoFn<T> | Store<NoFn<T>>, options?: StoreOptions): [get: Store<T> & {
|
|
39
|
+
[$REFRESH]: any;
|
|
40
|
+
}, set: StoreSetter<T>];
|
|
37
41
|
export declare function deep<T extends object>(store: Store<T>): Store<T>;
|
|
38
42
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solidjs/signals",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.3",
|
|
4
4
|
"description": "",
|
|
5
5
|
"author": "Ryan Carniato",
|
|
6
6
|
"license": "MIT",
|
|
@@ -23,12 +23,12 @@
|
|
|
23
23
|
"@rollup/plugin-replace": "^6.0.3",
|
|
24
24
|
"@rollup/plugin-terser": "^0.4.4",
|
|
25
25
|
"@rollup/plugin-typescript": "^12.3.0",
|
|
26
|
-
"@types/node": "^
|
|
26
|
+
"@types/node": "^25.0.8",
|
|
27
27
|
"rimraf": "^5.0.1",
|
|
28
28
|
"rollup": "^4.53.4",
|
|
29
29
|
"rollup-plugin-prettier": "^4.1.2",
|
|
30
30
|
"tslib": "^2.8.1",
|
|
31
|
-
"typescript": "5.
|
|
31
|
+
"typescript": "5.9.3",
|
|
32
32
|
"vite": "^5.4.10",
|
|
33
33
|
"vitest": "^2.0.0"
|
|
34
34
|
},
|