@solidjs/signals 0.7.4 → 0.8.0
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 +1036 -1402
- package/dist/node.cjs +1164 -1532
- package/dist/prod.js +1151 -1511
- package/dist/types/boundaries.d.ts +10 -8
- package/dist/types/core/constants.d.ts +22 -13
- package/dist/types/core/context.d.ts +28 -0
- package/dist/types/core/core.d.ts +96 -135
- package/dist/types/core/effect.d.ts +14 -42
- package/dist/types/core/error.d.ts +2 -1
- package/dist/types/core/heap.d.ts +15 -0
- package/dist/types/core/index.d.ts +4 -5
- package/dist/types/core/scheduler.d.ts +28 -54
- package/dist/types/index.d.ts +4 -4
- package/dist/types/map.d.ts +1 -1
- package/dist/types/signals.d.ts +5 -43
- package/dist/types/store/projection.d.ts +1 -2
- package/dist/types/store/store.d.ts +2 -2
- package/package.json +1 -1
- package/dist/types/core/flags.d.ts +0 -11
- package/dist/types/core/owner.d.ts +0 -95
package/dist/node.cjs
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
// src/core/error.ts
|
|
4
4
|
var NotReadyError = class extends Error {
|
|
5
|
-
constructor(
|
|
5
|
+
constructor(cause) {
|
|
6
6
|
super();
|
|
7
|
-
this.cause =
|
|
7
|
+
this.cause = cause;
|
|
8
8
|
}
|
|
9
9
|
};
|
|
10
10
|
var NoOwnerError = class extends Error {
|
|
@@ -21,948 +21,907 @@ var ContextNotFoundError = class extends Error {
|
|
|
21
21
|
};
|
|
22
22
|
|
|
23
23
|
// src/core/constants.ts
|
|
24
|
-
var
|
|
25
|
-
var STATE_CHECK = 1;
|
|
26
|
-
var STATE_DIRTY = 2;
|
|
27
|
-
var STATE_DISPOSED = 3;
|
|
28
|
-
var EFFECT_PURE = 0;
|
|
29
|
-
var EFFECT_RENDER = 1;
|
|
30
|
-
var EFFECT_USER = 2;
|
|
24
|
+
var NOT_PENDING = {};
|
|
31
25
|
var SUPPORTS_PROXY = typeof Proxy === "function";
|
|
32
26
|
|
|
33
|
-
// src/core/
|
|
34
|
-
|
|
35
|
-
var
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
27
|
+
// src/core/heap.ts
|
|
28
|
+
function actualInsertIntoHeap(n, heap) {
|
|
29
|
+
var _a, _b, _c;
|
|
30
|
+
const parentHeight = (((_a = n.s) == null ? void 0 : _a.Z) ? (_b = n.s._) == null ? void 0 : _b.e : (_c = n.s) == null ? void 0 : _c.e) ?? -1;
|
|
31
|
+
if (parentHeight >= n.e)
|
|
32
|
+
n.e = parentHeight + 1;
|
|
33
|
+
const height = n.e;
|
|
34
|
+
const heapAtHeight = heap.o[height];
|
|
35
|
+
if (heapAtHeight === void 0) {
|
|
36
|
+
heap.o[height] = n;
|
|
37
|
+
} else {
|
|
38
|
+
const tail = heapAtHeight.x;
|
|
39
|
+
tail.O = n;
|
|
40
|
+
n.x = tail;
|
|
41
|
+
heapAtHeight.x = n;
|
|
42
|
+
}
|
|
43
|
+
if (height > heap.J) {
|
|
44
|
+
heap.J = height;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function insertIntoHeap(n, heap) {
|
|
48
|
+
let flags = n.b;
|
|
49
|
+
if (flags & (8 /* InHeap */ | 4 /* RecomputingDeps */))
|
|
50
|
+
return;
|
|
51
|
+
if (flags & 1 /* Check */) {
|
|
52
|
+
n.b = flags & ~(1 /* Check */ | 2 /* Dirty */) | 2 /* Dirty */ | 8 /* InHeap */;
|
|
53
|
+
} else
|
|
54
|
+
n.b = flags | 8 /* InHeap */;
|
|
55
|
+
if (!(flags & 16 /* InHeapHeight */)) {
|
|
56
|
+
actualInsertIntoHeap(n, heap);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function insertIntoHeapHeight(n, heap) {
|
|
60
|
+
let flags = n.b;
|
|
61
|
+
if (flags & (8 /* InHeap */ | 4 /* RecomputingDeps */ | 16 /* InHeapHeight */))
|
|
62
|
+
return;
|
|
63
|
+
n.b = flags | 16 /* InHeapHeight */;
|
|
64
|
+
actualInsertIntoHeap(n, heap);
|
|
65
|
+
}
|
|
66
|
+
function deleteFromHeap(n, heap) {
|
|
67
|
+
const flags = n.b;
|
|
68
|
+
if (!(flags & (8 /* InHeap */ | 16 /* InHeapHeight */)))
|
|
69
|
+
return;
|
|
70
|
+
n.b = flags & ~(8 /* InHeap */ | 16 /* InHeapHeight */);
|
|
71
|
+
const height = n.e;
|
|
72
|
+
if (n.x === n) {
|
|
73
|
+
heap.o[height] = void 0;
|
|
74
|
+
} else {
|
|
75
|
+
const next = n.O;
|
|
76
|
+
const dhh = heap.o[height];
|
|
77
|
+
const end = next ?? dhh;
|
|
78
|
+
if (n === dhh) {
|
|
79
|
+
heap.o[height] = next;
|
|
80
|
+
} else {
|
|
81
|
+
n.x.O = next;
|
|
82
|
+
}
|
|
83
|
+
end.x = n.x;
|
|
84
|
+
}
|
|
85
|
+
n.x = n;
|
|
86
|
+
n.O = void 0;
|
|
87
|
+
}
|
|
88
|
+
function markHeap(heap) {
|
|
89
|
+
if (heap.$)
|
|
90
|
+
return;
|
|
91
|
+
heap.$ = true;
|
|
92
|
+
for (let i = 0; i <= heap.J; i++) {
|
|
93
|
+
for (let el = heap.o[i]; el !== void 0; el = el.O) {
|
|
94
|
+
if (el.b & 8 /* InHeap */)
|
|
95
|
+
markNode(el);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function markNode(el, newState = 2 /* Dirty */) {
|
|
100
|
+
const flags = el.b;
|
|
101
|
+
if ((flags & (1 /* Check */ | 2 /* Dirty */)) >= newState)
|
|
102
|
+
return;
|
|
103
|
+
el.b = flags & ~(1 /* Check */ | 2 /* Dirty */) | newState;
|
|
104
|
+
for (let link2 = el.p; link2 !== null; link2 = link2.y) {
|
|
105
|
+
markNode(link2.m, 1 /* Check */);
|
|
106
|
+
}
|
|
107
|
+
if (el.aa !== null) {
|
|
108
|
+
for (let child = el.aa; child !== null; child = child.qa) {
|
|
109
|
+
for (let link2 = child.p; link2 !== null; link2 = link2.y) {
|
|
110
|
+
markNode(link2.m, 1 /* Check */);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function runHeap(heap, recompute2) {
|
|
116
|
+
heap.$ = false;
|
|
117
|
+
for (heap.t = 0; heap.t <= heap.J; heap.t++) {
|
|
118
|
+
let el = heap.o[heap.t];
|
|
119
|
+
while (el !== void 0) {
|
|
120
|
+
if (el.b & 8 /* InHeap */)
|
|
121
|
+
recompute2(el);
|
|
122
|
+
else {
|
|
123
|
+
adjustHeight(el, heap);
|
|
124
|
+
}
|
|
125
|
+
el = heap.o[heap.t];
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
heap.J = 0;
|
|
129
|
+
}
|
|
130
|
+
function adjustHeight(el, heap) {
|
|
131
|
+
deleteFromHeap(el, heap);
|
|
132
|
+
let newHeight = el.e;
|
|
133
|
+
for (let d = el.u; d; d = d.E) {
|
|
134
|
+
const dep1 = d.P;
|
|
135
|
+
const dep = "_owner" in dep1 ? dep1.z : dep1;
|
|
136
|
+
if ("_fn" in dep) {
|
|
137
|
+
if (dep.e >= newHeight) {
|
|
138
|
+
newHeight = dep.e + 1;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
if (el.e !== newHeight) {
|
|
143
|
+
el.e = newHeight;
|
|
144
|
+
for (let s = el.p; s !== null; s = s.y) {
|
|
145
|
+
insertIntoHeapHeight(s.m, heap);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
41
149
|
|
|
42
150
|
// src/core/scheduler.ts
|
|
43
151
|
var clock = 0;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
var ActiveTransition = null;
|
|
48
|
-
var Unobserved = [];
|
|
152
|
+
var activeTransition = null;
|
|
153
|
+
var unobserved = [];
|
|
154
|
+
var transitions = /* @__PURE__ */ new Set();
|
|
49
155
|
var scheduled = false;
|
|
50
156
|
function schedule() {
|
|
51
157
|
if (scheduled)
|
|
52
158
|
return;
|
|
53
159
|
scheduled = true;
|
|
54
|
-
if (!globalQueue.
|
|
160
|
+
if (!globalQueue.ba)
|
|
55
161
|
queueMicrotask(flush);
|
|
56
162
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
163
|
+
var dirtyQueue = {
|
|
164
|
+
o: new Array(2e3).fill(void 0),
|
|
165
|
+
$: false,
|
|
166
|
+
t: 0,
|
|
167
|
+
J: 0
|
|
168
|
+
};
|
|
169
|
+
var zombieQueue = {
|
|
170
|
+
o: new Array(2e3).fill(void 0),
|
|
171
|
+
$: false,
|
|
172
|
+
t: 0,
|
|
173
|
+
J: 0
|
|
174
|
+
};
|
|
67
175
|
var Queue = class {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
i = [];
|
|
176
|
+
s = null;
|
|
177
|
+
A = [[], []];
|
|
178
|
+
Q = [];
|
|
72
179
|
created = clock;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
180
|
+
addChild(child) {
|
|
181
|
+
this.Q.push(child);
|
|
182
|
+
child.s = this;
|
|
183
|
+
}
|
|
184
|
+
removeChild(child) {
|
|
185
|
+
const index = this.Q.indexOf(child);
|
|
186
|
+
if (index >= 0) {
|
|
187
|
+
this.Q.splice(index, 1);
|
|
188
|
+
child.s = null;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
notify(node, mask, flags) {
|
|
192
|
+
if (this.s)
|
|
193
|
+
return this.s.notify(node, mask, flags);
|
|
194
|
+
return false;
|
|
78
195
|
}
|
|
79
196
|
run(type) {
|
|
80
|
-
if (type
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
return;
|
|
84
|
-
} else if (this.h[type - 1].length) {
|
|
85
|
-
const effects = this.h[type - 1];
|
|
86
|
-
this.h[type - 1] = [];
|
|
197
|
+
if (this.A[type - 1].length) {
|
|
198
|
+
const effects = this.A[type - 1];
|
|
199
|
+
this.A[type - 1] = [];
|
|
87
200
|
runQueue(effects, type);
|
|
88
201
|
}
|
|
89
|
-
for (let i = 0; i < this.
|
|
90
|
-
this.
|
|
202
|
+
for (let i = 0; i < this.Q.length; i++) {
|
|
203
|
+
this.Q[i].run(type);
|
|
91
204
|
}
|
|
92
205
|
}
|
|
206
|
+
enqueue(type, fn) {
|
|
207
|
+
if (type)
|
|
208
|
+
this.A[type - 1].push(fn);
|
|
209
|
+
schedule();
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
var GlobalQueue = class _GlobalQueue extends Queue {
|
|
213
|
+
ba = false;
|
|
214
|
+
h = [];
|
|
215
|
+
static R;
|
|
216
|
+
static ka;
|
|
93
217
|
flush() {
|
|
94
|
-
if (this.
|
|
218
|
+
if (this.ba)
|
|
95
219
|
return;
|
|
96
|
-
this.
|
|
220
|
+
this.ba = true;
|
|
97
221
|
try {
|
|
98
|
-
|
|
99
|
-
|
|
222
|
+
runHeap(dirtyQueue, _GlobalQueue.R);
|
|
223
|
+
if (activeTransition) {
|
|
224
|
+
if (!transitionComplete(activeTransition)) {
|
|
225
|
+
runHeap(zombieQueue, _GlobalQueue.R);
|
|
226
|
+
globalQueue.h = [];
|
|
227
|
+
activeTransition.queues[0].push(...globalQueue.A[0]);
|
|
228
|
+
activeTransition.queues[1].push(...globalQueue.A[1]);
|
|
229
|
+
globalQueue.A = [[], []];
|
|
230
|
+
clock++;
|
|
231
|
+
scheduled = false;
|
|
232
|
+
runPending(activeTransition.pendingNodes, true);
|
|
233
|
+
activeTransition = null;
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
globalQueue.h.push(...activeTransition.pendingNodes);
|
|
237
|
+
globalQueue.A[0].push(...activeTransition.queues[0]);
|
|
238
|
+
globalQueue.A[1].push(...activeTransition.queues[1]);
|
|
239
|
+
transitions.delete(activeTransition);
|
|
240
|
+
activeTransition = null;
|
|
241
|
+
if (runPending(globalQueue.h, false))
|
|
242
|
+
runHeap(dirtyQueue, _GlobalQueue.R);
|
|
243
|
+
} else if (transitions.size)
|
|
244
|
+
runHeap(zombieQueue, _GlobalQueue.R);
|
|
245
|
+
for (let i = 0; i < globalQueue.h.length; i++) {
|
|
246
|
+
const n = globalQueue.h[i];
|
|
247
|
+
if (n.d !== NOT_PENDING) {
|
|
248
|
+
n.g = n.d;
|
|
249
|
+
n.d = NOT_PENDING;
|
|
250
|
+
}
|
|
251
|
+
if (n.ha)
|
|
252
|
+
_GlobalQueue.ka(n, false, true);
|
|
253
|
+
}
|
|
254
|
+
globalQueue.h.length = 0;
|
|
255
|
+
clock++;
|
|
100
256
|
scheduled = false;
|
|
101
|
-
this.run(
|
|
102
|
-
this.run(
|
|
257
|
+
this.run(1 /* Render */);
|
|
258
|
+
this.run(2 /* User */);
|
|
103
259
|
} finally {
|
|
104
|
-
this.
|
|
105
|
-
|
|
260
|
+
this.ba = false;
|
|
261
|
+
unobserved.length && notifyUnobserved();
|
|
106
262
|
}
|
|
107
263
|
}
|
|
108
|
-
|
|
109
|
-
if (
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
if (ActiveTransition && ActiveTransition.J.has(this))
|
|
116
|
-
return ActiveTransition.J.get(this).removeChild(child);
|
|
117
|
-
const index = this.i.indexOf(child);
|
|
118
|
-
if (index >= 0) {
|
|
119
|
-
this.i.splice(index, 1);
|
|
120
|
-
child.l = null;
|
|
264
|
+
notify(node, mask, flags) {
|
|
265
|
+
if (mask & 1 /* Pending */) {
|
|
266
|
+
if (flags & 1 /* Pending */) {
|
|
267
|
+
if (activeTransition && !activeTransition.asyncNodes.includes(node.B.cause))
|
|
268
|
+
activeTransition.asyncNodes.push(node.B.cause);
|
|
269
|
+
}
|
|
270
|
+
return true;
|
|
121
271
|
}
|
|
122
|
-
}
|
|
123
|
-
notify(...args) {
|
|
124
|
-
if (this.l)
|
|
125
|
-
return this.l.notify(...args);
|
|
126
272
|
return false;
|
|
127
273
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
274
|
+
initTransition(node) {
|
|
275
|
+
if (activeTransition && activeTransition.time === clock)
|
|
276
|
+
return;
|
|
277
|
+
if (!activeTransition) {
|
|
278
|
+
activeTransition = node.S ?? {
|
|
279
|
+
time: clock,
|
|
280
|
+
pendingNodes: [],
|
|
281
|
+
asyncNodes: [],
|
|
282
|
+
queues: [[], []]
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
transitions.add(activeTransition);
|
|
286
|
+
activeTransition.time = clock;
|
|
287
|
+
for (let i = 0; i < globalQueue.h.length; i++) {
|
|
288
|
+
const n = globalQueue.h[i];
|
|
289
|
+
n.S = activeTransition;
|
|
290
|
+
activeTransition.pendingNodes.push(n);
|
|
137
291
|
}
|
|
292
|
+
globalQueue.h = activeTransition.pendingNodes;
|
|
138
293
|
}
|
|
139
294
|
};
|
|
140
|
-
|
|
295
|
+
function runPending(pendingNodes, value) {
|
|
296
|
+
let needsReset = false;
|
|
297
|
+
const p = pendingNodes.slice();
|
|
298
|
+
for (let i = 0; i < p.length; i++) {
|
|
299
|
+
const n = p[i];
|
|
300
|
+
n.S = activeTransition;
|
|
301
|
+
if (n.G) {
|
|
302
|
+
n.G.ca(value);
|
|
303
|
+
needsReset = true;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
return needsReset;
|
|
307
|
+
}
|
|
308
|
+
var globalQueue = new GlobalQueue();
|
|
141
309
|
function flush() {
|
|
142
310
|
while (scheduled) {
|
|
143
311
|
globalQueue.flush();
|
|
144
312
|
}
|
|
145
313
|
}
|
|
146
|
-
function removeSourceObservers(node, index) {
|
|
147
|
-
let source;
|
|
148
|
-
let swap;
|
|
149
|
-
for (let i = index; i < node.b.length; i++) {
|
|
150
|
-
source = getTransitionSource(node.b[i]);
|
|
151
|
-
if (source.c) {
|
|
152
|
-
if ((swap = source.c.indexOf(node)) !== -1) {
|
|
153
|
-
source.c[swap] = source.c[source.c.length - 1];
|
|
154
|
-
source.c.pop();
|
|
155
|
-
}
|
|
156
|
-
if (!source.c.length)
|
|
157
|
-
Unobserved.push(source);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
314
|
function runQueue(queue, type) {
|
|
162
315
|
for (let i = 0; i < queue.length; i++)
|
|
163
316
|
queue[i](type);
|
|
164
317
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
h = [[], []];
|
|
172
|
-
J = /* @__PURE__ */ new Map();
|
|
173
|
-
G = [];
|
|
174
|
-
i = [];
|
|
175
|
-
l = null;
|
|
176
|
-
C = false;
|
|
177
|
-
Y = false;
|
|
178
|
-
d = globalQueue;
|
|
179
|
-
aa;
|
|
180
|
-
created = clock;
|
|
181
|
-
constructor(signal) {
|
|
182
|
-
this.aa = signal;
|
|
183
|
-
this.J.set(globalQueue, this);
|
|
184
|
-
for (const child of globalQueue.i) {
|
|
185
|
-
cloneQueue(child, this, this);
|
|
318
|
+
function transitionComplete(transition) {
|
|
319
|
+
let done = true;
|
|
320
|
+
for (let i = 0; i < transition.asyncNodes.length; i++) {
|
|
321
|
+
if (transition.asyncNodes[i].f & 1 /* Pending */) {
|
|
322
|
+
done = false;
|
|
323
|
+
break;
|
|
186
324
|
}
|
|
187
325
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
this.G.length && runQueue(this.G, type);
|
|
197
|
-
this.G = [];
|
|
198
|
-
return;
|
|
199
|
-
} else if (this.h[type - 1].length) {
|
|
200
|
-
const effects = this.h[type - 1];
|
|
201
|
-
this.h[type - 1] = [];
|
|
202
|
-
runQueue(effects, type);
|
|
203
|
-
}
|
|
204
|
-
for (let i = 0; i < this.i.length; i++) {
|
|
205
|
-
this.i[i].run(type);
|
|
206
|
-
}
|
|
326
|
+
return done;
|
|
327
|
+
}
|
|
328
|
+
function notifyUnobserved() {
|
|
329
|
+
var _a, _b;
|
|
330
|
+
for (let i = 0; i < unobserved.length; i++) {
|
|
331
|
+
const source = unobserved[i];
|
|
332
|
+
if (!source.p)
|
|
333
|
+
(_b = (_a = unobserved[i]).ra) == null ? void 0 : _b.call(_a);
|
|
207
334
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
335
|
+
unobserved = [];
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// src/core/core.ts
|
|
339
|
+
GlobalQueue.R = recompute;
|
|
340
|
+
GlobalQueue.ka = disposeChildren;
|
|
341
|
+
var tracking = false;
|
|
342
|
+
var stale = false;
|
|
343
|
+
var pendingValueCheck = false;
|
|
344
|
+
var pendingCheck = null;
|
|
345
|
+
var context = null;
|
|
346
|
+
var defaultContext = {};
|
|
347
|
+
function recompute(el, create = false) {
|
|
348
|
+
var _a;
|
|
349
|
+
deleteFromHeap(el, el.b & 32 /* Zombie */ ? zombieQueue : dirtyQueue);
|
|
350
|
+
if (el.d !== NOT_PENDING || el.T || el.U)
|
|
351
|
+
disposeChildren(el);
|
|
352
|
+
else {
|
|
353
|
+
markDisposal(el);
|
|
354
|
+
globalQueue.h.push(el);
|
|
355
|
+
el.U = el.q;
|
|
356
|
+
el.T = el.n;
|
|
357
|
+
el.q = null;
|
|
358
|
+
el.n = null;
|
|
359
|
+
}
|
|
360
|
+
const oldcontext = context;
|
|
361
|
+
context = el;
|
|
362
|
+
el.H = null;
|
|
363
|
+
el.b = 4 /* RecomputingDeps */;
|
|
364
|
+
el.V = clock;
|
|
365
|
+
let value = el.d === NOT_PENDING ? el.g : el.d;
|
|
366
|
+
let oldHeight = el.e;
|
|
367
|
+
let prevStatusFlags = el.f;
|
|
368
|
+
let prevError = el.B;
|
|
369
|
+
let prevTracking = tracking;
|
|
370
|
+
clearStatusFlags(el);
|
|
371
|
+
tracking = true;
|
|
372
|
+
try {
|
|
373
|
+
value = el.ha(value);
|
|
374
|
+
} catch (e) {
|
|
375
|
+
if (e instanceof NotReadyError) {
|
|
376
|
+
if (e.cause !== el)
|
|
377
|
+
link(e.cause, el);
|
|
378
|
+
setStatusFlags(el, prevStatusFlags & ~2 /* Error */ | 1 /* Pending */, e);
|
|
379
|
+
} else {
|
|
380
|
+
setError(el, e);
|
|
224
381
|
}
|
|
382
|
+
} finally {
|
|
383
|
+
tracking = prevTracking;
|
|
225
384
|
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
if (!(type & LOADING_BIT))
|
|
237
|
-
return false;
|
|
238
|
-
if (flags & LOADING_BIT) {
|
|
239
|
-
this.t.add(node);
|
|
385
|
+
el.b = 0 /* None */;
|
|
386
|
+
context = oldcontext;
|
|
387
|
+
const depsTail = el.H;
|
|
388
|
+
let toRemove = depsTail !== null ? depsTail.E : el.u;
|
|
389
|
+
if (toRemove !== null) {
|
|
390
|
+
do {
|
|
391
|
+
toRemove = unlinkSubs(toRemove);
|
|
392
|
+
} while (toRemove !== null);
|
|
393
|
+
if (depsTail !== null) {
|
|
394
|
+
depsTail.E = null;
|
|
240
395
|
} else {
|
|
241
|
-
|
|
396
|
+
el.u = null;
|
|
242
397
|
}
|
|
243
|
-
return true;
|
|
244
398
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
else
|
|
257
|
-
this.addChild(queue.i[i]);
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
schedule() {
|
|
261
|
-
if (this.Y)
|
|
262
|
-
return;
|
|
263
|
-
this.Y = true;
|
|
264
|
-
if (!this.C)
|
|
265
|
-
queueMicrotask(() => this.flush());
|
|
266
|
-
}
|
|
267
|
-
runTransition(fn, force = false) {
|
|
268
|
-
if (this.D) {
|
|
269
|
-
if (this.D instanceof _Transition)
|
|
270
|
-
return this.D.runTransition(fn, force);
|
|
271
|
-
if (!force)
|
|
272
|
-
throw new Error("Transition already completed");
|
|
273
|
-
fn();
|
|
274
|
-
return;
|
|
275
|
-
}
|
|
276
|
-
ActiveTransition = this;
|
|
277
|
-
try {
|
|
278
|
-
let result = fn();
|
|
279
|
-
let transition2 = ActiveTransition;
|
|
280
|
-
if (result == null ? void 0 : result.next) {
|
|
281
|
-
(async function() {
|
|
282
|
-
let temp, value;
|
|
283
|
-
while (!(temp = result.next(value)).done) {
|
|
284
|
-
transition2 = ActiveTransition;
|
|
285
|
-
if (temp.value instanceof Promise) {
|
|
286
|
-
transition2.K.add(temp.value);
|
|
287
|
-
try {
|
|
288
|
-
value = await temp.value;
|
|
289
|
-
} finally {
|
|
290
|
-
transition2 = latestTransition(transition2);
|
|
291
|
-
transition2.K.delete(temp.value);
|
|
292
|
-
}
|
|
293
|
-
ActiveTransition = transition2;
|
|
294
|
-
} else
|
|
295
|
-
value = temp.value;
|
|
296
|
-
}
|
|
297
|
-
ActiveTransition = null;
|
|
298
|
-
finishTransition(transition2);
|
|
299
|
-
})();
|
|
300
|
-
}
|
|
301
|
-
if (result instanceof Promise) {
|
|
302
|
-
transition2.K.add(result);
|
|
303
|
-
result.finally(() => {
|
|
304
|
-
transition2 = latestTransition(transition2);
|
|
305
|
-
transition2.K.delete(result);
|
|
306
|
-
ActiveTransition = null;
|
|
307
|
-
finishTransition(transition2);
|
|
308
|
-
});
|
|
399
|
+
const valueChanged = !el.da || !el.da(el.d === NOT_PENDING ? el.g : el.d, value);
|
|
400
|
+
const statusFlagsChanged = el.f !== prevStatusFlags || el.B !== prevError;
|
|
401
|
+
(_a = el.la) == null ? void 0 : _a.call(el, statusFlagsChanged, prevStatusFlags);
|
|
402
|
+
if (valueChanged || statusFlagsChanged) {
|
|
403
|
+
if (valueChanged) {
|
|
404
|
+
if (create || el.ia || el.I)
|
|
405
|
+
el.g = value;
|
|
406
|
+
else {
|
|
407
|
+
if (el.d === NOT_PENDING)
|
|
408
|
+
globalQueue.h.push(el);
|
|
409
|
+
el.d = value;
|
|
309
410
|
}
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
ActiveTransition = null;
|
|
313
|
-
finishTransition(transition2);
|
|
411
|
+
if (el.C)
|
|
412
|
+
el.C.ca(value);
|
|
314
413
|
}
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
return;
|
|
414
|
+
for (let s = el.p; s !== null; s = s.y) {
|
|
415
|
+
const queue = s.m.b & 32 /* Zombie */ ? zombieQueue : dirtyQueue;
|
|
416
|
+
if (s.m.e < el.e && queue.t > s.m.e)
|
|
417
|
+
queue.t = s.m.e;
|
|
418
|
+
insertIntoHeap(s.m, queue);
|
|
321
419
|
}
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
};
|
|
326
|
-
function cloneGraph(node) {
|
|
327
|
-
var _a, _b;
|
|
328
|
-
if (node.j) {
|
|
329
|
-
if (node.a !== STATE_DISPOSED) {
|
|
330
|
-
(_b = (_a = node.j).ia) == null ? void 0 : _b.call(_a);
|
|
331
|
-
ActiveTransition.addOptimistic(node.j);
|
|
420
|
+
} else if (el.e != oldHeight) {
|
|
421
|
+
for (let s = el.p; s !== null; s = s.y) {
|
|
422
|
+
insertIntoHeapHeight(s.m, s.m.b & 32 /* Zombie */ ? zombieQueue : dirtyQueue);
|
|
332
423
|
}
|
|
333
|
-
return node;
|
|
334
424
|
}
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
c: null,
|
|
347
|
-
b: node.b ? [...node.b] : null,
|
|
348
|
-
d: node
|
|
349
|
-
});
|
|
350
|
-
delete clone.T;
|
|
351
|
-
ActiveTransition.b.set(node, clone);
|
|
352
|
-
node.f = ActiveTransition;
|
|
353
|
-
if (node.b) {
|
|
354
|
-
for (let i = 0; i < node.b.length; i++)
|
|
355
|
-
node.b[i].c.push(clone);
|
|
356
|
-
}
|
|
357
|
-
if (node.c) {
|
|
358
|
-
clone.c = [];
|
|
359
|
-
for (let i = 0, length = node.c.length; i < length; i++) {
|
|
360
|
-
!node.c[i].d && clone.c.push(cloneGraph(node.c[i]));
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
return clone;
|
|
364
|
-
}
|
|
365
|
-
function latestTransition(t) {
|
|
366
|
-
while (t.D instanceof Transition)
|
|
367
|
-
t = t.D;
|
|
368
|
-
return t;
|
|
369
|
-
}
|
|
370
|
-
function replaceSourceObservers(node, transition2) {
|
|
371
|
-
let source;
|
|
372
|
-
let transitionSource;
|
|
373
|
-
let swap;
|
|
374
|
-
for (let i = 0; i < node.b.length; i++) {
|
|
375
|
-
transitionSource = transition2.b.get(node.b[i]);
|
|
376
|
-
source = transitionSource || node.b[i];
|
|
377
|
-
if (source.c && (swap = source.c.indexOf(node)) !== -1) {
|
|
378
|
-
source.c[swap] = transitionSource ? node.d : source.c[source.c.length - 1];
|
|
379
|
-
!transitionSource && source.c.pop();
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
function cloneQueue(queue, parent, transition2) {
|
|
384
|
-
const clone = Object.create(Object.getPrototypeOf(queue));
|
|
385
|
-
Object.assign(clone, queue, {
|
|
386
|
-
d: queue,
|
|
387
|
-
l: parent,
|
|
388
|
-
i: [],
|
|
389
|
-
enqueue(type, fn) {
|
|
390
|
-
transition2 = latestTransition(transition2);
|
|
391
|
-
transition2.enqueue(type, fn);
|
|
392
|
-
},
|
|
393
|
-
notify(node, type, flags) {
|
|
394
|
-
node = node.d || node;
|
|
395
|
-
if (!clone.L || type & LOADING_BIT) {
|
|
396
|
-
type &= ~LOADING_BIT;
|
|
397
|
-
transition2 = latestTransition(transition2);
|
|
398
|
-
transition2.notify(node, LOADING_BIT, flags);
|
|
399
|
-
if (!type)
|
|
400
|
-
return true;
|
|
425
|
+
}
|
|
426
|
+
function updateIfNecessary(el) {
|
|
427
|
+
if (el.b & 1 /* Check */) {
|
|
428
|
+
for (let d = el.u; d; d = d.E) {
|
|
429
|
+
const dep1 = d.P;
|
|
430
|
+
const dep = "_owner" in dep1 ? dep1.z : dep1;
|
|
431
|
+
if ("_fn" in dep) {
|
|
432
|
+
updateIfNecessary(dep);
|
|
433
|
+
}
|
|
434
|
+
if (el.b & 2 /* Dirty */) {
|
|
435
|
+
break;
|
|
401
436
|
}
|
|
402
|
-
return queue.notify.call(this, node, type, flags);
|
|
403
437
|
}
|
|
404
|
-
});
|
|
405
|
-
parent.i.push(clone);
|
|
406
|
-
transition2.J.set(queue, clone);
|
|
407
|
-
for (const child of queue.i) {
|
|
408
|
-
cloneQueue(child, clone, transition2);
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
function resolveQueues(children) {
|
|
412
|
-
for (const child of children) {
|
|
413
|
-
const og = child.d;
|
|
414
|
-
if (og) {
|
|
415
|
-
const clonedChildren = child.i;
|
|
416
|
-
delete child.enqueue;
|
|
417
|
-
delete child.notify;
|
|
418
|
-
delete child.l;
|
|
419
|
-
delete child.i;
|
|
420
|
-
Object.assign(og, child);
|
|
421
|
-
delete og.d;
|
|
422
|
-
resolveQueues(clonedChildren);
|
|
423
|
-
} else if (child.l.d) {
|
|
424
|
-
child.l.d.addChild(child);
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
function mergeTransitions(t1, t2) {
|
|
429
|
-
t2.b.forEach((value, key) => {
|
|
430
|
-
key.f = t1;
|
|
431
|
-
t1.b.set(key, value);
|
|
432
|
-
});
|
|
433
|
-
t2.j.forEach((c) => {
|
|
434
|
-
c.f = t1;
|
|
435
|
-
t1.j.add(c);
|
|
436
|
-
});
|
|
437
|
-
t2.K.forEach((p) => t1.K.add(p));
|
|
438
|
-
t2.t.forEach((n) => t1.t.add(n));
|
|
439
|
-
t1.merge(t2);
|
|
440
|
-
t2.D = t1;
|
|
441
|
-
}
|
|
442
|
-
function getTransitionSource(input) {
|
|
443
|
-
return ActiveTransition && ActiveTransition.b.get(input) || input;
|
|
444
|
-
}
|
|
445
|
-
function getQueue(node) {
|
|
446
|
-
var _a;
|
|
447
|
-
const transition2 = ActiveTransition || ((_a = node.d) == null ? void 0 : _a.f);
|
|
448
|
-
return transition2 && transition2.J.get(node.E) || node.E;
|
|
449
|
-
}
|
|
450
|
-
function initialDispose(node) {
|
|
451
|
-
let current = node.n;
|
|
452
|
-
while (current !== null && current.l === node) {
|
|
453
|
-
initialDispose(current);
|
|
454
|
-
const clone = ActiveTransition.b.get(current);
|
|
455
|
-
if (clone && !clone.Z)
|
|
456
|
-
clone.dispose(true);
|
|
457
|
-
current = current.n;
|
|
458
438
|
}
|
|
439
|
+
if (el.b & 2 /* Dirty */) {
|
|
440
|
+
recompute(el);
|
|
441
|
+
}
|
|
442
|
+
el.b = 0 /* None */;
|
|
459
443
|
}
|
|
460
|
-
function
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
continue;
|
|
470
|
-
}
|
|
471
|
-
if (clone.b)
|
|
472
|
-
replaceSourceObservers(clone, transition2);
|
|
473
|
-
if (clone.Z || clone.a === STATE_DISPOSED) {
|
|
474
|
-
source.dispose(clone.a === STATE_DISPOSED);
|
|
475
|
-
source.emptyDisposal();
|
|
476
|
-
delete clone.Z;
|
|
477
|
-
} else {
|
|
478
|
-
delete clone.n;
|
|
479
|
-
delete clone.o;
|
|
480
|
-
}
|
|
481
|
-
Object.assign(source, clone);
|
|
482
|
-
delete source.d;
|
|
483
|
-
let current = clone.n;
|
|
484
|
-
if ((current == null ? void 0 : current.z) === clone)
|
|
485
|
-
current.z = source;
|
|
486
|
-
while ((current == null ? void 0 : current.l) === clone) {
|
|
487
|
-
current.l = source;
|
|
488
|
-
current = current.n;
|
|
489
|
-
}
|
|
490
|
-
delete source.f;
|
|
444
|
+
function unlinkSubs(link2) {
|
|
445
|
+
const dep = link2.P;
|
|
446
|
+
const nextDep = link2.E;
|
|
447
|
+
const nextSub = link2.y;
|
|
448
|
+
const prevSub = link2.ma;
|
|
449
|
+
if (nextSub !== null) {
|
|
450
|
+
nextSub.ma = prevSub;
|
|
451
|
+
} else {
|
|
452
|
+
dep.W = prevSub;
|
|
491
453
|
}
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
454
|
+
if (prevSub !== null) {
|
|
455
|
+
prevSub.y = nextSub;
|
|
456
|
+
} else {
|
|
457
|
+
dep.p = nextSub;
|
|
496
458
|
}
|
|
497
|
-
|
|
498
|
-
globalQueue.flush();
|
|
459
|
+
return nextDep;
|
|
499
460
|
}
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
}
|
|
512
|
-
var Owner = class {
|
|
513
|
-
// We flatten the owner tree into a linked list so that we don't need a pointer to .firstChild
|
|
514
|
-
// However, the children are actually added in reverse creation order
|
|
515
|
-
// See comment at the top of the file for an example of the _nextSibling traversal
|
|
516
|
-
l = null;
|
|
517
|
-
n = null;
|
|
518
|
-
z = null;
|
|
519
|
-
a = STATE_CLEAN;
|
|
520
|
-
o = null;
|
|
521
|
-
A = defaultContext;
|
|
522
|
-
E = globalQueue;
|
|
523
|
-
ga = 0;
|
|
524
|
-
id = null;
|
|
525
|
-
constructor(id = null, skipAppend = false) {
|
|
526
|
-
this.id = id;
|
|
527
|
-
if (currentOwner) {
|
|
528
|
-
!skipAppend && currentOwner.append(this);
|
|
529
|
-
}
|
|
530
|
-
}
|
|
531
|
-
append(child) {
|
|
532
|
-
child.l = this;
|
|
533
|
-
child.z = this;
|
|
534
|
-
if (this.n)
|
|
535
|
-
this.n.z = child;
|
|
536
|
-
child.n = this.n;
|
|
537
|
-
this.n = child;
|
|
538
|
-
if (this.id != null && child.id == null)
|
|
539
|
-
child.id = this.getNextChildId();
|
|
540
|
-
if (child.A !== this.A) {
|
|
541
|
-
child.A = { ...this.A, ...child.A };
|
|
542
|
-
}
|
|
543
|
-
if (this.E)
|
|
544
|
-
child.E = this.E;
|
|
545
|
-
}
|
|
546
|
-
dispose(self = true) {
|
|
547
|
-
if (this.a === STATE_DISPOSED)
|
|
548
|
-
return;
|
|
549
|
-
let head = self ? this.z || this.l : this, current = this.n, next = null;
|
|
550
|
-
while (current && current.l === this) {
|
|
551
|
-
current.dispose(true);
|
|
552
|
-
next = current.n;
|
|
553
|
-
current.n = null;
|
|
554
|
-
current = next;
|
|
555
|
-
}
|
|
556
|
-
this.ga = 0;
|
|
557
|
-
if (self)
|
|
558
|
-
this.M();
|
|
559
|
-
if (current)
|
|
560
|
-
current.z = !self ? this : this.z;
|
|
561
|
-
if (head)
|
|
562
|
-
head.n = current;
|
|
563
|
-
}
|
|
564
|
-
M() {
|
|
565
|
-
if (this.z)
|
|
566
|
-
this.z.n = null;
|
|
567
|
-
this.l = null;
|
|
568
|
-
this.z = null;
|
|
569
|
-
this.A = defaultContext;
|
|
570
|
-
this.a = STATE_DISPOSED;
|
|
571
|
-
this.emptyDisposal();
|
|
572
|
-
}
|
|
573
|
-
emptyDisposal() {
|
|
574
|
-
if (!this.o)
|
|
461
|
+
function link(dep, sub) {
|
|
462
|
+
const prevDep = sub.H;
|
|
463
|
+
if (prevDep !== null && prevDep.P === dep) {
|
|
464
|
+
return;
|
|
465
|
+
}
|
|
466
|
+
let nextDep = null;
|
|
467
|
+
const isRecomputing = sub.b & 4 /* RecomputingDeps */;
|
|
468
|
+
if (isRecomputing) {
|
|
469
|
+
nextDep = prevDep !== null ? prevDep.E : sub.u;
|
|
470
|
+
if (nextDep !== null && nextDep.P === dep) {
|
|
471
|
+
sub.H = nextDep;
|
|
575
472
|
return;
|
|
576
|
-
if (Array.isArray(this.o)) {
|
|
577
|
-
for (let i = 0; i < this.o.length; i++) {
|
|
578
|
-
const callable = this.o[i];
|
|
579
|
-
callable.call(callable);
|
|
580
|
-
}
|
|
581
|
-
} else {
|
|
582
|
-
this.o.call(this.o);
|
|
583
473
|
}
|
|
584
|
-
this.o = null;
|
|
585
474
|
}
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
throw new Error("Cannot get child id from owner without an id");
|
|
475
|
+
const prevSub = dep.W;
|
|
476
|
+
if (prevSub !== null && prevSub.m === sub && (!isRecomputing || isValidLink(prevSub, sub))) {
|
|
477
|
+
return;
|
|
590
478
|
}
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
479
|
+
const newLink = sub.H = dep.W = {
|
|
480
|
+
P: dep,
|
|
481
|
+
m: sub,
|
|
482
|
+
E: nextDep,
|
|
483
|
+
ma: prevSub,
|
|
484
|
+
y: null
|
|
485
|
+
};
|
|
486
|
+
if (prevDep !== null) {
|
|
487
|
+
prevDep.E = newLink;
|
|
488
|
+
} else {
|
|
489
|
+
sub.u = newLink;
|
|
598
490
|
}
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
491
|
+
if (prevSub !== null) {
|
|
492
|
+
prevSub.y = newLink;
|
|
493
|
+
} else {
|
|
494
|
+
dep.p = newLink;
|
|
602
495
|
}
|
|
603
|
-
return value;
|
|
604
496
|
}
|
|
605
|
-
function
|
|
606
|
-
|
|
607
|
-
|
|
497
|
+
function isValidLink(checkLink, sub) {
|
|
498
|
+
const depsTail = sub.H;
|
|
499
|
+
if (depsTail !== null) {
|
|
500
|
+
let link2 = sub.u;
|
|
501
|
+
do {
|
|
502
|
+
if (link2 === checkLink) {
|
|
503
|
+
return true;
|
|
504
|
+
}
|
|
505
|
+
if (link2 === depsTail) {
|
|
506
|
+
break;
|
|
507
|
+
}
|
|
508
|
+
link2 = link2.E;
|
|
509
|
+
} while (link2 !== null);
|
|
608
510
|
}
|
|
609
|
-
|
|
610
|
-
...owner.A,
|
|
611
|
-
[context.id]: isUndefined(value) ? context.defaultValue : value
|
|
612
|
-
};
|
|
511
|
+
return false;
|
|
613
512
|
}
|
|
614
|
-
function
|
|
615
|
-
|
|
513
|
+
function setStatusFlags(signal2, flags, error = null) {
|
|
514
|
+
signal2.f = flags;
|
|
515
|
+
signal2.B = error;
|
|
616
516
|
}
|
|
617
|
-
function
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
517
|
+
function setError(signal2, error) {
|
|
518
|
+
setStatusFlags(signal2, 2 /* Error */ | 4 /* Uninitialized */, error);
|
|
519
|
+
}
|
|
520
|
+
function clearStatusFlags(signal2) {
|
|
521
|
+
setStatusFlags(signal2, 0 /* None */);
|
|
522
|
+
}
|
|
523
|
+
function markDisposal(el) {
|
|
524
|
+
let child = el.n;
|
|
525
|
+
while (child) {
|
|
526
|
+
child.b |= 32 /* Zombie */;
|
|
527
|
+
const inHeap = child.b & 8 /* InHeap */;
|
|
528
|
+
if (inHeap) {
|
|
529
|
+
deleteFromHeap(child, dirtyQueue);
|
|
530
|
+
insertIntoHeap(child, zombieQueue);
|
|
531
|
+
}
|
|
532
|
+
markDisposal(child);
|
|
533
|
+
child = child.K;
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
function disposeChildren(node, self = false, zombie) {
|
|
537
|
+
if (node.b & 64 /* Disposed */)
|
|
538
|
+
return;
|
|
539
|
+
if (self)
|
|
540
|
+
node.b = 64 /* Disposed */;
|
|
541
|
+
let child = zombie ? node.T : node.n;
|
|
542
|
+
while (child) {
|
|
543
|
+
const nextChild = child.K;
|
|
544
|
+
if (child.u) {
|
|
545
|
+
const n = child;
|
|
546
|
+
deleteFromHeap(n, n.b & 32 /* Zombie */ ? zombieQueue : dirtyQueue);
|
|
547
|
+
let toRemove = n.u;
|
|
548
|
+
do {
|
|
549
|
+
toRemove = unlinkSubs(toRemove);
|
|
550
|
+
} while (toRemove !== null);
|
|
551
|
+
n.u = null;
|
|
552
|
+
n.H = null;
|
|
553
|
+
}
|
|
554
|
+
disposeChildren(child, true);
|
|
555
|
+
child = nextChild;
|
|
556
|
+
}
|
|
557
|
+
if (zombie) {
|
|
558
|
+
node.T = null;
|
|
625
559
|
} else {
|
|
626
|
-
node.
|
|
560
|
+
node.n = null;
|
|
561
|
+
node.K = null;
|
|
627
562
|
}
|
|
628
|
-
|
|
563
|
+
runDisposal(node, zombie);
|
|
564
|
+
}
|
|
565
|
+
function runDisposal(node, zombie) {
|
|
566
|
+
let disposal = zombie ? node.U : node.q;
|
|
567
|
+
if (!disposal)
|
|
568
|
+
return;
|
|
569
|
+
if (Array.isArray(disposal)) {
|
|
570
|
+
for (let i = 0; i < disposal.length; i++) {
|
|
571
|
+
const callable = disposal[i];
|
|
572
|
+
callable.call(callable);
|
|
573
|
+
}
|
|
574
|
+
} else {
|
|
575
|
+
disposal.call(disposal);
|
|
576
|
+
}
|
|
577
|
+
zombie ? node.U = null : node.q = null;
|
|
578
|
+
}
|
|
579
|
+
function withOptions(obj, options) {
|
|
580
|
+
obj.id = (options == null ? void 0 : options.id) ?? ((context == null ? void 0 : context.id) != null ? getNextChildId(context) : void 0);
|
|
581
|
+
obj.da = (options == null ? void 0 : options.equals) != null ? options.equals : isEqual;
|
|
582
|
+
obj.xa = !!(options == null ? void 0 : options.pureWrite);
|
|
583
|
+
obj.ra = options == null ? void 0 : options.unobserved;
|
|
584
|
+
if (options == null ? void 0 : options.ja)
|
|
585
|
+
Object.assign(obj, options.ja);
|
|
586
|
+
return obj;
|
|
587
|
+
}
|
|
588
|
+
function getNextChildId(owner) {
|
|
589
|
+
if (owner.id != null)
|
|
590
|
+
return formatId(owner.id, owner.na++);
|
|
591
|
+
throw new Error("Cannot get child id from owner without an id");
|
|
629
592
|
}
|
|
630
593
|
function formatId(prefix, id) {
|
|
631
594
|
const num = id.toString(36), len = num.length - 1;
|
|
632
595
|
return prefix + (len ? String.fromCharCode(64 + len) : "") + num;
|
|
633
596
|
}
|
|
634
|
-
function
|
|
635
|
-
|
|
597
|
+
function computed(fn, initialValue, options) {
|
|
598
|
+
const self = withOptions(
|
|
599
|
+
{
|
|
600
|
+
q: null,
|
|
601
|
+
i: globalQueue,
|
|
602
|
+
D: defaultContext,
|
|
603
|
+
na: 0,
|
|
604
|
+
ha: fn,
|
|
605
|
+
g: initialValue,
|
|
606
|
+
e: 0,
|
|
607
|
+
aa: null,
|
|
608
|
+
O: void 0,
|
|
609
|
+
x: null,
|
|
610
|
+
u: null,
|
|
611
|
+
H: null,
|
|
612
|
+
p: null,
|
|
613
|
+
W: null,
|
|
614
|
+
s: context,
|
|
615
|
+
K: null,
|
|
616
|
+
n: null,
|
|
617
|
+
b: 0 /* None */,
|
|
618
|
+
f: 4 /* Uninitialized */,
|
|
619
|
+
V: clock,
|
|
620
|
+
d: NOT_PENDING,
|
|
621
|
+
U: null,
|
|
622
|
+
T: null
|
|
623
|
+
},
|
|
624
|
+
options
|
|
625
|
+
);
|
|
626
|
+
self.x = self;
|
|
627
|
+
const parent = (context == null ? void 0 : context.Z) ? context._ : context;
|
|
628
|
+
if (context) {
|
|
629
|
+
context.i && (self.i = context.i);
|
|
630
|
+
context.D && (self.D = context.D);
|
|
631
|
+
const lastChild = context.n;
|
|
632
|
+
if (lastChild === null) {
|
|
633
|
+
context.n = self;
|
|
634
|
+
} else {
|
|
635
|
+
self.K = lastChild;
|
|
636
|
+
context.n = self;
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
if (parent)
|
|
640
|
+
self.e = parent.e + 1;
|
|
641
|
+
recompute(self, true);
|
|
642
|
+
return self;
|
|
636
643
|
}
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
ja = false;
|
|
664
|
-
/** Whether the computation is an error or has ancestors that are unresolved */
|
|
665
|
-
g = 0;
|
|
666
|
-
/** Which flags raised by sources are handled, vs. being passed through. */
|
|
667
|
-
ca = DEFAULT_FLAGS;
|
|
668
|
-
Q = -1;
|
|
669
|
-
H = false;
|
|
670
|
-
f;
|
|
671
|
-
d;
|
|
672
|
-
j;
|
|
673
|
-
constructor(initialValue, compute2, options) {
|
|
674
|
-
super(options == null ? void 0 : options.id, compute2 === null);
|
|
675
|
-
this.P = compute2;
|
|
676
|
-
this.a = compute2 ? STATE_DIRTY : STATE_CLEAN;
|
|
677
|
-
this.g = compute2 && initialValue === void 0 ? UNINITIALIZED_BIT : 0;
|
|
678
|
-
this.m = initialValue;
|
|
679
|
-
if ((options == null ? void 0 : options.equals) !== void 0)
|
|
680
|
-
this.ba = options.equals;
|
|
681
|
-
this.ja = !!(options == null ? void 0 : options.pureWrite);
|
|
682
|
-
this.fa = options == null ? void 0 : options.unobserved;
|
|
683
|
-
if (ActiveTransition) {
|
|
684
|
-
this.f = ActiveTransition;
|
|
685
|
-
ActiveTransition.b.set(this, this);
|
|
686
|
-
}
|
|
687
|
-
}
|
|
688
|
-
ha() {
|
|
689
|
-
track(this);
|
|
690
|
-
newFlags |= this.g & ~currentMask;
|
|
691
|
-
if (this.g & ERROR_BIT) {
|
|
692
|
-
throw this.O;
|
|
644
|
+
function asyncComputed(asyncFn, initialValue, options) {
|
|
645
|
+
let lastResult = void 0;
|
|
646
|
+
let refreshing = false;
|
|
647
|
+
const fn = (prev) => {
|
|
648
|
+
const result = asyncFn(prev, refreshing);
|
|
649
|
+
refreshing = false;
|
|
650
|
+
lastResult = result;
|
|
651
|
+
const isPromise = result instanceof Promise;
|
|
652
|
+
const iterator = result[Symbol.asyncIterator];
|
|
653
|
+
if (!isPromise && !iterator) {
|
|
654
|
+
return result;
|
|
655
|
+
}
|
|
656
|
+
if (isPromise) {
|
|
657
|
+
result.then((v) => {
|
|
658
|
+
if (lastResult !== result)
|
|
659
|
+
return;
|
|
660
|
+
globalQueue.initTransition(self);
|
|
661
|
+
setSignal(self, () => v);
|
|
662
|
+
flush();
|
|
663
|
+
}).catch((e) => {
|
|
664
|
+
if (lastResult !== result)
|
|
665
|
+
return;
|
|
666
|
+
globalQueue.initTransition(self);
|
|
667
|
+
setError(self, e);
|
|
668
|
+
flush();
|
|
669
|
+
});
|
|
693
670
|
} else {
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
update(this);
|
|
710
|
-
else
|
|
711
|
-
this.F();
|
|
712
|
-
}
|
|
713
|
-
return this.ha();
|
|
714
|
-
}
|
|
715
|
-
/**
|
|
716
|
-
* Return the current value of this computation
|
|
717
|
-
* Automatically re-executes the surrounding computation when the value changes
|
|
718
|
-
*
|
|
719
|
-
* If the computation has any unresolved ancestors, this function waits for the value to resolve
|
|
720
|
-
* before continuing
|
|
721
|
-
*/
|
|
722
|
-
wait() {
|
|
723
|
-
var _a;
|
|
724
|
-
if (ActiveTransition && (ActiveTransition.b.has(this) || !this.d && this.g & (UNINITIALIZED_BIT | ERROR_BIT))) {
|
|
725
|
-
const clone = ActiveTransition.b.get(this) || cloneGraph(this);
|
|
726
|
-
if (clone !== this)
|
|
727
|
-
return clone.wait();
|
|
728
|
-
}
|
|
729
|
-
if (this.P) {
|
|
730
|
-
if (this.g & ERROR_BIT && this.Q <= clock)
|
|
731
|
-
update(this);
|
|
732
|
-
else
|
|
733
|
-
this.F();
|
|
734
|
-
}
|
|
735
|
-
if ((notStale || this.g & UNINITIALIZED_BIT) && this.g & LOADING_BIT) {
|
|
736
|
-
throw new NotReadyError(this);
|
|
737
|
-
}
|
|
738
|
-
if (staleCheck && (this.g & LOADING_BIT || this.f)) {
|
|
739
|
-
staleCheck.m = true;
|
|
740
|
-
(_a = this.f) == null ? void 0 : _a.aa.read();
|
|
741
|
-
}
|
|
742
|
-
return this.ha();
|
|
743
|
-
}
|
|
744
|
-
/** Update the computation with a new value. */
|
|
745
|
-
write(value, flags = 0, raw = false) {
|
|
746
|
-
if (ActiveTransition && !this.d) {
|
|
747
|
-
const clone = cloneGraph(this);
|
|
748
|
-
if (clone !== this)
|
|
749
|
-
return clone.write(value, flags, raw);
|
|
750
|
-
}
|
|
751
|
-
const newValue = !raw && typeof value === "function" ? value(this.m) : value;
|
|
752
|
-
const valueChanged = newValue !== UNCHANGED && (!!(this.g & UNINITIALIZED_BIT) || // this._stateFlags & LOADING_BIT & ~flags ||
|
|
753
|
-
this.ba === false || !this.ba(this.m, newValue));
|
|
754
|
-
if (valueChanged) {
|
|
755
|
-
this.m = newValue;
|
|
756
|
-
this.O = void 0;
|
|
757
|
-
}
|
|
758
|
-
const changedFlagsMask = this.g ^ flags, changedFlags = changedFlagsMask & flags;
|
|
759
|
-
this.g = flags;
|
|
760
|
-
this.Q = clock + 1;
|
|
761
|
-
if (this.c && !(this.j && ActiveTransition)) {
|
|
762
|
-
for (let i = 0; i < this.c.length; i++) {
|
|
763
|
-
if (valueChanged) {
|
|
764
|
-
this.c[i].u(STATE_DIRTY);
|
|
765
|
-
} else if (changedFlagsMask) {
|
|
766
|
-
this.c[i]._(changedFlagsMask, changedFlags);
|
|
671
|
+
(async () => {
|
|
672
|
+
try {
|
|
673
|
+
for await (let value of result) {
|
|
674
|
+
if (lastResult !== result)
|
|
675
|
+
return;
|
|
676
|
+
globalQueue.initTransition(self);
|
|
677
|
+
setSignal(self, () => value);
|
|
678
|
+
flush();
|
|
679
|
+
}
|
|
680
|
+
} catch (error) {
|
|
681
|
+
if (lastResult !== result)
|
|
682
|
+
return;
|
|
683
|
+
globalQueue.initTransition(self);
|
|
684
|
+
setError(self, error);
|
|
685
|
+
flush();
|
|
767
686
|
}
|
|
768
|
-
}
|
|
687
|
+
})();
|
|
769
688
|
}
|
|
770
|
-
|
|
689
|
+
globalQueue.initTransition(context);
|
|
690
|
+
throw new NotReadyError(context);
|
|
691
|
+
};
|
|
692
|
+
const self = computed(fn, initialValue, options);
|
|
693
|
+
self.sa = () => {
|
|
694
|
+
refreshing = true;
|
|
695
|
+
recompute(self);
|
|
696
|
+
flush();
|
|
697
|
+
};
|
|
698
|
+
return self;
|
|
699
|
+
}
|
|
700
|
+
function signal(v, options, firewall = null) {
|
|
701
|
+
if (firewall !== null) {
|
|
702
|
+
return firewall.aa = withOptions(
|
|
703
|
+
{
|
|
704
|
+
g: v,
|
|
705
|
+
p: null,
|
|
706
|
+
W: null,
|
|
707
|
+
z: firewall,
|
|
708
|
+
qa: firewall.aa,
|
|
709
|
+
f: 0 /* None */,
|
|
710
|
+
V: clock,
|
|
711
|
+
d: NOT_PENDING
|
|
712
|
+
},
|
|
713
|
+
options
|
|
714
|
+
);
|
|
715
|
+
} else {
|
|
716
|
+
return withOptions(
|
|
717
|
+
{
|
|
718
|
+
g: v,
|
|
719
|
+
p: null,
|
|
720
|
+
W: null,
|
|
721
|
+
f: 0 /* None */,
|
|
722
|
+
V: clock,
|
|
723
|
+
d: NOT_PENDING
|
|
724
|
+
},
|
|
725
|
+
options
|
|
726
|
+
);
|
|
771
727
|
}
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
728
|
+
}
|
|
729
|
+
function isEqual(a, b) {
|
|
730
|
+
return a === b;
|
|
731
|
+
}
|
|
732
|
+
function untrack(fn) {
|
|
733
|
+
if (!tracking)
|
|
734
|
+
return fn();
|
|
735
|
+
tracking = false;
|
|
736
|
+
try {
|
|
737
|
+
return fn();
|
|
738
|
+
} finally {
|
|
739
|
+
tracking = true;
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
function read(el) {
|
|
743
|
+
let c = context;
|
|
744
|
+
if (c == null ? void 0 : c.Z)
|
|
745
|
+
c = c._;
|
|
746
|
+
if (c && tracking) {
|
|
747
|
+
link(el, c);
|
|
748
|
+
const owner = "_owner" in el ? el.z : el;
|
|
749
|
+
if ("_fn" in owner) {
|
|
750
|
+
const isZombie = el.b & 32 /* Zombie */;
|
|
751
|
+
if (owner.e >= (isZombie ? zombieQueue.t : dirtyQueue.t)) {
|
|
752
|
+
markNode(c);
|
|
753
|
+
markHeap(isZombie ? zombieQueue : dirtyQueue);
|
|
754
|
+
updateIfNecessary(owner);
|
|
783
755
|
}
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
* Notify the computation that one of its sources has changed flags.
|
|
788
|
-
*
|
|
789
|
-
* @param mask A bitmask for which flag(s) were changed.
|
|
790
|
-
* @param newFlags The source's new flags, masked to just the changed ones.
|
|
791
|
-
*/
|
|
792
|
-
_(mask, newFlags2) {
|
|
793
|
-
if (this.a >= STATE_DIRTY)
|
|
794
|
-
return;
|
|
795
|
-
if (mask & this.ca || this.j && ActiveTransition) {
|
|
796
|
-
this.u(STATE_DIRTY);
|
|
797
|
-
return;
|
|
798
|
-
}
|
|
799
|
-
if (this.a >= STATE_CHECK && !this.H)
|
|
800
|
-
return;
|
|
801
|
-
const prevFlags = this.g & mask;
|
|
802
|
-
const deltaFlags = prevFlags ^ newFlags2;
|
|
803
|
-
if (newFlags2 === prevFlags) ; else if (deltaFlags & prevFlags & mask) {
|
|
804
|
-
this.u(STATE_CHECK);
|
|
805
|
-
} else {
|
|
806
|
-
this.g ^= deltaFlags;
|
|
807
|
-
if (this.c) {
|
|
808
|
-
for (let i = 0; i < this.c.length; i++) {
|
|
809
|
-
this.c[i]._(mask, newFlags2);
|
|
810
|
-
}
|
|
756
|
+
const height = owner.e;
|
|
757
|
+
if (height >= c.e && el.s !== c) {
|
|
758
|
+
c.e = height + 1;
|
|
811
759
|
}
|
|
812
760
|
}
|
|
813
761
|
}
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
this.O = error;
|
|
821
|
-
this.write(UNCHANGED, this.g & ~LOADING_BIT | ERROR_BIT | UNINITIALIZED_BIT);
|
|
822
|
-
}
|
|
823
|
-
/**
|
|
824
|
-
* This is the core part of the reactivity system, which makes sure that the values are updated
|
|
825
|
-
* before they are read. We've also adapted it to return the loading state of the computation,
|
|
826
|
-
* so that we can propagate that to the computation's observers.
|
|
827
|
-
*
|
|
828
|
-
* This function will ensure that the value and states we read from the computation are up to date
|
|
829
|
-
*/
|
|
830
|
-
F() {
|
|
831
|
-
if (!this.P) {
|
|
832
|
-
return;
|
|
762
|
+
if (pendingCheck) {
|
|
763
|
+
const pendingResult = (el.f & 1 /* Pending */) !== 0 || !!el.S || false;
|
|
764
|
+
if (!el.G) {
|
|
765
|
+
el.G = signal(pendingResult);
|
|
766
|
+
el.G.ia = true;
|
|
767
|
+
el.G.ca = (v) => setSignal(el.G, v);
|
|
833
768
|
}
|
|
834
|
-
|
|
835
|
-
|
|
769
|
+
const prev = pendingCheck;
|
|
770
|
+
pendingCheck = null;
|
|
771
|
+
read(el.G);
|
|
772
|
+
pendingCheck = prev;
|
|
773
|
+
prev.g = pendingResult || prev.g;
|
|
774
|
+
}
|
|
775
|
+
if (pendingValueCheck) {
|
|
776
|
+
if (!el.C) {
|
|
777
|
+
el.C = signal(
|
|
778
|
+
el.d === NOT_PENDING ? el.g : el.d
|
|
779
|
+
);
|
|
780
|
+
el.C.ia = true;
|
|
781
|
+
el.C.ca = (v) => queueMicrotask(() => queueMicrotask(() => setSignal(el.C, v)));
|
|
836
782
|
}
|
|
837
|
-
|
|
838
|
-
|
|
783
|
+
pendingValueCheck = false;
|
|
784
|
+
try {
|
|
785
|
+
return read(el.C);
|
|
786
|
+
} finally {
|
|
787
|
+
pendingValueCheck = true;
|
|
839
788
|
}
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
789
|
+
}
|
|
790
|
+
if (el.f & 1 /* Pending */) {
|
|
791
|
+
if (c && !stale || el.f & 4 /* Uninitialized */)
|
|
792
|
+
throw el.B;
|
|
793
|
+
else if (c && stale && !pendingCheck) {
|
|
794
|
+
setStatusFlags(
|
|
795
|
+
c,
|
|
796
|
+
c.f | 1,
|
|
797
|
+
el.B
|
|
798
|
+
);
|
|
850
799
|
}
|
|
851
|
-
|
|
852
|
-
|
|
800
|
+
}
|
|
801
|
+
if (el.f & 2 /* Error */) {
|
|
802
|
+
if (el.V < clock) {
|
|
803
|
+
recompute(el, true);
|
|
804
|
+
return read(el);
|
|
853
805
|
} else {
|
|
854
|
-
|
|
855
|
-
this.a = STATE_CLEAN;
|
|
806
|
+
throw el.B;
|
|
856
807
|
}
|
|
857
808
|
}
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
removeSourceObservers(this, 0);
|
|
866
|
-
super.M();
|
|
809
|
+
return !c || el.d === NOT_PENDING || stale && !pendingCheck && el.S && activeTransition !== el.S ? el.g : el.d;
|
|
810
|
+
}
|
|
811
|
+
function setSignal(el, v) {
|
|
812
|
+
if (typeof v === "function") {
|
|
813
|
+
v = v(
|
|
814
|
+
el.d === NOT_PENDING ? el.g : el.d
|
|
815
|
+
);
|
|
867
816
|
}
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
newSources.push(computation);
|
|
879
|
-
}
|
|
880
|
-
if (updateCheck) {
|
|
881
|
-
updateCheck.m = computation.Q > currentObserver.Q;
|
|
882
|
-
}
|
|
883
|
-
}
|
|
884
|
-
}
|
|
885
|
-
function update(node) {
|
|
886
|
-
const prevSources = newSources, prevSourcesIndex = newSourcesIndex, prevFlags = newFlags;
|
|
887
|
-
newSources = null;
|
|
888
|
-
newSourcesIndex = 0;
|
|
889
|
-
newFlags = 0;
|
|
890
|
-
try {
|
|
891
|
-
if (ActiveTransition && node.d && !node.Z) {
|
|
892
|
-
initialDispose(node.d);
|
|
893
|
-
node.Z = true;
|
|
894
|
-
}
|
|
895
|
-
node.dispose(false);
|
|
896
|
-
node.emptyDisposal();
|
|
897
|
-
const result = compute(node, node.P, node);
|
|
898
|
-
node.write(result, newFlags, true);
|
|
899
|
-
} catch (error) {
|
|
900
|
-
if (error instanceof NotReadyError) {
|
|
901
|
-
if (error.cause !== node)
|
|
902
|
-
compute(
|
|
903
|
-
node,
|
|
904
|
-
() => track(error.cause),
|
|
905
|
-
node
|
|
906
|
-
);
|
|
907
|
-
node.write(UNCHANGED, newFlags | LOADING_BIT | node.g & UNINITIALIZED_BIT);
|
|
908
|
-
} else {
|
|
909
|
-
node.N(error);
|
|
817
|
+
const valueChanged = !el.da || !el.da(el.d === NOT_PENDING ? el.g : el.d, v);
|
|
818
|
+
if (!valueChanged && !el.f)
|
|
819
|
+
return v;
|
|
820
|
+
if (valueChanged) {
|
|
821
|
+
if (el.ia)
|
|
822
|
+
el.g = v;
|
|
823
|
+
else {
|
|
824
|
+
if (el.d === NOT_PENDING)
|
|
825
|
+
globalQueue.h.push(el);
|
|
826
|
+
el.d = v;
|
|
910
827
|
}
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
828
|
+
if (el.C)
|
|
829
|
+
el.C.ca(v);
|
|
830
|
+
}
|
|
831
|
+
clearStatusFlags(el);
|
|
832
|
+
el.V = clock;
|
|
833
|
+
for (let link2 = el.p; link2 !== null; link2 = link2.y) {
|
|
834
|
+
insertIntoHeap(link2.m, link2.m.b & 32 /* Zombie */ ? zombieQueue : dirtyQueue);
|
|
835
|
+
}
|
|
836
|
+
schedule();
|
|
837
|
+
return v;
|
|
838
|
+
}
|
|
839
|
+
function getObserver() {
|
|
840
|
+
return tracking ? context : null;
|
|
841
|
+
}
|
|
842
|
+
function getOwner() {
|
|
843
|
+
return context;
|
|
844
|
+
}
|
|
845
|
+
function onCleanup(fn) {
|
|
846
|
+
if (!context)
|
|
847
|
+
return fn;
|
|
848
|
+
const node = context;
|
|
849
|
+
if (!node.q) {
|
|
850
|
+
node.q = fn;
|
|
851
|
+
} else if (Array.isArray(node.q)) {
|
|
852
|
+
node.q.push(fn);
|
|
853
|
+
} else {
|
|
854
|
+
node.q = [node.q, fn];
|
|
855
|
+
}
|
|
856
|
+
return fn;
|
|
857
|
+
}
|
|
858
|
+
function createOwner(options) {
|
|
859
|
+
const parent = context;
|
|
860
|
+
const owner = {
|
|
861
|
+
Z: true,
|
|
862
|
+
_: (parent == null ? void 0 : parent.Z) ? parent._ : parent,
|
|
863
|
+
n: null,
|
|
864
|
+
K: null,
|
|
865
|
+
q: null,
|
|
866
|
+
id: (options == null ? void 0 : options.id) ?? ((parent == null ? void 0 : parent.id) != null ? getNextChildId(parent) : void 0),
|
|
867
|
+
i: (parent == null ? void 0 : parent.i) ?? globalQueue,
|
|
868
|
+
D: (parent == null ? void 0 : parent.D) || defaultContext,
|
|
869
|
+
na: 0,
|
|
870
|
+
U: null,
|
|
871
|
+
T: null,
|
|
872
|
+
s: parent,
|
|
873
|
+
dispose(self = true) {
|
|
874
|
+
disposeChildren(owner, self);
|
|
875
|
+
}
|
|
876
|
+
};
|
|
877
|
+
if (parent) {
|
|
878
|
+
const lastChild = parent.n;
|
|
879
|
+
if (lastChild === null) {
|
|
880
|
+
parent.n = owner;
|
|
881
|
+
} else {
|
|
882
|
+
owner.K = lastChild;
|
|
883
|
+
parent.n = owner;
|
|
934
884
|
}
|
|
935
|
-
newSources = prevSources;
|
|
936
|
-
newSourcesIndex = prevSourcesIndex;
|
|
937
|
-
newFlags = prevFlags;
|
|
938
|
-
node.Q = clock + 1;
|
|
939
|
-
node.a = STATE_CLEAN;
|
|
940
885
|
}
|
|
886
|
+
return owner;
|
|
941
887
|
}
|
|
942
|
-
function
|
|
943
|
-
|
|
888
|
+
function createRoot(init, options) {
|
|
889
|
+
const owner = createOwner(options);
|
|
890
|
+
return runWithOwner(owner, () => init(owner.dispose));
|
|
944
891
|
}
|
|
945
|
-
function
|
|
946
|
-
|
|
892
|
+
function runWithOwner(owner, fn) {
|
|
893
|
+
const oldContext = context;
|
|
894
|
+
context = owner;
|
|
895
|
+
try {
|
|
947
896
|
return fn();
|
|
948
|
-
|
|
897
|
+
} finally {
|
|
898
|
+
context = oldContext;
|
|
899
|
+
}
|
|
900
|
+
}
|
|
901
|
+
function staleValues(fn, set = true) {
|
|
902
|
+
const prevStale = stale;
|
|
903
|
+
stale = set;
|
|
904
|
+
try {
|
|
905
|
+
return fn();
|
|
906
|
+
} finally {
|
|
907
|
+
stale = prevStale;
|
|
908
|
+
}
|
|
949
909
|
}
|
|
950
|
-
function
|
|
951
|
-
const
|
|
952
|
-
|
|
910
|
+
function pending(fn) {
|
|
911
|
+
const prevLatest = pendingValueCheck;
|
|
912
|
+
pendingValueCheck = true;
|
|
953
913
|
try {
|
|
954
|
-
fn
|
|
955
|
-
return updateCheck.m;
|
|
914
|
+
return staleValues(fn, false);
|
|
956
915
|
} finally {
|
|
957
|
-
|
|
916
|
+
pendingValueCheck = prevLatest;
|
|
958
917
|
}
|
|
959
918
|
}
|
|
960
|
-
function
|
|
961
|
-
const current =
|
|
962
|
-
|
|
919
|
+
function isPending(fn, loadingValue) {
|
|
920
|
+
const current = pendingCheck;
|
|
921
|
+
pendingCheck = { g: false };
|
|
963
922
|
try {
|
|
964
|
-
|
|
965
|
-
return
|
|
923
|
+
staleValues(fn);
|
|
924
|
+
return pendingCheck.g;
|
|
966
925
|
} catch (err) {
|
|
967
926
|
if (!(err instanceof NotReadyError))
|
|
968
927
|
return false;
|
|
@@ -970,420 +929,167 @@ function pendingCheck(fn, loadingValue) {
|
|
|
970
929
|
return loadingValue;
|
|
971
930
|
throw err;
|
|
972
931
|
} finally {
|
|
973
|
-
|
|
932
|
+
pendingCheck = current;
|
|
974
933
|
}
|
|
975
934
|
}
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
c.j = () => c.write(false);
|
|
981
|
-
c.j.ia = () => globalQueue.enqueue(0, () => c.j.f && c.write(true));
|
|
982
|
-
c.ca |= LOADING_BIT;
|
|
983
|
-
const res = c.wait();
|
|
984
|
-
c.o = () => {
|
|
985
|
-
if (c.j.f) {
|
|
986
|
-
c.j.f.j.delete(c.j);
|
|
987
|
-
delete c.j.f;
|
|
988
|
-
}
|
|
989
|
-
};
|
|
990
|
-
return res;
|
|
935
|
+
|
|
936
|
+
// src/core/context.ts
|
|
937
|
+
function createContext(defaultValue, description) {
|
|
938
|
+
return { id: Symbol(description), defaultValue };
|
|
991
939
|
}
|
|
992
|
-
function
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
} catch (err) {
|
|
1000
|
-
if (argLength > 1 && err instanceof NotReadyError)
|
|
1001
|
-
return fallback;
|
|
1002
|
-
throw err;
|
|
1003
|
-
} finally {
|
|
1004
|
-
newFlags = prevFlags;
|
|
1005
|
-
notStale = prevNotStale;
|
|
940
|
+
function getContext(context2, owner = getOwner()) {
|
|
941
|
+
if (!owner) {
|
|
942
|
+
throw new NoOwnerError();
|
|
943
|
+
}
|
|
944
|
+
const value = hasContext(context2, owner) ? owner.D[context2.id] : context2.defaultValue;
|
|
945
|
+
if (isUndefined(value)) {
|
|
946
|
+
throw new ContextNotFoundError();
|
|
1006
947
|
}
|
|
948
|
+
return value;
|
|
1007
949
|
}
|
|
1008
|
-
function
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
currentMask = (observer == null ? void 0 : observer.ca) ?? DEFAULT_FLAGS;
|
|
1012
|
-
notStale = true;
|
|
1013
|
-
try {
|
|
1014
|
-
return fn.call(observer, observer ? observer.m : void 0);
|
|
1015
|
-
} finally {
|
|
1016
|
-
setOwner(prevOwner);
|
|
1017
|
-
currentObserver = prevObserver;
|
|
1018
|
-
currentMask = prevMask;
|
|
1019
|
-
notStale = prevNotStale;
|
|
950
|
+
function setContext(context2, value, owner = getOwner()) {
|
|
951
|
+
if (!owner) {
|
|
952
|
+
throw new NoOwnerError();
|
|
1020
953
|
}
|
|
954
|
+
owner.D = {
|
|
955
|
+
...owner.D,
|
|
956
|
+
[context2.id]: isUndefined(value) ? context2.defaultValue : value
|
|
957
|
+
};
|
|
958
|
+
}
|
|
959
|
+
function hasContext(context2, owner) {
|
|
960
|
+
return !isUndefined(owner == null ? void 0 : owner.D[context2.id]);
|
|
961
|
+
}
|
|
962
|
+
function isUndefined(value) {
|
|
963
|
+
return typeof value === "undefined";
|
|
1021
964
|
}
|
|
1022
965
|
|
|
1023
966
|
// src/core/effect.ts
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
_(mask, newFlags2) {
|
|
1067
|
-
if (this.d) {
|
|
1068
|
-
if (this.a >= STATE_DIRTY)
|
|
1069
|
-
return;
|
|
1070
|
-
if (mask & 3) {
|
|
1071
|
-
this.u(STATE_DIRTY);
|
|
1072
|
-
return;
|
|
1073
|
-
}
|
|
1074
|
-
}
|
|
1075
|
-
super._(mask, newFlags2);
|
|
1076
|
-
}
|
|
1077
|
-
N(error) {
|
|
1078
|
-
this.O = error;
|
|
1079
|
-
getQueue(this).notify(this, LOADING_BIT, 0);
|
|
1080
|
-
this.g = ERROR_BIT;
|
|
1081
|
-
if (this.s === EFFECT_USER) {
|
|
1082
|
-
try {
|
|
1083
|
-
return this.$ ? this.$(error, () => {
|
|
1084
|
-
var _a;
|
|
1085
|
-
(_a = this.w) == null ? void 0 : _a.call(this);
|
|
1086
|
-
this.w = void 0;
|
|
1087
|
-
}) : console.error(error);
|
|
1088
|
-
} catch (e) {
|
|
1089
|
-
error = e;
|
|
1090
|
-
}
|
|
1091
|
-
}
|
|
1092
|
-
if (!getQueue(this).notify(this, ERROR_BIT, ERROR_BIT))
|
|
1093
|
-
throw error;
|
|
1094
|
-
}
|
|
1095
|
-
M() {
|
|
1096
|
-
var _a;
|
|
1097
|
-
if (this.a === STATE_DISPOSED)
|
|
1098
|
-
return;
|
|
1099
|
-
this.da = void 0;
|
|
1100
|
-
this.T = void 0;
|
|
1101
|
-
this.$ = void 0;
|
|
1102
|
-
(_a = this.w) == null ? void 0 : _a.call(this);
|
|
1103
|
-
this.w = void 0;
|
|
1104
|
-
getQueue(this).notify(this, ERROR_BIT | LOADING_BIT, 0);
|
|
1105
|
-
super.M();
|
|
1106
|
-
}
|
|
1107
|
-
x(type) {
|
|
1108
|
-
var _a;
|
|
1109
|
-
if (type) {
|
|
1110
|
-
const effect = this.d || this;
|
|
1111
|
-
if (effect.ea && effect.a !== STATE_DISPOSED) {
|
|
1112
|
-
(_a = effect.w) == null ? void 0 : _a.call(effect);
|
|
1113
|
-
try {
|
|
1114
|
-
effect.w = effect.da(effect.m, effect.T);
|
|
1115
|
-
} catch (e) {
|
|
1116
|
-
if (!getQueue(effect).notify(effect, ERROR_BIT, ERROR_BIT))
|
|
1117
|
-
throw e;
|
|
1118
|
-
} finally {
|
|
1119
|
-
effect.T = effect.m;
|
|
1120
|
-
effect.ea = false;
|
|
967
|
+
function effect(compute, effect2, error, initialValue, options) {
|
|
968
|
+
var _a;
|
|
969
|
+
let initialized = false;
|
|
970
|
+
const node = computed(compute, initialValue, {
|
|
971
|
+
...options,
|
|
972
|
+
ja: {
|
|
973
|
+
ea: true,
|
|
974
|
+
oa: initialValue,
|
|
975
|
+
ta: effect2,
|
|
976
|
+
pa: error,
|
|
977
|
+
L: void 0,
|
|
978
|
+
i: ((_a = getOwner()) == null ? void 0 : _a.i) ?? globalQueue,
|
|
979
|
+
I: (options == null ? void 0 : options.render) ? 1 /* Render */ : 2 /* User */,
|
|
980
|
+
la(statusFlagsChanged, prevStatusFlags) {
|
|
981
|
+
if (initialized) {
|
|
982
|
+
const errorChanged = this.f && this.f === prevStatusFlags && statusFlagsChanged;
|
|
983
|
+
this.ea = !(this.f & 2 /* Error */) && !(this.f & 1 /* Pending */ & ~prevStatusFlags) && !errorChanged;
|
|
984
|
+
if (this.ea)
|
|
985
|
+
this.i.enqueue(this.I, runEffect.bind(this));
|
|
986
|
+
}
|
|
987
|
+
if (this.f & 2 /* Error */) {
|
|
988
|
+
let error2 = this.B;
|
|
989
|
+
this.i.notify(this, 1 /* Pending */, 0);
|
|
990
|
+
if (this.I === 2 /* User */) {
|
|
991
|
+
try {
|
|
992
|
+
return this.pa ? this.pa(error2, () => {
|
|
993
|
+
var _a2;
|
|
994
|
+
(_a2 = this.L) == null ? void 0 : _a2.call(this);
|
|
995
|
+
this.L = void 0;
|
|
996
|
+
}) : console.error(error2);
|
|
997
|
+
} catch (e) {
|
|
998
|
+
error2 = e;
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
if (!this.i.notify(this, 2 /* Error */, 2 /* Error */))
|
|
1002
|
+
throw error2;
|
|
1003
|
+
} else if (this.I === 1 /* Render */) {
|
|
1004
|
+
this.i.notify(
|
|
1005
|
+
this,
|
|
1006
|
+
1 /* Pending */ | 2 /* Error */,
|
|
1007
|
+
this.f
|
|
1008
|
+
);
|
|
1121
1009
|
}
|
|
1122
1010
|
}
|
|
1123
|
-
} else
|
|
1124
|
-
this.a !== STATE_CLEAN && runTop(this);
|
|
1125
|
-
}
|
|
1126
|
-
};
|
|
1127
|
-
var TrackedEffect = class extends Computation {
|
|
1128
|
-
s = EFFECT_USER;
|
|
1129
|
-
w;
|
|
1130
|
-
constructor(compute2, options) {
|
|
1131
|
-
super(
|
|
1132
|
-
void 0,
|
|
1133
|
-
() => {
|
|
1134
|
-
var _a;
|
|
1135
|
-
(_a = this.w) == null ? void 0 : _a.call(this);
|
|
1136
|
-
this.w = latest(compute2);
|
|
1137
|
-
return void 0;
|
|
1138
|
-
},
|
|
1139
|
-
options
|
|
1140
|
-
);
|
|
1141
|
-
getQueue(this).enqueue(this.s, this.x.bind(this));
|
|
1142
|
-
}
|
|
1143
|
-
u(state, skipQueue) {
|
|
1144
|
-
if (this.a >= state || skipQueue)
|
|
1145
|
-
return;
|
|
1146
|
-
if (this.a === STATE_CLEAN || this.d && !ActiveTransition)
|
|
1147
|
-
getQueue(this).enqueue(this.s, this.x.bind(this));
|
|
1148
|
-
this.a = state;
|
|
1149
|
-
}
|
|
1150
|
-
M() {
|
|
1151
|
-
var _a;
|
|
1152
|
-
if (this.a === STATE_DISPOSED)
|
|
1153
|
-
return;
|
|
1154
|
-
(_a = this.w) == null ? void 0 : _a.call(this);
|
|
1155
|
-
this.w = void 0;
|
|
1156
|
-
getQueue(this).notify(this, ERROR_BIT | LOADING_BIT, 0);
|
|
1157
|
-
super.M();
|
|
1158
|
-
}
|
|
1159
|
-
x(type) {
|
|
1160
|
-
if (type)
|
|
1161
|
-
this.a !== STATE_CLEAN && runTop(this);
|
|
1162
|
-
}
|
|
1163
|
-
};
|
|
1164
|
-
var EagerComputation = class extends Computation {
|
|
1165
|
-
constructor(initialValue, compute2, options) {
|
|
1166
|
-
super(initialValue, compute2, options);
|
|
1167
|
-
!(options == null ? void 0 : options.defer) && this.F();
|
|
1168
|
-
}
|
|
1169
|
-
u(state, skipQueue) {
|
|
1170
|
-
if (this.a >= state && !this.H)
|
|
1171
|
-
return;
|
|
1172
|
-
if (!skipQueue && (this.a === STATE_CLEAN || this.a === STATE_CHECK && this.H))
|
|
1173
|
-
getQueue(this).enqueue(EFFECT_PURE, this.x.bind(this));
|
|
1174
|
-
super.u(state, skipQueue);
|
|
1175
|
-
}
|
|
1176
|
-
x() {
|
|
1177
|
-
this.a !== STATE_CLEAN && runTop(this);
|
|
1178
|
-
}
|
|
1179
|
-
};
|
|
1180
|
-
var FirewallComputation = class extends Computation {
|
|
1181
|
-
firewall = true;
|
|
1182
|
-
constructor(compute2) {
|
|
1183
|
-
super(void 0, compute2);
|
|
1184
|
-
}
|
|
1185
|
-
u(state, skipQueue) {
|
|
1186
|
-
if (this.a >= state && !this.H)
|
|
1187
|
-
return;
|
|
1188
|
-
if (!skipQueue && (this.a === STATE_CLEAN || this.a === STATE_CHECK && this.H))
|
|
1189
|
-
getQueue(this).enqueue(EFFECT_PURE, this.x.bind(this));
|
|
1190
|
-
super.u(state, true);
|
|
1191
|
-
this.H = !!skipQueue;
|
|
1192
|
-
}
|
|
1193
|
-
x() {
|
|
1194
|
-
const prevFlags = this.g;
|
|
1195
|
-
this.a !== STATE_CLEAN && runTop(this);
|
|
1196
|
-
if (ActiveTransition && this.j && (this.g !== prevFlags || this.g !== this.j.flags)) {
|
|
1197
|
-
getQueue(this).notify(this, LOADING_BIT | ERROR_BIT, this.g);
|
|
1198
|
-
this.j.flags = this.g;
|
|
1199
|
-
this.g = prevFlags;
|
|
1200
|
-
}
|
|
1201
|
-
}
|
|
1202
|
-
};
|
|
1203
|
-
function runTop(node) {
|
|
1204
|
-
const ancestors = [];
|
|
1205
|
-
for (let current = node; current !== null; current = current.l) {
|
|
1206
|
-
if (ActiveTransition && current.f)
|
|
1207
|
-
current = ActiveTransition.b.get(current);
|
|
1208
|
-
if (current.a !== STATE_CLEAN) {
|
|
1209
|
-
ancestors.push(current);
|
|
1210
1011
|
}
|
|
1211
|
-
}
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1012
|
+
});
|
|
1013
|
+
initialized = true;
|
|
1014
|
+
if (node.I === 1 /* Render */) {
|
|
1015
|
+
node.ha = (p) => !(node.f & 2 /* Error */) ? staleValues(() => compute(p)) : compute(p);
|
|
1016
|
+
}
|
|
1017
|
+
!(options == null ? void 0 : options.defer) && !(node.f & (2 /* Error */ | 1 /* Pending */)) && (node.I === 2 /* User */ ? node.i.enqueue(node.I, runEffect.bind(node)) : runEffect.call(node));
|
|
1018
|
+
onCleanup(() => {
|
|
1019
|
+
var _a2;
|
|
1020
|
+
return (_a2 = node.L) == null ? void 0 : _a2.call(node);
|
|
1021
|
+
});
|
|
1022
|
+
}
|
|
1023
|
+
function runEffect() {
|
|
1024
|
+
var _a;
|
|
1025
|
+
if (!this.ea || this.b & 64 /* Disposed */)
|
|
1026
|
+
return;
|
|
1027
|
+
(_a = this.L) == null ? void 0 : _a.call(this);
|
|
1028
|
+
this.L = void 0;
|
|
1029
|
+
try {
|
|
1030
|
+
this.L = this.ta(this.g, this.oa);
|
|
1031
|
+
} catch (error) {
|
|
1032
|
+
if (!this.i.notify(this, 2 /* Error */, 2 /* Error */))
|
|
1033
|
+
throw error;
|
|
1034
|
+
} finally {
|
|
1035
|
+
this.oa = this.g;
|
|
1036
|
+
this.ea = false;
|
|
1215
1037
|
}
|
|
1216
1038
|
}
|
|
1217
1039
|
|
|
1218
1040
|
// src/signals.ts
|
|
1219
1041
|
function createSignal(first, second, third) {
|
|
1220
1042
|
if (typeof first === "function") {
|
|
1221
|
-
const node2 =
|
|
1043
|
+
const node2 = computed(first, second, third);
|
|
1222
1044
|
return [
|
|
1223
|
-
|
|
1224
|
-
(
|
|
1225
|
-
node2.F();
|
|
1226
|
-
return node2.write(v);
|
|
1227
|
-
}
|
|
1045
|
+
read.bind(null, node2),
|
|
1046
|
+
setSignal.bind(null, node2)
|
|
1228
1047
|
];
|
|
1229
1048
|
}
|
|
1230
1049
|
const o = getOwner();
|
|
1231
1050
|
const needsId = (o == null ? void 0 : o.id) != null;
|
|
1232
|
-
const node =
|
|
1051
|
+
const node = signal(
|
|
1233
1052
|
first,
|
|
1234
|
-
|
|
1235
|
-
needsId ? { id: o.getNextChildId(), ...second } : second
|
|
1236
|
-
);
|
|
1237
|
-
return [node.read.bind(node), node.write.bind(node)];
|
|
1238
|
-
}
|
|
1239
|
-
function createMemo(compute2, value, options) {
|
|
1240
|
-
let node = new Computation(
|
|
1241
|
-
value,
|
|
1242
|
-
compute2,
|
|
1243
|
-
options
|
|
1244
|
-
);
|
|
1245
|
-
let resolvedValue;
|
|
1246
|
-
return () => {
|
|
1247
|
-
var _a, _b;
|
|
1248
|
-
if (node) {
|
|
1249
|
-
if (node.a === STATE_DISPOSED) {
|
|
1250
|
-
node = void 0;
|
|
1251
|
-
return resolvedValue;
|
|
1252
|
-
}
|
|
1253
|
-
resolvedValue = node.wait();
|
|
1254
|
-
if (!((_a = node.b) == null ? void 0 : _a.length) && ((_b = node.n) == null ? void 0 : _b.l) !== node && !(node.g & UNINITIALIZED_BIT)) {
|
|
1255
|
-
node.dispose();
|
|
1256
|
-
node = void 0;
|
|
1257
|
-
}
|
|
1258
|
-
}
|
|
1259
|
-
return resolvedValue;
|
|
1260
|
-
};
|
|
1261
|
-
}
|
|
1262
|
-
function createAsync(compute2, value, options) {
|
|
1263
|
-
let refreshing = false;
|
|
1264
|
-
const node = new EagerComputation(
|
|
1265
|
-
value,
|
|
1266
|
-
(p) => {
|
|
1267
|
-
const source = compute2(p, refreshing);
|
|
1268
|
-
refreshing = false;
|
|
1269
|
-
const isPromise = source instanceof Promise;
|
|
1270
|
-
const iterator = source[Symbol.asyncIterator];
|
|
1271
|
-
if (!isPromise && !iterator) {
|
|
1272
|
-
return source;
|
|
1273
|
-
}
|
|
1274
|
-
let abort = false;
|
|
1275
|
-
onCleanup(() => abort = true);
|
|
1276
|
-
let transition2 = ActiveTransition;
|
|
1277
|
-
if (isPromise) {
|
|
1278
|
-
source.then(
|
|
1279
|
-
(value3) => {
|
|
1280
|
-
if (abort)
|
|
1281
|
-
return;
|
|
1282
|
-
if (transition2)
|
|
1283
|
-
return transition2.runTransition(() => {
|
|
1284
|
-
node.write(value3, 0, true);
|
|
1285
|
-
}, true);
|
|
1286
|
-
node.write(value3, 0, true);
|
|
1287
|
-
},
|
|
1288
|
-
(error) => {
|
|
1289
|
-
if (abort)
|
|
1290
|
-
return;
|
|
1291
|
-
if (transition2)
|
|
1292
|
-
return transition2.runTransition(() => node.N(error), true);
|
|
1293
|
-
node.N(error);
|
|
1294
|
-
}
|
|
1295
|
-
);
|
|
1296
|
-
} else {
|
|
1297
|
-
(async () => {
|
|
1298
|
-
try {
|
|
1299
|
-
for await (let value3 of source) {
|
|
1300
|
-
if (abort)
|
|
1301
|
-
return;
|
|
1302
|
-
if (transition2)
|
|
1303
|
-
return transition2.runTransition(() => {
|
|
1304
|
-
node.write(value3, 0, true);
|
|
1305
|
-
transition2 = null;
|
|
1306
|
-
}, true);
|
|
1307
|
-
node.write(value3, 0, true);
|
|
1308
|
-
}
|
|
1309
|
-
} catch (error) {
|
|
1310
|
-
if (abort)
|
|
1311
|
-
return;
|
|
1312
|
-
if (transition2)
|
|
1313
|
-
return transition2.runTransition(() => {
|
|
1314
|
-
node.N(error);
|
|
1315
|
-
transition2 = null;
|
|
1316
|
-
}, true);
|
|
1317
|
-
node.N(error);
|
|
1318
|
-
}
|
|
1319
|
-
})();
|
|
1320
|
-
}
|
|
1321
|
-
throw new NotReadyError(getOwner());
|
|
1322
|
-
},
|
|
1323
|
-
options
|
|
1053
|
+
needsId ? { id: getNextChildId(o), ...second } : second
|
|
1324
1054
|
);
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1055
|
+
return [
|
|
1056
|
+
read.bind(null, node),
|
|
1057
|
+
setSignal.bind(null, node)
|
|
1058
|
+
];
|
|
1059
|
+
}
|
|
1060
|
+
function createMemo(compute, value, options) {
|
|
1061
|
+
let node = computed(compute, value, options);
|
|
1062
|
+
return read.bind(null, node);
|
|
1063
|
+
}
|
|
1064
|
+
function createAsync(compute, value, options) {
|
|
1065
|
+
const node = asyncComputed(compute, value, options);
|
|
1066
|
+
const ret = read.bind(null, node);
|
|
1067
|
+
ret.refresh = node.sa;
|
|
1068
|
+
return ret;
|
|
1069
|
+
}
|
|
1070
|
+
function createEffect(compute, effectFn, value, options) {
|
|
1071
|
+
void effect(
|
|
1072
|
+
compute,
|
|
1073
|
+
effectFn.effect || effectFn,
|
|
1074
|
+
effectFn.error,
|
|
1339
1075
|
value,
|
|
1340
|
-
compute2,
|
|
1341
|
-
effect.effect || effect,
|
|
1342
|
-
effect.error,
|
|
1343
1076
|
options
|
|
1344
1077
|
);
|
|
1345
1078
|
}
|
|
1346
|
-
function createRenderEffect(
|
|
1347
|
-
void
|
|
1079
|
+
function createRenderEffect(compute, effectFn, value, options) {
|
|
1080
|
+
void effect(compute, effectFn, void 0, value, {
|
|
1348
1081
|
render: true,
|
|
1349
1082
|
...options
|
|
1350
1083
|
});
|
|
1351
1084
|
}
|
|
1352
|
-
function createTrackedEffect(
|
|
1353
|
-
void new TrackedEffect(compute2, options);
|
|
1354
|
-
}
|
|
1355
|
-
function createReaction(effect, options) {
|
|
1356
|
-
let cleanup = void 0;
|
|
1357
|
-
onCleanup(() => cleanup == null ? void 0 : cleanup());
|
|
1358
|
-
return (tracking) => {
|
|
1359
|
-
const node = new Effect(
|
|
1360
|
-
void 0,
|
|
1361
|
-
tracking,
|
|
1362
|
-
() => {
|
|
1363
|
-
var _a;
|
|
1364
|
-
cleanup == null ? void 0 : cleanup();
|
|
1365
|
-
cleanup = (_a = effect.effect || effect) == null ? void 0 : _a();
|
|
1366
|
-
node.dispose(true);
|
|
1367
|
-
},
|
|
1368
|
-
effect.error,
|
|
1369
|
-
{
|
|
1370
|
-
defer: true,
|
|
1371
|
-
...options
|
|
1372
|
-
}
|
|
1373
|
-
);
|
|
1374
|
-
};
|
|
1375
|
-
}
|
|
1376
|
-
function createRoot(init, options) {
|
|
1377
|
-
const owner = new Owner(options == null ? void 0 : options.id);
|
|
1378
|
-
return compute(owner, !init.length ? init : () => init(() => owner.dispose()), null);
|
|
1085
|
+
function createTrackedEffect(compute, options) {
|
|
1379
1086
|
}
|
|
1380
|
-
function
|
|
1381
|
-
return compute(owner, run, null);
|
|
1087
|
+
function createReaction(effect2, options) {
|
|
1382
1088
|
}
|
|
1383
1089
|
function resolve(fn) {
|
|
1384
1090
|
return new Promise((res, rej) => {
|
|
1385
1091
|
createRoot((dispose) => {
|
|
1386
|
-
|
|
1092
|
+
computed(() => {
|
|
1387
1093
|
try {
|
|
1388
1094
|
res(fn());
|
|
1389
1095
|
} catch (err) {
|
|
@@ -1397,43 +1103,9 @@ function resolve(fn) {
|
|
|
1397
1103
|
});
|
|
1398
1104
|
}
|
|
1399
1105
|
function createOptimistic(first, second, third) {
|
|
1400
|
-
|
|
1401
|
-
second,
|
|
1402
|
-
(prev) => {
|
|
1403
|
-
const res = first(prev);
|
|
1404
|
-
if (node.j.f)
|
|
1405
|
-
return prev;
|
|
1406
|
-
return res;
|
|
1407
|
-
},
|
|
1408
|
-
third
|
|
1409
|
-
) : new Computation(first, null, second);
|
|
1410
|
-
node.j = () => node.write(first);
|
|
1411
|
-
function write(v) {
|
|
1412
|
-
if (!ActiveTransition)
|
|
1413
|
-
throw new Error("createOptimistic can only be updated inside a transition");
|
|
1414
|
-
ActiveTransition.addOptimistic(node.j);
|
|
1415
|
-
queueMicrotask(() => {
|
|
1416
|
-
if (node.j.f) {
|
|
1417
|
-
node.F();
|
|
1418
|
-
node.write(v);
|
|
1419
|
-
}
|
|
1420
|
-
});
|
|
1421
|
-
}
|
|
1422
|
-
return [node.wait.bind(node), write];
|
|
1106
|
+
return {};
|
|
1423
1107
|
}
|
|
1424
|
-
function
|
|
1425
|
-
let t = new Transition(new Computation(void 0, null));
|
|
1426
|
-
queueMicrotask(() => t.runTransition(() => fn((fn2) => t.runTransition(fn2))));
|
|
1427
|
-
}
|
|
1428
|
-
function useTransition() {
|
|
1429
|
-
const [pending, setPending] = createOptimistic(false);
|
|
1430
|
-
function start(fn) {
|
|
1431
|
-
transition((resume) => {
|
|
1432
|
-
setPending(true);
|
|
1433
|
-
return fn(resume);
|
|
1434
|
-
});
|
|
1435
|
-
}
|
|
1436
|
-
return [pending, start];
|
|
1108
|
+
function onSettled(callback) {
|
|
1437
1109
|
}
|
|
1438
1110
|
|
|
1439
1111
|
// src/store/reconcile.ts
|
|
@@ -1442,7 +1114,7 @@ function unwrap(value) {
|
|
|
1442
1114
|
return ((_a = value == null ? void 0 : value[$TARGET]) == null ? void 0 : _a[STORE_NODE]) ?? value;
|
|
1443
1115
|
}
|
|
1444
1116
|
function getOverrideValue(value, override, nodes, key) {
|
|
1445
|
-
return nodes && key in nodes ? nodes[key]
|
|
1117
|
+
return nodes && key in nodes ? read(nodes[key]) : override && key in override ? override[key] : value[key];
|
|
1446
1118
|
}
|
|
1447
1119
|
function getAllKeys(value, override, next) {
|
|
1448
1120
|
const keys = getKeys(value, override);
|
|
@@ -1450,7 +1122,6 @@ function getAllKeys(value, override, next) {
|
|
|
1450
1122
|
return Array.from(/* @__PURE__ */ new Set([...keys, ...nextKeys]));
|
|
1451
1123
|
}
|
|
1452
1124
|
function applyState(next, state, keyFn, all) {
|
|
1453
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
1454
1125
|
const target = state == null ? void 0 : state[$TARGET];
|
|
1455
1126
|
if (!target)
|
|
1456
1127
|
return;
|
|
@@ -1477,16 +1148,16 @@ function applyState(next, state, keyFn, all) {
|
|
|
1477
1148
|
if (start > newEnd || start > end) {
|
|
1478
1149
|
for (j = start; j <= newEnd; j++) {
|
|
1479
1150
|
changed = true;
|
|
1480
|
-
|
|
1151
|
+
target[STORE_NODE][j] && setSignal(target[STORE_NODE][j], wrap(next[j], target));
|
|
1481
1152
|
}
|
|
1482
1153
|
for (; j < next.length; j++) {
|
|
1483
1154
|
changed = true;
|
|
1484
1155
|
const wrapped = wrap(temp[j], target);
|
|
1485
|
-
|
|
1156
|
+
target[STORE_NODE][j] && setSignal(target[STORE_NODE][j], wrapped);
|
|
1486
1157
|
applyState(next[j], wrapped, keyFn, all);
|
|
1487
1158
|
}
|
|
1488
|
-
changed &&
|
|
1489
|
-
prevLength !== next.length &&
|
|
1159
|
+
changed && target[STORE_NODE][$TRACK] && setSignal(target[STORE_NODE][$TRACK], void 0);
|
|
1160
|
+
prevLength !== next.length && target[STORE_NODE].length && setSignal(target[STORE_NODE].length, next.length);
|
|
1490
1161
|
return;
|
|
1491
1162
|
}
|
|
1492
1163
|
newIndicesNext = new Array(newEnd + 1);
|
|
@@ -1510,10 +1181,10 @@ function applyState(next, state, keyFn, all) {
|
|
|
1510
1181
|
for (j = start; j < next.length; j++) {
|
|
1511
1182
|
if (j in temp) {
|
|
1512
1183
|
const wrapped = wrap(temp[j], target);
|
|
1513
|
-
|
|
1184
|
+
target[STORE_NODE][j] && setSignal(target[STORE_NODE][j], wrapped);
|
|
1514
1185
|
applyState(next[j], wrapped, keyFn, all);
|
|
1515
1186
|
} else
|
|
1516
|
-
|
|
1187
|
+
target[STORE_NODE][j] && setSignal(target[STORE_NODE][j], wrap(next[j], target));
|
|
1517
1188
|
}
|
|
1518
1189
|
if (start < next.length)
|
|
1519
1190
|
changed = true;
|
|
@@ -1525,9 +1196,9 @@ function applyState(next, state, keyFn, all) {
|
|
|
1525
1196
|
}
|
|
1526
1197
|
if (prevLength !== next.length) {
|
|
1527
1198
|
changed = true;
|
|
1528
|
-
|
|
1199
|
+
target[STORE_NODE].length && setSignal(target[STORE_NODE].length, next.length);
|
|
1529
1200
|
}
|
|
1530
|
-
changed &&
|
|
1201
|
+
changed && target[STORE_NODE][$TRACK] && setSignal(target[STORE_NODE][$TRACK], void 0);
|
|
1531
1202
|
return;
|
|
1532
1203
|
}
|
|
1533
1204
|
if (nodes) {
|
|
@@ -1541,8 +1212,8 @@ function applyState(next, state, keyFn, all) {
|
|
|
1541
1212
|
if (previousValue === nextValue)
|
|
1542
1213
|
continue;
|
|
1543
1214
|
if (!previousValue || !isWrappable(previousValue) || keyFn(previousValue) != null && keyFn(previousValue) !== keyFn(nextValue)) {
|
|
1544
|
-
tracked
|
|
1545
|
-
node
|
|
1215
|
+
tracked && setSignal(tracked, void 0);
|
|
1216
|
+
node && setSignal(node, isWrappable(nextValue) ? wrap(nextValue, target) : nextValue);
|
|
1546
1217
|
} else
|
|
1547
1218
|
applyState(nextValue, wrap(previousValue, target), keyFn, all);
|
|
1548
1219
|
}
|
|
@@ -1550,7 +1221,8 @@ function applyState(next, state, keyFn, all) {
|
|
|
1550
1221
|
if (nodes = target[STORE_HAS]) {
|
|
1551
1222
|
const keys = Object.keys(nodes);
|
|
1552
1223
|
for (let i = 0, len = keys.length; i < len; i++) {
|
|
1553
|
-
|
|
1224
|
+
const key = keys[i];
|
|
1225
|
+
setSignal(nodes[key], key in next);
|
|
1554
1226
|
}
|
|
1555
1227
|
}
|
|
1556
1228
|
}
|
|
@@ -1568,13 +1240,14 @@ function reconcile(value, key, all = false) {
|
|
|
1568
1240
|
|
|
1569
1241
|
// src/store/projection.ts
|
|
1570
1242
|
function createProjectionInternal(fn, initialValue = {}, options) {
|
|
1243
|
+
let node;
|
|
1571
1244
|
const wrappedMap = /* @__PURE__ */ new WeakMap();
|
|
1572
1245
|
const traps = {
|
|
1573
1246
|
...storeTraps,
|
|
1574
1247
|
get(target, property, receiver) {
|
|
1575
1248
|
const o = getOwner();
|
|
1576
|
-
const n =
|
|
1577
|
-
(!o || o !== n) && n
|
|
1249
|
+
const n = node;
|
|
1250
|
+
(!o || o !== n) && n && read(n);
|
|
1578
1251
|
return storeTraps.get(target, property, receiver);
|
|
1579
1252
|
}
|
|
1580
1253
|
};
|
|
@@ -1592,7 +1265,7 @@ function createProjectionInternal(fn, initialValue = {}, options) {
|
|
|
1592
1265
|
return wrapped;
|
|
1593
1266
|
};
|
|
1594
1267
|
const wrappedStore = wrapProjection(initialValue);
|
|
1595
|
-
|
|
1268
|
+
node = computed(() => {
|
|
1596
1269
|
storeSetter(wrappedStore, (s) => {
|
|
1597
1270
|
const value = fn(s);
|
|
1598
1271
|
if (value !== s && value !== void 0) {
|
|
@@ -1650,7 +1323,7 @@ function getNodes(target, type) {
|
|
|
1650
1323
|
function getNode(nodes, property, value, equals = isEqual) {
|
|
1651
1324
|
if (nodes[property])
|
|
1652
1325
|
return nodes[property];
|
|
1653
|
-
return nodes[property] =
|
|
1326
|
+
return nodes[property] = signal(value, {
|
|
1654
1327
|
equals,
|
|
1655
1328
|
unobserved() {
|
|
1656
1329
|
delete nodes[property];
|
|
@@ -1658,7 +1331,7 @@ function getNode(nodes, property, value, equals = isEqual) {
|
|
|
1658
1331
|
});
|
|
1659
1332
|
}
|
|
1660
1333
|
function trackSelf(target, symbol = $TRACK) {
|
|
1661
|
-
getObserver() && getNode(getNodes(target, STORE_NODE), symbol, void 0, false)
|
|
1334
|
+
getObserver() && read(getNode(getNodes(target, STORE_NODE), symbol, void 0, false));
|
|
1662
1335
|
}
|
|
1663
1336
|
function getKeys(source, override, enumerable = true) {
|
|
1664
1337
|
const baseKeys = untrack(() => enumerable ? Object.keys(source) : Reflect.ownKeys(source));
|
|
@@ -1706,7 +1379,7 @@ var storeTraps = {
|
|
|
1706
1379
|
return desc.get.call(receiver);
|
|
1707
1380
|
}
|
|
1708
1381
|
if (Writing == null ? void 0 : Writing.has(receiver)) {
|
|
1709
|
-
let value2 = tracked && (overridden || !proxySource) ? tracked.
|
|
1382
|
+
let value2 = tracked && (overridden || !proxySource) ? tracked.d !== NOT_PENDING ? tracked.d : tracked.g : storeValue[property];
|
|
1710
1383
|
value2 === $DELETED && (value2 = void 0);
|
|
1711
1384
|
if (!isWrappable(value2))
|
|
1712
1385
|
return value2;
|
|
@@ -1714,14 +1387,14 @@ var storeTraps = {
|
|
|
1714
1387
|
Writing.add(wrapped);
|
|
1715
1388
|
return wrapped;
|
|
1716
1389
|
}
|
|
1717
|
-
let value = tracked ? overridden || !proxySource ? nodes[property]
|
|
1390
|
+
let value = tracked ? overridden || !proxySource ? read(nodes[property]) : (read(nodes[property]), storeValue[property]) : storeValue[property];
|
|
1718
1391
|
value === $DELETED && (value = void 0);
|
|
1719
1392
|
if (!tracked) {
|
|
1720
1393
|
if (!overridden && typeof value === "function" && !storeValue.hasOwnProperty(property)) {
|
|
1721
1394
|
let proto;
|
|
1722
1395
|
return !Array.isArray(target[STORE_VALUE]) && (proto = Object.getPrototypeOf(target[STORE_VALUE])) && proto !== Object.prototype ? value.bind(storeValue) : value;
|
|
1723
1396
|
} else if (getObserver()) {
|
|
1724
|
-
return getNode(nodes, property, isWrappable(value) ? wrap(value, target) : value)
|
|
1397
|
+
return read(getNode(nodes, property, isWrappable(value) ? wrap(value, target) : value));
|
|
1725
1398
|
}
|
|
1726
1399
|
}
|
|
1727
1400
|
return isWrappable(value) ? wrap(value, target) : value;
|
|
@@ -1730,14 +1403,14 @@ var storeTraps = {
|
|
|
1730
1403
|
if (property === $PROXY || property === $TRACK || property === "__proto__")
|
|
1731
1404
|
return true;
|
|
1732
1405
|
const has = target[STORE_OVERRIDE] && property in target[STORE_OVERRIDE] ? target[STORE_OVERRIDE][property] !== $DELETED : property in target[STORE_VALUE];
|
|
1733
|
-
getObserver() && getNode(getNodes(target, STORE_HAS), property, has)
|
|
1406
|
+
getObserver() && read(getNode(getNodes(target, STORE_HAS), property, has));
|
|
1734
1407
|
return has;
|
|
1735
1408
|
},
|
|
1736
1409
|
set(target, property, rawValue) {
|
|
1737
1410
|
const store = target[$PROXY];
|
|
1738
1411
|
if (Writing == null ? void 0 : Writing.has(target[$PROXY])) {
|
|
1739
1412
|
untrack(() => {
|
|
1740
|
-
var _a, _b, _c
|
|
1413
|
+
var _a, _b, _c;
|
|
1741
1414
|
const state = target[STORE_VALUE];
|
|
1742
1415
|
const base = state[property];
|
|
1743
1416
|
const prev = target[STORE_OVERRIDE] && property in target[STORE_OVERRIDE] ? target[STORE_OVERRIDE][property] : base;
|
|
@@ -1756,15 +1429,15 @@ var storeTraps = {
|
|
|
1756
1429
|
}
|
|
1757
1430
|
if (recursivelyNotify(store, storeLookup) && wrappable)
|
|
1758
1431
|
recursivelyAddParent(value, store);
|
|
1759
|
-
(
|
|
1432
|
+
((_c = target[STORE_HAS]) == null ? void 0 : _c[property]) && setSignal(target[STORE_HAS][property], true);
|
|
1760
1433
|
const nodes = getNodes(target, STORE_NODE);
|
|
1761
|
-
|
|
1434
|
+
nodes[property] && setSignal(nodes[property], () => wrappable ? wrap(value, target) : value);
|
|
1762
1435
|
if (Array.isArray(state)) {
|
|
1763
1436
|
const index = parseInt(property) + 1;
|
|
1764
1437
|
if (index > len)
|
|
1765
|
-
|
|
1438
|
+
nodes.length && setSignal(nodes.length, index);
|
|
1766
1439
|
}
|
|
1767
|
-
|
|
1440
|
+
nodes[$TRACK] && setSignal(nodes[$TRACK], void 0);
|
|
1768
1441
|
});
|
|
1769
1442
|
}
|
|
1770
1443
|
return true;
|
|
@@ -1773,7 +1446,7 @@ var storeTraps = {
|
|
|
1773
1446
|
var _a;
|
|
1774
1447
|
if ((Writing == null ? void 0 : Writing.has(target[$PROXY])) && ((_a = target[STORE_OVERRIDE]) == null ? void 0 : _a[property]) !== $DELETED) {
|
|
1775
1448
|
untrack(() => {
|
|
1776
|
-
var _a2
|
|
1449
|
+
var _a2;
|
|
1777
1450
|
const prev = target[STORE_OVERRIDE] && property in target[STORE_OVERRIDE] ? target[STORE_OVERRIDE][property] : target[STORE_VALUE][property];
|
|
1778
1451
|
if (property in target[STORE_VALUE]) {
|
|
1779
1452
|
(target[STORE_OVERRIDE] || (target[STORE_OVERRIDE] = /* @__PURE__ */ Object.create(null)))[property] = $DELETED;
|
|
@@ -1785,10 +1458,11 @@ var storeTraps = {
|
|
|
1785
1458
|
const parents = PARENTS.get(prev);
|
|
1786
1459
|
parents && (parents instanceof Set ? parents.delete(target) : PARENTS.delete(prev));
|
|
1787
1460
|
}
|
|
1788
|
-
|
|
1461
|
+
if ((_a2 = target[STORE_HAS]) == null ? void 0 : _a2[property])
|
|
1462
|
+
setSignal(target[STORE_HAS][property], false);
|
|
1789
1463
|
const nodes = getNodes(target, STORE_NODE);
|
|
1790
|
-
|
|
1791
|
-
|
|
1464
|
+
nodes[property] && setSignal(nodes[property], void 0);
|
|
1465
|
+
nodes[$TRACK] && setSignal(nodes[$TRACK], void 0);
|
|
1792
1466
|
});
|
|
1793
1467
|
}
|
|
1794
1468
|
return true;
|
|
@@ -1843,7 +1517,7 @@ function recursivelyNotify(state, lookup) {
|
|
|
1843
1517
|
if (target) {
|
|
1844
1518
|
const deep2 = getNodes(target, STORE_NODE)[$DEEP];
|
|
1845
1519
|
if (deep2) {
|
|
1846
|
-
deep2
|
|
1520
|
+
setSignal(deep2, void 0);
|
|
1847
1521
|
notified = true;
|
|
1848
1522
|
}
|
|
1849
1523
|
lookup = target[STORE_LOOKUP] || lookup;
|
|
@@ -1900,30 +1574,7 @@ function deep(store) {
|
|
|
1900
1574
|
|
|
1901
1575
|
// src/store/optimistic.ts
|
|
1902
1576
|
function createOptimisticStore(first, second, options) {
|
|
1903
|
-
|
|
1904
|
-
const { store, node } = derived ? createProjectionInternal(
|
|
1905
|
-
(draft) => {
|
|
1906
|
-
const res = first(draft);
|
|
1907
|
-
if (reset.f)
|
|
1908
|
-
return draft;
|
|
1909
|
-
return res;
|
|
1910
|
-
},
|
|
1911
|
-
second,
|
|
1912
|
-
options
|
|
1913
|
-
) : createProjectionInternal(() => {
|
|
1914
|
-
}, first);
|
|
1915
|
-
const reset = () => storeSetter(
|
|
1916
|
-
store,
|
|
1917
|
-
reconcile(derived ? first(store) || store : first, (options == null ? void 0 : options.key) || "id", options == null ? void 0 : options.all)
|
|
1918
|
-
);
|
|
1919
|
-
const write = (v) => {
|
|
1920
|
-
if (!ActiveTransition)
|
|
1921
|
-
throw new Error("createOptimisticStore can only be updated inside a transition");
|
|
1922
|
-
ActiveTransition.addOptimistic(reset);
|
|
1923
|
-
queueMicrotask(() => reset.f && storeSetter(store, v));
|
|
1924
|
-
};
|
|
1925
|
-
node.j = reset;
|
|
1926
|
-
return [store, write];
|
|
1577
|
+
return [];
|
|
1927
1578
|
}
|
|
1928
1579
|
|
|
1929
1580
|
// src/store/utils.ts
|
|
@@ -2130,348 +1781,334 @@ function omit(props, ...keys) {
|
|
|
2130
1781
|
// src/map.ts
|
|
2131
1782
|
function mapArray(list, map, options) {
|
|
2132
1783
|
const keyFn = typeof (options == null ? void 0 : options.keyed) === "function" ? options.keyed : void 0;
|
|
2133
|
-
return
|
|
2134
|
-
|
|
2135
|
-
|
|
2136
|
-
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
2140
|
-
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
1784
|
+
return createMemo(
|
|
1785
|
+
updateKeyedMap.bind({
|
|
1786
|
+
z: createOwner(),
|
|
1787
|
+
j: 0,
|
|
1788
|
+
ua: list,
|
|
1789
|
+
F: [],
|
|
1790
|
+
M: map,
|
|
1791
|
+
c: [],
|
|
1792
|
+
a: [],
|
|
1793
|
+
N: keyFn,
|
|
1794
|
+
k: keyFn || (options == null ? void 0 : options.keyed) === false ? [] : void 0,
|
|
1795
|
+
l: map.length > 1 ? [] : void 0,
|
|
1796
|
+
X: options == null ? void 0 : options.fallback
|
|
1797
|
+
})
|
|
1798
|
+
);
|
|
2146
1799
|
}
|
|
2147
1800
|
var pureOptions = { pureWrite: true };
|
|
2148
1801
|
function updateKeyedMap() {
|
|
2149
|
-
const newItems = this.
|
|
1802
|
+
const newItems = this.ua() || [], newLen = newItems.length;
|
|
2150
1803
|
newItems[$TRACK];
|
|
2151
|
-
runWithOwner(this.
|
|
2152
|
-
let i, j, mapper = this.
|
|
2153
|
-
this.
|
|
2154
|
-
this.
|
|
2155
|
-
return this.
|
|
2156
|
-
|
|
2157
|
-
this.
|
|
1804
|
+
runWithOwner(this.z, () => {
|
|
1805
|
+
let i, j, mapper = this.k ? () => {
|
|
1806
|
+
this.k[j] = signal(newItems[j], pureOptions);
|
|
1807
|
+
this.l && (this.l[j] = signal(j, pureOptions));
|
|
1808
|
+
return this.M(
|
|
1809
|
+
read.bind(null, this.k[j]),
|
|
1810
|
+
this.l ? read.bind(null, this.l[j]) : void 0
|
|
2158
1811
|
);
|
|
2159
|
-
} : this.
|
|
1812
|
+
} : this.l ? () => {
|
|
2160
1813
|
const item = newItems[j];
|
|
2161
|
-
this.
|
|
2162
|
-
return this.
|
|
1814
|
+
this.l[j] = signal(j, pureOptions);
|
|
1815
|
+
return this.M(
|
|
1816
|
+
() => item,
|
|
1817
|
+
read.bind(null, this.l[j])
|
|
1818
|
+
);
|
|
2163
1819
|
} : () => {
|
|
2164
1820
|
const item = newItems[j];
|
|
2165
|
-
return this.
|
|
1821
|
+
return this.M(() => item);
|
|
2166
1822
|
};
|
|
2167
1823
|
if (newLen === 0) {
|
|
2168
|
-
if (this.
|
|
2169
|
-
this.
|
|
2170
|
-
this.
|
|
2171
|
-
this.
|
|
2172
|
-
this.
|
|
2173
|
-
this.
|
|
2174
|
-
this.
|
|
2175
|
-
this.
|
|
1824
|
+
if (this.j !== 0) {
|
|
1825
|
+
this.z.dispose(false);
|
|
1826
|
+
this.a = [];
|
|
1827
|
+
this.F = [];
|
|
1828
|
+
this.c = [];
|
|
1829
|
+
this.j = 0;
|
|
1830
|
+
this.k && (this.k = []);
|
|
1831
|
+
this.l && (this.l = []);
|
|
2176
1832
|
}
|
|
2177
|
-
if (this.
|
|
2178
|
-
this.
|
|
2179
|
-
this.
|
|
2180
|
-
this.
|
|
2181
|
-
null
|
|
1833
|
+
if (this.X && !this.c[0]) {
|
|
1834
|
+
this.c[0] = runWithOwner(
|
|
1835
|
+
this.a[0] = createOwner(),
|
|
1836
|
+
this.X
|
|
2182
1837
|
);
|
|
2183
1838
|
}
|
|
2184
|
-
} else if (this.
|
|
2185
|
-
if (this.
|
|
2186
|
-
this.
|
|
2187
|
-
this.
|
|
1839
|
+
} else if (this.j === 0) {
|
|
1840
|
+
if (this.a[0])
|
|
1841
|
+
this.a[0].dispose();
|
|
1842
|
+
this.c = new Array(newLen);
|
|
2188
1843
|
for (j = 0; j < newLen; j++) {
|
|
2189
|
-
this.
|
|
2190
|
-
this.
|
|
1844
|
+
this.F[j] = newItems[j];
|
|
1845
|
+
this.c[j] = runWithOwner(this.a[j] = createOwner(), mapper);
|
|
2191
1846
|
}
|
|
2192
|
-
this.
|
|
1847
|
+
this.j = newLen;
|
|
2193
1848
|
} else {
|
|
2194
|
-
let start, end, newEnd, item, key, newIndices, newIndicesNext, temp = new Array(newLen), tempNodes = new Array(newLen), tempRows = this.
|
|
2195
|
-
for (start = 0, end = Math.min(this.
|
|
2196
|
-
if (this.
|
|
2197
|
-
this.
|
|
1849
|
+
let start, end, newEnd, item, key, newIndices, newIndicesNext, temp = new Array(newLen), tempNodes = new Array(newLen), tempRows = this.k ? new Array(newLen) : void 0, tempIndexes = this.l ? new Array(newLen) : void 0;
|
|
1850
|
+
for (start = 0, end = Math.min(this.j, newLen); start < end && (this.F[start] === newItems[start] || this.k && compare(this.N, this.F[start], newItems[start])); start++) {
|
|
1851
|
+
if (this.k)
|
|
1852
|
+
setSignal(this.k[start], newItems[start]);
|
|
2198
1853
|
}
|
|
2199
|
-
for (end = this.
|
|
2200
|
-
temp[newEnd] = this.
|
|
2201
|
-
tempNodes[newEnd] = this.
|
|
2202
|
-
tempRows && (tempRows[newEnd] = this.
|
|
2203
|
-
tempIndexes && (tempIndexes[newEnd] = this.
|
|
1854
|
+
for (end = this.j - 1, newEnd = newLen - 1; end >= start && newEnd >= start && (this.F[end] === newItems[newEnd] || this.k && compare(this.N, this.F[end], newItems[newEnd])); end--, newEnd--) {
|
|
1855
|
+
temp[newEnd] = this.c[end];
|
|
1856
|
+
tempNodes[newEnd] = this.a[end];
|
|
1857
|
+
tempRows && (tempRows[newEnd] = this.k[end]);
|
|
1858
|
+
tempIndexes && (tempIndexes[newEnd] = this.l[end]);
|
|
2204
1859
|
}
|
|
2205
1860
|
newIndices = /* @__PURE__ */ new Map();
|
|
2206
1861
|
newIndicesNext = new Array(newEnd + 1);
|
|
2207
1862
|
for (j = newEnd; j >= start; j--) {
|
|
2208
1863
|
item = newItems[j];
|
|
2209
|
-
key = this.
|
|
1864
|
+
key = this.N ? this.N(item) : item;
|
|
2210
1865
|
i = newIndices.get(key);
|
|
2211
1866
|
newIndicesNext[j] = i === void 0 ? -1 : i;
|
|
2212
1867
|
newIndices.set(key, j);
|
|
2213
1868
|
}
|
|
2214
1869
|
for (i = start; i <= end; i++) {
|
|
2215
|
-
item = this.
|
|
2216
|
-
key = this.
|
|
1870
|
+
item = this.F[i];
|
|
1871
|
+
key = this.N ? this.N(item) : item;
|
|
2217
1872
|
j = newIndices.get(key);
|
|
2218
1873
|
if (j !== void 0 && j !== -1) {
|
|
2219
|
-
temp[j] = this.
|
|
2220
|
-
tempNodes[j] = this.
|
|
2221
|
-
tempRows && (tempRows[j] = this.
|
|
2222
|
-
tempIndexes && (tempIndexes[j] = this.
|
|
1874
|
+
temp[j] = this.c[i];
|
|
1875
|
+
tempNodes[j] = this.a[i];
|
|
1876
|
+
tempRows && (tempRows[j] = this.k[i]);
|
|
1877
|
+
tempIndexes && (tempIndexes[j] = this.l[i]);
|
|
2223
1878
|
j = newIndicesNext[j];
|
|
2224
1879
|
newIndices.set(key, j);
|
|
2225
1880
|
} else
|
|
2226
|
-
this.
|
|
1881
|
+
this.a[i].dispose();
|
|
2227
1882
|
}
|
|
2228
1883
|
for (j = start; j < newLen; j++) {
|
|
2229
1884
|
if (j in temp) {
|
|
2230
|
-
this.
|
|
2231
|
-
this.
|
|
1885
|
+
this.c[j] = temp[j];
|
|
1886
|
+
this.a[j] = tempNodes[j];
|
|
2232
1887
|
if (tempRows) {
|
|
2233
|
-
this.
|
|
2234
|
-
this.
|
|
1888
|
+
this.k[j] = tempRows[j];
|
|
1889
|
+
setSignal(this.k[j], newItems[j]);
|
|
2235
1890
|
}
|
|
2236
1891
|
if (tempIndexes) {
|
|
2237
|
-
this.
|
|
2238
|
-
this.
|
|
1892
|
+
this.l[j] = tempIndexes[j];
|
|
1893
|
+
setSignal(this.l[j], j);
|
|
2239
1894
|
}
|
|
2240
1895
|
} else {
|
|
2241
|
-
this.
|
|
1896
|
+
this.c[j] = runWithOwner(this.a[j] = createOwner(), mapper);
|
|
2242
1897
|
}
|
|
2243
1898
|
}
|
|
2244
|
-
this.
|
|
2245
|
-
this.
|
|
1899
|
+
this.c = this.c.slice(0, this.j = newLen);
|
|
1900
|
+
this.F = newItems.slice(0);
|
|
2246
1901
|
}
|
|
2247
1902
|
});
|
|
2248
|
-
return this.
|
|
1903
|
+
return this.c;
|
|
2249
1904
|
}
|
|
2250
1905
|
function repeat(count, map, options) {
|
|
2251
1906
|
return updateRepeat.bind({
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
1907
|
+
z: createOwner(),
|
|
1908
|
+
j: 0,
|
|
1909
|
+
w: 0,
|
|
1910
|
+
va: count,
|
|
1911
|
+
M: map,
|
|
1912
|
+
a: [],
|
|
1913
|
+
c: [],
|
|
1914
|
+
wa: options == null ? void 0 : options.from,
|
|
1915
|
+
X: options == null ? void 0 : options.fallback
|
|
2261
1916
|
});
|
|
2262
1917
|
}
|
|
2263
1918
|
function updateRepeat() {
|
|
2264
1919
|
var _a;
|
|
2265
|
-
const newLen = this.
|
|
2266
|
-
const from = ((_a = this.
|
|
2267
|
-
runWithOwner(this.
|
|
1920
|
+
const newLen = this.va();
|
|
1921
|
+
const from = ((_a = this.wa) == null ? void 0 : _a.call(this)) || 0;
|
|
1922
|
+
runWithOwner(this.z, () => {
|
|
2268
1923
|
if (newLen === 0) {
|
|
2269
|
-
if (this.
|
|
2270
|
-
this.
|
|
2271
|
-
this.
|
|
2272
|
-
this.
|
|
2273
|
-
this.
|
|
1924
|
+
if (this.j !== 0) {
|
|
1925
|
+
this.z.dispose(false);
|
|
1926
|
+
this.a = [];
|
|
1927
|
+
this.c = [];
|
|
1928
|
+
this.j = 0;
|
|
2274
1929
|
}
|
|
2275
|
-
if (this.
|
|
2276
|
-
this.
|
|
2277
|
-
this.
|
|
2278
|
-
this.
|
|
2279
|
-
null
|
|
1930
|
+
if (this.X && !this.c[0]) {
|
|
1931
|
+
this.c[0] = runWithOwner(
|
|
1932
|
+
this.a[0] = createOwner(),
|
|
1933
|
+
this.X
|
|
2280
1934
|
);
|
|
2281
1935
|
}
|
|
2282
1936
|
return;
|
|
2283
1937
|
}
|
|
2284
1938
|
const to = from + newLen;
|
|
2285
|
-
const prevTo = this.
|
|
2286
|
-
if (this.
|
|
2287
|
-
this.
|
|
1939
|
+
const prevTo = this.w + this.j;
|
|
1940
|
+
if (this.j === 0 && this.a[0])
|
|
1941
|
+
this.a[0].dispose();
|
|
2288
1942
|
for (let i = to; i < prevTo; i++)
|
|
2289
|
-
this.
|
|
2290
|
-
if (this.
|
|
2291
|
-
let i = this.
|
|
2292
|
-
while (i < from && i < this.
|
|
2293
|
-
this.
|
|
2294
|
-
this.
|
|
2295
|
-
this.
|
|
2296
|
-
} else if (this.
|
|
2297
|
-
let i = prevTo - this.
|
|
2298
|
-
let difference = this.
|
|
2299
|
-
this.
|
|
1943
|
+
this.a[i - this.w].dispose();
|
|
1944
|
+
if (this.w < from) {
|
|
1945
|
+
let i = this.w;
|
|
1946
|
+
while (i < from && i < this.j)
|
|
1947
|
+
this.a[i++].dispose();
|
|
1948
|
+
this.a.splice(0, from - this.w);
|
|
1949
|
+
this.c.splice(0, from - this.w);
|
|
1950
|
+
} else if (this.w > from) {
|
|
1951
|
+
let i = prevTo - this.w - 1;
|
|
1952
|
+
let difference = this.w - from;
|
|
1953
|
+
this.a.length = this.c.length = newLen;
|
|
2300
1954
|
while (i >= difference) {
|
|
2301
|
-
this.
|
|
2302
|
-
this.
|
|
1955
|
+
this.a[i] = this.a[i - difference];
|
|
1956
|
+
this.c[i] = this.c[i - difference];
|
|
2303
1957
|
i--;
|
|
2304
1958
|
}
|
|
2305
1959
|
for (let i2 = 0; i2 < difference; i2++) {
|
|
2306
|
-
this.
|
|
2307
|
-
this.
|
|
2308
|
-
() => this.
|
|
2309
|
-
null
|
|
1960
|
+
this.c[i2] = runWithOwner(
|
|
1961
|
+
this.a[i2] = createOwner(),
|
|
1962
|
+
() => this.M(i2 + from)
|
|
2310
1963
|
);
|
|
2311
1964
|
}
|
|
2312
1965
|
}
|
|
2313
1966
|
for (let i = prevTo; i < to; i++) {
|
|
2314
|
-
this.
|
|
2315
|
-
this.
|
|
2316
|
-
() => this.
|
|
2317
|
-
null
|
|
1967
|
+
this.c[i - from] = runWithOwner(
|
|
1968
|
+
this.a[i - from] = createOwner(),
|
|
1969
|
+
() => this.M(i)
|
|
2318
1970
|
);
|
|
2319
1971
|
}
|
|
2320
|
-
this.
|
|
2321
|
-
this.
|
|
2322
|
-
this.
|
|
1972
|
+
this.c = this.c.slice(0, newLen);
|
|
1973
|
+
this.w = from;
|
|
1974
|
+
this.j = newLen;
|
|
2323
1975
|
});
|
|
2324
|
-
return this.
|
|
1976
|
+
return this.c;
|
|
2325
1977
|
}
|
|
2326
1978
|
function compare(key, a, b) {
|
|
2327
1979
|
return key ? key(a) === key(b) : true;
|
|
2328
1980
|
}
|
|
2329
1981
|
|
|
2330
1982
|
// src/boundaries.ts
|
|
2331
|
-
|
|
2332
|
-
|
|
2333
|
-
|
|
2334
|
-
|
|
2335
|
-
|
|
2336
|
-
|
|
2337
|
-
|
|
2338
|
-
|
|
2339
|
-
|
|
2340
|
-
|
|
1983
|
+
function boundaryComputed(fn, propagationMask) {
|
|
1984
|
+
const node = computed(fn, void 0, {
|
|
1985
|
+
ja: {
|
|
1986
|
+
la() {
|
|
1987
|
+
let flags = this.f;
|
|
1988
|
+
this.f &= ~this.Y;
|
|
1989
|
+
if (this.Y & 1 /* Pending */ && !(this.f & 4 /* Uninitialized */)) {
|
|
1990
|
+
flags &= ~1 /* Pending */;
|
|
1991
|
+
}
|
|
1992
|
+
this.i.notify(this, this.Y, flags);
|
|
1993
|
+
},
|
|
1994
|
+
Y: propagationMask
|
|
2341
1995
|
}
|
|
2342
|
-
|
|
2343
|
-
|
|
2344
|
-
|
|
2345
|
-
}
|
|
1996
|
+
});
|
|
1997
|
+
node.Y = propagationMask;
|
|
1998
|
+
return node;
|
|
1999
|
+
}
|
|
2346
2000
|
function createBoundChildren(owner, fn, queue, mask) {
|
|
2347
|
-
const parentQueue = owner.
|
|
2348
|
-
parentQueue.addChild(owner.
|
|
2349
|
-
onCleanup(() => parentQueue.removeChild(owner.
|
|
2350
|
-
return
|
|
2351
|
-
|
|
2352
|
-
() =>
|
|
2353
|
-
|
|
2354
|
-
return new BoundaryComputation(() => latest(() => flatten(c.wait())), mask);
|
|
2355
|
-
},
|
|
2356
|
-
null
|
|
2357
|
-
);
|
|
2001
|
+
const parentQueue = owner.i;
|
|
2002
|
+
parentQueue.addChild(owner.i = queue);
|
|
2003
|
+
onCleanup(() => parentQueue.removeChild(owner.i));
|
|
2004
|
+
return runWithOwner(owner, () => {
|
|
2005
|
+
const c = computed(fn);
|
|
2006
|
+
return boundaryComputed(() => staleValues(() => flatten(read(c))), mask);
|
|
2007
|
+
});
|
|
2358
2008
|
}
|
|
2359
2009
|
var ConditionalQueue = class extends Queue {
|
|
2360
|
-
|
|
2361
|
-
|
|
2362
|
-
|
|
2010
|
+
r;
|
|
2011
|
+
fa = /* @__PURE__ */ new Set();
|
|
2012
|
+
h = /* @__PURE__ */ new Set();
|
|
2363
2013
|
constructor(disabled) {
|
|
2364
2014
|
super();
|
|
2365
|
-
this.
|
|
2015
|
+
this.r = disabled;
|
|
2366
2016
|
}
|
|
2367
2017
|
run(type) {
|
|
2368
|
-
if (!type || this.
|
|
2018
|
+
if (!type || read(this.r))
|
|
2369
2019
|
return;
|
|
2370
2020
|
return super.run(type);
|
|
2371
2021
|
}
|
|
2372
2022
|
notify(node, type, flags) {
|
|
2373
|
-
if (this.
|
|
2374
|
-
if (type &
|
|
2375
|
-
if (flags &
|
|
2376
|
-
this.
|
|
2377
|
-
type &= ~
|
|
2378
|
-
} else if (this.
|
|
2379
|
-
type &= ~
|
|
2023
|
+
if (read(this.r)) {
|
|
2024
|
+
if (type & 1 /* Pending */) {
|
|
2025
|
+
if (flags & 1 /* Pending */) {
|
|
2026
|
+
this.h.add(node);
|
|
2027
|
+
type &= ~1 /* Pending */;
|
|
2028
|
+
} else if (this.h.delete(node))
|
|
2029
|
+
type &= ~1 /* Pending */;
|
|
2380
2030
|
}
|
|
2381
|
-
if (type &
|
|
2382
|
-
if (flags &
|
|
2383
|
-
this.
|
|
2384
|
-
type &= ~
|
|
2385
|
-
} else if (this.
|
|
2386
|
-
type &= ~
|
|
2031
|
+
if (type & 2 /* Error */) {
|
|
2032
|
+
if (flags & 2 /* Error */) {
|
|
2033
|
+
this.fa.add(node);
|
|
2034
|
+
type &= ~2 /* Error */;
|
|
2035
|
+
} else if (this.fa.delete(node))
|
|
2036
|
+
type &= ~2 /* Error */;
|
|
2387
2037
|
}
|
|
2388
2038
|
}
|
|
2389
2039
|
return type ? super.notify(node, type, flags) : true;
|
|
2390
2040
|
}
|
|
2391
|
-
merge(queue) {
|
|
2392
|
-
queue.t.forEach((n) => this.notify(n, LOADING_BIT, LOADING_BIT));
|
|
2393
|
-
queue.X.forEach((n) => this.notify(n, ERROR_BIT, ERROR_BIT));
|
|
2394
|
-
super.merge(queue);
|
|
2395
|
-
}
|
|
2396
2041
|
};
|
|
2397
2042
|
var CollectionQueue = class extends Queue {
|
|
2398
|
-
|
|
2399
|
-
|
|
2400
|
-
|
|
2043
|
+
ga;
|
|
2044
|
+
a = /* @__PURE__ */ new Set();
|
|
2045
|
+
r = signal(false, { pureWrite: true });
|
|
2401
2046
|
constructor(type) {
|
|
2402
2047
|
super();
|
|
2403
|
-
this.
|
|
2048
|
+
this.ga = type;
|
|
2404
2049
|
}
|
|
2405
2050
|
run(type) {
|
|
2406
|
-
if (!type || this.
|
|
2051
|
+
if (!type || read(this.r))
|
|
2407
2052
|
return;
|
|
2408
2053
|
return super.run(type);
|
|
2409
2054
|
}
|
|
2410
2055
|
notify(node, type, flags) {
|
|
2411
|
-
if (!(type & this.
|
|
2056
|
+
if (!(type & this.ga))
|
|
2412
2057
|
return super.notify(node, type, flags);
|
|
2413
|
-
if (flags & this.
|
|
2414
|
-
this.
|
|
2415
|
-
if (this.
|
|
2416
|
-
this.
|
|
2417
|
-
} else if (this.
|
|
2418
|
-
this.
|
|
2419
|
-
if (this.
|
|
2420
|
-
this.
|
|
2421
|
-
}
|
|
2422
|
-
type &= ~this.
|
|
2058
|
+
if (flags & this.ga) {
|
|
2059
|
+
this.a.add(node);
|
|
2060
|
+
if (this.a.size === 1)
|
|
2061
|
+
setSignal(this.r, true);
|
|
2062
|
+
} else if (this.a.size > 0) {
|
|
2063
|
+
this.a.delete(node);
|
|
2064
|
+
if (this.a.size === 0)
|
|
2065
|
+
setSignal(this.r, false);
|
|
2066
|
+
}
|
|
2067
|
+
type &= ~this.ga;
|
|
2423
2068
|
return type ? super.notify(node, type, flags) : true;
|
|
2424
2069
|
}
|
|
2425
|
-
merge(queue) {
|
|
2426
|
-
queue.e.forEach((n) => this.notify(n, this.L, this.L));
|
|
2427
|
-
super.merge(queue);
|
|
2428
|
-
}
|
|
2429
2070
|
};
|
|
2430
2071
|
function createBoundary(fn, condition) {
|
|
2431
|
-
const owner =
|
|
2432
|
-
const queue = new ConditionalQueue(
|
|
2433
|
-
new Computation(void 0, () => condition() === "hidden" /* HIDDEN */)
|
|
2434
|
-
);
|
|
2072
|
+
const owner = createOwner();
|
|
2073
|
+
const queue = new ConditionalQueue(computed(() => condition() === "hidden" /* HIDDEN */));
|
|
2435
2074
|
const tree = createBoundChildren(owner, fn, queue, 0);
|
|
2436
|
-
|
|
2437
|
-
const disabled = queue.
|
|
2438
|
-
tree.
|
|
2075
|
+
computed(() => {
|
|
2076
|
+
const disabled = read(queue.r);
|
|
2077
|
+
tree.Y = disabled ? 2 /* Error */ | 1 /* Pending */ : 0;
|
|
2439
2078
|
if (!disabled) {
|
|
2440
|
-
queue.
|
|
2441
|
-
|
|
2442
|
-
|
|
2443
|
-
queue.
|
|
2079
|
+
queue.h.forEach(
|
|
2080
|
+
(node) => queue.notify(node, 1 /* Pending */, 1 /* Pending */)
|
|
2081
|
+
);
|
|
2082
|
+
queue.fa.forEach((node) => queue.notify(node, 2 /* Error */, 2 /* Error */));
|
|
2083
|
+
queue.h.clear();
|
|
2084
|
+
queue.fa.clear();
|
|
2444
2085
|
}
|
|
2445
2086
|
});
|
|
2446
|
-
return () => queue.
|
|
2087
|
+
return () => read(queue.r) ? void 0 : read(tree);
|
|
2447
2088
|
}
|
|
2448
2089
|
function createCollectionBoundary(type, fn, fallback) {
|
|
2449
|
-
const owner =
|
|
2090
|
+
const owner = createOwner();
|
|
2450
2091
|
const queue = new CollectionQueue(type);
|
|
2451
2092
|
const tree = createBoundChildren(owner, fn, queue, type);
|
|
2452
|
-
const decision =
|
|
2453
|
-
if (!queue.
|
|
2454
|
-
const resolved =
|
|
2455
|
-
if (!untrack(() => queue.
|
|
2093
|
+
const decision = computed(() => {
|
|
2094
|
+
if (!read(queue.r)) {
|
|
2095
|
+
const resolved = read(tree);
|
|
2096
|
+
if (!untrack(() => read(queue.r)))
|
|
2456
2097
|
return resolved;
|
|
2457
2098
|
}
|
|
2458
2099
|
return fallback(queue);
|
|
2459
2100
|
});
|
|
2460
|
-
return
|
|
2101
|
+
return read.bind(null, decision);
|
|
2461
2102
|
}
|
|
2462
|
-
function
|
|
2463
|
-
return createCollectionBoundary(
|
|
2103
|
+
function createLoadBoundary(fn, fallback) {
|
|
2104
|
+
return createCollectionBoundary(1 /* Pending */, fn, () => fallback());
|
|
2464
2105
|
}
|
|
2465
2106
|
function createErrorBoundary(fn, fallback) {
|
|
2466
|
-
return createCollectionBoundary(
|
|
2467
|
-
let node =
|
|
2468
|
-
return fallback(node.
|
|
2469
|
-
|
|
2470
|
-
|
|
2471
|
-
if (ActiveTransition && !node2.d)
|
|
2472
|
-
node2 = cloneGraph(node2);
|
|
2473
|
-
node2.a = STATE_DIRTY;
|
|
2474
|
-
getQueue(node2).enqueue(node2.s, node2.x.bind(node2));
|
|
2107
|
+
return createCollectionBoundary(2 /* Error */, fn, (queue) => {
|
|
2108
|
+
let node = queue.a.values().next().value;
|
|
2109
|
+
return fallback(node.B, () => {
|
|
2110
|
+
for (let node2 of queue.a) {
|
|
2111
|
+
recompute(node2, true);
|
|
2475
2112
|
}
|
|
2476
2113
|
});
|
|
2477
2114
|
});
|
|
@@ -2534,18 +2171,16 @@ function flattenArray(children, results = [], options) {
|
|
|
2534
2171
|
exports.$PROXY = $PROXY;
|
|
2535
2172
|
exports.$TARGET = $TARGET;
|
|
2536
2173
|
exports.$TRACK = $TRACK;
|
|
2537
|
-
exports.Computation = Computation;
|
|
2538
2174
|
exports.ContextNotFoundError = ContextNotFoundError;
|
|
2539
2175
|
exports.NoOwnerError = NoOwnerError;
|
|
2540
2176
|
exports.NotReadyError = NotReadyError;
|
|
2541
|
-
exports.Owner = Owner;
|
|
2542
|
-
exports.Queue = Queue;
|
|
2543
2177
|
exports.SUPPORTS_PROXY = SUPPORTS_PROXY;
|
|
2544
2178
|
exports.createAsync = createAsync;
|
|
2545
2179
|
exports.createBoundary = createBoundary;
|
|
2546
2180
|
exports.createContext = createContext;
|
|
2547
2181
|
exports.createEffect = createEffect;
|
|
2548
2182
|
exports.createErrorBoundary = createErrorBoundary;
|
|
2183
|
+
exports.createLoadBoundary = createLoadBoundary;
|
|
2549
2184
|
exports.createMemo = createMemo;
|
|
2550
2185
|
exports.createOptimistic = createOptimistic;
|
|
2551
2186
|
exports.createOptimisticStore = createOptimisticStore;
|
|
@@ -2555,30 +2190,27 @@ exports.createRenderEffect = createRenderEffect;
|
|
|
2555
2190
|
exports.createRoot = createRoot;
|
|
2556
2191
|
exports.createSignal = createSignal;
|
|
2557
2192
|
exports.createStore = createStore;
|
|
2558
|
-
exports.createSuspense = createSuspense;
|
|
2559
2193
|
exports.createTrackedEffect = createTrackedEffect;
|
|
2560
2194
|
exports.deep = deep;
|
|
2561
2195
|
exports.flatten = flatten;
|
|
2562
2196
|
exports.flush = flush;
|
|
2563
2197
|
exports.getContext = getContext;
|
|
2198
|
+
exports.getNextChildId = getNextChildId;
|
|
2564
2199
|
exports.getObserver = getObserver;
|
|
2565
2200
|
exports.getOwner = getOwner;
|
|
2566
|
-
exports.hasContext = hasContext;
|
|
2567
|
-
exports.hasUpdated = hasUpdated;
|
|
2568
2201
|
exports.isEqual = isEqual;
|
|
2569
2202
|
exports.isPending = isPending;
|
|
2570
2203
|
exports.isWrappable = isWrappable;
|
|
2571
|
-
exports.latest = latest;
|
|
2572
2204
|
exports.mapArray = mapArray;
|
|
2573
2205
|
exports.merge = merge;
|
|
2574
2206
|
exports.omit = omit;
|
|
2575
2207
|
exports.onCleanup = onCleanup;
|
|
2208
|
+
exports.onSettled = onSettled;
|
|
2209
|
+
exports.pending = pending;
|
|
2576
2210
|
exports.reconcile = reconcile;
|
|
2577
2211
|
exports.repeat = repeat;
|
|
2578
2212
|
exports.resolve = resolve;
|
|
2579
2213
|
exports.runWithOwner = runWithOwner;
|
|
2580
2214
|
exports.setContext = setContext;
|
|
2581
2215
|
exports.snapshot = snapshot;
|
|
2582
|
-
exports.transition = transition;
|
|
2583
2216
|
exports.untrack = untrack;
|
|
2584
|
-
exports.useTransition = useTransition;
|