signalium 2.2.3 → 2.3.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.
Files changed (87) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/cjs/development/config-B0MtLBgx.js.map +1 -1
  3. package/dist/cjs/development/{debug-3nd-6Gnf.js → debug-gCDAvnLM.js} +211 -207
  4. package/dist/cjs/development/debug-gCDAvnLM.js.map +1 -0
  5. package/dist/cjs/development/debug.js +9 -3
  6. package/dist/cjs/development/debug.js.map +1 -1
  7. package/dist/cjs/development/index.js +8 -8
  8. package/dist/cjs/development/react/index.js +43 -38
  9. package/dist/cjs/development/react/index.js.map +1 -1
  10. package/dist/cjs/development/snapshot-Di0yziPX.js +147 -0
  11. package/dist/cjs/development/snapshot-Di0yziPX.js.map +1 -0
  12. package/dist/cjs/development/transform/index.js +137 -118
  13. package/dist/cjs/development/transform/index.js.map +1 -1
  14. package/dist/cjs/development/utils.js +5 -3
  15. package/dist/cjs/development/utils.js.map +1 -1
  16. package/dist/cjs/production/config-B0MtLBgx.js.map +1 -1
  17. package/dist/cjs/production/{contexts-DoZWv_3I.js → contexts-Wgq2NOVX.js} +130 -133
  18. package/dist/cjs/production/contexts-Wgq2NOVX.js.map +1 -0
  19. package/dist/cjs/production/debug.js +61 -66
  20. package/dist/cjs/production/debug.js.map +1 -1
  21. package/dist/cjs/production/index.js +8 -8
  22. package/dist/cjs/production/react/index.js +43 -38
  23. package/dist/cjs/production/react/index.js.map +1 -1
  24. package/dist/cjs/production/snapshot-YJJyLbxS.js +147 -0
  25. package/dist/cjs/production/snapshot-YJJyLbxS.js.map +1 -0
  26. package/dist/cjs/production/transform/index.js +137 -118
  27. package/dist/cjs/production/transform/index.js.map +1 -1
  28. package/dist/cjs/production/utils.js +5 -3
  29. package/dist/cjs/production/utils.js.map +1 -1
  30. package/dist/esm/development/config-CPQL7hX-.js.map +1 -1
  31. package/dist/esm/development/{debug-BfudYKc4.js → debug-AoHfqs62.js} +195 -189
  32. package/dist/esm/development/debug-AoHfqs62.js.map +1 -0
  33. package/dist/esm/development/debug.js +1 -1
  34. package/dist/esm/development/index.js +6 -6
  35. package/dist/esm/development/react/index.js +43 -38
  36. package/dist/esm/development/react/index.js.map +1 -1
  37. package/dist/esm/development/snapshot-Bq0Um_hQ.js +148 -0
  38. package/dist/esm/development/snapshot-Bq0Um_hQ.js.map +1 -0
  39. package/dist/esm/development/transform/index.js +137 -118
  40. package/dist/esm/development/transform/index.js.map +1 -1
  41. package/dist/esm/development/utils.js +7 -4
  42. package/dist/esm/development/utils.js.map +1 -1
  43. package/dist/esm/internals/core-api.d.ts +2 -2
  44. package/dist/esm/internals/core-api.d.ts.map +1 -1
  45. package/dist/esm/internals/edge.d.ts +4 -4
  46. package/dist/esm/internals/edge.d.ts.map +1 -1
  47. package/dist/esm/internals/reactive.d.ts.map +1 -1
  48. package/dist/esm/internals/scheduling.d.ts.map +1 -1
  49. package/dist/esm/internals/signal.d.ts.map +1 -1
  50. package/dist/esm/internals/utils/snapshot.d.ts +29 -0
  51. package/dist/esm/internals/utils/snapshot.d.ts.map +1 -0
  52. package/dist/esm/production/config-CPQL7hX-.js.map +1 -1
  53. package/dist/esm/production/{contexts-CilfS6eG.js → contexts-X0gSj6rQ.js} +133 -136
  54. package/dist/esm/production/contexts-X0gSj6rQ.js.map +1 -0
  55. package/dist/esm/production/debug.js +51 -54
  56. package/dist/esm/production/debug.js.map +1 -1
  57. package/dist/esm/production/index.js +7 -7
  58. package/dist/esm/production/react/index.js +43 -38
  59. package/dist/esm/production/react/index.js.map +1 -1
  60. package/dist/esm/production/snapshot-CDS1d8mq.js +148 -0
  61. package/dist/esm/production/snapshot-CDS1d8mq.js.map +1 -0
  62. package/dist/esm/production/transform/index.js +137 -118
  63. package/dist/esm/production/transform/index.js.map +1 -1
  64. package/dist/esm/production/utils.js +7 -4
  65. package/dist/esm/production/utils.js.map +1 -1
  66. package/dist/esm/react/index.d.ts +1 -1
  67. package/dist/esm/react/index.d.ts.map +1 -1
  68. package/dist/esm/react/provider.d.ts.map +1 -1
  69. package/dist/esm/react/use-reactive.d.ts +1 -0
  70. package/dist/esm/react/use-reactive.d.ts.map +1 -1
  71. package/dist/esm/transform/callback.d.ts.map +1 -1
  72. package/dist/esm/transform/promise.d.ts.map +1 -1
  73. package/dist/esm/utils.d.ts +1 -0
  74. package/dist/esm/utils.d.ts.map +1 -1
  75. package/package.json +7 -5
  76. package/dist/cjs/development/core-api-C6HCIyL3.js +0 -55
  77. package/dist/cjs/development/core-api-C6HCIyL3.js.map +0 -1
  78. package/dist/cjs/development/debug-3nd-6Gnf.js.map +0 -1
  79. package/dist/cjs/production/contexts-DoZWv_3I.js.map +0 -1
  80. package/dist/cjs/production/core-api-CUviCxtM.js +0 -55
  81. package/dist/cjs/production/core-api-CUviCxtM.js.map +0 -1
  82. package/dist/esm/development/core-api-CjsScNn1.js +0 -56
  83. package/dist/esm/development/core-api-CjsScNn1.js.map +0 -1
  84. package/dist/esm/development/debug-BfudYKc4.js.map +0 -1
  85. package/dist/esm/production/contexts-CilfS6eG.js.map +0 -1
  86. package/dist/esm/production/core-api-tTQttL8R.js +0 -56
  87. package/dist/esm/production/core-api-tTQttL8R.js.map +0 -1
