@solidjs/signals 2.0.0-rc.7 → 2.0.0-rc.8
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 +5243 -0
- package/dist/dev.attribution.js +2333 -0
- package/dist/dev.js +1229 -6834
- package/dist/observe/affects.js +127 -0
- package/dist/observe/attribution.js +1 -0
- package/dist/observe/boundaries.js +586 -0
- package/dist/observe/core/action.js +167 -0
- package/dist/observe/core/async.js +736 -0
- package/dist/observe/core/attribution-hooks.js +60 -0
- package/dist/observe/core/attribution.js +2318 -0
- package/dist/{types-cjs/core/constants.d.cts → observe/core/constants.js} +129 -73
- package/dist/{types-cjs/core/context.d.cts → observe/core/context.js} +37 -12
- package/dist/observe/core/core.js +1289 -0
- package/dist/observe/core/dev.js +232 -0
- package/dist/observe/core/effect.js +179 -0
- package/dist/observe/core/error.js +80 -0
- package/dist/observe/core/external.js +98 -0
- package/dist/observe/core/graph.js +155 -0
- package/dist/observe/core/heap.js +147 -0
- package/dist/observe/core/invariants.js +43 -0
- package/dist/observe/core/lanes.js +168 -0
- package/dist/observe/core/optimistic.js +438 -0
- package/dist/observe/core/owner.js +308 -0
- package/dist/observe/core/scheduler.js +1190 -0
- package/dist/observe/core/verdict.js +551 -0
- package/dist/observe/index.js +55 -0
- package/dist/observe/map.js +482 -0
- package/dist/{types-cjs/signals.d.cts → observe/signals.js} +295 -317
- package/dist/observe/store/index.js +38 -0
- package/dist/observe/store/next/optimistic.js +651 -0
- package/dist/observe/store/next/projection.js +242 -0
- package/dist/observe/store/next/reconcile.js +373 -0
- package/dist/observe/store/next/store.js +2213 -0
- package/dist/observe/store/next/target.js +51 -0
- package/dist/observe/store/store.js +323 -0
- package/dist/observe/store/storePath.js +103 -0
- package/dist/observe/store/utils.js +210 -0
- package/dist/prod/attribution.js +32 -0
- package/dist/prod/core/action.js +52 -32
- package/dist/prod/core/async.js +171 -127
- package/dist/prod/core/constants.js +24 -1
- package/dist/prod/core/context.js +3 -3
- package/dist/prod/core/core.js +434 -291
- package/dist/prod/core/effect.js +54 -34
- package/dist/prod/core/external.js +2 -2
- package/dist/prod/core/graph.js +32 -32
- package/dist/prod/core/heap.js +49 -44
- package/dist/prod/core/lanes.js +45 -38
- package/dist/prod/core/optimistic.js +207 -73
- package/dist/prod/core/owner.js +43 -39
- package/dist/prod/core/scheduler.js +319 -190
- package/dist/prod/core/verdict.js +67 -67
- package/dist/prod/index.js +9 -3
- package/dist/prod/map.js +292 -141
- package/dist/prod/signals.js +7 -10
- package/dist/prod/store/next/optimistic.js +140 -125
- package/dist/prod/store/next/projection.js +3 -3
- package/dist/prod/store/next/reconcile.js +87 -84
- package/dist/prod/store/next/store.js +524 -280
- package/dist/prod/store/next/target.js +32 -10
- package/dist/prod/store/store.js +12 -14
- package/dist/prod/store/utils.js +36 -27
- package/dist/types/attribution.d.ts +15 -0
- package/dist/types/attribution.prod.d.ts +13 -0
- package/dist/types/core/async.d.ts +1 -1
- package/dist/types/core/attribution-hooks.d.ts +119 -6
- package/dist/types/core/attribution.d.ts +208 -53
- package/dist/types/core/constants.d.ts +23 -0
- package/dist/types/core/core.d.ts +7 -0
- package/dist/types/core/dev.d.ts +124 -26
- package/dist/types/core/effect.d.ts +8 -1
- package/dist/types/core/index.d.ts +2 -1
- package/dist/types/core/lanes.d.ts +8 -1
- package/dist/types/core/scheduler.d.ts +60 -0
- package/dist/types/core/types.d.ts +29 -9
- package/dist/types/index.d.ts +9 -2
- package/dist/types/map.d.ts +2 -0
- package/dist/types/store/index.d.ts +1 -0
- package/dist/types/store/next/store.d.ts +5 -0
- package/dist/types/store/next/target.d.ts +36 -9
- package/dist/types/store/utils.d.ts +7 -0
- package/package.json +21 -17
- package/dist/node.cjs +0 -10541
- package/dist/node.dev.cjs +0 -13724
- package/dist/types-cjs/affects.d.cts +0 -47
- package/dist/types-cjs/boundaries.d.cts +0 -175
- package/dist/types-cjs/core/action.d.cts +0 -64
- package/dist/types-cjs/core/async.d.cts +0 -23
- package/dist/types-cjs/core/attribution-hooks.d.cts +0 -127
- package/dist/types-cjs/core/attribution.d.cts +0 -495
- package/dist/types-cjs/core/core.d.cts +0 -185
- package/dist/types-cjs/core/dev.d.cts +0 -136
- package/dist/types-cjs/core/effect.d.cts +0 -30
- package/dist/types-cjs/core/error.d.cts +0 -56
- package/dist/types-cjs/core/external.d.cts +0 -15
- package/dist/types-cjs/core/graph.d.cts +0 -28
- package/dist/types-cjs/core/heap.d.cts +0 -24
- package/dist/types-cjs/core/index.d.cts +0 -13
- package/dist/types-cjs/core/invariants.d.cts +0 -59
- package/dist/types-cjs/core/lanes.d.cts +0 -54
- package/dist/types-cjs/core/optimistic.d.cts +0 -6
- package/dist/types-cjs/core/owner.d.cts +0 -124
- package/dist/types-cjs/core/scheduler.d.cts +0 -236
- package/dist/types-cjs/core/types.d.cts +0 -204
- package/dist/types-cjs/core/verdict.d.cts +0 -2
- package/dist/types-cjs/index.d.cts +0 -10
- package/dist/types-cjs/map.d.cts +0 -69
- package/dist/types-cjs/package.json +0 -3
- package/dist/types-cjs/store/index.d.cts +0 -18
- package/dist/types-cjs/store/next/optimistic.d.cts +0 -25
- package/dist/types-cjs/store/next/projection.d.cts +0 -8
- package/dist/types-cjs/store/next/reconcile.d.cts +0 -10
- package/dist/types-cjs/store/next/store.d.cts +0 -121
- package/dist/types-cjs/store/next/target.d.cts +0 -166
- package/dist/types-cjs/store/store.d.cts +0 -143
- package/dist/types-cjs/store/storePath.d.cts +0 -58
- package/dist/types-cjs/store/utils.d.cts +0 -74
|
@@ -47,23 +47,23 @@ let pendingProbe = null;
|
|
|
47
47
|
* O(all-leaves-ever-read)-per-update pathology). Entries are permanent like
|
|
48
48
|
* the companions themselves; a store with no leaf-level isPending()/latest()
|
|
49
49
|
* reads never allocates the set or pays the walk. */ function markFirewallChildCompanions(e) {
|
|
50
|
-
const t = e.
|
|
50
|
+
const t = e.ce;
|
|
51
51
|
if (!t) return;
|
|
52
52
|
t.T |= CONFIG_CHILD_COMPANIONS;
|
|
53
|
-
(ext(t).
|
|
53
|
+
(ext(t).Dt ??= new Set).add(e);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
function getPendingSignal(e) {
|
|
57
|
-
let t = e.o?.
|
|
57
|
+
let t = e.o?.Le;
|
|
58
58
|
if (!t) {
|
|
59
59
|
// Start false, write true if pending - ensures reversion returns to false
|
|
60
60
|
t = optimisticSignal(false, {
|
|
61
61
|
ownedWrite: true
|
|
62
62
|
});
|
|
63
|
-
ext(e).
|
|
63
|
+
ext(e).Le = t;
|
|
64
64
|
e.T |= CONFIG_HAS_COMPANIONS;
|
|
65
65
|
markFirewallChildCompanions(e);
|
|
66
|
-
ext(t).
|
|
66
|
+
ext(t).Gt = e;
|
|
67
67
|
if (computePendingState(e)) setSignal(t, true);
|
|
68
68
|
}
|
|
69
69
|
return t;
|
|
@@ -72,7 +72,7 @@ function getPendingSignal(e) {
|
|
|
72
72
|
function collectPendingSources(e) {
|
|
73
73
|
if (!pendingProbe) return;
|
|
74
74
|
pendingProbe.sources.add(e);
|
|
75
|
-
const t = e.
|
|
75
|
+
const t = e.ce || e;
|
|
76
76
|
if (t !== e) pendingProbe.sources.add(t);
|
|
77
77
|
}
|
|
78
78
|
|
|
@@ -105,17 +105,17 @@ function collectPendingSources(e) {
|
|
|
105
105
|
if (e.S & STATUS_ERROR) return false;
|
|
106
106
|
if (t.has(e)) return false;
|
|
107
107
|
t.add(e);
|
|
108
|
-
const n = e.
|
|
108
|
+
const n = e.ce;
|
|
109
109
|
if (n && markWalk(n, t)) return true;
|
|
110
110
|
// Mid-recompute (the clearStatus companion poke runs before
|
|
111
111
|
// trimStaleDeps), only the validated prefix [_deps.._depsTail] is this
|
|
112
112
|
// pass's dependency set — walking past it would read dropped deps and
|
|
113
113
|
// latch a stale verdict on the companion.
|
|
114
114
|
const i = e;
|
|
115
|
-
const r = i.ie & REACTIVE_RECOMPUTING_DEPS ? i.
|
|
115
|
+
const r = i.ie & REACTIVE_RECOMPUTING_DEPS ? i.et : undefined;
|
|
116
116
|
if (r !== null) {
|
|
117
|
-
for (let e = i.
|
|
118
|
-
if (!e.
|
|
117
|
+
for (let e = i.fe ?? null; e !== null; e = e.ae) {
|
|
118
|
+
if (!e.je && markWalk(e.Se, t)) return true;
|
|
119
119
|
if (e === r) break;
|
|
120
120
|
}
|
|
121
121
|
}
|
|
@@ -124,10 +124,10 @@ function collectPendingSources(e) {
|
|
|
124
124
|
|
|
125
125
|
function quietPending(e) {
|
|
126
126
|
if (e.o?.le) {
|
|
127
|
-
for (const t of e.o.le) if (!t.o?.
|
|
127
|
+
for (const t of e.o.le) if (!t.o?.Ue) return false;
|
|
128
128
|
return true;
|
|
129
129
|
}
|
|
130
|
-
return e.o?.
|
|
130
|
+
return e.o?.Ue ?? false;
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
// NOTE: a loadingValue node's open loading window (_loading) is verdict-quiet
|
|
@@ -149,44 +149,44 @@ function computePendingState(e) {
|
|
|
149
149
|
// so the one walk covers direct marks, derivation, and companion chains.
|
|
150
150
|
// Gated: apps with no live mark pay one integer compare.
|
|
151
151
|
if (activeAffectsMarks !== 0 && markWalk(e, new Set)) return true;
|
|
152
|
-
const n = e.
|
|
153
|
-
if (e.o?.
|
|
154
|
-
const t = e.o?.
|
|
155
|
-
const n = t.
|
|
152
|
+
const n = e.ce;
|
|
153
|
+
if (e.o?.Gt) {
|
|
154
|
+
const t = e.o?.Gt;
|
|
155
|
+
const n = t.ce || t;
|
|
156
156
|
return newQuestionInFlight(n);
|
|
157
157
|
}
|
|
158
|
-
if (n && e.
|
|
159
|
-
return !!(n.ie & REACTIVE_MANUAL_WRITE) || !n.o?.
|
|
158
|
+
if (n && e.Ge !== NOT_PENDING && !hasActiveOverride(e)) {
|
|
159
|
+
return !!(n.ie & REACTIVE_MANUAL_WRITE) || !n.o?.Pe && !(n.S & STATUS_PENDING) || !!(n.S & STATUS_PENDING) && quietPending(n);
|
|
160
160
|
}
|
|
161
161
|
// `!comp._loading`: a hold created while the loading window is still open is
|
|
162
162
|
// the window's own landing in flight to its commit — verdict-quiet like the
|
|
163
163
|
// rest of the window (the UNINITIALIZED check suppresses exactly this frame
|
|
164
164
|
// for windowless first loads; born-committed nodes need their own gate, #2990).
|
|
165
|
-
if (e.
|
|
166
|
-
if (hasActiveOverride(e)) return !e.
|
|
165
|
+
if (e.Ge !== NOT_PENDING && !(t.S & STATUS_UNINITIALIZED) && !t.Ae) {
|
|
166
|
+
if (hasActiveOverride(e)) return !e.ve || !e.ve(e.Ge, unwrapOverride(e.o?.be));
|
|
167
167
|
// A quiet re-ask's held landing still answers the same question: the
|
|
168
168
|
// classification survives the landing (asyncWrite) and dies with the
|
|
169
169
|
// commit (commitPendingNode) — verdict-quiet through the reveal, like
|
|
170
170
|
// the loading window above (#3178).
|
|
171
|
-
if (!t.o?.
|
|
171
|
+
if (!t.o?.Ue) return true;
|
|
172
172
|
}
|
|
173
173
|
return newQuestionInFlight(t);
|
|
174
174
|
}
|
|
175
175
|
|
|
176
176
|
function syncCompanions(e, t) {
|
|
177
|
-
if (e.o?.
|
|
178
|
-
if (e.o?.
|
|
177
|
+
if (e.o?.Le) updatePendingSignal(e);
|
|
178
|
+
if (e.o?.Qe) setSignal(e.o?.Qe, t);
|
|
179
179
|
}
|
|
180
180
|
|
|
181
181
|
function updatePendingSignal(e) {
|
|
182
|
-
if (e.o?.
|
|
183
|
-
setSignal(e.o?.
|
|
182
|
+
if (e.o?.Le) {
|
|
183
|
+
setSignal(e.o?.Le, computePendingState(e));
|
|
184
184
|
}
|
|
185
|
-
if (e.o?.
|
|
185
|
+
if (e.o?.Qe) updatePendingSignal(e.o?.Qe);
|
|
186
186
|
}
|
|
187
187
|
|
|
188
188
|
function updateChildCompanions(e) {
|
|
189
|
-
const t = e.o?.
|
|
189
|
+
const t = e.o?.Dt;
|
|
190
190
|
if (t === undefined) return;
|
|
191
191
|
for (const e of t) updatePendingSignal(e);
|
|
192
192
|
}
|
|
@@ -205,9 +205,9 @@ function updateChildCompanions(e) {
|
|
|
205
205
|
const visit = e => {
|
|
206
206
|
if (i.has(e)) return;
|
|
207
207
|
i.add(e);
|
|
208
|
-
if (e.o?.
|
|
209
|
-
for (let t = e.u; t !== null; t = t.
|
|
210
|
-
for (let t = e.o?.i ?? null; t !== null; t = t.
|
|
208
|
+
if (e.o?.Le || e.o?.Qe) n(e);
|
|
209
|
+
for (let t = e.u; t !== null; t = t.Te) visit(t.Ie);
|
|
210
|
+
for (let t = e.o?.i ?? null; t !== null; t = t.Ee) {
|
|
211
211
|
visit(t);
|
|
212
212
|
}
|
|
213
213
|
};
|
|
@@ -228,7 +228,7 @@ function updateChildCompanions(e) {
|
|
|
228
228
|
if (suppressedProbes.size === 0) return;
|
|
229
229
|
let t = false;
|
|
230
230
|
for (const [n, i] of suppressedProbes) {
|
|
231
|
-
const r = n.
|
|
231
|
+
const r = n.ge;
|
|
232
232
|
const s = r ? currentTransition(r) : null;
|
|
233
233
|
if (!s) {
|
|
234
234
|
suppressedProbes.delete(n);
|
|
@@ -236,11 +236,11 @@ function updateChildCompanions(e) {
|
|
|
236
236
|
}
|
|
237
237
|
if (s !== e) continue;
|
|
238
238
|
suppressedProbes.delete(n);
|
|
239
|
-
const o = n.o?.
|
|
239
|
+
const o = n.o?.Le?.o?.Oe;
|
|
240
240
|
for (const e of i) {
|
|
241
241
|
if (e.ie & REACTIVE_DISPOSED) continue;
|
|
242
242
|
e.ie |= REACTIVE_OPTIMISTIC_DIRTY;
|
|
243
|
-
if (o) assignOrMergeLane(e, o); else if (e.o !== null) e.o
|
|
243
|
+
if (o) assignOrMergeLane(e, o); else if (e.o !== null) e.o.Oe = undefined;
|
|
244
244
|
enqueueSub(e);
|
|
245
245
|
t = true;
|
|
246
246
|
}
|
|
@@ -250,19 +250,19 @@ function updateChildCompanions(e) {
|
|
|
250
250
|
|
|
251
251
|
function snapCompanionsToState(e) {
|
|
252
252
|
suppressedProbes.size !== 0 && suppressedProbes.delete(e);
|
|
253
|
-
const t = e.o?.
|
|
254
|
-
if (t && (t.o?.
|
|
253
|
+
const t = e.o?.Le;
|
|
254
|
+
if (t && (t.o?.be === undefined || t.o?.be === NOT_PENDING)) {
|
|
255
255
|
const n = computePendingState(e);
|
|
256
|
-
if (t.
|
|
257
|
-
t.
|
|
258
|
-
t.
|
|
256
|
+
if (t.me !== n || t.Ge !== NOT_PENDING) {
|
|
257
|
+
t.me = n;
|
|
258
|
+
t.Ge = NOT_PENDING;
|
|
259
259
|
insertSubs(t);
|
|
260
260
|
schedule();
|
|
261
261
|
}
|
|
262
262
|
}
|
|
263
|
-
const n = e.o?.
|
|
263
|
+
const n = e.o?.Qe;
|
|
264
264
|
if (n && !(n.ie & REACTIVE_DISPOSED)) {
|
|
265
|
-
if ((n.o?.
|
|
265
|
+
if ((n.o?.be === undefined || n.o?.be === NOT_PENDING) && n.Ge === NOT_PENDING && !Object.is(n.me, e.me) && !(n.ie & (REACTIVE_DIRTY | REACTIVE_CHECK))) {
|
|
266
266
|
n.ie |= REACTIVE_DIRTY;
|
|
267
267
|
insertIntoHeap(n, queueFor(n));
|
|
268
268
|
insertSubs(n);
|
|
@@ -273,7 +273,7 @@ function snapCompanionsToState(e) {
|
|
|
273
273
|
}
|
|
274
274
|
|
|
275
275
|
function getLatestValueComputed(e) {
|
|
276
|
-
let t = e.o?.
|
|
276
|
+
let t = e.o?.Qe;
|
|
277
277
|
// A shadow disposed while unobserved (its gated reader unmounted at a
|
|
278
278
|
// landing) is a corpse: sync writes into it equality-swallow against its
|
|
279
279
|
// frozen _value, and a later read revives it via recompute — clearing
|
|
@@ -290,16 +290,16 @@ function getLatestValueComputed(e) {
|
|
|
290
290
|
setContextInternal(null);
|
|
291
291
|
// Detach from owner so it isn't disposed with effects
|
|
292
292
|
t = optimisticComputed(() => read(e));
|
|
293
|
-
ext(e).
|
|
293
|
+
ext(e).Qe = t;
|
|
294
294
|
e.T |= CONFIG_HAS_COMPANIONS;
|
|
295
295
|
markFirewallChildCompanions(e);
|
|
296
|
-
ext(t).
|
|
296
|
+
ext(t).Gt = e;
|
|
297
297
|
// Parent-child lane relationship
|
|
298
298
|
// Backfill an in-flight write (mirrors getPendingSignal): the companion is
|
|
299
299
|
// created lazily, possibly after the write was processed — syncCompanions
|
|
300
300
|
// only pushes into companions that already exist, so the first latest()
|
|
301
301
|
// read inside a held transition showed the committed value (#3041).
|
|
302
|
-
if (e.
|
|
302
|
+
if (e.Ge !== NOT_PENDING && !hasActiveOverride(e)) setSignal(t, e.Ge);
|
|
303
303
|
setContextInternal(r);
|
|
304
304
|
setPendingCheckActive(i);
|
|
305
305
|
setLatestReadActive(n);
|
|
@@ -311,7 +311,7 @@ function getLatestValueComputed(e) {
|
|
|
311
311
|
const t = getLatestValueComputed(e);
|
|
312
312
|
const n = latestReadActive;
|
|
313
313
|
setLatestReadActive(false);
|
|
314
|
-
const i = e.o?.
|
|
314
|
+
const i = e.o?.be !== undefined && e.o?.be !== NOT_PENDING ? unwrapOverride(e.o?.be) : e.me;
|
|
315
315
|
let r;
|
|
316
316
|
try {
|
|
317
317
|
// An untracked latest() read has no reading context, so read() never
|
|
@@ -320,7 +320,7 @@ function getLatestValueComputed(e) {
|
|
|
320
320
|
// until the flush (#2922). Mirror the tracked-read pull here: mark the
|
|
321
321
|
// queued staleness through the graph, then bring the shadow up to date.
|
|
322
322
|
const e = queueFor(t);
|
|
323
|
-
if (t.
|
|
323
|
+
if (t.Be >= e.Ke && !(t.ie & (REACTIVE_DISPOSED | REACTIVE_ZOMBIE))) {
|
|
324
324
|
markHeap(e);
|
|
325
325
|
// Suspend probe collection during the pull (mirrors pendingCheckRead's
|
|
326
326
|
// prepare): a probe through latest() answers for the SHADOW — the
|
|
@@ -347,8 +347,8 @@ function getLatestValueComputed(e) {
|
|
|
347
347
|
setLatestReadActive(n);
|
|
348
348
|
}
|
|
349
349
|
if (t.S & STATUS_PENDING) return i;
|
|
350
|
-
if (stale && currentOptimisticLane && t.o
|
|
351
|
-
const e = findLane(t.o
|
|
350
|
+
if (stale && currentOptimisticLane && t.o?.Oe) {
|
|
351
|
+
const e = findLane(t.o?.Oe);
|
|
352
352
|
const n = findLane(currentOptimisticLane);
|
|
353
353
|
if (e !== n && laneHeld(e)) {
|
|
354
354
|
return i;
|
|
@@ -358,7 +358,7 @@ function getLatestValueComputed(e) {
|
|
|
358
358
|
// speculative value in _pendingValue; a contextless read() only surfaces
|
|
359
359
|
// _value. Overrides stay authoritative (A17), and stale readers keep the
|
|
360
360
|
// other transition's committed view, matching read()'s own selection.
|
|
361
|
-
if (t.
|
|
361
|
+
if (t.Ge !== NOT_PENDING && !hasActiveOverride(t) && !(stale && t.ge && activeTransition !== t.ge)) return t.Ge;
|
|
362
362
|
return r;
|
|
363
363
|
}
|
|
364
364
|
|
|
@@ -372,9 +372,9 @@ function getLatestValueComputed(e) {
|
|
|
372
372
|
* so the `_fn` check is belt-and-braces for this call site.
|
|
373
373
|
*/ function latestShadowWithInitializedParent(e) {
|
|
374
374
|
if (typeof e.oe !== "function") return false;
|
|
375
|
-
const t = e.o?.
|
|
375
|
+
const t = e.o?.Gt;
|
|
376
376
|
if (t === undefined) return false;
|
|
377
|
-
const n = t.
|
|
377
|
+
const n = t.ce || t;
|
|
378
378
|
return !(n.S & STATUS_UNINITIALIZED);
|
|
379
379
|
}
|
|
380
380
|
|
|
@@ -410,9 +410,9 @@ function getLatestValueComputed(e) {
|
|
|
410
410
|
* reader saw is an input, and pending remains the truth for every reader
|
|
411
411
|
* (#3028).
|
|
412
412
|
*/ function heldAwaitingAsync(e) {
|
|
413
|
-
const t = e.
|
|
413
|
+
const t = e.ge;
|
|
414
414
|
const n = t ? currentTransition(t) : activeTransition;
|
|
415
|
-
if (!n || n.
|
|
415
|
+
if (!n || n.ft) return false;
|
|
416
416
|
// A plain staged write (a signal/store leaf — no _fn) held while an action
|
|
417
417
|
// is still running is an INPUT to a computation still in flight (#3078):
|
|
418
418
|
// the pairing rule must not suppress the verdict, or a memo recomputing
|
|
@@ -427,14 +427,14 @@ function getLatestValueComputed(e) {
|
|
|
427
427
|
// action check above; the reporter scan below is for transition-held
|
|
428
428
|
// writes whose source async is still computing.
|
|
429
429
|
if (!t) return false;
|
|
430
|
-
for (const [e, t] of n.
|
|
430
|
+
for (const [e, t] of n.Re) {
|
|
431
431
|
if (t.size && e.S & STATUS_PENDING && e.o?._?.source === e) return true;
|
|
432
432
|
}
|
|
433
433
|
return false;
|
|
434
434
|
}
|
|
435
435
|
|
|
436
436
|
function recordFreshRead(e, t) {
|
|
437
|
-
if (pendingProbe !== null && e.
|
|
437
|
+
if (pendingProbe !== null && e.Ge !== NOT_PENDING && t === e.Ge) {
|
|
438
438
|
if (heldAwaitingAsync(e)) return;
|
|
439
439
|
pendingProbe.freshReads.add(e);
|
|
440
440
|
}
|
|
@@ -442,10 +442,10 @@ function recordFreshRead(e, t) {
|
|
|
442
442
|
|
|
443
443
|
function applyReask(e, t) {
|
|
444
444
|
const n = !!(e.S & STATUS_PENDING);
|
|
445
|
-
const i = t && !(n && !e.o?.
|
|
446
|
-
const r = n && (e.o?.
|
|
445
|
+
const i = t && !(n && !e.o?.Ue);
|
|
446
|
+
const r = n && (e.o?.Ue ?? false) !== i;
|
|
447
447
|
// Allocation-free for the quiet case: false is the extension default.
|
|
448
|
-
if (i) ext(e).
|
|
448
|
+
if (i) ext(e).Ue = true; else if (e.o !== null) e.o.Ue = false;
|
|
449
449
|
return r;
|
|
450
450
|
}
|
|
451
451
|
|
|
@@ -526,26 +526,26 @@ function isPending(e) {
|
|
|
526
526
|
// Hook installation (same late-binding pattern as GlobalQueue._update /
|
|
527
527
|
// _propagateAffects): core call sites fire these behind the same guards the
|
|
528
528
|
// direct calls used, so behavior is identical once this module loads.
|
|
529
|
-
GlobalQueue.
|
|
529
|
+
GlobalQueue.pe = syncCompanions;
|
|
530
530
|
|
|
531
|
-
GlobalQueue.
|
|
531
|
+
GlobalQueue.Ne = updatePendingSignal;
|
|
532
532
|
|
|
533
|
-
GlobalQueue.
|
|
533
|
+
GlobalQueue.ke = updateChildCompanions;
|
|
534
534
|
|
|
535
535
|
GlobalQueue.un = snapCompanionsToState;
|
|
536
536
|
|
|
537
|
-
GlobalQueue.
|
|
537
|
+
GlobalQueue.wt = latestRead;
|
|
538
538
|
|
|
539
|
-
GlobalQueue.
|
|
539
|
+
GlobalQueue.Wt = pendingCheckRead;
|
|
540
540
|
|
|
541
|
-
GlobalQueue.
|
|
541
|
+
GlobalQueue.jt = recordFreshRead;
|
|
542
542
|
|
|
543
|
-
GlobalQueue.
|
|
543
|
+
GlobalQueue.st = applyReask;
|
|
544
544
|
|
|
545
545
|
GlobalQueue.k = repollDownstreamVerdicts;
|
|
546
546
|
|
|
547
|
-
GlobalQueue.
|
|
547
|
+
GlobalQueue.ri = witnessAffects;
|
|
548
548
|
|
|
549
|
-
GlobalQueue.
|
|
549
|
+
GlobalQueue.si = wakeSuppressedProbes;
|
|
550
550
|
|
|
551
551
|
export { isPending, latest };
|
package/dist/prod/index.js
CHANGED
|
@@ -36,12 +36,18 @@ export { createOptimisticStoreNext as createOptimisticStore } from "./store/next
|
|
|
36
36
|
|
|
37
37
|
export { createProjectionNext as createProjection } from "./store/next/projection.js";
|
|
38
38
|
|
|
39
|
-
export { merge, omit } from "./store/utils.js";
|
|
39
|
+
export { merge, mergeSources, omit } from "./store/utils.js";
|
|
40
40
|
|
|
41
41
|
export { storeHasFamily, storeHasOptimisticFamily, storeIsShallow } from "./store/next/store.js";
|
|
42
42
|
|
|
43
43
|
export { storePath } from "./store/storePath.js";
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Observe tier (diagnostics channel, attribution hook slot + interaction
|
|
47
|
+
* frame): dev and observe builds. The attribution engine itself is the
|
|
48
|
+
* `@solidjs/signals/attribution` entry.
|
|
49
|
+
*/ const OBSERVE = undefined;
|
|
46
50
|
|
|
47
|
-
|
|
51
|
+
/** Dev tier (devtools hooks, graph traversal, console reporting): dev builds only. */ const DEV = undefined;
|
|
52
|
+
|
|
53
|
+
export { DEV, OBSERVE };
|