@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/node.cjs CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  // src/core/error.ts
4
4
  var NotReadyError = class extends Error {
5
- constructor(node) {
5
+ constructor(cause) {
6
6
  super();
7
- this.cause = node;
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 STATE_CLEAN = 0;
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/flags.ts
34
- var ERROR_OFFSET = 0;
35
- var ERROR_BIT = 1 << ERROR_OFFSET;
36
- var LOADING_OFFSET = 1;
37
- var LOADING_BIT = 1 << LOADING_OFFSET;
38
- var UNINITIALIZED_OFFSET = 2;
39
- var UNINITIALIZED_BIT = 1 << UNINITIALIZED_OFFSET;
40
- var DEFAULT_FLAGS = ERROR_BIT;
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
- function incrementClock() {
45
- clock++;
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.C)
160
+ if (!globalQueue.ba)
55
161
  queueMicrotask(flush);
56
162
  }
57
- function notifyUnobserved() {
58
- var _a, _b;
59
- for (let i = 0; i < Unobserved.length; i++) {
60
- const source = Unobserved[i];
61
- if (!source.c || !source.c.length)
62
- (_b = (_a = Unobserved[i]).fa) == null ? void 0 : _b.call(_a);
63
- }
64
- Unobserved = [];
65
- }
66
- var pureQueue = [];
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
- l = null;
69
- C = false;
70
- h = [[], []];
71
- i = [];
176
+ s = null;
177
+ A = [[], []];
178
+ Q = [];
72
179
  created = clock;
73
- enqueue(type, fn) {
74
- pureQueue.push(fn);
75
- if (type)
76
- this.h[type - 1].push(fn);
77
- schedule();
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 === EFFECT_PURE) {
81
- pureQueue.length && runQueue(pureQueue, type);
82
- pureQueue = [];
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.i.length; i++) {
90
- this.i[i].run(type);
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.C)
218
+ if (this.ba)
95
219
  return;
96
- this.C = true;
220
+ this.ba = true;
97
221
  try {
98
- this.run(EFFECT_PURE);
99
- incrementClock();
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(EFFECT_RENDER);
102
- this.run(EFFECT_USER);
257
+ this.run(1 /* Render */);
258
+ this.run(2 /* User */);
103
259
  } finally {
104
- this.C = false;
105
- Unobserved.length && notifyUnobserved();
260
+ this.ba = false;
261
+ unobserved.length && notifyUnobserved();
106
262
  }
107
263
  }
108
- addChild(child) {
109
- if (ActiveTransition && ActiveTransition.J.has(this))
110
- return ActiveTransition.J.get(this).addChild(child);
111
- this.i.push(child);
112
- child.l = this;
113
- }
114
- removeChild(child) {
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
- merge(queue) {
129
- this.h[0].push.apply(this.h[0], queue.h[0]);
130
- this.h[1].push.apply(this.h[1], queue.h[1]);
131
- for (let i = 0; i < queue.i.length; i++) {
132
- const og = this.i.find((c) => c.d === queue.i[i].d);
133
- if (og)
134
- og.merge(queue.i[i]);
135
- else
136
- this.addChild(queue.i[i]);
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
- var globalQueue = new Queue();
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
- var Transition = class _Transition {
166
- b = /* @__PURE__ */ new Map();
167
- t = /* @__PURE__ */ new Set();
168
- K = /* @__PURE__ */ new Set();
169
- j = /* @__PURE__ */ new Set();
170
- D = false;
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
- enqueue(type, fn) {
189
- this.G.push(fn);
190
- if (type)
191
- this.h[type - 1].push(fn);
192
- this.schedule();
193
- }
194
- run(type) {
195
- if (type === EFFECT_PURE) {
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
- flush() {
209
- if (this.C || this.D)
210
- return;
211
- globalQueue.flush();
212
- this.C = true;
213
- let currentTransition = ActiveTransition;
214
- ActiveTransition = this;
215
- try {
216
- this.run(EFFECT_PURE);
217
- incrementClock();
218
- this.Y = false;
219
- ActiveTransition = currentTransition;
220
- finishTransition(this);
221
- } finally {
222
- this.C = false;
223
- ActiveTransition = currentTransition;
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
- addChild(child) {
227
- this.i.push(child);
228
- child.l = this;
229
- }
230
- removeChild(child) {
231
- const index = this.i.indexOf(child);
232
- if (index >= 0)
233
- this.i.splice(index, 1);
234
- }
235
- notify(node, type, flags) {
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
- this.t.delete(node);
396
+ el.u = null;
242
397
  }
243
- return true;
244
398
  }
245
- merge(queue) {
246
- this.h[0].push.apply(this.h[0], queue.h[0]);
247
- this.h[1].push.apply(this.h[1], queue.h[1]);
248
- this.G.push.apply(this.G, queue.G);
249
- queue.h[0].length = 0;
250
- queue.h[1].length = 0;
251
- queue.G.length = 0;
252
- for (let i = 0; i < queue.i.length; i++) {
253
- const og = this.i.find((c) => c.d === queue.i[i].d);
254
- if (og)
255
- og.merge(queue.i[i]);
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
- } finally {
311
- const transition2 = ActiveTransition;
312
- ActiveTransition = null;
313
- finishTransition(transition2);
411
+ if (el.C)
412
+ el.C.ca(value);
314
413
  }
315
- }
316
- addOptimistic(fn) {
317
- if (fn.f && fn.f !== this) {
318
- mergeTransitions(fn.f, this);
319
- ActiveTransition = fn.f;
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
- fn.f = this;
323
- this.j.add(fn);
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
- if (node.f) {
336
- if (node.f !== ActiveTransition) {
337
- mergeTransitions(node.f, ActiveTransition);
338
- ActiveTransition = node.f;
339
- }
340
- return node.f.b.get(node);
341
- }
342
- const clone = Object.create(Object.getPrototypeOf(node));
343
- Object.assign(clone, node, {
344
- o: null,
345
- n: null,
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 finishTransition(transition2) {
461
- if (transition2.D || transition2.Y || transition2.K.size || transition2.t.size)
462
- return;
463
- globalQueue.h[0].push.apply(globalQueue.h[0], transition2.h[0]);
464
- globalQueue.h[1].push.apply(globalQueue.h[1], transition2.h[1]);
465
- resolveQueues(transition2.i);
466
- for (const [source, clone] of transition2.b) {
467
- if (source === clone || source.f !== transition2) {
468
- delete source.f;
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
- transition2.D = true;
493
- for (const reset of transition2.j) {
494
- delete reset.f;
495
- reset();
454
+ if (prevSub !== null) {
455
+ prevSub.y = nextSub;
456
+ } else {
457
+ dep.p = nextSub;
496
458
  }
497
- transition2.aa.write(true);
498
- globalQueue.flush();
459
+ return nextDep;
499
460
  }
500
-
501
- // src/core/owner.ts
502
- var currentOwner = null;
503
- var defaultContext = {};
504
- function getOwner() {
505
- return currentOwner;
506
- }
507
- function setOwner(owner) {
508
- const out = currentOwner;
509
- currentOwner = owner;
510
- return out;
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
- getNextChildId() {
587
- if (this.id != null)
588
- return formatId(this.id, this.ga++);
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
- function createContext(defaultValue, description) {
593
- return { id: Symbol(description), defaultValue };
594
- }
595
- function getContext(context, owner = currentOwner) {
596
- if (!owner) {
597
- throw new NoOwnerError();
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
- const value = hasContext(context, owner) ? owner.A[context.id] : context.defaultValue;
600
- if (isUndefined(value)) {
601
- throw new ContextNotFoundError();
491
+ if (prevSub !== null) {
492
+ prevSub.y = newLink;
493
+ } else {
494
+ dep.p = newLink;
602
495
  }
603
- return value;
604
496
  }
605
- function setContext(context, value, owner = currentOwner) {
606
- if (!owner) {
607
- throw new NoOwnerError();
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
- owner.A = {
610
- ...owner.A,
611
- [context.id]: isUndefined(value) ? context.defaultValue : value
612
- };
511
+ return false;
613
512
  }
614
- function hasContext(context, owner = currentOwner) {
615
- return !isUndefined(owner == null ? void 0 : owner.A[context.id]);
513
+ function setStatusFlags(signal2, flags, error = null) {
514
+ signal2.f = flags;
515
+ signal2.B = error;
616
516
  }
617
- function onCleanup(fn) {
618
- if (!currentOwner)
619
- return fn;
620
- const node = currentOwner;
621
- if (!node.o) {
622
- node.o = fn;
623
- } else if (Array.isArray(node.o)) {
624
- node.o.push(fn);
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.o = [node.o, fn];
560
+ node.n = null;
561
+ node.K = null;
627
562
  }
628
- return fn;
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 isUndefined(value) {
635
- return typeof value === "undefined";
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
- // src/core/core.ts
639
- var currentObserver = null;
640
- var currentMask = DEFAULT_FLAGS;
641
- var newSources = null;
642
- var newSourcesIndex = 0;
643
- var newFlags = 0;
644
- var notStale = false;
645
- var updateCheck = null;
646
- var staleCheck = null;
647
- function getObserver() {
648
- return currentObserver;
649
- }
650
- var UNCHANGED = Symbol(0);
651
- var Computation = class extends Owner {
652
- b = null;
653
- c = null;
654
- m;
655
- O;
656
- P;
657
- // Used in __DEV__ mode, hopefully removed in production
658
- na;
659
- // Using false is an optimization as an alternative to _equals: () => false
660
- // which could enable more efficient DIRTY notification
661
- ba = isEqual;
662
- fa;
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
- return this.m;
695
- }
696
- }
697
- /**
698
- * Return the current value of this computation
699
- * Automatically re-executes the surrounding computation when the value changes
700
- */
701
- read() {
702
- if (ActiveTransition && (ActiveTransition.b.has(this) || !this.d && this.g & (UNINITIALIZED_BIT | ERROR_BIT))) {
703
- const clone = ActiveTransition.b.get(this) || cloneGraph(this);
704
- if (clone !== this)
705
- return clone.read();
706
- }
707
- if (this.P) {
708
- if (this.g & ERROR_BIT && this.Q <= clock)
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
- return this.m;
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
- * Set the current node's state, and recursively mark all of this node's observers as STATE_CHECK
774
- */
775
- u(state, skipQueue) {
776
- if (this.a >= state && !this.H)
777
- return;
778
- this.H = !!skipQueue;
779
- this.a = state;
780
- if (this.c && !(this.j && ActiveTransition)) {
781
- for (let i = 0; i < this.c.length; i++) {
782
- this.c[i].u(STATE_CHECK, skipQueue);
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
- N(error) {
815
- if (ActiveTransition && !this.d) {
816
- const clone = cloneGraph(this);
817
- if (clone !== this)
818
- return clone.N(error);
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
- if (this.a === STATE_DISPOSED) {
835
- return;
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
- if (this.a === STATE_CLEAN) {
838
- return;
783
+ pendingValueCheck = false;
784
+ try {
785
+ return read(el.C);
786
+ } finally {
787
+ pendingValueCheck = true;
839
788
  }
840
- let observerFlags = 0;
841
- if (this.a === STATE_CHECK) {
842
- for (let i = 0; i < this.b.length; i++) {
843
- const source = getTransitionSource(this.b[i]);
844
- source.F();
845
- observerFlags |= source.g & ~UNINITIALIZED_BIT;
846
- if (this.a === STATE_DIRTY) {
847
- break;
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
- if (this.a === STATE_DIRTY) {
852
- update(this);
800
+ }
801
+ if (el.f & 2 /* Error */) {
802
+ if (el.V < clock) {
803
+ recompute(el, true);
804
+ return read(el);
853
805
  } else {
854
- this.write(UNCHANGED, observerFlags);
855
- this.a = STATE_CLEAN;
806
+ throw el.B;
856
807
  }
857
808
  }
858
- /**
859
- * Remove ourselves from the owner graph and the computation graph
860
- */
861
- M() {
862
- if (this.a === STATE_DISPOSED)
863
- return;
864
- if (this.b)
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
- function track(computation) {
870
- if (ActiveTransition && computation.d)
871
- computation = computation.d;
872
- if (currentObserver) {
873
- if (!newSources && currentObserver.b && currentObserver.b[newSourcesIndex] === computation) {
874
- newSourcesIndex++;
875
- } else if (!newSources)
876
- newSources = [computation];
877
- else if (computation !== newSources[newSources.length - 1]) {
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
- } finally {
912
- if (newSources) {
913
- if (node.b)
914
- removeSourceObservers(node, newSourcesIndex);
915
- if (node.b && newSourcesIndex > 0) {
916
- node.b.length = newSourcesIndex + newSources.length;
917
- for (let i = 0; i < newSources.length; i++) {
918
- node.b[newSourcesIndex + i] = newSources[i];
919
- }
920
- } else {
921
- node.b = newSources;
922
- }
923
- let source;
924
- for (let i = newSourcesIndex; i < node.b.length; i++) {
925
- source = getTransitionSource(node.b[i]);
926
- if (!source.c)
927
- source.c = [node];
928
- else
929
- source.c.push(node);
930
- }
931
- } else if (node.b && newSourcesIndex < node.b.length) {
932
- removeSourceObservers(node, newSourcesIndex);
933
- node.b.length = newSourcesIndex;
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 isEqual(a, b) {
943
- return a === b;
888
+ function createRoot(init, options) {
889
+ const owner = createOwner(options);
890
+ return runWithOwner(owner, () => init(owner.dispose));
944
891
  }
945
- function untrack(fn) {
946
- if (currentObserver === null)
892
+ function runWithOwner(owner, fn) {
893
+ const oldContext = context;
894
+ context = owner;
895
+ try {
947
896
  return fn();
948
- return compute(getOwner(), fn, null);
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 hasUpdated(fn) {
951
- const current = updateCheck;
952
- updateCheck = { m: false };
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
- updateCheck = current;
916
+ pendingValueCheck = prevLatest;
958
917
  }
959
918
  }
960
- function pendingCheck(fn, loadingValue) {
961
- const current = staleCheck;
962
- staleCheck = { m: false };
919
+ function isPending(fn, loadingValue) {
920
+ const current = pendingCheck;
921
+ pendingCheck = { g: false };
963
922
  try {
964
- latest(fn);
965
- return staleCheck.m;
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
- staleCheck = current;
932
+ pendingCheck = current;
974
933
  }
975
934
  }
976
- function isPending(fn, loadingValue) {
977
- if (!currentObserver)
978
- return pendingCheck(fn, loadingValue);
979
- const c = new Computation(void 0, () => pendingCheck(fn, loadingValue));
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 latest(fn, fallback) {
993
- const argLength = arguments.length;
994
- const prevFlags = newFlags;
995
- const prevNotStale = notStale;
996
- notStale = false;
997
- try {
998
- return fn();
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 compute(owner, fn, observer) {
1009
- const prevOwner = setOwner(owner), prevObserver = currentObserver, prevMask = currentMask, prevNotStale = notStale;
1010
- currentObserver = observer;
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
- var Effect = class extends Computation {
1025
- da;
1026
- $;
1027
- w;
1028
- ea = false;
1029
- T;
1030
- s;
1031
- constructor(initialValue, compute2, effect, error, options) {
1032
- super(initialValue, compute2, options);
1033
- this.da = effect;
1034
- this.$ = error;
1035
- this.T = initialValue;
1036
- this.s = (options == null ? void 0 : options.render) ? EFFECT_RENDER : EFFECT_USER;
1037
- if (this.s === EFFECT_RENDER) {
1038
- this.P = function(p) {
1039
- return !this.d && clock > this.E.created && !(this.g & ERROR_BIT) ? latest(() => compute2(p)) : compute2(p);
1040
- };
1041
- }
1042
- this.F();
1043
- !(options == null ? void 0 : options.defer) && (this.s === EFFECT_USER ? getQueue(this).enqueue(this.s, this.x.bind(this)) : this.x(this.s));
1044
- }
1045
- write(value, flags = 0) {
1046
- if (this.a == STATE_DIRTY) {
1047
- this.g = flags;
1048
- if (this.s === EFFECT_RENDER) {
1049
- getQueue(this).notify(this, LOADING_BIT | ERROR_BIT, this.g);
1050
- }
1051
- }
1052
- if (value === UNCHANGED)
1053
- return this.m;
1054
- this.m = value;
1055
- this.ea = true;
1056
- this.O = void 0;
1057
- return value;
1058
- }
1059
- u(state, skipQueue) {
1060
- if (this.a >= state || skipQueue)
1061
- return;
1062
- if (this.a === STATE_CLEAN || this.d && !ActiveTransition)
1063
- getQueue(this).enqueue(this.s, this.x.bind(this));
1064
- this.a = state;
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
- for (let i = ancestors.length - 1; i >= 0; i--) {
1213
- if (ancestors[i].a !== STATE_DISPOSED)
1214
- ancestors[i].F();
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 = new Computation(second, first, third);
1043
+ const node2 = computed(first, second, third);
1222
1044
  return [
1223
- node2.wait.bind(node2),
1224
- (v) => {
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 = new Computation(
1051
+ const node = signal(
1233
1052
  first,
1234
- null,
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
- const read = node.wait.bind(node);
1326
- read.refresh = () => {
1327
- let n = node;
1328
- if (ActiveTransition && !node.d) {
1329
- n = cloneGraph(node);
1330
- }
1331
- n.a = STATE_DIRTY;
1332
- refreshing = true;
1333
- n.F();
1334
- };
1335
- return read;
1336
- }
1337
- function createEffect(compute2, effect, value, options) {
1338
- void new Effect(
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(compute2, effect, value, options) {
1347
- void new Effect(value, compute2, effect, void 0, {
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(compute2, options) {
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 runWithOwner(owner, run) {
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
- new EagerComputation(void 0, () => {
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
- const node = typeof first === "function" ? new Computation(
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 transition(fn) {
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].read() : override && key in override ? override[key] : value[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
- (_a = target[STORE_NODE][j]) == null ? void 0 : _a.write(wrap(next[j], target));
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
- (_b = target[STORE_NODE][j]) == null ? void 0 : _b.write(wrapped);
1156
+ target[STORE_NODE][j] && setSignal(target[STORE_NODE][j], wrapped);
1486
1157
  applyState(next[j], wrapped, keyFn, all);
1487
1158
  }
1488
- changed && ((_c = target[STORE_NODE][$TRACK]) == null ? void 0 : _c.write(void 0));
1489
- prevLength !== next.length && ((_d = target[STORE_NODE].length) == null ? void 0 : _d.write(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
- (_e = target[STORE_NODE][j]) == null ? void 0 : _e.write(wrapped);
1184
+ target[STORE_NODE][j] && setSignal(target[STORE_NODE][j], wrapped);
1514
1185
  applyState(next[j], wrapped, keyFn, all);
1515
1186
  } else
1516
- (_f = target[STORE_NODE][j]) == null ? void 0 : _f.write(wrap(next[j], target));
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
- (_g = target[STORE_NODE].length) == null ? void 0 : _g.write(next.length);
1199
+ target[STORE_NODE].length && setSignal(target[STORE_NODE].length, next.length);
1529
1200
  }
1530
- changed && ((_h = target[STORE_NODE][$TRACK]) == null ? void 0 : _h.write(void 0));
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 == null ? void 0 : tracked.write(void 0);
1545
- node == null ? void 0 : node.write(isWrappable(nextValue) ? wrap(nextValue, target) : nextValue);
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
- nodes[keys[i]].write(keys[i] in next);
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 = getTransitionSource(node);
1577
- (!o || o !== n) && n.wait();
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
- const node = new FirewallComputation(() => {
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] = new Computation(value, null, {
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).read();
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.m : storeValue[property];
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].read() : (nodes[property].read(), storeValue[property]) : storeValue[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).read();
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).read();
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, _d, _e, _f, _g;
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
- (_d = (_c = target[STORE_HAS]) == null ? void 0 : _c[property]) == null ? void 0 : _d.write(true);
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
- (_e = nodes[property]) == null ? void 0 : _e.write(wrappable ? wrap(value, target) : value);
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
- (_f = nodes.length) == null ? void 0 : _f.write(index);
1438
+ nodes.length && setSignal(nodes.length, index);
1766
1439
  }
1767
- (_g = nodes[$TRACK]) == null ? void 0 : _g.write(void 0);
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, _b, _c, _d;
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
- (_b = (_a2 = target[STORE_HAS]) == null ? void 0 : _a2[property]) == null ? void 0 : _b.write(false);
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
- (_c = nodes[property]) == null ? void 0 : _c.write(void 0);
1791
- (_d = nodes[$TRACK]) == null ? void 0 : _d.write(void 0);
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.write(void 0);
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
- const derived = typeof first === "function";
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 updateKeyedMap.bind({
2134
- U: new Owner(),
2135
- p: 0,
2136
- ka: list,
2137
- I: [],
2138
- R: map,
2139
- k: [],
2140
- e: [],
2141
- S: keyFn,
2142
- q: keyFn || (options == null ? void 0 : options.keyed) === false ? [] : void 0,
2143
- r: map.length > 1 ? [] : void 0,
2144
- V: options == null ? void 0 : options.fallback
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.ka() || [], newLen = newItems.length;
1802
+ const newItems = this.ua() || [], newLen = newItems.length;
2150
1803
  newItems[$TRACK];
2151
- runWithOwner(this.U, () => {
2152
- let i, j, mapper = this.q ? () => {
2153
- this.q[j] = new Computation(newItems[j], null, pureOptions);
2154
- this.r && (this.r[j] = new Computation(j, null, pureOptions));
2155
- return this.R(
2156
- Computation.prototype.read.bind(this.q[j]),
2157
- this.r ? Computation.prototype.read.bind(this.r[j]) : void 0
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.r ? () => {
1812
+ } : this.l ? () => {
2160
1813
  const item = newItems[j];
2161
- this.r[j] = new Computation(j, null, pureOptions);
2162
- return this.R(() => item, Computation.prototype.read.bind(this.r[j]));
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.R(() => item);
1821
+ return this.M(() => item);
2166
1822
  };
2167
1823
  if (newLen === 0) {
2168
- if (this.p !== 0) {
2169
- this.U.dispose(false);
2170
- this.e = [];
2171
- this.I = [];
2172
- this.k = [];
2173
- this.p = 0;
2174
- this.q && (this.q = []);
2175
- this.r && (this.r = []);
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.V && !this.k[0]) {
2178
- this.k[0] = compute(
2179
- this.e[0] = new Owner(),
2180
- this.V,
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.p === 0) {
2185
- if (this.e[0])
2186
- this.e[0].dispose();
2187
- this.k = new Array(newLen);
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.I[j] = newItems[j];
2190
- this.k[j] = compute(this.e[j] = new Owner(), mapper, null);
1844
+ this.F[j] = newItems[j];
1845
+ this.c[j] = runWithOwner(this.a[j] = createOwner(), mapper);
2191
1846
  }
2192
- this.p = newLen;
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.q ? new Array(newLen) : void 0, tempIndexes = this.r ? new Array(newLen) : void 0;
2195
- for (start = 0, end = Math.min(this.p, newLen); start < end && (this.I[start] === newItems[start] || this.q && compare(this.S, this.I[start], newItems[start])); start++) {
2196
- if (this.q)
2197
- this.q[start].write(newItems[start]);
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.p - 1, newEnd = newLen - 1; end >= start && newEnd >= start && (this.I[end] === newItems[newEnd] || this.q && compare(this.S, this.I[end], newItems[newEnd])); end--, newEnd--) {
2200
- temp[newEnd] = this.k[end];
2201
- tempNodes[newEnd] = this.e[end];
2202
- tempRows && (tempRows[newEnd] = this.q[end]);
2203
- tempIndexes && (tempIndexes[newEnd] = this.r[end]);
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.S ? this.S(item) : item;
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.I[i];
2216
- key = this.S ? this.S(item) : item;
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.k[i];
2220
- tempNodes[j] = this.e[i];
2221
- tempRows && (tempRows[j] = this.q[i]);
2222
- tempIndexes && (tempIndexes[j] = this.r[i]);
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.e[i].dispose();
1881
+ this.a[i].dispose();
2227
1882
  }
2228
1883
  for (j = start; j < newLen; j++) {
2229
1884
  if (j in temp) {
2230
- this.k[j] = temp[j];
2231
- this.e[j] = tempNodes[j];
1885
+ this.c[j] = temp[j];
1886
+ this.a[j] = tempNodes[j];
2232
1887
  if (tempRows) {
2233
- this.q[j] = tempRows[j];
2234
- this.q[j].write(newItems[j]);
1888
+ this.k[j] = tempRows[j];
1889
+ setSignal(this.k[j], newItems[j]);
2235
1890
  }
2236
1891
  if (tempIndexes) {
2237
- this.r[j] = tempIndexes[j];
2238
- this.r[j].write(j);
1892
+ this.l[j] = tempIndexes[j];
1893
+ setSignal(this.l[j], j);
2239
1894
  }
2240
1895
  } else {
2241
- this.k[j] = compute(this.e[j] = new Owner(), mapper, null);
1896
+ this.c[j] = runWithOwner(this.a[j] = createOwner(), mapper);
2242
1897
  }
2243
1898
  }
2244
- this.k = this.k.slice(0, this.p = newLen);
2245
- this.I = newItems.slice(0);
1899
+ this.c = this.c.slice(0, this.j = newLen);
1900
+ this.F = newItems.slice(0);
2246
1901
  }
2247
1902
  });
2248
- return this.k;
1903
+ return this.c;
2249
1904
  }
2250
1905
  function repeat(count, map, options) {
2251
1906
  return updateRepeat.bind({
2252
- U: new Owner(),
2253
- p: 0,
2254
- B: 0,
2255
- la: count,
2256
- R: map,
2257
- e: [],
2258
- k: [],
2259
- ma: options == null ? void 0 : options.from,
2260
- V: options == null ? void 0 : options.fallback
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.la();
2266
- const from = ((_a = this.ma) == null ? void 0 : _a.call(this)) || 0;
2267
- runWithOwner(this.U, () => {
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.p !== 0) {
2270
- this.U.dispose(false);
2271
- this.e = [];
2272
- this.k = [];
2273
- this.p = 0;
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.V && !this.k[0]) {
2276
- this.k[0] = compute(
2277
- this.e[0] = new Owner(),
2278
- this.V,
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.B + this.p;
2286
- if (this.p === 0 && this.e[0])
2287
- this.e[0].dispose();
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.e[i - this.B].dispose();
2290
- if (this.B < from) {
2291
- let i = this.B;
2292
- while (i < from && i < this.p)
2293
- this.e[i++].dispose();
2294
- this.e.splice(0, from - this.B);
2295
- this.k.splice(0, from - this.B);
2296
- } else if (this.B > from) {
2297
- let i = prevTo - this.B - 1;
2298
- let difference = this.B - from;
2299
- this.e.length = this.k.length = newLen;
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.e[i] = this.e[i - difference];
2302
- this.k[i] = this.k[i - difference];
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.k[i2] = compute(
2307
- this.e[i2] = new Owner(),
2308
- () => this.R(i2 + from),
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.k[i - from] = compute(
2315
- this.e[i - from] = new Owner(),
2316
- () => this.R(i),
2317
- null
1967
+ this.c[i - from] = runWithOwner(
1968
+ this.a[i - from] = createOwner(),
1969
+ () => this.M(i)
2318
1970
  );
2319
1971
  }
2320
- this.k = this.k.slice(0, newLen);
2321
- this.B = from;
2322
- this.p = newLen;
1972
+ this.c = this.c.slice(0, newLen);
1973
+ this.w = from;
1974
+ this.j = newLen;
2323
1975
  });
2324
- return this.k;
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
- var BoundaryComputation = class extends EagerComputation {
2332
- W;
2333
- constructor(compute2, propagationMask) {
2334
- super(void 0, compute2, { defer: true });
2335
- this.W = propagationMask;
2336
- }
2337
- write(value, flags) {
2338
- super.write(value, flags & ~this.W);
2339
- if (this.W & LOADING_BIT && !(this.g & UNINITIALIZED_BIT || ActiveTransition)) {
2340
- flags &= ~LOADING_BIT;
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
- getQueue(this).notify(this, this.W, flags);
2343
- return this.m;
2344
- }
2345
- };
1996
+ });
1997
+ node.Y = propagationMask;
1998
+ return node;
1999
+ }
2346
2000
  function createBoundChildren(owner, fn, queue, mask) {
2347
- const parentQueue = owner.E;
2348
- parentQueue.addChild(owner.E = queue);
2349
- onCleanup(() => parentQueue.removeChild(owner.E));
2350
- return compute(
2351
- owner,
2352
- () => {
2353
- const c = new Computation(void 0, fn);
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
- y;
2361
- X = /* @__PURE__ */ new Set();
2362
- t = /* @__PURE__ */ new Set();
2010
+ r;
2011
+ fa = /* @__PURE__ */ new Set();
2012
+ h = /* @__PURE__ */ new Set();
2363
2013
  constructor(disabled) {
2364
2014
  super();
2365
- this.y = disabled;
2015
+ this.r = disabled;
2366
2016
  }
2367
2017
  run(type) {
2368
- if (!type || this.y.read())
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.y.read()) {
2374
- if (type & LOADING_BIT) {
2375
- if (flags & LOADING_BIT) {
2376
- this.t.add(node);
2377
- type &= ~LOADING_BIT;
2378
- } else if (this.t.delete(node))
2379
- type &= ~LOADING_BIT;
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 & ERROR_BIT) {
2382
- if (flags & ERROR_BIT) {
2383
- this.X.add(node);
2384
- type &= ~ERROR_BIT;
2385
- } else if (this.X.delete(node))
2386
- type &= ~ERROR_BIT;
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
- L;
2399
- e = /* @__PURE__ */ new Set();
2400
- y = new Computation(false, null, { pureWrite: true });
2043
+ ga;
2044
+ a = /* @__PURE__ */ new Set();
2045
+ r = signal(false, { pureWrite: true });
2401
2046
  constructor(type) {
2402
2047
  super();
2403
- this.L = type;
2048
+ this.ga = type;
2404
2049
  }
2405
2050
  run(type) {
2406
- if (!type || this.y.read())
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.L))
2056
+ if (!(type & this.ga))
2412
2057
  return super.notify(node, type, flags);
2413
- if (flags & this.L) {
2414
- this.e.add(node);
2415
- if (this.e.size === 1)
2416
- this.y.write(true);
2417
- } else if (this.e.size > 0) {
2418
- this.e.delete(node);
2419
- if (this.e.size === 0)
2420
- this.y.write(false);
2421
- }
2422
- type &= ~this.L;
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 = new 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
- new EagerComputation(void 0, () => {
2437
- const disabled = queue.y.read();
2438
- tree.W = disabled ? ERROR_BIT | LOADING_BIT : 0;
2075
+ computed(() => {
2076
+ const disabled = read(queue.r);
2077
+ tree.Y = disabled ? 2 /* Error */ | 1 /* Pending */ : 0;
2439
2078
  if (!disabled) {
2440
- queue.t.forEach((node) => queue.notify(node, LOADING_BIT, LOADING_BIT));
2441
- queue.X.forEach((node) => queue.notify(node, ERROR_BIT, ERROR_BIT));
2442
- queue.t.clear();
2443
- queue.X.clear();
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.y.read() ? void 0 : tree.read();
2087
+ return () => read(queue.r) ? void 0 : read(tree);
2447
2088
  }
2448
2089
  function createCollectionBoundary(type, fn, fallback) {
2449
- const owner = new Owner();
2090
+ const owner = createOwner();
2450
2091
  const queue = new CollectionQueue(type);
2451
2092
  const tree = createBoundChildren(owner, fn, queue, type);
2452
- const decision = new Computation(void 0, () => {
2453
- if (!queue.y.read()) {
2454
- const resolved = tree.read();
2455
- if (!untrack(() => queue.y.read()))
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 decision.read.bind(decision);
2101
+ return read.bind(null, decision);
2461
2102
  }
2462
- function createSuspense(fn, fallback) {
2463
- return createCollectionBoundary(LOADING_BIT, fn, () => fallback());
2103
+ function createLoadBoundary(fn, fallback) {
2104
+ return createCollectionBoundary(1 /* Pending */, fn, () => fallback());
2464
2105
  }
2465
2106
  function createErrorBoundary(fn, fallback) {
2466
- return createCollectionBoundary(ERROR_BIT, fn, (queue) => {
2467
- let node = getTransitionSource(queue.e.values().next().value);
2468
- return fallback(node.O, () => {
2469
- incrementClock();
2470
- for (let node2 of queue.e) {
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;