@@ -1,5 +1,6 @@
1
1
  import { s as scheduleFlush$1, r as runBatch } from "./config-CPQL7hX-.js";
2
2
  class WeakRefPolyfill {
3
+ value;
3
4
  constructor(value) {
4
5
  this.value = value;
5
6
  }
@@ -22,7 +23,8 @@ let TRACER;
22
23
  const getTracerProxy = () => {
23
24
  return TRACER;
24
25
  };
25
- var TracerEventType = /* @__PURE__ */ ((TracerEventType2) => {
26
+ var TracerEventType;
27
+ (function(TracerEventType2) {
26
28
  TracerEventType2["StartUpdate"] = "StartUpdate";
27
29
  TracerEventType2["EndUpdate"] = "EndUpdate";
28
30
  TracerEventType2["StartLoading"] = "StartLoading";
@@ -30,15 +32,31 @@ var TracerEventType = /* @__PURE__ */ ((TracerEventType2) => {
30
32
  TracerEventType2["Connected"] = "Connected";
31
33
  TracerEventType2["Disconnected"] = "Disconnected";
32
34
  TracerEventType2["ConsumeState"] = "ConsumeState";
33
- return TracerEventType2;
34
- })(TracerEventType || {});
35
- var SignalType = /* @__PURE__ */ ((SignalType2) => {
35
+ })(TracerEventType || (TracerEventType = {}));
36
+ var SignalType;
37
+ (function(SignalType2) {
36
38
  SignalType2["State"] = "state";
37
39
  SignalType2["Reactive"] = "reactive";
38
40
  SignalType2["Watcher"] = "watcher";
39
- return SignalType2;
40
- })(SignalType || {});
41
+ })(SignalType || (SignalType = {}));
41
42
  class VisualizerNode {
43
+ tracer;
44
+ depth;
45
+ type;
46
+ id;
47
+ value;
48
+ name;
49
+ params;
50
+ _setValue;
51
+ subscribers = [];
52
+ nextStateChildren = [];
53
+ stateChildren = [];
54
+ children = [];
55
+ updating = true;
56
+ loading = false;
57
+ version = 0;
58
+ updatingVersion = 0;
59
+ didConnect = false;
42
60
  constructor(tracer, depth, type, id, value, name, params, _setValue) {
43
61
  this.tracer = tracer;
44
62
  this.depth = depth;
@@ -50,15 +68,6 @@ class VisualizerNode {
50
68
  this._setValue = _setValue;
51
69
  this.tracer.maxDepth = Math.max(this.tracer.maxDepth, this.depth);
52
70
  }
53
- subscribers = [];
54
- nextStateChildren = [];
55
- stateChildren = [];
56
- children = [];
57
- updating = true;
58
- loading = false;
59
- version = 0;
60
- updatingVersion = 0;
61
- didConnect = false;
62
71
  get showParams() {
63
72
  return this.tracer.showParams;
64
73
  }
@@ -69,16 +78,14 @@ class VisualizerNode {
69
78
  return this.tracer.interactive;
70
79
  }
71
80
  setValue(value) {
72
- if (this.type !== "state") {
81
+ if (this.type !== SignalType.State) {
73
82
  throw new Error("setValue is only allowed on state nodes");
74
83
  }
75
84
  this._setValue?.(value);
76
85
  this.notify();
77
86
  }
78
87
  connectChild(child) {
79
- let childLink = this.children.find(
80
- (link) => link.node.id === child.id || link.node.name === child.name && link.version !== this.updatingVersion
81
- );
88
+ let childLink = this.children.find((link) => link.node.id === child.id || link.node.name === child.name && link.version !== this.updatingVersion);
82
89
  let shouldSkip = false;
83
90
  if (childLink) {
84
91
  if (!child.didConnect) {
@@ -141,16 +148,7 @@ class VisualizerNode {
141
148
  this.nextStateChildren.push(existing);
142
149
  existing.notify();
143
150
  } else {
144
- const node = new VisualizerNode(
145
- this.tracer,
146
- this.depth + 1,
147
- "state",
148
- id,
149
- value,
150
- name,
151
- void 0,
152
- setValue
153
- );
151
+ const node = new VisualizerNode(this.tracer, this.depth + 1, SignalType.State, id, value, name, void 0, setValue);
154
152
  node.updating = false;
155
153
  this.nextStateChildren.push(node);
156
154
  }
@@ -195,39 +193,39 @@ class TraceFlush {
195
193
  }
196
194
  }
197
195
  class Tracer {
196
+ showParams;
197
+ showValue;
198
+ interactive;
199
+ nodeMap = /* @__PURE__ */ new Map();
200
+ delay = 200;
201
+ maxDepth = 0;
202
+ initialized = false;
198
203
  constructor(id, immediate = false, showParams = true, showValue = true, interactive = true) {
199
204
  this.showParams = showParams;
200
205
  this.showValue = showValue;
201
206
  this.interactive = interactive;
202
207
  this.initialized = !immediate;
203
- const node = new VisualizerNode(this, 0, "watcher", id, "");
208
+ const node = new VisualizerNode(this, 0, SignalType.Watcher, id, "");
204
209
  this.rootNode = node;
205
210
  this.nodeMap.set(id, node);
206
211
  }
207
- nodeMap = /* @__PURE__ */ new Map();
208
- delay = 200;
209
- maxDepth = 0;
210
- initialized = false;
211
212
  rootNode;
212
213
  eventQueue = [];
213
214
  currentFlush;
214
215
  emit(event) {
215
- if (event.type === "Connected" || event.type === "ConsumeState") {
216
+ if (event.type === TracerEventType.Connected || event.type === TracerEventType.ConsumeState) {
216
217
  const node = this.nodeMap.get(event.id);
217
- if (!node || event.type === "Connected" && !event.name) {
218
+ if (!node || event.type === TracerEventType.Connected && !event.name) {
218
219
  return;
219
220
  }
220
221
  if (!this.nodeMap.has(event.childId)) {
221
- const name = event.type === "Connected" ? event.name : void 0;
222
- const params = event.type === "Connected" ? event.params : void 0;
223
- const nodeType = event.type === "Connected" ? event.nodeType : "state";
224
- this.nodeMap.set(
225
- event.childId,
226
- new VisualizerNode(this, node.depth + 1, nodeType, event.childId, "", name, params)
227
- );
222
+ const name = event.type === TracerEventType.Connected ? event.name : void 0;
223
+ const params = event.type === TracerEventType.Connected ? event.params : void 0;
224
+ const nodeType = event.type === TracerEventType.Connected ? event.nodeType : SignalType.State;
225
+ this.nodeMap.set(event.childId, new VisualizerNode(this, node.depth + 1, nodeType, event.childId, "", name, params));
228
226
  }
229
227
  }
230
- if (event.type === "StartLoading" || event.type === "EndLoading") {
228
+ if (event.type === TracerEventType.StartLoading || event.type === TracerEventType.EndLoading) {
231
229
  scheduleTracer(this);
232
230
  }
233
231
  if (this.initialized) {
@@ -241,28 +239,28 @@ class Tracer {
241
239
  if (!node) {
242
240
  return true;
243
241
  }
244
- let skipDelay = nextEvent?.type === "StartLoading";
245
- if (event.type === "Connected") {
242
+ let skipDelay = nextEvent?.type === TracerEventType.StartLoading;
243
+ if (event.type === TracerEventType.Connected) {
246
244
  let child = this.nodeMap.get(event.childId);
247
245
  if (!child) {
248
246
  throw new Error(`Child node ${event.childId} not found`);
249
247
  }
250
248
  skipDelay = node.connectChild(child);
251
- } else if (event.type === "Disconnected") {
249
+ } else if (event.type === TracerEventType.Disconnected) {
252
250
  node.disconnectChild(event.childId);
253
- } else if (event.type === "StartUpdate") {
251
+ } else if (event.type === TracerEventType.StartUpdate) {
254
252
  node.startUpdate();
255
- if (nextEvent && nextEvent.id === event.id && (nextEvent.type === "EndUpdate" || nextEvent.type === "StartLoading")) {
253
+ if (nextEvent && nextEvent.id === event.id && (nextEvent.type === TracerEventType.EndUpdate || nextEvent.type === TracerEventType.StartLoading)) {
256
254
  skipDelay = true;
257
255
  }
258
- } else if (event.type === "EndUpdate") {
256
+ } else if (event.type === TracerEventType.EndUpdate) {
259
257
  node.endUpdate(event.value, event.preserveChildren);
260
- } else if (event.type === "StartLoading") {
258
+ } else if (event.type === TracerEventType.StartLoading) {
261
259
  node.startLoading();
262
260
  skipDelay = true;
263
- } else if (event.type === "EndLoading") {
261
+ } else if (event.type === TracerEventType.EndLoading) {
264
262
  node.endLoading(event.value);
265
- } else if (event.type === "ConsumeState") {
263
+ } else if (event.type === TracerEventType.ConsumeState) {
266
264
  node.consumeState(event.childId, event.name, event.value, event.setValue);
267
265
  }
268
266
  return skipDelay;
@@ -328,6 +326,14 @@ const setCurrentConsumer = (consumer) => {
328
326
  const getCurrentConsumer = () => {
329
327
  return CURRENT_CONSUMER;
330
328
  };
329
+ const DEFAULT_EQUALS = (a, b) => a === b;
330
+ const FALSE_EQUALS = () => false;
331
+ const equalsFrom = (equals) => {
332
+ if (equals === false) {
333
+ return FALSE_EQUALS;
334
+ }
335
+ return equals ?? DEFAULT_EQUALS;
336
+ };
331
337
  let STATE_ID = 0;
332
338
  class StateSignal {
333
339
  _value;
@@ -339,8 +345,10 @@ class StateSignal {
339
345
  constructor(value, equals = (a, b) => a === b, desc = "signal") {
340
346
  this._value = value;
341
347
  this._equals = equals;
342
- this._id = STATE_ID++;
343
- this._desc = desc;
348
+ {
349
+ this._id = STATE_ID++;
350
+ this._desc = desc;
351
+ }
344
352
  }
345
353
  get value() {
346
354
  this.consume();
@@ -384,7 +392,7 @@ class StateSignal {
384
392
  }
385
393
  dirtySignal(sub);
386
394
  }
387
- this._subs = /* @__PURE__ */ new Map();
395
+ this._subs.clear();
388
396
  scheduleListeners(this);
389
397
  }
390
398
  addListener(listener) {
@@ -405,13 +413,12 @@ function runListeners$1(signal2) {
405
413
  listener();
406
414
  }
407
415
  }
408
- const FALSE_EQUALS$1 = () => false;
409
416
  function signal(initialValue, opts) {
410
- const equals = opts?.equals === false ? FALSE_EQUALS$1 : opts?.equals ?? ((a, b) => a === b);
417
+ const equals = opts?.equals === false ? FALSE_EQUALS : opts?.equals ?? ((a, b) => a === b);
411
418
  return new StateSignal(initialValue, equals, opts?.desc);
412
419
  }
413
420
  const notifier = (opts) => {
414
- return new StateSignal(void 0, FALSE_EQUALS$1, opts?.desc);
421
+ return new StateSignal(void 0, FALSE_EQUALS, opts?.desc);
415
422
  };
416
423
  function watchSignal(signal2, parentIsSuspended) {
417
424
  if (parentIsSuspended) {
@@ -535,7 +542,8 @@ let PENDING_GC = /* @__PURE__ */ new Set();
535
542
  const microtask = () => Promise.resolve();
536
543
  let currentFlush = null;
537
544
  const scheduleFlush = (fn) => {
538
- if (currentFlush) return;
545
+ if (currentFlush)
546
+ return;
539
547
  let resolve;
540
548
  const promise = new Promise((r) => resolve = r);
541
549
  currentFlush = { promise, resolve };
@@ -572,7 +580,8 @@ const scheduleTracer = (tracer) => {
572
580
  };
573
581
  const scheduleGcSweep = (scope) => {
574
582
  PENDING_GC.add(scope);
575
- if (PENDING_GC.size > 1) return;
583
+ if (PENDING_GC.size > 1)
584
+ return;
576
585
  scheduleIdleCallback(() => {
577
586
  for (const scope2 of PENDING_GC) {
578
587
  scope2.sweepGc();
@@ -582,6 +591,8 @@ const scheduleGcSweep = (scope) => {
582
591
  };
583
592
  const flushWatchers = async () => {
584
593
  const flush = currentFlush;
594
+ if (!flush)
595
+ return;
585
596
  while (PENDING_ASYNC_PULLS.length > 0 || PENDING_PULLS.size > 0) {
586
597
  const asyncPulls = PENDING_ASYNC_PULLS;
587
598
  PENDING_ASYNC_PULLS = [];
@@ -625,19 +636,17 @@ const settled = async () => {
625
636
  };
626
637
  function dirtySignal(signal2) {
627
638
  const prevState = signal2._state;
628
- if (prevState === ReactiveFnState.Dirty) {
639
+ if (prevState === 2) {
629
640
  return;
630
641
  }
631
- signal2._state = ReactiveFnState.Dirty;
632
- if (prevState < ReactiveFnState.MaybeDirty) {
642
+ signal2._state = 2;
643
+ if (prevState < 3) {
633
644
  propagateDirty(signal2);
634
645
  }
635
646
  }
636
647
  function propagateDirty(signal2) {
637
648
  if (getCurrentConsumer() === signal2) {
638
- throw new Error(
639
- "A signal was dirtied after it was consumed by the current function. This can cause race conditions and infinite rerenders and is not allowed."
640
- );
649
+ throw new Error("A signal was dirtied after it was consumed by the current function. This can cause race conditions and infinite rerenders and is not allowed.");
641
650
  }
642
651
  if (isRelay(signal2)) {
643
652
  if (signal2.watchCount > 0) {
@@ -648,31 +657,32 @@ function propagateDirty(signal2) {
648
657
  schedulePull(signal2);
649
658
  }
650
659
  dirtySignalConsumers(signal2.subs);
651
- signal2.subs = /* @__PURE__ */ new Map();
660
+ signal2.subs.clear();
652
661
  }
653
662
  }
654
663
  function dirtySignalConsumers(map) {
655
664
  for (const [subRef, edge] of map) {
656
665
  const sub = subRef.deref();
657
- if (sub === void 0 || sub.computedCount !== edge.consumedAt) continue;
666
+ if (sub === void 0 || sub.computedCount !== edge.consumedAt)
667
+ continue;
658
668
  const dirtyState = sub._state;
659
669
  switch (dirtyState) {
660
- case ReactiveFnState.Clean:
661
- sub._state = ReactiveFnState.MaybeDirty;
670
+ case 0:
671
+ sub._state = 3;
662
672
  sub.dirtyHead = edge;
663
673
  edge.nextDirty = void 0;
664
674
  propagateDirty(sub);
665
675
  break;
666
- case ReactiveFnState.Pending:
667
- case ReactiveFnState.MaybeDirty:
668
- case ReactiveFnState.PendingDirty: {
676
+ case 1:
677
+ case 3:
678
+ case 4: {
669
679
  let subEdge = sub.dirtyHead;
670
680
  const ord = edge.ord;
671
681
  if (subEdge.ord > ord) {
672
682
  sub.dirtyHead = edge;
673
683
  edge.nextDirty = subEdge;
674
- if (dirtyState === ReactiveFnState.Pending || dirtyState === ReactiveFnState.PendingDirty) {
675
- sub._state = ReactiveFnState.MaybeDirty;
684
+ if (dirtyState === 1 || dirtyState === 4) {
685
+ sub._state = 3;
676
686
  propagateDirty(sub);
677
687
  }
678
688
  } else {
@@ -693,21 +703,25 @@ function dirtySignalConsumers(map) {
693
703
  }
694
704
  }
695
705
  let CURRENT_ORD = 0;
696
- var EdgeType = /* @__PURE__ */ ((EdgeType2) => {
697
- EdgeType2[EdgeType2["Signal"] = 0] = "Signal";
698
- EdgeType2[EdgeType2["Promise"] = 1] = "Promise";
699
- return EdgeType2;
700
- })(EdgeType || {});
706
+ class EdgeBase {
707
+ type;
708
+ dep;
709
+ ord;
710
+ updatedAt;
711
+ consumedAt;
712
+ nextDirty;
713
+ constructor(type, dep, updatedAt, consumedAt) {
714
+ this.type = type;
715
+ this.dep = dep;
716
+ this.ord = CURRENT_ORD++;
717
+ this.updatedAt = updatedAt;
718
+ this.consumedAt = consumedAt;
719
+ this.nextDirty = void 0;
720
+ }
721
+ }
701
722
  function createEdge(prevEdge, type, dep, updatedAt, consumedAt) {
702
723
  if (prevEdge === void 0) {
703
- return {
704
- type,
705
- dep,
706
- ord: CURRENT_ORD++,
707
- updatedAt,
708
- consumedAt,
709
- nextDirty: void 0
710
- };
724
+ return new EdgeBase(type, dep, updatedAt, consumedAt);
711
725
  }
712
726
  prevEdge.ord = CURRENT_ORD++;
713
727
  prevEdge.updatedAt = updatedAt;
@@ -735,14 +749,6 @@ function findAndRemoveDirty(sub, dep) {
735
749
  }
736
750
  return void 0;
737
751
  }
738
- const DEFAULT_EQUALS = (a, b) => a === b;
739
- const FALSE_EQUALS = () => false;
740
- const equalsFrom = (equals) => {
741
- if (equals === false) {
742
- return FALSE_EQUALS;
743
- }
744
- return equals ?? DEFAULT_EQUALS;
745
- };
746
752
  const GeneratorResultConstructor = (function* () {
747
753
  })().constructor;
748
754
  function isGeneratorResult(value) {
@@ -931,12 +937,15 @@ class ReactivePromiseImpl {
931
937
  let remaining = len;
932
938
  let rejected = false;
933
939
  const onFulfillAt = (i) => (v) => {
934
- if (rejected) return;
940
+ if (rejected)
941
+ return;
935
942
  results[i] = v;
936
- if (--remaining === 0) p._setValue(results);
943
+ if (--remaining === 0)
944
+ p._setValue(results);
937
945
  };
938
946
  const onReject = (r) => {
939
- if (rejected) return;
947
+ if (rejected)
948
+ return;
940
949
  rejected = true;
941
950
  p._setError(r);
942
951
  };
@@ -949,15 +958,18 @@ class ReactivePromiseImpl {
949
958
  const p = new ReactivePromiseImpl();
950
959
  const arr = arrayFrom(values);
951
960
  const len = arr.length;
952
- if (len === 0) return p;
961
+ if (len === 0)
962
+ return p;
953
963
  let settled2 = false;
954
964
  const onFulfill = (v) => {
955
- if (settled2) return;
965
+ if (settled2)
966
+ return;
956
967
  settled2 = true;
957
968
  p._setValue(v);
958
969
  };
959
970
  const onReject = (r) => {
960
- if (settled2) return;
971
+ if (settled2)
972
+ return;
961
973
  settled2 = true;
962
974
  p._setError(r);
963
975
  };
@@ -978,12 +990,14 @@ class ReactivePromiseImpl {
978
990
  const errors = new Array(len);
979
991
  let fulfilled = false;
980
992
  const onFulfill = (value) => {
981
- if (fulfilled) return;
993
+ if (fulfilled)
994
+ return;
982
995
  fulfilled = true;
983
996
  p._setValue(value);
984
997
  };
985
998
  const onRejectAt = (index) => (reason) => {
986
- if (fulfilled) return;
999
+ if (fulfilled)
1000
+ return;
987
1001
  errors[index] = reason;
988
1002
  if (--pending === 0) {
989
1003
  p._setError(new AggregateError(errors, "All promises were rejected in ReactivePromise.any"));
@@ -1006,11 +1020,13 @@ class ReactivePromiseImpl {
1006
1020
  let remaining = len;
1007
1021
  const onFulfillAt = (index) => (value) => {
1008
1022
  results[index] = { status: "fulfilled", value };
1009
- if (--remaining === 0) p._setValue(results);
1023
+ if (--remaining === 0)
1024
+ p._setValue(results);
1010
1025
  };
1011
1026
  const onRejectAt = (index) => (reason) => {
1012
1027
  results[index] = { status: "rejected", reason };
1013
- if (--remaining === 0) p._setValue(results);
1028
+ if (--remaining === 0)
1029
+ p._setValue(results);
1014
1030
  };
1015
1031
  for (let i = 0; i < len; i++) {
1016
1032
  thenLoop(arr[i], onFulfillAt(i), onRejectAt(i));
@@ -1018,7 +1034,8 @@ class ReactivePromiseImpl {
1018
1034
  return p;
1019
1035
  }
1020
1036
  static resolve(value) {
1021
- if (value instanceof ReactivePromiseImpl) return value;
1037
+ if (value instanceof ReactivePromiseImpl)
1038
+ return value;
1022
1039
  return new ReactivePromiseImpl((resolve) => resolve(value));
1023
1040
  }
1024
1041
  static reject(reason) {
@@ -1029,7 +1046,7 @@ class ReactivePromiseImpl {
1029
1046
  p._equals = DEFAULT_EQUALS;
1030
1047
  p._initFlags(
1031
1048
  1
1032
- /* Pending */
1049
+ /* AsyncFlags.Pending */
1033
1050
  );
1034
1051
  const resolve = (value) => {
1035
1052
  if (value && typeof value.then === "function") {
@@ -1057,7 +1074,8 @@ class ReactivePromiseImpl {
1057
1074
  }
1058
1075
  _consumeFlags(flags) {
1059
1076
  const currentConsumer = getCurrentConsumer();
1060
- if (currentConsumer === void 0) return;
1077
+ if (currentConsumer === void 0)
1078
+ return;
1061
1079
  if ((this._flags & 128) !== 0) {
1062
1080
  this._connect();
1063
1081
  }
@@ -1073,7 +1091,7 @@ class ReactivePromiseImpl {
1073
1091
  const { ref, computedCount, deps } = currentConsumer;
1074
1092
  const prevEdge = deps.get(signal2);
1075
1093
  if (prevEdge?.consumedAt !== computedCount) {
1076
- const newEdge = createEdge(prevEdge, EdgeType.Signal, signal2, signal2.updatedCount, computedCount);
1094
+ const newEdge = createEdge(prevEdge, 0, signal2, signal2.updatedCount, computedCount);
1077
1095
  signal2.subs.set(ref, newEdge);
1078
1096
  deps.set(signal2, newEdge);
1079
1097
  }
@@ -1130,7 +1148,7 @@ class ReactivePromiseImpl {
1130
1148
  }
1131
1149
  this._setFlags(
1132
1150
  1
1133
- /* Pending */
1151
+ /* AsyncFlags.Pending */
1134
1152
  );
1135
1153
  dirtySignalConsumers(this._awaitSubs);
1136
1154
  return this._awaitSubs = /* @__PURE__ */ new Map();
@@ -1222,7 +1240,7 @@ class ReactivePromiseImpl {
1222
1240
  }
1223
1241
  }
1224
1242
  _scheduleSubs(awaitSubs, dirty) {
1225
- const newState = dirty ? ReactiveFnState.Dirty : ReactiveFnState.PendingDirty;
1243
+ const newState = dirty ? 2 : 4;
1226
1244
  for (const ref of awaitSubs.keys()) {
1227
1245
  const signal2 = ref.deref();
1228
1246
  if (signal2 === void 0) {
@@ -1235,49 +1253,49 @@ class ReactivePromiseImpl {
1235
1253
  get value() {
1236
1254
  this._consumeFlags(
1237
1255
  16
1238
- /* Value */
1256
+ /* AsyncFlags.Value */
1239
1257
  );
1240
1258
  return this._value;
1241
1259
  }
1242
1260
  get error() {
1243
1261
  this._consumeFlags(
1244
1262
  32
1245
- /* Error */
1263
+ /* AsyncFlags.Error */
1246
1264
  );
1247
1265
  return this._error;
1248
1266
  }
1249
1267
  get isPending() {
1250
1268
  this._consumeFlags(
1251
1269
  1
1252
- /* Pending */
1270
+ /* AsyncFlags.Pending */
1253
1271
  );
1254
1272
  return (this._flags & 1) !== 0;
1255
1273
  }
1256
1274
  get isRejected() {
1257
1275
  this._consumeFlags(
1258
1276
  2
1259
- /* Rejected */
1277
+ /* AsyncFlags.Rejected */
1260
1278
  );
1261
1279
  return (this._flags & 2) !== 0;
1262
1280
  }
1263
1281
  get isResolved() {
1264
1282
  this._consumeFlags(
1265
1283
  4
1266
- /* Resolved */
1284
+ /* AsyncFlags.Resolved */
1267
1285
  );
1268
1286
  return (this._flags & 4) !== 0;
1269
1287
  }
1270
1288
  get isReady() {
1271
1289
  this._consumeFlags(
1272
1290
  8
1273
- /* Ready */
1291
+ /* AsyncFlags.Ready */
1274
1292
  );
1275
1293
  return (this._flags & 8) !== 0;
1276
1294
  }
1277
1295
  get isSettled() {
1278
1296
  this._consumeFlags(
1279
1297
  6
1280
- /* Settled */
1298
+ /* AsyncFlags.Settled */
1281
1299
  );
1282
1300
  return (this._flags & 6) !== 0;
1283
1301
  }
@@ -1293,13 +1311,7 @@ class ReactivePromiseImpl {
1293
1311
  }
1294
1312
  ref = currentConsumer.ref;
1295
1313
  const prevEdge = this._awaitSubs.get(ref) ?? findAndRemoveDirty(currentConsumer, this);
1296
- edge = createEdge(
1297
- prevEdge,
1298
- EdgeType.Promise,
1299
- this,
1300
- this._updatedCount,
1301
- currentConsumer.computedCount
1302
- );
1314
+ edge = createEdge(prevEdge, 1, this, this._updatedCount, currentConsumer.computedCount);
1303
1315
  }
1304
1316
  const wrappedFulfilled = onfulfilled ? (value) => {
1305
1317
  try {
@@ -1335,16 +1347,13 @@ class ReactivePromiseImpl {
1335
1347
  return this.then(null, onrejected);
1336
1348
  }
1337
1349
  finally(onfinally) {
1338
- return this.then(
1339
- (value) => {
1340
- onfinally?.();
1341
- return value;
1342
- },
1343
- (reason) => {
1344
- onfinally?.();
1345
- throw reason;
1346
- }
1347
- );
1350
+ return this.then((value) => {
1351
+ onfinally?.();
1352
+ return value;
1353
+ }, (reason) => {
1354
+ onfinally?.();
1355
+ throw reason;
1356
+ });
1348
1357
  }
1349
1358
  get [Symbol.toStringTag]() {
1350
1359
  return `ReactivePromise`;
@@ -1366,7 +1375,7 @@ function createPromise(promise, signal2) {
1366
1375
  p["_equals"] = signal2.def.equals;
1367
1376
  p["_initFlags"](
1368
1377
  1
1369
- /* Pending */
1378
+ /* AsyncFlags.Pending */
1370
1379
  );
1371
1380
  p["_setPromise"](promise);
1372
1381
  return p;
@@ -1383,7 +1392,7 @@ function createRelay(activate, scope, opts) {
1383
1392
  }
1384
1393
  const signal2 = p["_signal"];
1385
1394
  signal2.subs = /* @__PURE__ */ new Map();
1386
- signal2._state = ReactiveFnState.Dirty;
1395
+ signal2._state = 2;
1387
1396
  active = false;
1388
1397
  currentSub = void 0;
1389
1398
  };
@@ -1428,7 +1437,7 @@ function createRelay(activate, scope, opts) {
1428
1437
  p["_equals"] = equalsFrom(opts?.equals);
1429
1438
  p["_initFlags"](
1430
1439
  128 | 1
1431
- /* Pending */
1440
+ /* AsyncFlags.Pending */
1432
1441
  );
1433
1442
  return p;
1434
1443
  }
@@ -1438,7 +1447,7 @@ function createTask(task, scope, opts) {
1438
1447
  p["_equals"] = equalsFrom(opts?.equals);
1439
1448
  p["_initFlags"](
1440
1449
  64
1441
- /* isRunnable */
1450
+ /* AsyncFlags.isRunnable */
1442
1451
  );
1443
1452
  const throwIfRunning = opts?.throwIfRunning === true;
1444
1453
  p["run"] = ((...args) => {
@@ -1474,7 +1483,7 @@ function getSignal(signal2) {
1474
1483
  }
1475
1484
  }
1476
1485
  const updatedAt = checkSignal(signal2);
1477
- const newEdge = createEdge(prevEdge, EdgeType.Signal, signal2, updatedAt, computedCount);
1486
+ const newEdge = createEdge(prevEdge, 0, signal2, updatedAt, computedCount);
1478
1487
  signal2.subs.set(ref, newEdge);
1479
1488
  deps.set(signal2, newEdge);
1480
1489
  } else {
@@ -1490,26 +1499,26 @@ function getSignal(signal2) {
1490
1499
  }
1491
1500
  function checkSignal(signal2) {
1492
1501
  const { ref, _state: state } = signal2;
1493
- if (state < ReactiveFnState.Dirty) {
1502
+ if (state < 2) {
1494
1503
  return signal2.updatedCount;
1495
1504
  }
1496
- if (state >= ReactiveFnState.MaybeDirty) {
1505
+ if (state >= 3) {
1497
1506
  let edge = signal2.dirtyHead;
1498
1507
  while (edge !== void 0) {
1499
- if (edge.type === EdgeType.Promise) {
1508
+ if (edge.type === 1) {
1500
1509
  const dep2 = edge.dep;
1501
1510
  if (dep2._getPending()) {
1502
1511
  const value = signal2._value;
1503
1512
  dep2["_awaitSubs"].set(ref, edge);
1504
1513
  value._setPending();
1505
- signal2._state = ReactiveFnState.Pending;
1514
+ signal2._state = 1;
1506
1515
  signal2.dirtyHead = edge;
1507
1516
  return signal2.updatedCount;
1508
1517
  } else if (edge.updatedAt === edge.dep._updatedCount) {
1509
1518
  dep2["_awaitSubs"].set(ref, edge);
1510
1519
  } else {
1511
1520
  signal2.dirtyHead = edge.nextDirty;
1512
- signal2._state = ReactiveFnState.Dirty;
1521
+ signal2._state = 2;
1513
1522
  break;
1514
1523
  }
1515
1524
  edge = edge.nextDirty;
@@ -1520,23 +1529,23 @@ function checkSignal(signal2) {
1520
1529
  dep.subs.set(ref, edge);
1521
1530
  if (edge.updatedAt !== updatedAt) {
1522
1531
  signal2.dirtyHead = edge.nextDirty;
1523
- signal2._state = ReactiveFnState.Dirty;
1532
+ signal2._state = 2;
1524
1533
  break;
1525
1534
  }
1526
1535
  edge = edge.nextDirty;
1527
1536
  }
1528
1537
  }
1529
1538
  const newState = signal2._state;
1530
- if (newState === ReactiveFnState.Dirty) {
1539
+ if (newState === 2) {
1531
1540
  if (signal2._isLazy) {
1532
1541
  signal2.updatedCount++;
1533
1542
  } else {
1534
1543
  runSignal(signal2);
1535
1544
  }
1536
- } else if (newState === ReactiveFnState.PendingDirty) {
1545
+ } else if (newState === 4) {
1537
1546
  signal2._value._clearPending();
1538
1547
  }
1539
- signal2._state = ReactiveFnState.Clean;
1548
+ signal2._state = 0;
1540
1549
  signal2.dirtyHead = void 0;
1541
1550
  if (getTracerProxy() !== void 0 && signal2.tracerMeta?.tracer) {
1542
1551
  scheduleTracer(signal2.tracerMeta.tracer);
@@ -1723,56 +1732,56 @@ function hashDate(date, _seen) {
1723
1732
  return hashNumber(
1724
1733
  date.getTime(),
1725
1734
  14
1726
- /* DATE */
1735
+ /* HashType.DATE */
1727
1736
  );
1728
1737
  }
1729
1738
  function hashRegExp(regexp, _seen) {
1730
1739
  const h = hashStr(
1731
1740
  regexp.source + regexp.flags,
1732
1741
  15
1733
- /* REGEXP */
1742
+ /* HashType.REGEXP */
1734
1743
  );
1735
1744
  return (h ^ regexp.lastIndex) >>> 0;
1736
1745
  }
1737
1746
  const UNDEFINED = hashStr(
1738
1747
  "undefined",
1739
1748
  0
1740
- /* UNDEFINED */
1749
+ /* HashType.UNDEFINED */
1741
1750
  );
1742
1751
  const NULL = hashStr(
1743
1752
  "null",
1744
1753
  1
1745
- /* NULL */
1754
+ /* HashType.NULL */
1746
1755
  );
1747
1756
  const TRUE = hashStr(
1748
1757
  "true",
1749
1758
  2
1750
- /* TRUE */
1759
+ /* HashType.TRUE */
1751
1760
  );
1752
1761
  const FALSE = hashStr(
1753
1762
  "false",
1754
1763
  3
1755
- /* FALSE */
1764
+ /* HashType.FALSE */
1756
1765
  );
1757
1766
  const ARRAY = hashStr(
1758
1767
  "array",
1759
1768
  7
1760
- /* ARRAY */
1769
+ /* HashType.ARRAY */
1761
1770
  );
1762
1771
  const OBJECT = hashStr(
1763
1772
  "object",
1764
1773
  8
1765
- /* OBJECT */
1774
+ /* HashType.OBJECT */
1766
1775
  );
1767
1776
  const SET = hashStr(
1768
1777
  "set",
1769
1778
  13
1770
- /* SET */
1779
+ /* HashType.SET */
1771
1780
  );
1772
1781
  const MAP = hashStr(
1773
1782
  "map",
1774
1783
  12
1775
- /* MAP */
1784
+ /* HashType.MAP */
1776
1785
  );
1777
1786
  const getObjectProto = Object.getPrototypeOf;
1778
1787
  const PROTO_TO_HASH = /* @__PURE__ */ new Map([
@@ -1796,19 +1805,19 @@ function hashValue(node, seen = []) {
1796
1805
  return hashStr(
1797
1806
  String(node),
1798
1807
  4
1799
- /* NUMBER */
1808
+ /* HashType.NUMBER */
1800
1809
  );
1801
1810
  case "string":
1802
1811
  return hashStr(
1803
1812
  node,
1804
1813
  5
1805
- /* STRING */
1814
+ /* HashType.STRING */
1806
1815
  );
1807
1816
  case "bigint":
1808
1817
  return hashStr(
1809
1818
  node.toString(),
1810
1819
  6
1811
- /* BIGINT */
1820
+ /* HashType.BIGINT */
1812
1821
  );
1813
1822
  case "object": {
1814
1823
  if (node === null) {
@@ -1819,7 +1828,7 @@ function hashValue(node, seen = []) {
1819
1828
  return hashStr(
1820
1829
  String(index),
1821
1830
  11
1822
- /* CYCLE */
1831
+ /* HashType.CYCLE */
1823
1832
  );
1824
1833
  }
1825
1834
  const hashFn = PROTO_TO_HASH.get(getObjectProto(node));
@@ -1837,7 +1846,7 @@ function hashValue(node, seen = []) {
1837
1846
  return hashStr(
1838
1847
  node.toString(),
1839
1848
  10
1840
- /* SYMBOL */
1849
+ /* HashType.SYMBOL */
1841
1850
  );
1842
1851
  }
1843
1852
  }
@@ -1849,7 +1858,7 @@ function getObjectHash(obj) {
1849
1858
  id = hashNumber(
1850
1859
  nextHashMapId++,
1851
1860
  9
1852
- /* REFERENCE */
1861
+ /* HashType.REFERENCE */
1853
1862
  );
1854
1863
  objectToHashMap.set(obj, id);
1855
1864
  }
@@ -1883,8 +1892,10 @@ function isPlainArray(arr) {
1883
1892
  return Array.isArray(arr);
1884
1893
  }
1885
1894
  function stringifyValue(value) {
1886
- if (value === null) return "null";
1887
- if (value === void 0) return "undefined";
1895
+ if (value === null)
1896
+ return "null";
1897
+ if (value === void 0)
1898
+ return "undefined";
1888
1899
  switch (typeof value) {
1889
1900
  case "number":
1890
1901
  case "boolean":
@@ -1916,25 +1927,21 @@ function stringifyValue(value) {
1916
1927
  return getObjectId(value);
1917
1928
  }
1918
1929
  }
1919
- var ReactiveFnState = /* @__PURE__ */ ((ReactiveFnState2) => {
1920
- ReactiveFnState2[ReactiveFnState2["Clean"] = 0] = "Clean";
1921
- ReactiveFnState2[ReactiveFnState2["Pending"] = 1] = "Pending";
1922
- ReactiveFnState2[ReactiveFnState2["Dirty"] = 2] = "Dirty";
1923
- ReactiveFnState2[ReactiveFnState2["MaybeDirty"] = 3] = "MaybeDirty";
1924
- ReactiveFnState2[ReactiveFnState2["PendingDirty"] = 4] = "PendingDirty";
1925
- return ReactiveFnState2;
1926
- })(ReactiveFnState || {});
1927
1930
  let ID = 0;
1928
1931
  function createReactiveDefinition(id, desc, compute, equals, isRelay2, paramKey, tracer) {
1929
- return {
1930
- id,
1931
- desc,
1932
+ const def = {
1932
1933
  compute,
1933
1934
  equals: equalsFrom(equals),
1934
1935
  isRelay: isRelay2,
1935
1936
  paramKey,
1936
- tracer
1937
+ tracer: void 0
1937
1938
  };
1939
+ {
1940
+ def.id = id;
1941
+ def.desc = desc;
1942
+ def.tracer = tracer;
1943
+ }
1944
+ return def;
1938
1945
  }
1939
1946
  class ReactiveSignal {
1940
1947
  // Bitmask containing state in the first 2 bits and boolean properties in the remaining bits
@@ -2106,13 +2113,14 @@ function createReactiveSignal(def, args = [], key, scope) {
2106
2113
  }
2107
2114
  let CONTEXT_ID = 0;
2108
2115
  class ContextImpl {
2116
+ defaultValue;
2117
+ _key;
2118
+ _description;
2109
2119
  constructor(defaultValue, desc) {
2110
2120
  this.defaultValue = defaultValue;
2111
2121
  this._description = desc ?? `context:${CONTEXT_ID++}`;
2112
2122
  this._key = Symbol(this._description);
2113
2123
  }
2114
- _key;
2115
- _description;
2116
2124
  }
2117
2125
  const context = (initialValue, description) => {
2118
2126
  return new ContextImpl(initialValue, description);
@@ -2130,9 +2138,7 @@ function withContexts(contexts, fn) {
2130
2138
  const getContext = (context2) => {
2131
2139
  const scope = CURRENT_SCOPE ?? getCurrentConsumer()?.scope;
2132
2140
  if (scope === void 0) {
2133
- throw new Error(
2134
- "getContext must be used within a reactive function, a withContext, or within a framework-specific context provider."
2135
- );
2141
+ throw new Error("getContext must be used within a reactive function, a withContext, or within a framework-specific context provider.");
2136
2142
  }
2137
2143
  return scope.getContext(context2) ?? context2.defaultValue;
2138
2144
  };
@@ -2272,8 +2278,8 @@ export {
2272
2278
  getCurrentConsumer as f,
2273
2279
  getCurrentScope as g,
2274
2280
  getGlobalScope as h,
2275
- hashValue as i,
2276
- isReactivePromise as j,
2281
+ isReactivePromise as i,
2282
+ hashValue as j,
2277
2283
  isRelay$1 as k,
2278
2284
  getSignal as l,
2279
2285
  isPromise as m,
@@ -2291,4 +2297,4 @@ export {
2291
2297
  withContexts as y,
2292
2298
  setGlobalContexts as z
2293
2299
  };
2294
- //# sourceMappingURL=debug-BfudYKc4.js.map
2300
+ //# sourceMappingURL=debug-AoHfqs62.js.map