@solidjs/signals 2.0.0-rc.18 → 2.0.0-rc.19
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-shared.js +168 -88
- package/dist/dev.attribution.js +16 -13
- package/dist/dev.js +272 -129
- package/dist/observe/boundaries.js +88 -67
- package/dist/observe/core/action.js +8 -0
- package/dist/observe/core/async.js +46 -34
- package/dist/observe/core/attribution.js +30 -28
- package/dist/observe/core/constants.js +21 -1
- package/dist/observe/core/core.js +164 -136
- package/dist/observe/core/effect.js +6 -6
- package/dist/observe/core/graph.js +3 -3
- package/dist/observe/core/heap.js +5 -5
- package/dist/observe/core/lanes.js +104 -84
- package/dist/observe/core/owner.js +10 -9
- package/dist/observe/core/scheduler.js +38 -35
- package/dist/observe/core/truth.js +6 -6
- package/dist/observe/core/verdict.js +13 -13
- package/dist/observe/deferred.js +39 -40
- package/dist/observe/index.js +2 -2
- package/dist/observe/map.js +22 -22
- package/dist/observe/reveal.js +5 -5
- package/dist/observe/signals.js +57 -15
- package/dist/observe/store/affects.js +1 -1
- package/dist/observe/store/hooks.js +3 -0
- package/dist/observe/store/optimistic.js +11 -11
- package/dist/observe/store/projection.js +34 -21
- package/dist/observe/store/reconcile.js +2 -2
- package/dist/observe/store/store.js +63 -53
- package/dist/observe/store/utils.js +7 -2
- package/dist/prod/boundaries.js +153 -132
- package/dist/prod/core/action.js +8 -0
- package/dist/prod/core/async.js +55 -43
- package/dist/prod/core/constants.js +14 -1
- package/dist/prod/core/core.js +162 -134
- package/dist/prod/core/effect.js +9 -9
- package/dist/prod/core/graph.js +3 -3
- package/dist/prod/core/heap.js +12 -12
- package/dist/prod/core/lanes.js +98 -78
- package/dist/prod/core/owner.js +15 -14
- package/dist/prod/core/scheduler.js +43 -40
- package/dist/prod/core/truth.js +6 -6
- package/dist/prod/core/verdict.js +17 -17
- package/dist/prod/deferred.js +39 -40
- package/dist/prod/index.js +2 -2
- package/dist/prod/map.js +14 -14
- package/dist/prod/reveal.js +8 -8
- package/dist/prod/signals.js +46 -4
- package/dist/prod/store/affects.js +1 -1
- package/dist/prod/store/hooks.js +3 -0
- package/dist/prod/store/optimistic.js +16 -16
- package/dist/prod/store/projection.js +22 -9
- package/dist/prod/store/reconcile.js +2 -2
- package/dist/prod/store/store.js +262 -262
- package/dist/prod/store/utils.js +2 -0
- package/dist/types/core/action.d.ts +8 -0
- package/dist/types/core/constants.d.ts +20 -0
- package/dist/types/core/core.d.ts +14 -1
- package/dist/types/core/dev.d.ts +1 -1
- package/dist/types/core/index.d.ts +1 -1
- package/dist/types/core/lanes.d.ts +5 -1
- package/dist/types/core/scheduler.d.ts +2 -0
- package/dist/types/index.d.ts +3 -1
- package/dist/types/signals.d.ts +37 -0
- package/dist/types/store/target.d.ts +2 -0
- package/package.json +1 -1
package/dist/prod/core/async.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { STATUS_ERROR, STATUS_PENDING, STATUS_UNINITIALIZED, CONFIG_GUESS, REACTIVE_RECOMPUTING_DEPS, CONFIG_HELD, REACTIVE_STAGED_READ, CONFIG_STAGED, CONFIG_STAGED_ERROR, CONFIG_AUTO_DISPOSE, REACTIVE_ZOMBIE, NewSet, REACTIVE_DIRTY, NOT_PENDING, REACTIVE_DISPOSED, CONFIG_REDERIVE, CONFIG_VERDICT, CONFIG_OVERRIDE } from "./constants.js";
|
|
1
|
+
import { STATUS_ERROR, STATUS_PENDING, STATUS_NO_VALUE, STATUS_UNINITIALIZED, CONFIG_GUESS, REACTIVE_RECOMPUTING_DEPS, CONFIG_HELD, REACTIVE_STAGED_READ, CONFIG_STAGED, CONFIG_STAGED_ERROR, CONFIG_AUTO_DISPOSE, REACTIVE_ZOMBIE, NewSet, REACTIVE_DIRTY, CONFIG_INPUTS_PUBLISHED, NOT_PENDING, REACTIVE_DISPOSED, CONFIG_REDERIVE, CONFIG_VERDICT, CONFIG_OVERRIDE } from "./constants.js";
|
|
2
2
|
|
|
3
3
|
import { ext, statusNotifierOf, context, untrack, setSignal } from "./core.js";
|
|
4
4
|
|
|
@@ -67,16 +67,16 @@ function retryReaches(e, n) {
|
|
|
67
67
|
|
|
68
68
|
function setPendingError(e, n, t) {
|
|
69
69
|
if (!n) {
|
|
70
|
-
if (e.T !== null) e.T.
|
|
70
|
+
if (e.T !== null) e.T.U = null;
|
|
71
71
|
return;
|
|
72
72
|
}
|
|
73
73
|
if (t instanceof NotReadyError && t.source === n) {
|
|
74
|
-
ext(e).
|
|
74
|
+
ext(e).U = t;
|
|
75
75
|
return;
|
|
76
76
|
}
|
|
77
|
-
const r = e.T?.
|
|
77
|
+
const r = e.T?.U;
|
|
78
78
|
if (!(r instanceof NotReadyError) || r.source !== n) {
|
|
79
|
-
ext(e).
|
|
79
|
+
ext(e).U = new NotReadyError(n);
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
|
|
@@ -152,7 +152,7 @@ function releaseSettledDependents(e) {
|
|
|
152
152
|
clearPendingSources(e);
|
|
153
153
|
if (e.T) e.T.se = false;
|
|
154
154
|
if (!((e.m &= STATUS_ERROR | STATUS_UNINITIALIZED) & STATUS_ERROR)) setPendingError(e);
|
|
155
|
-
e.
|
|
155
|
+
e.ie = n instanceof StatusError ? n : new StatusError(e, n);
|
|
156
156
|
e.l |= CONFIG_STAGED | CONFIG_STAGED_ERROR;
|
|
157
157
|
// Readers parked on the flight re-run and derive from the staging; the
|
|
158
158
|
// verdict readers the walk wakes need a flush (#4106).
|
|
@@ -167,7 +167,7 @@ function settleErroredDependents(e, n) {
|
|
|
167
167
|
const visit = e => {
|
|
168
168
|
if (r.has(e)) return;
|
|
169
169
|
r.add(e);
|
|
170
|
-
if (e.T?.
|
|
170
|
+
if (e.T?.U === n) {
|
|
171
171
|
enqueueSub(e);
|
|
172
172
|
t = true;
|
|
173
173
|
}
|
|
@@ -204,7 +204,7 @@ function settlePendingSource(e, n = e) {
|
|
|
204
204
|
// is its verdict changing: it runs again.
|
|
205
205
|
return f.l & CONFIG_VERDICT && enqueueSub(f);
|
|
206
206
|
o.add(f);
|
|
207
|
-
f.
|
|
207
|
+
f.Se = clock;
|
|
208
208
|
const s = f.T?.fe?.values().next().value;
|
|
209
209
|
// STATUS_ERROR + pending sources only coexist via an errored loading
|
|
210
210
|
// window's park (notifyStatus(STATUS_ERROR) clears pending sources
|
|
@@ -271,7 +271,7 @@ function isThenable(e) {
|
|
|
271
271
|
// null, which recompute would read as a flight this body registered itself.
|
|
272
272
|
// Restore undefined here, so the fix costs nothing for code that never
|
|
273
273
|
// calls onSupersede.
|
|
274
|
-
if (t) r.
|
|
274
|
+
if (t) r.Ee = undefined;
|
|
275
275
|
const o = r.ae;
|
|
276
276
|
r.ae = o === null ? e : () => {
|
|
277
277
|
try {
|
|
@@ -297,7 +297,7 @@ r) {
|
|
|
297
297
|
});
|
|
298
298
|
}
|
|
299
299
|
if (!f && !o) {
|
|
300
|
-
if (e.T !== null) e.T.
|
|
300
|
+
if (e.T !== null) e.T.Ee = null;
|
|
301
301
|
// A sync landing is the first real answer for a loadingValue node.
|
|
302
302
|
e.ce = false;
|
|
303
303
|
return n;
|
|
@@ -307,10 +307,10 @@ r) {
|
|
|
307
307
|
// self-registration — runs during a recompute of `el`, which has already
|
|
308
308
|
// fired _flightTeardown. A future non-recompute registration path must
|
|
309
309
|
// release it here before overwriting _inFlight.
|
|
310
|
-
ext(e).
|
|
310
|
+
ext(e).Ee = n;
|
|
311
311
|
// The question this flight answers (A18 provenance, lanes.ts): the action
|
|
312
312
|
// whose slice asked it; mainline is always the current question.
|
|
313
|
-
e.T.
|
|
313
|
+
e.T.Te = question || MAINLINE_QUESTION;
|
|
314
314
|
// The run that asked this flight read every input without throwing: an
|
|
315
315
|
// input still in flight was masked for it (an active override, A17), so
|
|
316
316
|
// pending state those inputs propagated onto the node earlier does not
|
|
@@ -320,7 +320,7 @@ r) {
|
|
|
320
320
|
e.T.fe = undefined;
|
|
321
321
|
let s;
|
|
322
322
|
const handleError = o => {
|
|
323
|
-
if (e.T?.
|
|
323
|
+
if (e.T?.Ee !== n) return;
|
|
324
324
|
// NotReadyError from rejected promises should be treated as pending, not error
|
|
325
325
|
let f = o instanceof NotReadyError;
|
|
326
326
|
if (f && e.ce) {
|
|
@@ -328,9 +328,9 @@ r) {
|
|
|
328
328
|
// serving commit #0 — same parking as recompute's catch for sync
|
|
329
329
|
// dependency throws. The dead flight is released so the clock-gated
|
|
330
330
|
// error-retry pull (updateIfNecessary) can also re-ask.
|
|
331
|
-
if (e.T !== null) e.T.
|
|
331
|
+
if (e.T !== null) e.T.Ee = null;
|
|
332
332
|
parkLoadingWindow(e, o);
|
|
333
|
-
e.
|
|
333
|
+
e.Se = clock;
|
|
334
334
|
return;
|
|
335
335
|
}
|
|
336
336
|
// D-41: a held node's error is staged (`stageError`). A derived store's
|
|
@@ -348,7 +348,7 @@ r) {
|
|
|
348
348
|
// rejected flight will never settle its self entry, so transfer ownership
|
|
349
349
|
// after notifyStatus has propagated the replacement source.
|
|
350
350
|
if (f) settlePendingSource(e);
|
|
351
|
-
e.
|
|
351
|
+
e.Se = clock;
|
|
352
352
|
// A real error settles derivatively-pending dependents (notifyStatus
|
|
353
353
|
// cleared their pending sources), so stranded lazy ones release here —
|
|
354
354
|
// the error twin of settlePendingSource's release (#2934).
|
|
@@ -356,7 +356,7 @@ r) {
|
|
|
356
356
|
r?.(o, f);
|
|
357
357
|
};
|
|
358
358
|
const asyncWrite = (r, o) => {
|
|
359
|
-
if (e.T?.
|
|
359
|
+
if (e.T?.Ee !== n) return;
|
|
360
360
|
// If the node was dirtied by a newer write (optimistic override or regular),
|
|
361
361
|
// skip this stale async result — the upcoming flush will recompute the node
|
|
362
362
|
// with the new value, creating a fresh Promise that supersedes this one.
|
|
@@ -371,8 +371,14 @@ r) {
|
|
|
371
371
|
return;
|
|
372
372
|
}
|
|
373
373
|
// A store derive's landing commits through its setter: unheld, the
|
|
374
|
-
// shown error leaves now
|
|
375
|
-
|
|
374
|
+
// shown error leaves now, and so does a commit-beneath-a-flight's
|
|
375
|
+
// CONFIG_INPUTS_PUBLISHED (its first flight's, #4269) — left standing,
|
|
376
|
+
// a verdict reader of the next flight would suspend instead of being
|
|
377
|
+
// served the screen; held, both at the derive's commit.
|
|
378
|
+
if (!(e.l & CONFIG_HELD)) {
|
|
379
|
+
e.T.Ie = undefined;
|
|
380
|
+
e.l &= ~CONFIG_INPUTS_PUBLISHED;
|
|
381
|
+
}
|
|
376
382
|
if (f) landStatus(e, true);
|
|
377
383
|
} else {
|
|
378
384
|
// CARVE 2: the override-covered landing (hold + A18 supersession) and the
|
|
@@ -387,7 +393,7 @@ r) {
|
|
|
387
393
|
// (`_pendingValue` set inside setSignal) is not — commitPendingNode closes
|
|
388
394
|
// the window when the flush commits it, so no one-frame pulse can leak to
|
|
389
395
|
// observers between the landing and its commit (#2990).
|
|
390
|
-
if (e.
|
|
396
|
+
if (e.ie === NOT_PENDING) {
|
|
391
397
|
e.ce = false;
|
|
392
398
|
// The landing published: the dependency tail the flight's pass left
|
|
393
399
|
// linked goes now (A30, #3410). A staged landing has not replaced the
|
|
@@ -459,17 +465,17 @@ r) {
|
|
|
459
465
|
}
|
|
460
466
|
};
|
|
461
467
|
const iterate = () => {
|
|
462
|
-
let t, r, l = false,
|
|
468
|
+
let t, r, l = false, S = false, a = true;
|
|
463
469
|
// Protocol tolerance, matching `for await`: `await` unwraps whatever
|
|
464
470
|
// next() returns — a thenable OR a bare IteratorResult. Real producers
|
|
465
471
|
// use the bare form as a promise-free fast path when a value is already
|
|
466
472
|
// buffered (seroval's deserialized streams do), so a bare result is
|
|
467
473
|
// assimilated as an already-settled step instead of crashing on `.then`.
|
|
468
|
-
const
|
|
469
|
-
const
|
|
470
|
-
then: e => void e(
|
|
474
|
+
const E = o.next();
|
|
475
|
+
const c = isThenable(E) ? E : {
|
|
476
|
+
then: e => void e(E)
|
|
471
477
|
};
|
|
472
|
-
|
|
478
|
+
c.then(r => {
|
|
473
479
|
// The sync stash only serves the INITIAL drain (handleAsync's caller
|
|
474
480
|
// consumes syncValue / throws NotReady from it). A sync-settled step
|
|
475
481
|
// after an async gap — seroval buffering values between pulls, a
|
|
@@ -477,11 +483,11 @@ r) {
|
|
|
477
483
|
// stash: it must write through the async path or the value is
|
|
478
484
|
// silently dropped. (The deferred posture never has a caller, so
|
|
479
485
|
// initialRead starts false there and everything writes through.)
|
|
480
|
-
if (
|
|
486
|
+
if (a && i) {
|
|
481
487
|
t = r;
|
|
482
488
|
l = true;
|
|
483
489
|
if (r.done) u = true;
|
|
484
|
-
} else if (e.T?.
|
|
490
|
+
} else if (e.T?.Ee !== n) {
|
|
485
491
|
return;
|
|
486
492
|
} else if (!r.done) {
|
|
487
493
|
f = true;
|
|
@@ -498,17 +504,17 @@ r) {
|
|
|
498
504
|
settleAutodispose();
|
|
499
505
|
}
|
|
500
506
|
}, t => {
|
|
501
|
-
if (
|
|
507
|
+
if (a && i) {
|
|
502
508
|
r = t;
|
|
503
|
-
|
|
504
|
-
} else if (e.T?.
|
|
509
|
+
S = true;
|
|
510
|
+
} else if (e.T?.Ee === n) {
|
|
505
511
|
u = true;
|
|
506
512
|
handleError(t);
|
|
507
513
|
settleAutodispose();
|
|
508
514
|
}
|
|
509
515
|
});
|
|
510
|
-
|
|
511
|
-
if (
|
|
516
|
+
a = false;
|
|
517
|
+
if (S) {
|
|
512
518
|
// Match the promise branch, but only rethrow during the initial read.
|
|
513
519
|
u = true;
|
|
514
520
|
handleError(r);
|
|
@@ -566,7 +572,7 @@ r) {
|
|
|
566
572
|
// compute catch above it: a protocol throw settles as this
|
|
567
573
|
// flight's error (#4112).
|
|
568
574
|
try {
|
|
569
|
-
if (e.T?.
|
|
575
|
+
if (e.T?.Ee === n && !(e.R & REACTIVE_DISPOSED) && flattenIfIterable(r, e)) return;
|
|
570
576
|
asyncWrite(r);
|
|
571
577
|
} catch (e) {
|
|
572
578
|
handleError(e);
|
|
@@ -608,7 +614,7 @@ r) {
|
|
|
608
614
|
if (u !== null) {
|
|
609
615
|
if (!u) {
|
|
610
616
|
// Loading window: serve commit #0 instead of suspending.
|
|
611
|
-
if (e.ce) return e.
|
|
617
|
+
if (e.ce) return e.le;
|
|
612
618
|
throw new NotReadyError(context);
|
|
613
619
|
}
|
|
614
620
|
// A sync first yield (or immediate empty completion) is the first real
|
|
@@ -622,7 +628,7 @@ function clearStatus(e, n = false) {
|
|
|
622
628
|
if (e.T?.fe) clearPendingSources(e);
|
|
623
629
|
if (e.T?.se) e.T.se = false;
|
|
624
630
|
e.m = n ? 0 : e.m & STATUS_UNINITIALIZED;
|
|
625
|
-
if (e.T?.
|
|
631
|
+
if (e.T?.U) setPendingError(e);
|
|
626
632
|
const t = statusNotifierOf(e);
|
|
627
633
|
if (t) t.call(e);
|
|
628
634
|
}
|
|
@@ -668,16 +674,19 @@ function notifyStatus(e, n, t) {
|
|
|
668
674
|
// (CARVE 2: the lane assignment went with the engine.)
|
|
669
675
|
if (n === STATUS_PENDING && r) {
|
|
670
676
|
// D-41: a re-ask of a shown error keeps it the display (`_shownError`).
|
|
671
|
-
if (e.m & STATUS_ERROR) e.T.
|
|
677
|
+
if (e.m & STATUS_ERROR) e.T.Ie = e.T.U;
|
|
672
678
|
addPendingSource(e, r);
|
|
673
|
-
|
|
679
|
+
// A re-ask of an error that answered the first read: still no value.
|
|
680
|
+
e.m = STATUS_PENDING | (e.m & STATUS_NO_VALUE ? STATUS_UNINITIALIZED : e.m & STATUS_UNINITIALIZED);
|
|
674
681
|
// Preserve the current source on this propagation so readers park on
|
|
675
682
|
// the distinct pending source.
|
|
676
683
|
setPendingError(e, r, t);
|
|
677
684
|
} else {
|
|
678
685
|
clearPendingSources(e);
|
|
679
|
-
|
|
680
|
-
|
|
686
|
+
// An error answering a node with no value marks it so; a re-ask of it
|
|
687
|
+
// (pending) is uninitialized again; a write (STATUS_NONE) gives it one.
|
|
688
|
+
e.m = n | (n === STATUS_ERROR ? e.m & (STATUS_UNINITIALIZED | STATUS_NO_VALUE) ? STATUS_NO_VALUE : 0 : n === STATUS_PENDING && e.m & STATUS_NO_VALUE ? STATUS_UNINITIALIZED : e.m & STATUS_UNINITIALIZED);
|
|
689
|
+
ext(e).U = t;
|
|
681
690
|
}
|
|
682
691
|
// Lanes: a written guess is an optimistic boundary (A17 — "the optimistic
|
|
683
692
|
// future value until we know otherwise"). Its own source in flight is its
|
|
@@ -704,7 +713,7 @@ function notifyStatus(e, n, t) {
|
|
|
704
713
|
* (store/projection.ts `wakeFamily`), exactly as a memo's would reach its. */ function propagateStatus(e, n, t) {
|
|
705
714
|
const r = n === STATUS_PENDING && t instanceof NotReadyError ? t.source : undefined;
|
|
706
715
|
forEachDependent(e, (o, f) => {
|
|
707
|
-
o.
|
|
716
|
+
o.Se = clock;
|
|
708
717
|
// A pending mark on a kept-tail link re-derives the subscriber instead of
|
|
709
718
|
// marking it (A30, #3494 review; fuzzer latest-1 #2141; #3519 review).
|
|
710
719
|
// Past `_depsTail` lie the committed frame's deps, kept by A30 because
|
|
@@ -724,7 +733,7 @@ function notifyStatus(e, n, t) {
|
|
|
724
733
|
// Inheriting the error would make a probe's reader errored. A boundary's
|
|
725
734
|
// output (CONFIG_REDERIVE, boundaries.ts) the same: content or fallback
|
|
726
735
|
// is its pass's call.
|
|
727
|
-
if (o.l & (CONFIG_REDERIVE | CONFIG_VERDICT) || n === STATUS_PENDING && f.
|
|
736
|
+
if (o.l & (CONFIG_REDERIVE | CONFIG_VERDICT) || n === STATUS_PENDING && f.de !== o.Ne) {
|
|
728
737
|
enqueueSub(o);
|
|
729
738
|
schedule();
|
|
730
739
|
return;
|
|
@@ -737,10 +746,10 @@ function notifyStatus(e, n, t) {
|
|
|
737
746
|
// shape: the unmount it stages makes the observer a zombie whose say is
|
|
738
747
|
// moot for this transaction, A15 #3463).
|
|
739
748
|
if (n === STATUS_PENDING && r && o.T?.fe?.has(r)) {
|
|
740
|
-
if (passLane === null && (o.l & (CONFIG_HELD | CONFIG_OVERRIDE)) === CONFIG_HELD && globalQueue.q && !freshHook?.(o, r.
|
|
749
|
+
if (passLane === null && (o.l & (CONFIG_HELD | CONFIG_OVERRIDE)) === CONFIG_HELD && globalQueue.q && !freshHook?.(o, r.Se === clock)) joinFuture(txOf(o));
|
|
741
750
|
return;
|
|
742
751
|
}
|
|
743
|
-
if (n === STATUS_PENDING && r || n !== STATUS_PENDING && (o.T?.
|
|
752
|
+
if (n === STATUS_PENDING && r || n !== STATUS_PENDING && (o.T?.U !== t || o.T?.fe)) {
|
|
744
753
|
// The marked subscriber is queued for the commit sweep so its status
|
|
745
754
|
// bookkeeping (loading window, uninitialized clear) runs with the flush
|
|
746
755
|
// — with the lane, when the pass propagating is the lane's work and
|
|
@@ -756,6 +765,9 @@ function notifyStatus(e, n, t) {
|
|
|
756
765
|
if (n === STATUS_PENDING && (o.l & (CONFIG_HELD | CONFIG_OVERRIDE)) === CONFIG_HELD && !o.i) joinFuture(txOf(o));
|
|
757
766
|
}
|
|
758
767
|
notifyStatus(o, n, t);
|
|
768
|
+
// A derived store's derive (store/projection.ts): marked, not re-run —
|
|
769
|
+
// its leaves' readers are not its dependents, so the family walks them.
|
|
770
|
+
o.fam?.st(n);
|
|
759
771
|
}
|
|
760
772
|
});
|
|
761
773
|
}
|
|
@@ -195,6 +195,15 @@ const CONFIG_HAS_SNAPSHOT = 1 << 9;
|
|
|
195
195
|
* a write is promoted at that recompute's end: readers in the same block see
|
|
196
196
|
* it. Cleared when the next flush begins; set only on that rare path. */ const CONFIG_PROMOTED = 1 << 22;
|
|
197
197
|
|
|
198
|
+
/** The frame (rule 3, D-3): a render effect (set at creation, as
|
|
199
|
+
* `EFFECT_RENDER << 23` — keep the two in step), and a boundary's tree and
|
|
200
|
+
* output (boundaries.ts) — structure between the content and the render
|
|
201
|
+
* effect that shows it, not a user derivation of the content. Outside a
|
|
202
|
+
* hold's own flush it reads that hold's values as committed and is
|
|
203
|
+
* re-derived at its landing, and a re-pass of it publishes mainline: it
|
|
204
|
+
* joins nothing, so two mounts under one boundary made in separate flushes
|
|
205
|
+
* keep their holds apart (D-4, S-5 rows 1′–3′, #4283). */ const CONFIG_FRAME = 1 << 23;
|
|
206
|
+
|
|
198
207
|
const STATUS_NONE = 0;
|
|
199
208
|
|
|
200
209
|
const STATUS_PENDING = 1 << 0;
|
|
@@ -203,6 +212,10 @@ const STATUS_ERROR = 1 << 1;
|
|
|
203
212
|
|
|
204
213
|
const STATUS_UNINITIALIZED = 1 << 2;
|
|
205
214
|
|
|
215
|
+
/** An error that answered a node's first read (no value has ever landed):
|
|
216
|
+
* the error, not UNINITIALIZED, is its status while shown, but a re-ask
|
|
217
|
+
* makes it uninitialized-pending again — it still has no value (#4244). */ const STATUS_NO_VALUE = 1 << 3;
|
|
218
|
+
|
|
206
219
|
/** `catchHook`'s answer when the catcher is a boundary re-armed by
|
|
207
220
|
* `on` (truthy, as any catch): what it collects is its own, not the hold's. */ const CAUGHT_REARMED = 2;
|
|
208
221
|
|
|
@@ -230,4 +243,4 @@ const defaultContext = {};
|
|
|
230
243
|
|
|
231
244
|
const NewSet = Set;
|
|
232
245
|
|
|
233
|
-
export { $REFRESH, CAUGHT_REARMED, CONFIG_AUTHORITATIVE, CONFIG_AUTO_DISPOSE, CONFIG_CHILDREN_FORBIDDEN, CONFIG_FRESH_READ, CONFIG_GUESS, CONFIG_HAS_SNAPSHOT, CONFIG_HELD, CONFIG_HELD_FRAME, CONFIG_INPUTS_PUBLISHED, CONFIG_IN_SNAPSHOT_SCOPE, CONFIG_LAGS, CONFIG_MANUAL_WRITE, CONFIG_NO_SNAPSHOT, CONFIG_OVERRIDE, CONFIG_OWNED_WRITE, CONFIG_PROMOTED, CONFIG_REDERIVE, CONFIG_SLOT_NODE, CONFIG_STAGED, CONFIG_STAGED_ERROR, CONFIG_SYNC, CONFIG_TRANSPARENT, CONFIG_VERDICT, EFFECT_RENDER, EFFECT_TRACKED, EFFECT_USER, NOT_PENDING, NO_SNAPSHOT, NewSet, REACTIVE_CHECK, REACTIVE_DIRTY, REACTIVE_DISPOSED, REACTIVE_FRAME_READ, REACTIVE_IN_HEAP, REACTIVE_IN_HEAP_HEIGHT, REACTIVE_JOINED, REACTIVE_LANE_DIRTY, REACTIVE_LANE_READ, REACTIVE_LAZY, REACTIVE_MANUAL_WRITE, REACTIVE_MISSED_WAKE, REACTIVE_NONE, REACTIVE_PROBED, REACTIVE_PROBE_UNANSWERED, REACTIVE_REASK, REACTIVE_RECOMPUTING_DEPS, REACTIVE_SCREEN_READ, REACTIVE_SNAPSHOT_STALE, REACTIVE_STAGED_READ, REACTIVE_ZOMBIE, STATUS_ERROR, STATUS_NONE, STATUS_PENDING, STATUS_UNINITIALIZED, SUPPORTS_PROXY, defaultContext };
|
|
246
|
+
export { $REFRESH, CAUGHT_REARMED, CONFIG_AUTHORITATIVE, CONFIG_AUTO_DISPOSE, CONFIG_CHILDREN_FORBIDDEN, CONFIG_FRAME, CONFIG_FRESH_READ, CONFIG_GUESS, CONFIG_HAS_SNAPSHOT, CONFIG_HELD, CONFIG_HELD_FRAME, CONFIG_INPUTS_PUBLISHED, CONFIG_IN_SNAPSHOT_SCOPE, CONFIG_LAGS, CONFIG_MANUAL_WRITE, CONFIG_NO_SNAPSHOT, CONFIG_OVERRIDE, CONFIG_OWNED_WRITE, CONFIG_PROMOTED, CONFIG_REDERIVE, CONFIG_SLOT_NODE, CONFIG_STAGED, CONFIG_STAGED_ERROR, CONFIG_SYNC, CONFIG_TRANSPARENT, CONFIG_VERDICT, EFFECT_RENDER, EFFECT_TRACKED, EFFECT_USER, NOT_PENDING, NO_SNAPSHOT, NewSet, REACTIVE_CHECK, REACTIVE_DIRTY, REACTIVE_DISPOSED, REACTIVE_FRAME_READ, REACTIVE_IN_HEAP, REACTIVE_IN_HEAP_HEIGHT, REACTIVE_JOINED, REACTIVE_LANE_DIRTY, REACTIVE_LANE_READ, REACTIVE_LAZY, REACTIVE_MANUAL_WRITE, REACTIVE_MISSED_WAKE, REACTIVE_NONE, REACTIVE_PROBED, REACTIVE_PROBE_UNANSWERED, REACTIVE_REASK, REACTIVE_RECOMPUTING_DEPS, REACTIVE_SCREEN_READ, REACTIVE_SNAPSHOT_STALE, REACTIVE_STAGED_READ, REACTIVE_ZOMBIE, STATUS_ERROR, STATUS_NONE, STATUS_NO_VALUE, STATUS_PENDING, STATUS_UNINITIALIZED, SUPPORTS_PROXY, defaultContext };
|