signalium 2.2.3 → 2.3.1

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 (94) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/development/config-B0MtLBgx.js.map +1 -1
  3. package/dist/cjs/development/{debug-3nd-6Gnf.js → debug-CmcrpeEO.js} +228 -207
  4. package/dist/cjs/development/debug-CmcrpeEO.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 +9 -8
  8. package/dist/cjs/development/index.js.map +1 -1
  9. package/dist/cjs/development/react/index.js +43 -38
  10. package/dist/cjs/development/react/index.js.map +1 -1
  11. package/dist/cjs/development/snapshot-BJN--_kH.js +147 -0
  12. package/dist/cjs/development/snapshot-BJN--_kH.js.map +1 -0
  13. package/dist/cjs/development/transform/index.js +137 -118
  14. package/dist/cjs/development/transform/index.js.map +1 -1
  15. package/dist/cjs/development/utils.js +5 -3
  16. package/dist/cjs/development/utils.js.map +1 -1
  17. package/dist/cjs/production/config-B0MtLBgx.js.map +1 -1
  18. package/dist/cjs/production/{contexts-DoZWv_3I.js → contexts-DCujds9v.js} +147 -133
  19. package/dist/cjs/production/contexts-DCujds9v.js.map +1 -0
  20. package/dist/cjs/production/debug.js +61 -66
  21. package/dist/cjs/production/debug.js.map +1 -1
  22. package/dist/cjs/production/index.js +9 -8
  23. package/dist/cjs/production/index.js.map +1 -1
  24. package/dist/cjs/production/react/index.js +43 -38
  25. package/dist/cjs/production/react/index.js.map +1 -1
  26. package/dist/cjs/production/snapshot-CRhlFRNu.js +147 -0
  27. package/dist/cjs/production/snapshot-CRhlFRNu.js.map +1 -0
  28. package/dist/cjs/production/transform/index.js +137 -118
  29. package/dist/cjs/production/transform/index.js.map +1 -1
  30. package/dist/cjs/production/utils.js +5 -3
  31. package/dist/cjs/production/utils.js.map +1 -1
  32. package/dist/esm/development/config-CPQL7hX-.js.map +1 -1
  33. package/dist/esm/development/{debug-BfudYKc4.js → debug-B6Cqxyzi.js} +228 -205
  34. package/dist/esm/development/debug-B6Cqxyzi.js.map +1 -0
  35. package/dist/esm/development/debug.js +9 -9
  36. package/dist/esm/development/index.js +15 -14
  37. package/dist/esm/development/react/index.js +43 -38
  38. package/dist/esm/development/react/index.js.map +1 -1
  39. package/dist/esm/development/snapshot-BeaCnwxd.js +148 -0
  40. package/dist/esm/development/snapshot-BeaCnwxd.js.map +1 -0
  41. package/dist/esm/development/transform/index.js +137 -118
  42. package/dist/esm/development/transform/index.js.map +1 -1
  43. package/dist/esm/development/utils.js +7 -4
  44. package/dist/esm/development/utils.js.map +1 -1
  45. package/dist/esm/index.d.ts +1 -1
  46. package/dist/esm/index.d.ts.map +1 -1
  47. package/dist/esm/internals/async.d.ts.map +1 -1
  48. package/dist/esm/internals/core-api.d.ts +2 -2
  49. package/dist/esm/internals/core-api.d.ts.map +1 -1
  50. package/dist/esm/internals/edge.d.ts +4 -4
  51. package/dist/esm/internals/edge.d.ts.map +1 -1
  52. package/dist/esm/internals/reactive.d.ts +1 -0
  53. package/dist/esm/internals/reactive.d.ts.map +1 -1
  54. package/dist/esm/internals/scheduling.d.ts.map +1 -1
  55. package/dist/esm/internals/signal.d.ts +4 -0
  56. package/dist/esm/internals/signal.d.ts.map +1 -1
  57. package/dist/esm/internals/utils/snapshot.d.ts +29 -0
  58. package/dist/esm/internals/utils/snapshot.d.ts.map +1 -0
  59. package/dist/esm/production/config-CPQL7hX-.js.map +1 -1
  60. package/dist/esm/production/{contexts-CilfS6eG.js → contexts-DL91-2Y8.js} +158 -144
  61. package/dist/esm/production/contexts-DL91-2Y8.js.map +1 -0
  62. package/dist/esm/production/debug.js +51 -54
  63. package/dist/esm/production/debug.js.map +1 -1
  64. package/dist/esm/production/index.js +16 -15
  65. package/dist/esm/production/react/index.js +43 -38
  66. package/dist/esm/production/react/index.js.map +1 -1
  67. package/dist/esm/production/snapshot-Cj4ycaEt.js +148 -0
  68. package/dist/esm/production/snapshot-Cj4ycaEt.js.map +1 -0
  69. package/dist/esm/production/transform/index.js +137 -118
  70. package/dist/esm/production/transform/index.js.map +1 -1
  71. package/dist/esm/production/utils.js +7 -4
  72. package/dist/esm/production/utils.js.map +1 -1
  73. package/dist/esm/react/index.d.ts +1 -1
  74. package/dist/esm/react/index.d.ts.map +1 -1
  75. package/dist/esm/react/provider.d.ts.map +1 -1
  76. package/dist/esm/react/use-reactive.d.ts +1 -0
  77. package/dist/esm/react/use-reactive.d.ts.map +1 -1
  78. package/dist/esm/transform/callback.d.ts.map +1 -1
  79. package/dist/esm/transform/promise.d.ts.map +1 -1
  80. package/dist/esm/utils.d.ts +1 -0
  81. package/dist/esm/utils.d.ts.map +1 -1
  82. package/package.json +7 -5
  83. package/dist/cjs/development/core-api-C6HCIyL3.js +0 -55
  84. package/dist/cjs/development/core-api-C6HCIyL3.js.map +0 -1
  85. package/dist/cjs/development/debug-3nd-6Gnf.js.map +0 -1
  86. package/dist/cjs/production/contexts-DoZWv_3I.js.map +0 -1
  87. package/dist/cjs/production/core-api-CUviCxtM.js +0 -55
  88. package/dist/cjs/production/core-api-CUviCxtM.js.map +0 -1
  89. package/dist/esm/development/core-api-CjsScNn1.js +0 -56
  90. package/dist/esm/development/core-api-CjsScNn1.js.map +0 -1
  91. package/dist/esm/development/debug-BfudYKc4.js.map +0 -1
  92. package/dist/esm/production/contexts-CilfS6eG.js.map +0 -1
  93. package/dist/esm/production/core-api-tTQttL8R.js +0 -56
  94. package/dist/esm/production/core-api-tTQttL8R.js.map +0 -1
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  const config = require("./config-B0MtLBgx.js");
3
3
  class WeakRefPolyfill {
4
+ value;
4
5
  constructor(value) {
5
6
  this.value = value;
6
7
  }
@@ -23,23 +24,40 @@ let TRACER;
23
24
  const getTracerProxy = () => {
24
25
  return TRACER;
25
26
  };
26
- var TracerEventType = /* @__PURE__ */ ((TracerEventType2) => {
27
- TracerEventType2["StartUpdate"] = "StartUpdate";
28
- TracerEventType2["EndUpdate"] = "EndUpdate";
29
- TracerEventType2["StartLoading"] = "StartLoading";
30
- TracerEventType2["EndLoading"] = "EndLoading";
31
- TracerEventType2["Connected"] = "Connected";
32
- TracerEventType2["Disconnected"] = "Disconnected";
33
- TracerEventType2["ConsumeState"] = "ConsumeState";
34
- return TracerEventType2;
35
- })(TracerEventType || {});
36
- var SignalType = /* @__PURE__ */ ((SignalType2) => {
37
- SignalType2["State"] = "state";
38
- SignalType2["Reactive"] = "reactive";
39
- SignalType2["Watcher"] = "watcher";
40
- return SignalType2;
41
- })(SignalType || {});
27
+ exports.TracerEventType = void 0;
28
+ (function(TracerEventType) {
29
+ TracerEventType["StartUpdate"] = "StartUpdate";
30
+ TracerEventType["EndUpdate"] = "EndUpdate";
31
+ TracerEventType["StartLoading"] = "StartLoading";
32
+ TracerEventType["EndLoading"] = "EndLoading";
33
+ TracerEventType["Connected"] = "Connected";
34
+ TracerEventType["Disconnected"] = "Disconnected";
35
+ TracerEventType["ConsumeState"] = "ConsumeState";
36
+ })(exports.TracerEventType || (exports.TracerEventType = {}));
37
+ exports.SignalType = void 0;
38
+ (function(SignalType) {
39
+ SignalType["State"] = "state";
40
+ SignalType["Reactive"] = "reactive";
41
+ SignalType["Watcher"] = "watcher";
42
+ })(exports.SignalType || (exports.SignalType = {}));
42
43
  class VisualizerNode {
44
+ tracer;
45
+ depth;
46
+ type;
47
+ id;
48
+ value;
49
+ name;
50
+ params;
51
+ _setValue;
52
+ subscribers = [];
53
+ nextStateChildren = [];
54
+ stateChildren = [];
55
+ children = [];
56
+ updating = true;
57
+ loading = false;
58
+ version = 0;
59
+ updatingVersion = 0;
60
+ didConnect = false;
43
61
  constructor(tracer, depth, type, id, value, name, params, _setValue) {
44
62
  this.tracer = tracer;
45
63
  this.depth = depth;
@@ -51,15 +69,6 @@ class VisualizerNode {
51
69
  this._setValue = _setValue;
52
70
  this.tracer.maxDepth = Math.max(this.tracer.maxDepth, this.depth);
53
71
  }
54
- subscribers = [];
55
- nextStateChildren = [];
56
- stateChildren = [];
57
- children = [];
58
- updating = true;
59
- loading = false;
60
- version = 0;
61
- updatingVersion = 0;
62
- didConnect = false;
63
72
  get showParams() {
64
73
  return this.tracer.showParams;
65
74
  }
@@ -70,16 +79,14 @@ class VisualizerNode {
70
79
  return this.tracer.interactive;
71
80
  }
72
81
  setValue(value) {
73
- if (this.type !== "state") {
82
+ if (this.type !== exports.SignalType.State) {
74
83
  throw new Error("setValue is only allowed on state nodes");
75
84
  }
76
85
  this._setValue?.(value);
77
86
  this.notify();
78
87
  }
79
88
  connectChild(child) {
80
- let childLink = this.children.find(
81
- (link) => link.node.id === child.id || link.node.name === child.name && link.version !== this.updatingVersion
82
- );
89
+ let childLink = this.children.find((link) => link.node.id === child.id || link.node.name === child.name && link.version !== this.updatingVersion);
83
90
  let shouldSkip = false;
84
91
  if (childLink) {
85
92
  if (!child.didConnect) {
@@ -142,16 +149,7 @@ class VisualizerNode {
142
149
  this.nextStateChildren.push(existing);
143
150
  existing.notify();
144
151
  } else {
145
- const node = new VisualizerNode(
146
- this.tracer,
147
- this.depth + 1,
148
- "state",
149
- id,
150
- value,
151
- name,
152
- void 0,
153
- setValue
154
- );
152
+ const node = new VisualizerNode(this.tracer, this.depth + 1, exports.SignalType.State, id, value, name, void 0, setValue);
155
153
  node.updating = false;
156
154
  this.nextStateChildren.push(node);
157
155
  }
@@ -196,39 +194,39 @@ class TraceFlush {
196
194
  }
197
195
  }
198
196
  class Tracer {
197
+ showParams;
198
+ showValue;
199
+ interactive;
200
+ nodeMap = /* @__PURE__ */ new Map();
201
+ delay = 200;
202
+ maxDepth = 0;
203
+ initialized = false;
199
204
  constructor(id, immediate = false, showParams = true, showValue = true, interactive = true) {
200
205
  this.showParams = showParams;
201
206
  this.showValue = showValue;
202
207
  this.interactive = interactive;
203
208
  this.initialized = !immediate;
204
- const node = new VisualizerNode(this, 0, "watcher", id, "");
209
+ const node = new VisualizerNode(this, 0, exports.SignalType.Watcher, id, "");
205
210
  this.rootNode = node;
206
211
  this.nodeMap.set(id, node);
207
212
  }
208
- nodeMap = /* @__PURE__ */ new Map();
209
- delay = 200;
210
- maxDepth = 0;
211
- initialized = false;
212
213
  rootNode;
213
214
  eventQueue = [];
214
215
  currentFlush;
215
216
  emit(event) {
216
- if (event.type === "Connected" || event.type === "ConsumeState") {
217
+ if (event.type === exports.TracerEventType.Connected || event.type === exports.TracerEventType.ConsumeState) {
217
218
  const node = this.nodeMap.get(event.id);
218
- if (!node || event.type === "Connected" && !event.name) {
219
+ if (!node || event.type === exports.TracerEventType.Connected && !event.name) {
219
220
  return;
220
221
  }
221
222
  if (!this.nodeMap.has(event.childId)) {
222
- const name = event.type === "Connected" ? event.name : void 0;
223
- const params = event.type === "Connected" ? event.params : void 0;
224
- const nodeType = event.type === "Connected" ? event.nodeType : "state";
225
- this.nodeMap.set(
226
- event.childId,
227
- new VisualizerNode(this, node.depth + 1, nodeType, event.childId, "", name, params)
228
- );
223
+ const name = event.type === exports.TracerEventType.Connected ? event.name : void 0;
224
+ const params = event.type === exports.TracerEventType.Connected ? event.params : void 0;
225
+ const nodeType = event.type === exports.TracerEventType.Connected ? event.nodeType : exports.SignalType.State;
226
+ this.nodeMap.set(event.childId, new VisualizerNode(this, node.depth + 1, nodeType, event.childId, "", name, params));
229
227
  }
230
228
  }
231
- if (event.type === "StartLoading" || event.type === "EndLoading") {
229
+ if (event.type === exports.TracerEventType.StartLoading || event.type === exports.TracerEventType.EndLoading) {
232
230
  scheduleTracer(this);
233
231
  }
234
232
  if (this.initialized) {
@@ -242,28 +240,28 @@ class Tracer {
242
240
  if (!node) {
243
241
  return true;
244
242
  }
245
- let skipDelay = nextEvent?.type === "StartLoading";
246
- if (event.type === "Connected") {
243
+ let skipDelay = nextEvent?.type === exports.TracerEventType.StartLoading;
244
+ if (event.type === exports.TracerEventType.Connected) {
247
245
  let child = this.nodeMap.get(event.childId);
248
246
  if (!child) {
249
247
  throw new Error(`Child node ${event.childId} not found`);
250
248
  }
251
249
  skipDelay = node.connectChild(child);
252
- } else if (event.type === "Disconnected") {
250
+ } else if (event.type === exports.TracerEventType.Disconnected) {
253
251
  node.disconnectChild(event.childId);
254
- } else if (event.type === "StartUpdate") {
252
+ } else if (event.type === exports.TracerEventType.StartUpdate) {
255
253
  node.startUpdate();
256
- if (nextEvent && nextEvent.id === event.id && (nextEvent.type === "EndUpdate" || nextEvent.type === "StartLoading")) {
254
+ if (nextEvent && nextEvent.id === event.id && (nextEvent.type === exports.TracerEventType.EndUpdate || nextEvent.type === exports.TracerEventType.StartLoading)) {
257
255
  skipDelay = true;
258
256
  }
259
- } else if (event.type === "EndUpdate") {
257
+ } else if (event.type === exports.TracerEventType.EndUpdate) {
260
258
  node.endUpdate(event.value, event.preserveChildren);
261
- } else if (event.type === "StartLoading") {
259
+ } else if (event.type === exports.TracerEventType.StartLoading) {
262
260
  node.startLoading();
263
261
  skipDelay = true;
264
- } else if (event.type === "EndLoading") {
262
+ } else if (event.type === exports.TracerEventType.EndLoading) {
265
263
  node.endLoading(event.value);
266
- } else if (event.type === "ConsumeState") {
264
+ } else if (event.type === exports.TracerEventType.ConsumeState) {
267
265
  node.consumeState(event.childId, event.name, event.value, event.setValue);
268
266
  }
269
267
  return skipDelay;
@@ -329,8 +327,21 @@ const setCurrentConsumer = (consumer) => {
329
327
  const getCurrentConsumer = () => {
330
328
  return CURRENT_CONSUMER;
331
329
  };
330
+ const DEFAULT_EQUALS = (a, b) => a === b;
331
+ const FALSE_EQUALS = () => false;
332
+ const equalsFrom = (equals) => {
333
+ if (equals === false) {
334
+ return FALSE_EQUALS;
335
+ }
336
+ return equals ?? DEFAULT_EQUALS;
337
+ };
332
338
  let STATE_ID = 0;
339
+ const SIGNAL_BRAND = /* @__PURE__ */ Symbol.for("signalium.signal");
340
+ function isSignal(value) {
341
+ return typeof value === "object" && value !== null && value[SIGNAL_BRAND] === true;
342
+ }
333
343
  class StateSignal {
344
+ [SIGNAL_BRAND] = true;
334
345
  _value;
335
346
  _equals;
336
347
  _subs = /* @__PURE__ */ new Map();
@@ -340,8 +351,10 @@ class StateSignal {
340
351
  constructor(value, equals = (a, b) => a === b, desc = "signal") {
341
352
  this._value = value;
342
353
  this._equals = equals;
343
- this._id = STATE_ID++;
344
- this._desc = desc;
354
+ {
355
+ this._id = STATE_ID++;
356
+ this._desc = desc;
357
+ }
345
358
  }
346
359
  get value() {
347
360
  this.consume();
@@ -363,7 +376,7 @@ class StateSignal {
363
376
  {
364
377
  const tracer = getTracerProxy();
365
378
  tracer?.emit({
366
- type: TracerEventType.ConsumeState,
379
+ type: exports.TracerEventType.ConsumeState,
367
380
  id: currentConsumer.tracerMeta.id,
368
381
  name: this._desc,
369
382
  childId: this._id,
@@ -385,7 +398,7 @@ class StateSignal {
385
398
  }
386
399
  dirtySignal(sub);
387
400
  }
388
- this._subs = /* @__PURE__ */ new Map();
401
+ this._subs.clear();
389
402
  scheduleListeners(this);
390
403
  }
391
404
  addListener(listener) {
@@ -406,13 +419,12 @@ function runListeners$1(signal2) {
406
419
  listener();
407
420
  }
408
421
  }
409
- const FALSE_EQUALS$1 = () => false;
410
422
  function signal(initialValue, opts) {
411
- const equals = opts?.equals === false ? FALSE_EQUALS$1 : opts?.equals ?? ((a, b) => a === b);
423
+ const equals = opts?.equals === false ? FALSE_EQUALS : opts?.equals ?? ((a, b) => a === b);
412
424
  return new StateSignal(initialValue, equals, opts?.desc);
413
425
  }
414
426
  const notifier = (opts) => {
415
- return new StateSignal(void 0, FALSE_EQUALS$1, opts?.desc);
427
+ return new StateSignal(void 0, FALSE_EQUALS, opts?.desc);
416
428
  };
417
429
  function watchSignal(signal2, parentIsSuspended) {
418
430
  if (parentIsSuspended) {
@@ -536,7 +548,8 @@ let PENDING_GC = /* @__PURE__ */ new Set();
536
548
  const microtask = () => Promise.resolve();
537
549
  let currentFlush = null;
538
550
  const scheduleFlush = (fn) => {
539
- if (currentFlush) return;
551
+ if (currentFlush)
552
+ return;
540
553
  let resolve;
541
554
  const promise = new Promise((r) => resolve = r);
542
555
  currentFlush = { promise, resolve };
@@ -573,7 +586,8 @@ const scheduleTracer = (tracer) => {
573
586
  };
574
587
  const scheduleGcSweep = (scope) => {
575
588
  PENDING_GC.add(scope);
576
- if (PENDING_GC.size > 1) return;
589
+ if (PENDING_GC.size > 1)
590
+ return;
577
591
  scheduleIdleCallback(() => {
578
592
  for (const scope2 of PENDING_GC) {
579
593
  scope2.sweepGc();
@@ -583,6 +597,8 @@ const scheduleGcSweep = (scope) => {
583
597
  };
584
598
  const flushWatchers = async () => {
585
599
  const flush = currentFlush;
600
+ if (!flush)
601
+ return;
586
602
  while (PENDING_ASYNC_PULLS.length > 0 || PENDING_PULLS.size > 0) {
587
603
  const asyncPulls = PENDING_ASYNC_PULLS;
588
604
  PENDING_ASYNC_PULLS = [];
@@ -626,19 +642,17 @@ const settled = async () => {
626
642
  };
627
643
  function dirtySignal(signal2) {
628
644
  const prevState = signal2._state;
629
- if (prevState === ReactiveFnState.Dirty) {
645
+ if (prevState === 2) {
630
646
  return;
631
647
  }
632
- signal2._state = ReactiveFnState.Dirty;
633
- if (prevState < ReactiveFnState.MaybeDirty) {
648
+ signal2._state = 2;
649
+ if (prevState < 3) {
634
650
  propagateDirty(signal2);
635
651
  }
636
652
  }
637
653
  function propagateDirty(signal2) {
638
654
  if (getCurrentConsumer() === signal2) {
639
- throw new Error(
640
- "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
- );
655
+ 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.");
642
656
  }
643
657
  if (isRelay(signal2)) {
644
658
  if (signal2.watchCount > 0) {
@@ -649,31 +663,32 @@ function propagateDirty(signal2) {
649
663
  schedulePull(signal2);
650
664
  }
651
665
  dirtySignalConsumers(signal2.subs);
652
- signal2.subs = /* @__PURE__ */ new Map();
666
+ signal2.subs.clear();
653
667
  }
654
668
  }
655
669
  function dirtySignalConsumers(map) {
656
670
  for (const [subRef, edge] of map) {
657
671
  const sub = subRef.deref();
658
- if (sub === void 0 || sub.computedCount !== edge.consumedAt) continue;
672
+ if (sub === void 0 || sub.computedCount !== edge.consumedAt)
673
+ continue;
659
674
  const dirtyState = sub._state;
660
675
  switch (dirtyState) {
661
- case ReactiveFnState.Clean:
662
- sub._state = ReactiveFnState.MaybeDirty;
676
+ case 0:
677
+ sub._state = 3;
663
678
  sub.dirtyHead = edge;
664
679
  edge.nextDirty = void 0;
665
680
  propagateDirty(sub);
666
681
  break;
667
- case ReactiveFnState.Pending:
668
- case ReactiveFnState.MaybeDirty:
669
- case ReactiveFnState.PendingDirty: {
682
+ case 1:
683
+ case 3:
684
+ case 4: {
670
685
  let subEdge = sub.dirtyHead;
671
686
  const ord = edge.ord;
672
687
  if (subEdge.ord > ord) {
673
688
  sub.dirtyHead = edge;
674
689
  edge.nextDirty = subEdge;
675
- if (dirtyState === ReactiveFnState.Pending || dirtyState === ReactiveFnState.PendingDirty) {
676
- sub._state = ReactiveFnState.MaybeDirty;
690
+ if (dirtyState === 1 || dirtyState === 4) {
691
+ sub._state = 3;
677
692
  propagateDirty(sub);
678
693
  }
679
694
  } else {
@@ -694,21 +709,25 @@ function dirtySignalConsumers(map) {
694
709
  }
695
710
  }
696
711
  let CURRENT_ORD = 0;
697
- var EdgeType = /* @__PURE__ */ ((EdgeType2) => {
698
- EdgeType2[EdgeType2["Signal"] = 0] = "Signal";
699
- EdgeType2[EdgeType2["Promise"] = 1] = "Promise";
700
- return EdgeType2;
701
- })(EdgeType || {});
712
+ class EdgeBase {
713
+ type;
714
+ dep;
715
+ ord;
716
+ updatedAt;
717
+ consumedAt;
718
+ nextDirty;
719
+ constructor(type, dep, updatedAt, consumedAt) {
720
+ this.type = type;
721
+ this.dep = dep;
722
+ this.ord = CURRENT_ORD++;
723
+ this.updatedAt = updatedAt;
724
+ this.consumedAt = consumedAt;
725
+ this.nextDirty = void 0;
726
+ }
727
+ }
702
728
  function createEdge(prevEdge, type, dep, updatedAt, consumedAt) {
703
729
  if (prevEdge === void 0) {
704
- return {
705
- type,
706
- dep,
707
- ord: CURRENT_ORD++,
708
- updatedAt,
709
- consumedAt,
710
- nextDirty: void 0
711
- };
730
+ return new EdgeBase(type, dep, updatedAt, consumedAt);
712
731
  }
713
732
  prevEdge.ord = CURRENT_ORD++;
714
733
  prevEdge.updatedAt = updatedAt;
@@ -736,14 +755,6 @@ function findAndRemoveDirty(sub, dep) {
736
755
  }
737
756
  return void 0;
738
757
  }
739
- const DEFAULT_EQUALS = (a, b) => a === b;
740
- const FALSE_EQUALS = () => false;
741
- const equalsFrom = (equals) => {
742
- if (equals === false) {
743
- return FALSE_EQUALS;
744
- }
745
- return equals ?? DEFAULT_EQUALS;
746
- };
747
758
  const GeneratorResultConstructor = (function* () {
748
759
  })().constructor;
749
760
  function isGeneratorResult(value) {
@@ -870,6 +881,9 @@ function callback(fn, idx, deps) {
870
881
  }
871
882
  return callback2.fn;
872
883
  }
884
+ function isAbortError(error) {
885
+ return error instanceof DOMException && error.name === "AbortError";
886
+ }
873
887
  const arrayFrom = Array.from;
874
888
  function isThenable(v) {
875
889
  return v !== null && typeof v === "object" && typeof v.then === "function";
@@ -932,12 +946,15 @@ class ReactivePromiseImpl {
932
946
  let remaining = len;
933
947
  let rejected = false;
934
948
  const onFulfillAt = (i) => (v) => {
935
- if (rejected) return;
949
+ if (rejected)
950
+ return;
936
951
  results[i] = v;
937
- if (--remaining === 0) p._setValue(results);
952
+ if (--remaining === 0)
953
+ p._setValue(results);
938
954
  };
939
955
  const onReject = (r) => {
940
- if (rejected) return;
956
+ if (rejected)
957
+ return;
941
958
  rejected = true;
942
959
  p._setError(r);
943
960
  };
@@ -950,15 +967,18 @@ class ReactivePromiseImpl {
950
967
  const p = new ReactivePromiseImpl();
951
968
  const arr = arrayFrom(values);
952
969
  const len = arr.length;
953
- if (len === 0) return p;
970
+ if (len === 0)
971
+ return p;
954
972
  let settled2 = false;
955
973
  const onFulfill = (v) => {
956
- if (settled2) return;
974
+ if (settled2)
975
+ return;
957
976
  settled2 = true;
958
977
  p._setValue(v);
959
978
  };
960
979
  const onReject = (r) => {
961
- if (settled2) return;
980
+ if (settled2)
981
+ return;
962
982
  settled2 = true;
963
983
  p._setError(r);
964
984
  };
@@ -979,12 +999,14 @@ class ReactivePromiseImpl {
979
999
  const errors = new Array(len);
980
1000
  let fulfilled = false;
981
1001
  const onFulfill = (value) => {
982
- if (fulfilled) return;
1002
+ if (fulfilled)
1003
+ return;
983
1004
  fulfilled = true;
984
1005
  p._setValue(value);
985
1006
  };
986
1007
  const onRejectAt = (index) => (reason) => {
987
- if (fulfilled) return;
1008
+ if (fulfilled)
1009
+ return;
988
1010
  errors[index] = reason;
989
1011
  if (--pending === 0) {
990
1012
  p._setError(new AggregateError(errors, "All promises were rejected in ReactivePromise.any"));
@@ -1007,11 +1029,13 @@ class ReactivePromiseImpl {
1007
1029
  let remaining = len;
1008
1030
  const onFulfillAt = (index) => (value) => {
1009
1031
  results[index] = { status: "fulfilled", value };
1010
- if (--remaining === 0) p._setValue(results);
1032
+ if (--remaining === 0)
1033
+ p._setValue(results);
1011
1034
  };
1012
1035
  const onRejectAt = (index) => (reason) => {
1013
1036
  results[index] = { status: "rejected", reason };
1014
- if (--remaining === 0) p._setValue(results);
1037
+ if (--remaining === 0)
1038
+ p._setValue(results);
1015
1039
  };
1016
1040
  for (let i = 0; i < len; i++) {
1017
1041
  thenLoop(arr[i], onFulfillAt(i), onRejectAt(i));
@@ -1019,7 +1043,8 @@ class ReactivePromiseImpl {
1019
1043
  return p;
1020
1044
  }
1021
1045
  static resolve(value) {
1022
- if (value instanceof ReactivePromiseImpl) return value;
1046
+ if (value instanceof ReactivePromiseImpl)
1047
+ return value;
1023
1048
  return new ReactivePromiseImpl((resolve) => resolve(value));
1024
1049
  }
1025
1050
  static reject(reason) {
@@ -1030,7 +1055,7 @@ class ReactivePromiseImpl {
1030
1055
  p._equals = DEFAULT_EQUALS;
1031
1056
  p._initFlags(
1032
1057
  1
1033
- /* Pending */
1058
+ /* AsyncFlags.Pending */
1034
1059
  );
1035
1060
  const resolve = (value) => {
1036
1061
  if (value && typeof value.then === "function") {
@@ -1049,7 +1074,7 @@ class ReactivePromiseImpl {
1049
1074
  const tracer = getTracerProxy();
1050
1075
  if (tracer !== void 0 && this._signal !== void 0 && (baseFlags & 1) !== 0) {
1051
1076
  tracer.emit({
1052
- type: TracerEventType.StartLoading,
1077
+ type: exports.TracerEventType.StartLoading,
1053
1078
  id: this._signal.tracerMeta.id
1054
1079
  });
1055
1080
  }
@@ -1058,7 +1083,8 @@ class ReactivePromiseImpl {
1058
1083
  }
1059
1084
  _consumeFlags(flags) {
1060
1085
  const currentConsumer = getCurrentConsumer();
1061
- if (currentConsumer === void 0) return;
1086
+ if (currentConsumer === void 0)
1087
+ return;
1062
1088
  if ((this._flags & 128) !== 0) {
1063
1089
  this._connect();
1064
1090
  }
@@ -1070,11 +1096,13 @@ class ReactivePromiseImpl {
1070
1096
  _connect() {
1071
1097
  const signal2 = this._signal;
1072
1098
  const currentConsumer = getCurrentConsumer();
1099
+ if (currentConsumer === signal2)
1100
+ return;
1073
1101
  if (currentConsumer?.watchCount === 0) {
1074
1102
  const { ref, computedCount, deps } = currentConsumer;
1075
1103
  const prevEdge = deps.get(signal2);
1076
1104
  if (prevEdge?.consumedAt !== computedCount) {
1077
- const newEdge = createEdge(prevEdge, EdgeType.Signal, signal2, signal2.updatedCount, computedCount);
1105
+ const newEdge = createEdge(prevEdge, 0, signal2, signal2.updatedCount, computedCount);
1078
1106
  signal2.subs.set(ref, newEdge);
1079
1107
  deps.set(signal2, newEdge);
1080
1108
  }
@@ -1109,12 +1137,12 @@ class ReactivePromiseImpl {
1109
1137
  if (tracer !== void 0 && this._signal !== void 0) {
1110
1138
  if (setTrue & 1 && allChanged & 1) {
1111
1139
  tracer.emit({
1112
- type: TracerEventType.StartLoading,
1140
+ type: exports.TracerEventType.StartLoading,
1113
1141
  id: this._signal.tracerMeta.id
1114
1142
  });
1115
1143
  } else if (setFalse & 1 && allChanged & 1) {
1116
1144
  tracer.emit({
1117
- type: TracerEventType.EndLoading,
1145
+ type: exports.TracerEventType.EndLoading,
1118
1146
  id: this._signal.tracerMeta.id,
1119
1147
  value: isRelay$1(this) ? "..." : this._value
1120
1148
  });
@@ -1131,7 +1159,7 @@ class ReactivePromiseImpl {
1131
1159
  }
1132
1160
  this._setFlags(
1133
1161
  1
1134
- /* Pending */
1162
+ /* AsyncFlags.Pending */
1135
1163
  );
1136
1164
  dirtySignalConsumers(this._awaitSubs);
1137
1165
  return this._awaitSubs = /* @__PURE__ */ new Map();
@@ -1194,6 +1222,10 @@ class ReactivePromiseImpl {
1194
1222
  }
1195
1223
  }
1196
1224
  _setError(nextError, awaitSubs = this._awaitSubs) {
1225
+ if (nextError !== this._error && !isAbortError(nextError)) {
1226
+ const desc = this._signal?.desc ?? this._signal?.tracerMeta?.desc;
1227
+ console.error(`[signalium] Unhandled async error${desc ? ` in "${desc}"` : ""}:`, nextError);
1228
+ }
1197
1229
  let error = this._error;
1198
1230
  let notifyFlags = 0;
1199
1231
  if (error !== nextError) {
@@ -1223,7 +1255,7 @@ class ReactivePromiseImpl {
1223
1255
  }
1224
1256
  }
1225
1257
  _scheduleSubs(awaitSubs, dirty) {
1226
- const newState = dirty ? ReactiveFnState.Dirty : ReactiveFnState.PendingDirty;
1258
+ const newState = dirty ? 2 : 4;
1227
1259
  for (const ref of awaitSubs.keys()) {
1228
1260
  const signal2 = ref.deref();
1229
1261
  if (signal2 === void 0) {
@@ -1236,49 +1268,49 @@ class ReactivePromiseImpl {
1236
1268
  get value() {
1237
1269
  this._consumeFlags(
1238
1270
  16
1239
- /* Value */
1271
+ /* AsyncFlags.Value */
1240
1272
  );
1241
1273
  return this._value;
1242
1274
  }
1243
1275
  get error() {
1244
1276
  this._consumeFlags(
1245
1277
  32
1246
- /* Error */
1278
+ /* AsyncFlags.Error */
1247
1279
  );
1248
1280
  return this._error;
1249
1281
  }
1250
1282
  get isPending() {
1251
1283
  this._consumeFlags(
1252
1284
  1
1253
- /* Pending */
1285
+ /* AsyncFlags.Pending */
1254
1286
  );
1255
1287
  return (this._flags & 1) !== 0;
1256
1288
  }
1257
1289
  get isRejected() {
1258
1290
  this._consumeFlags(
1259
1291
  2
1260
- /* Rejected */
1292
+ /* AsyncFlags.Rejected */
1261
1293
  );
1262
1294
  return (this._flags & 2) !== 0;
1263
1295
  }
1264
1296
  get isResolved() {
1265
1297
  this._consumeFlags(
1266
1298
  4
1267
- /* Resolved */
1299
+ /* AsyncFlags.Resolved */
1268
1300
  );
1269
1301
  return (this._flags & 4) !== 0;
1270
1302
  }
1271
1303
  get isReady() {
1272
1304
  this._consumeFlags(
1273
1305
  8
1274
- /* Ready */
1306
+ /* AsyncFlags.Ready */
1275
1307
  );
1276
1308
  return (this._flags & 8) !== 0;
1277
1309
  }
1278
1310
  get isSettled() {
1279
1311
  this._consumeFlags(
1280
1312
  6
1281
- /* Settled */
1313
+ /* AsyncFlags.Settled */
1282
1314
  );
1283
1315
  return (this._flags & 6) !== 0;
1284
1316
  }
@@ -1294,13 +1326,7 @@ class ReactivePromiseImpl {
1294
1326
  }
1295
1327
  ref = currentConsumer.ref;
1296
1328
  const prevEdge = this._awaitSubs.get(ref) ?? findAndRemoveDirty(currentConsumer, this);
1297
- edge = createEdge(
1298
- prevEdge,
1299
- EdgeType.Promise,
1300
- this,
1301
- this._updatedCount,
1302
- currentConsumer.computedCount
1303
- );
1329
+ edge = createEdge(prevEdge, 1, this, this._updatedCount, currentConsumer.computedCount);
1304
1330
  }
1305
1331
  const wrappedFulfilled = onfulfilled ? (value) => {
1306
1332
  try {
@@ -1336,16 +1362,13 @@ class ReactivePromiseImpl {
1336
1362
  return this.then(null, onrejected);
1337
1363
  }
1338
1364
  finally(onfinally) {
1339
- return this.then(
1340
- (value) => {
1341
- onfinally?.();
1342
- return value;
1343
- },
1344
- (reason) => {
1345
- onfinally?.();
1346
- throw reason;
1347
- }
1348
- );
1365
+ return this.then((value) => {
1366
+ onfinally?.();
1367
+ return value;
1368
+ }, (reason) => {
1369
+ onfinally?.();
1370
+ throw reason;
1371
+ });
1349
1372
  }
1350
1373
  get [Symbol.toStringTag]() {
1351
1374
  return `ReactivePromise`;
@@ -1367,7 +1390,7 @@ function createPromise(promise, signal2) {
1367
1390
  p["_equals"] = signal2.def.equals;
1368
1391
  p["_initFlags"](
1369
1392
  1
1370
- /* Pending */
1393
+ /* AsyncFlags.Pending */
1371
1394
  );
1372
1395
  p["_setPromise"](promise);
1373
1396
  return p;
@@ -1384,7 +1407,7 @@ function createRelay(activate, scope, opts) {
1384
1407
  }
1385
1408
  const signal2 = p["_signal"];
1386
1409
  signal2.subs = /* @__PURE__ */ new Map();
1387
- signal2._state = ReactiveFnState.Dirty;
1410
+ signal2._state = 2;
1388
1411
  active = false;
1389
1412
  currentSub = void 0;
1390
1413
  };
@@ -1429,7 +1452,7 @@ function createRelay(activate, scope, opts) {
1429
1452
  p["_equals"] = equalsFrom(opts?.equals);
1430
1453
  p["_initFlags"](
1431
1454
  128 | 1
1432
- /* Pending */
1455
+ /* AsyncFlags.Pending */
1433
1456
  );
1434
1457
  return p;
1435
1458
  }
@@ -1439,7 +1462,7 @@ function createTask(task, scope, opts) {
1439
1462
  p["_equals"] = equalsFrom(opts?.equals);
1440
1463
  p["_initFlags"](
1441
1464
  64
1442
- /* isRunnable */
1465
+ /* AsyncFlags.isRunnable */
1443
1466
  );
1444
1467
  const throwIfRunning = opts?.throwIfRunning === true;
1445
1468
  p["run"] = ((...args) => {
@@ -1462,12 +1485,12 @@ function getSignal(signal2) {
1462
1485
  if (prevEdge === void 0) {
1463
1486
  {
1464
1487
  getTracerProxy()?.emit({
1465
- type: TracerEventType.Connected,
1488
+ type: exports.TracerEventType.Connected,
1466
1489
  id: currentConsumer.tracerMeta.id,
1467
1490
  childId: signal2.tracerMeta.id,
1468
1491
  name: signal2.tracerMeta.desc,
1469
1492
  params: signal2.tracerMeta.params,
1470
- nodeType: SignalType.Reactive
1493
+ nodeType: exports.SignalType.Reactive
1471
1494
  });
1472
1495
  }
1473
1496
  if (currentConsumer.watchCount > 0) {
@@ -1475,7 +1498,7 @@ function getSignal(signal2) {
1475
1498
  }
1476
1499
  }
1477
1500
  const updatedAt = checkSignal(signal2);
1478
- const newEdge = createEdge(prevEdge, EdgeType.Signal, signal2, updatedAt, computedCount);
1501
+ const newEdge = createEdge(prevEdge, 0, signal2, updatedAt, computedCount);
1479
1502
  signal2.subs.set(ref, newEdge);
1480
1503
  deps.set(signal2, newEdge);
1481
1504
  } else {
@@ -1491,26 +1514,26 @@ function getSignal(signal2) {
1491
1514
  }
1492
1515
  function checkSignal(signal2) {
1493
1516
  const { ref, _state: state } = signal2;
1494
- if (state < ReactiveFnState.Dirty) {
1517
+ if (state < 2) {
1495
1518
  return signal2.updatedCount;
1496
1519
  }
1497
- if (state >= ReactiveFnState.MaybeDirty) {
1520
+ if (state >= 3) {
1498
1521
  let edge = signal2.dirtyHead;
1499
1522
  while (edge !== void 0) {
1500
- if (edge.type === EdgeType.Promise) {
1523
+ if (edge.type === 1) {
1501
1524
  const dep2 = edge.dep;
1502
1525
  if (dep2._getPending()) {
1503
1526
  const value = signal2._value;
1504
1527
  dep2["_awaitSubs"].set(ref, edge);
1505
1528
  value._setPending();
1506
- signal2._state = ReactiveFnState.Pending;
1529
+ signal2._state = 1;
1507
1530
  signal2.dirtyHead = edge;
1508
1531
  return signal2.updatedCount;
1509
1532
  } else if (edge.updatedAt === edge.dep._updatedCount) {
1510
1533
  dep2["_awaitSubs"].set(ref, edge);
1511
1534
  } else {
1512
1535
  signal2.dirtyHead = edge.nextDirty;
1513
- signal2._state = ReactiveFnState.Dirty;
1536
+ signal2._state = 2;
1514
1537
  break;
1515
1538
  }
1516
1539
  edge = edge.nextDirty;
@@ -1521,23 +1544,23 @@ function checkSignal(signal2) {
1521
1544
  dep.subs.set(ref, edge);
1522
1545
  if (edge.updatedAt !== updatedAt) {
1523
1546
  signal2.dirtyHead = edge.nextDirty;
1524
- signal2._state = ReactiveFnState.Dirty;
1547
+ signal2._state = 2;
1525
1548
  break;
1526
1549
  }
1527
1550
  edge = edge.nextDirty;
1528
1551
  }
1529
1552
  }
1530
1553
  const newState = signal2._state;
1531
- if (newState === ReactiveFnState.Dirty) {
1554
+ if (newState === 2) {
1532
1555
  if (signal2._isLazy) {
1533
1556
  signal2.updatedCount++;
1534
1557
  } else {
1535
1558
  runSignal(signal2);
1536
1559
  }
1537
- } else if (newState === ReactiveFnState.PendingDirty) {
1560
+ } else if (newState === 4) {
1538
1561
  signal2._value._clearPending();
1539
1562
  }
1540
- signal2._state = ReactiveFnState.Clean;
1563
+ signal2._state = 0;
1541
1564
  signal2.dirtyHead = void 0;
1542
1565
  if (getTracerProxy() !== void 0 && signal2.tracerMeta?.tracer) {
1543
1566
  scheduleTracer(signal2.tracerMeta.tracer);
@@ -1549,7 +1572,7 @@ function runSignal(signal2) {
1549
1572
  {
1550
1573
  tracer = getTracerProxy();
1551
1574
  tracer?.emit({
1552
- type: TracerEventType.StartUpdate,
1575
+ type: exports.TracerEventType.StartUpdate,
1553
1576
  id: signal2.tracerMeta.id
1554
1577
  });
1555
1578
  }
@@ -1588,7 +1611,7 @@ function runSignal(signal2) {
1588
1611
  setCurrentConsumer(prevConsumer);
1589
1612
  {
1590
1613
  tracer?.emit({
1591
- type: TracerEventType.EndUpdate,
1614
+ type: exports.TracerEventType.EndUpdate,
1592
1615
  id: signal2.tracerMeta.id,
1593
1616
  value: isRelay(signal2) ? "..." : signal2._value
1594
1617
  });
@@ -1724,56 +1747,56 @@ function hashDate(date, _seen) {
1724
1747
  return hashNumber(
1725
1748
  date.getTime(),
1726
1749
  14
1727
- /* DATE */
1750
+ /* HashType.DATE */
1728
1751
  );
1729
1752
  }
1730
1753
  function hashRegExp(regexp, _seen) {
1731
1754
  const h = hashStr(
1732
1755
  regexp.source + regexp.flags,
1733
1756
  15
1734
- /* REGEXP */
1757
+ /* HashType.REGEXP */
1735
1758
  );
1736
1759
  return (h ^ regexp.lastIndex) >>> 0;
1737
1760
  }
1738
1761
  const UNDEFINED = hashStr(
1739
1762
  "undefined",
1740
1763
  0
1741
- /* UNDEFINED */
1764
+ /* HashType.UNDEFINED */
1742
1765
  );
1743
1766
  const NULL = hashStr(
1744
1767
  "null",
1745
1768
  1
1746
- /* NULL */
1769
+ /* HashType.NULL */
1747
1770
  );
1748
1771
  const TRUE = hashStr(
1749
1772
  "true",
1750
1773
  2
1751
- /* TRUE */
1774
+ /* HashType.TRUE */
1752
1775
  );
1753
1776
  const FALSE = hashStr(
1754
1777
  "false",
1755
1778
  3
1756
- /* FALSE */
1779
+ /* HashType.FALSE */
1757
1780
  );
1758
1781
  const ARRAY = hashStr(
1759
1782
  "array",
1760
1783
  7
1761
- /* ARRAY */
1784
+ /* HashType.ARRAY */
1762
1785
  );
1763
1786
  const OBJECT = hashStr(
1764
1787
  "object",
1765
1788
  8
1766
- /* OBJECT */
1789
+ /* HashType.OBJECT */
1767
1790
  );
1768
1791
  const SET = hashStr(
1769
1792
  "set",
1770
1793
  13
1771
- /* SET */
1794
+ /* HashType.SET */
1772
1795
  );
1773
1796
  const MAP = hashStr(
1774
1797
  "map",
1775
1798
  12
1776
- /* MAP */
1799
+ /* HashType.MAP */
1777
1800
  );
1778
1801
  const getObjectProto = Object.getPrototypeOf;
1779
1802
  const PROTO_TO_HASH = /* @__PURE__ */ new Map([
@@ -1797,19 +1820,19 @@ function hashValue(node, seen = []) {
1797
1820
  return hashStr(
1798
1821
  String(node),
1799
1822
  4
1800
- /* NUMBER */
1823
+ /* HashType.NUMBER */
1801
1824
  );
1802
1825
  case "string":
1803
1826
  return hashStr(
1804
1827
  node,
1805
1828
  5
1806
- /* STRING */
1829
+ /* HashType.STRING */
1807
1830
  );
1808
1831
  case "bigint":
1809
1832
  return hashStr(
1810
1833
  node.toString(),
1811
1834
  6
1812
- /* BIGINT */
1835
+ /* HashType.BIGINT */
1813
1836
  );
1814
1837
  case "object": {
1815
1838
  if (node === null) {
@@ -1820,7 +1843,7 @@ function hashValue(node, seen = []) {
1820
1843
  return hashStr(
1821
1844
  String(index),
1822
1845
  11
1823
- /* CYCLE */
1846
+ /* HashType.CYCLE */
1824
1847
  );
1825
1848
  }
1826
1849
  const hashFn = PROTO_TO_HASH.get(getObjectProto(node));
@@ -1838,7 +1861,7 @@ function hashValue(node, seen = []) {
1838
1861
  return hashStr(
1839
1862
  node.toString(),
1840
1863
  10
1841
- /* SYMBOL */
1864
+ /* HashType.SYMBOL */
1842
1865
  );
1843
1866
  }
1844
1867
  }
@@ -1850,7 +1873,7 @@ function getObjectHash(obj) {
1850
1873
  id = hashNumber(
1851
1874
  nextHashMapId++,
1852
1875
  9
1853
- /* REFERENCE */
1876
+ /* HashType.REFERENCE */
1854
1877
  );
1855
1878
  objectToHashMap.set(obj, id);
1856
1879
  }
@@ -1884,8 +1907,10 @@ function isPlainArray(arr) {
1884
1907
  return Array.isArray(arr);
1885
1908
  }
1886
1909
  function stringifyValue(value) {
1887
- if (value === null) return "null";
1888
- if (value === void 0) return "undefined";
1910
+ if (value === null)
1911
+ return "null";
1912
+ if (value === void 0)
1913
+ return "undefined";
1889
1914
  switch (typeof value) {
1890
1915
  case "number":
1891
1916
  case "boolean":
@@ -1917,25 +1942,21 @@ function stringifyValue(value) {
1917
1942
  return getObjectId(value);
1918
1943
  }
1919
1944
  }
1920
- var ReactiveFnState = /* @__PURE__ */ ((ReactiveFnState2) => {
1921
- ReactiveFnState2[ReactiveFnState2["Clean"] = 0] = "Clean";
1922
- ReactiveFnState2[ReactiveFnState2["Pending"] = 1] = "Pending";
1923
- ReactiveFnState2[ReactiveFnState2["Dirty"] = 2] = "Dirty";
1924
- ReactiveFnState2[ReactiveFnState2["MaybeDirty"] = 3] = "MaybeDirty";
1925
- ReactiveFnState2[ReactiveFnState2["PendingDirty"] = 4] = "PendingDirty";
1926
- return ReactiveFnState2;
1927
- })(ReactiveFnState || {});
1928
1945
  let ID = 0;
1929
1946
  function createReactiveDefinition(id, desc, compute, equals, isRelay2, paramKey, tracer) {
1930
- return {
1931
- id,
1932
- desc,
1947
+ const def = {
1933
1948
  compute,
1934
1949
  equals: equalsFrom(equals),
1935
1950
  isRelay: isRelay2,
1936
1951
  paramKey,
1937
- tracer
1952
+ tracer: void 0
1938
1953
  };
1954
+ {
1955
+ def.id = id;
1956
+ def.desc = desc;
1957
+ def.tracer = tracer;
1958
+ }
1959
+ return def;
1939
1960
  }
1940
1961
  class ReactiveSignal {
1941
1962
  // Bitmask containing state in the first 2 bits and boolean properties in the remaining bits
@@ -1956,6 +1977,7 @@ class ReactiveSignal {
1956
1977
  _listeners = null;
1957
1978
  _value = void 0;
1958
1979
  tracerMeta;
1980
+ desc;
1959
1981
  // Reference to the shared definition
1960
1982
  def;
1961
1983
  constructor(def, args, key, scope) {
@@ -1964,6 +1986,7 @@ class ReactiveSignal {
1964
1986
  this.key = key;
1965
1987
  this.args = args;
1966
1988
  this.def = def;
1989
+ this.desc = def.desc;
1967
1990
  {
1968
1991
  this.tracerMeta = {
1969
1992
  id: def.id ?? key ?? hashValue([def.compute, ID++]),
@@ -2107,13 +2130,14 @@ function createReactiveSignal(def, args = [], key, scope) {
2107
2130
  }
2108
2131
  let CONTEXT_ID = 0;
2109
2132
  class ContextImpl {
2133
+ defaultValue;
2134
+ _key;
2135
+ _description;
2110
2136
  constructor(defaultValue, desc) {
2111
2137
  this.defaultValue = defaultValue;
2112
2138
  this._description = desc ?? `context:${CONTEXT_ID++}`;
2113
2139
  this._key = Symbol(this._description);
2114
2140
  }
2115
- _key;
2116
- _description;
2117
2141
  }
2118
2142
  const context = (initialValue, description) => {
2119
2143
  return new ContextImpl(initialValue, description);
@@ -2131,9 +2155,7 @@ function withContexts(contexts, fn) {
2131
2155
  const getContext = (context2) => {
2132
2156
  const scope = CURRENT_SCOPE ?? getCurrentConsumer()?.scope;
2133
2157
  if (scope === void 0) {
2134
- throw new Error(
2135
- "getContext must be used within a reactive function, a withContext, or within a framework-specific context provider."
2136
- );
2158
+ throw new Error("getContext must be used within a reactive function, a withContext, or within a framework-specific context provider.");
2137
2159
  }
2138
2160
  return scope.getContext(context2) ?? context2.defaultValue;
2139
2161
  };
@@ -2252,9 +2274,7 @@ const getScopeOwner = (obj) => {
2252
2274
  };
2253
2275
  exports.ReactivePromise = ReactivePromise;
2254
2276
  exports.SignalScope = SignalScope;
2255
- exports.SignalType = SignalType;
2256
2277
  exports.Tracer = Tracer;
2257
- exports.TracerEventType = TracerEventType;
2258
2278
  exports.VisualizerNode = VisualizerNode;
2259
2279
  exports.callback = callback;
2260
2280
  exports.clearGlobalContexts = clearGlobalContexts;
@@ -2276,6 +2296,7 @@ exports.hashValue = hashValue;
2276
2296
  exports.isPromise = isPromise;
2277
2297
  exports.isReactivePromise = isReactivePromise;
2278
2298
  exports.isRelay = isRelay$1;
2299
+ exports.isSignal = isSignal;
2279
2300
  exports.notifier = notifier;
2280
2301
  exports.registerCustomHash = registerCustomHash;
2281
2302
  exports.removeTracer = removeTracer;
@@ -2290,4 +2311,4 @@ exports.signal = signal;
2290
2311
  exports.unwatchSignal = unwatchSignal;
2291
2312
  exports.watchSignal = watchSignal;
2292
2313
  exports.withContexts = withContexts;
2293
- //# sourceMappingURL=debug-3nd-6Gnf.js.map
2314
+ //# sourceMappingURL=debug-CmcrpeEO.js.map