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
  }
@@ -16,8 +17,20 @@ const setCurrentConsumer = (consumer) => {
16
17
  const getCurrentConsumer = () => {
17
18
  return CURRENT_CONSUMER;
18
19
  };
19
- let STATE_ID = 0;
20
+ const DEFAULT_EQUALS = (a, b) => a === b;
21
+ const FALSE_EQUALS = () => false;
22
+ const equalsFrom = (equals) => {
23
+ if (equals === false) {
24
+ return FALSE_EQUALS;
25
+ }
26
+ return equals ?? DEFAULT_EQUALS;
27
+ };
28
+ const SIGNAL_BRAND = /* @__PURE__ */ Symbol.for("signalium.signal");
29
+ function isSignal(value) {
30
+ return typeof value === "object" && value !== null && value[SIGNAL_BRAND] === true;
31
+ }
20
32
  class StateSignal {
33
+ [SIGNAL_BRAND] = true;
21
34
  _value;
22
35
  _equals;
23
36
  _subs = /* @__PURE__ */ new Map();
@@ -27,8 +40,6 @@ class StateSignal {
27
40
  constructor(value, equals = (a, b) => a === b, desc = "signal") {
28
41
  this._value = value;
29
42
  this._equals = equals;
30
- this._id = STATE_ID++;
31
- this._desc = desc;
32
43
  }
33
44
  get value() {
34
45
  this.consume();
@@ -59,7 +70,7 @@ class StateSignal {
59
70
  }
60
71
  dirtySignal(sub);
61
72
  }
62
- this._subs = /* @__PURE__ */ new Map();
73
+ this._subs.clear();
63
74
  scheduleListeners(this);
64
75
  }
65
76
  addListener(listener) {
@@ -80,13 +91,12 @@ function runListeners$1(signal2) {
80
91
  listener();
81
92
  }
82
93
  }
83
- const FALSE_EQUALS$1 = () => false;
84
94
  function signal(initialValue, opts) {
85
- const equals = opts?.equals === false ? FALSE_EQUALS$1 : opts?.equals ?? ((a, b) => a === b);
95
+ const equals = opts?.equals === false ? FALSE_EQUALS : opts?.equals ?? ((a, b) => a === b);
86
96
  return new StateSignal(initialValue, equals, opts?.desc);
87
97
  }
88
98
  const notifier = (opts) => {
89
- return new StateSignal(void 0, FALSE_EQUALS$1, opts?.desc);
99
+ return new StateSignal(void 0, FALSE_EQUALS, opts?.desc);
90
100
  };
91
101
  function watchSignal(signal2, parentIsSuspended) {
92
102
  if (parentIsSuspended) {
@@ -209,7 +219,8 @@ let PENDING_GC = /* @__PURE__ */ new Set();
209
219
  const microtask = () => Promise.resolve();
210
220
  let currentFlush = null;
211
221
  const scheduleFlush = (fn) => {
212
- if (currentFlush) return;
222
+ if (currentFlush)
223
+ return;
213
224
  let resolve;
214
225
  const promise = new Promise((r) => resolve = r);
215
226
  currentFlush = { promise, resolve };
@@ -242,7 +253,8 @@ const scheduleTracer = (tracer) => {
242
253
  };
243
254
  const scheduleGcSweep = (scope) => {
244
255
  PENDING_GC.add(scope);
245
- if (PENDING_GC.size > 1) return;
256
+ if (PENDING_GC.size > 1)
257
+ return;
246
258
  scheduleIdleCallback(() => {
247
259
  for (const scope2 of PENDING_GC) {
248
260
  scope2.sweepGc();
@@ -252,6 +264,8 @@ const scheduleGcSweep = (scope) => {
252
264
  };
253
265
  const flushWatchers = async () => {
254
266
  const flush = currentFlush;
267
+ if (!flush)
268
+ return;
255
269
  while (PENDING_ASYNC_PULLS.length > 0 || PENDING_PULLS.size > 0) {
256
270
  const asyncPulls = PENDING_ASYNC_PULLS;
257
271
  PENDING_ASYNC_PULLS = [];
@@ -289,19 +303,17 @@ const settled = async () => {
289
303
  };
290
304
  function dirtySignal(signal2) {
291
305
  const prevState = signal2._state;
292
- if (prevState === ReactiveFnState.Dirty) {
306
+ if (prevState === 2) {
293
307
  return;
294
308
  }
295
- signal2._state = ReactiveFnState.Dirty;
296
- if (prevState < ReactiveFnState.MaybeDirty) {
309
+ signal2._state = 2;
310
+ if (prevState < 3) {
297
311
  propagateDirty(signal2);
298
312
  }
299
313
  }
300
314
  function propagateDirty(signal2) {
301
315
  if (getCurrentConsumer() === signal2) {
302
- throw new Error(
303
- "A signal was dirtied after it was consumed by the current function. This can cause race conditions and infinite rerenders and is not allowed."
304
- );
316
+ 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.");
305
317
  }
306
318
  if (isRelay(signal2)) {
307
319
  if (signal2.watchCount > 0) {
@@ -312,31 +324,32 @@ function propagateDirty(signal2) {
312
324
  schedulePull(signal2);
313
325
  }
314
326
  dirtySignalConsumers(signal2.subs);
315
- signal2.subs = /* @__PURE__ */ new Map();
327
+ signal2.subs.clear();
316
328
  }
317
329
  }
318
330
  function dirtySignalConsumers(map) {
319
331
  for (const [subRef, edge] of map) {
320
332
  const sub = subRef.deref();
321
- if (sub === void 0 || sub.computedCount !== edge.consumedAt) continue;
333
+ if (sub === void 0 || sub.computedCount !== edge.consumedAt)
334
+ continue;
322
335
  const dirtyState = sub._state;
323
336
  switch (dirtyState) {
324
- case ReactiveFnState.Clean:
325
- sub._state = ReactiveFnState.MaybeDirty;
337
+ case 0:
338
+ sub._state = 3;
326
339
  sub.dirtyHead = edge;
327
340
  edge.nextDirty = void 0;
328
341
  propagateDirty(sub);
329
342
  break;
330
- case ReactiveFnState.Pending:
331
- case ReactiveFnState.MaybeDirty:
332
- case ReactiveFnState.PendingDirty: {
343
+ case 1:
344
+ case 3:
345
+ case 4: {
333
346
  let subEdge = sub.dirtyHead;
334
347
  const ord = edge.ord;
335
348
  if (subEdge.ord > ord) {
336
349
  sub.dirtyHead = edge;
337
350
  edge.nextDirty = subEdge;
338
- if (dirtyState === ReactiveFnState.Pending || dirtyState === ReactiveFnState.PendingDirty) {
339
- sub._state = ReactiveFnState.MaybeDirty;
351
+ if (dirtyState === 1 || dirtyState === 4) {
352
+ sub._state = 3;
340
353
  propagateDirty(sub);
341
354
  }
342
355
  } else {
@@ -354,21 +367,25 @@ function dirtySignalConsumers(map) {
354
367
  }
355
368
  }
356
369
  let CURRENT_ORD = 0;
357
- var EdgeType = /* @__PURE__ */ ((EdgeType2) => {
358
- EdgeType2[EdgeType2["Signal"] = 0] = "Signal";
359
- EdgeType2[EdgeType2["Promise"] = 1] = "Promise";
360
- return EdgeType2;
361
- })(EdgeType || {});
370
+ class EdgeBase {
371
+ type;
372
+ dep;
373
+ ord;
374
+ updatedAt;
375
+ consumedAt;
376
+ nextDirty;
377
+ constructor(type, dep, updatedAt, consumedAt) {
378
+ this.type = type;
379
+ this.dep = dep;
380
+ this.ord = CURRENT_ORD++;
381
+ this.updatedAt = updatedAt;
382
+ this.consumedAt = consumedAt;
383
+ this.nextDirty = void 0;
384
+ }
385
+ }
362
386
  function createEdge(prevEdge, type, dep, updatedAt, consumedAt) {
363
387
  if (prevEdge === void 0) {
364
- return {
365
- type,
366
- dep,
367
- ord: CURRENT_ORD++,
368
- updatedAt,
369
- consumedAt,
370
- nextDirty: void 0
371
- };
388
+ return new EdgeBase(type, dep, updatedAt, consumedAt);
372
389
  }
373
390
  prevEdge.ord = CURRENT_ORD++;
374
391
  prevEdge.updatedAt = updatedAt;
@@ -396,14 +413,6 @@ function findAndRemoveDirty(sub, dep) {
396
413
  }
397
414
  return void 0;
398
415
  }
399
- const DEFAULT_EQUALS = (a, b) => a === b;
400
- const FALSE_EQUALS = () => false;
401
- const equalsFrom = (equals) => {
402
- if (equals === false) {
403
- return FALSE_EQUALS;
404
- }
405
- return equals ?? DEFAULT_EQUALS;
406
- };
407
416
  const GeneratorResultConstructor = (function* () {
408
417
  })().constructor;
409
418
  function isGeneratorResult(value) {
@@ -530,6 +539,9 @@ function callback(fn, idx, deps) {
530
539
  }
531
540
  return callback2.fn;
532
541
  }
542
+ function isAbortError(error) {
543
+ return error instanceof DOMException && error.name === "AbortError";
544
+ }
533
545
  const arrayFrom = Array.from;
534
546
  function isThenable(v) {
535
547
  return v !== null && typeof v === "object" && typeof v.then === "function";
@@ -592,12 +604,15 @@ class ReactivePromiseImpl {
592
604
  let remaining = len;
593
605
  let rejected = false;
594
606
  const onFulfillAt = (i) => (v) => {
595
- if (rejected) return;
607
+ if (rejected)
608
+ return;
596
609
  results[i] = v;
597
- if (--remaining === 0) p._setValue(results);
610
+ if (--remaining === 0)
611
+ p._setValue(results);
598
612
  };
599
613
  const onReject = (r) => {
600
- if (rejected) return;
614
+ if (rejected)
615
+ return;
601
616
  rejected = true;
602
617
  p._setError(r);
603
618
  };
@@ -610,15 +625,18 @@ class ReactivePromiseImpl {
610
625
  const p = new ReactivePromiseImpl();
611
626
  const arr = arrayFrom(values);
612
627
  const len = arr.length;
613
- if (len === 0) return p;
628
+ if (len === 0)
629
+ return p;
614
630
  let settled2 = false;
615
631
  const onFulfill = (v) => {
616
- if (settled2) return;
632
+ if (settled2)
633
+ return;
617
634
  settled2 = true;
618
635
  p._setValue(v);
619
636
  };
620
637
  const onReject = (r) => {
621
- if (settled2) return;
638
+ if (settled2)
639
+ return;
622
640
  settled2 = true;
623
641
  p._setError(r);
624
642
  };
@@ -639,12 +657,14 @@ class ReactivePromiseImpl {
639
657
  const errors = new Array(len);
640
658
  let fulfilled = false;
641
659
  const onFulfill = (value) => {
642
- if (fulfilled) return;
660
+ if (fulfilled)
661
+ return;
643
662
  fulfilled = true;
644
663
  p._setValue(value);
645
664
  };
646
665
  const onRejectAt = (index) => (reason) => {
647
- if (fulfilled) return;
666
+ if (fulfilled)
667
+ return;
648
668
  errors[index] = reason;
649
669
  if (--pending === 0) {
650
670
  p._setError(new AggregateError(errors, "All promises were rejected in ReactivePromise.any"));
@@ -667,11 +687,13 @@ class ReactivePromiseImpl {
667
687
  let remaining = len;
668
688
  const onFulfillAt = (index) => (value) => {
669
689
  results[index] = { status: "fulfilled", value };
670
- if (--remaining === 0) p._setValue(results);
690
+ if (--remaining === 0)
691
+ p._setValue(results);
671
692
  };
672
693
  const onRejectAt = (index) => (reason) => {
673
694
  results[index] = { status: "rejected", reason };
674
- if (--remaining === 0) p._setValue(results);
695
+ if (--remaining === 0)
696
+ p._setValue(results);
675
697
  };
676
698
  for (let i = 0; i < len; i++) {
677
699
  thenLoop(arr[i], onFulfillAt(i), onRejectAt(i));
@@ -679,7 +701,8 @@ class ReactivePromiseImpl {
679
701
  return p;
680
702
  }
681
703
  static resolve(value) {
682
- if (value instanceof ReactivePromiseImpl) return value;
704
+ if (value instanceof ReactivePromiseImpl)
705
+ return value;
683
706
  return new ReactivePromiseImpl((resolve) => resolve(value));
684
707
  }
685
708
  static reject(reason) {
@@ -690,7 +713,7 @@ class ReactivePromiseImpl {
690
713
  p._equals = DEFAULT_EQUALS;
691
714
  p._initFlags(
692
715
  1
693
- /* Pending */
716
+ /* AsyncFlags.Pending */
694
717
  );
695
718
  const resolve = (value) => {
696
719
  if (value && typeof value.then === "function") {
@@ -709,7 +732,8 @@ class ReactivePromiseImpl {
709
732
  }
710
733
  _consumeFlags(flags) {
711
734
  const currentConsumer = getCurrentConsumer();
712
- if (currentConsumer === void 0) return;
735
+ if (currentConsumer === void 0)
736
+ return;
713
737
  if ((this._flags & 128) !== 0) {
714
738
  this._connect();
715
739
  }
@@ -721,11 +745,13 @@ class ReactivePromiseImpl {
721
745
  _connect() {
722
746
  const signal2 = this._signal;
723
747
  const currentConsumer = getCurrentConsumer();
748
+ if (currentConsumer === signal2)
749
+ return;
724
750
  if (currentConsumer?.watchCount === 0) {
725
751
  const { ref, computedCount, deps } = currentConsumer;
726
752
  const prevEdge = deps.get(signal2);
727
753
  if (prevEdge?.consumedAt !== computedCount) {
728
- const newEdge = createEdge(prevEdge, EdgeType.Signal, signal2, signal2.updatedCount, computedCount);
754
+ const newEdge = createEdge(prevEdge, 0, signal2, signal2.updatedCount, computedCount);
729
755
  signal2.subs.set(ref, newEdge);
730
756
  deps.set(signal2, newEdge);
731
757
  }
@@ -765,7 +791,7 @@ class ReactivePromiseImpl {
765
791
  }
766
792
  this._setFlags(
767
793
  1
768
- /* Pending */
794
+ /* AsyncFlags.Pending */
769
795
  );
770
796
  dirtySignalConsumers(this._awaitSubs);
771
797
  return this._awaitSubs = /* @__PURE__ */ new Map();
@@ -828,6 +854,10 @@ class ReactivePromiseImpl {
828
854
  }
829
855
  }
830
856
  _setError(nextError, awaitSubs = this._awaitSubs) {
857
+ if (nextError !== this._error && !isAbortError(nextError)) {
858
+ const desc = this._signal?.desc ?? void 0;
859
+ console.error(`[signalium] Unhandled async error${desc ? ` in "${desc}"` : ""}:`, nextError);
860
+ }
831
861
  let error = this._error;
832
862
  let notifyFlags = 0;
833
863
  if (error !== nextError) {
@@ -857,7 +887,7 @@ class ReactivePromiseImpl {
857
887
  }
858
888
  }
859
889
  _scheduleSubs(awaitSubs, dirty) {
860
- const newState = dirty ? ReactiveFnState.Dirty : ReactiveFnState.PendingDirty;
890
+ const newState = dirty ? 2 : 4;
861
891
  for (const ref of awaitSubs.keys()) {
862
892
  const signal2 = ref.deref();
863
893
  if (signal2 === void 0) {
@@ -870,49 +900,49 @@ class ReactivePromiseImpl {
870
900
  get value() {
871
901
  this._consumeFlags(
872
902
  16
873
- /* Value */
903
+ /* AsyncFlags.Value */
874
904
  );
875
905
  return this._value;
876
906
  }
877
907
  get error() {
878
908
  this._consumeFlags(
879
909
  32
880
- /* Error */
910
+ /* AsyncFlags.Error */
881
911
  );
882
912
  return this._error;
883
913
  }
884
914
  get isPending() {
885
915
  this._consumeFlags(
886
916
  1
887
- /* Pending */
917
+ /* AsyncFlags.Pending */
888
918
  );
889
919
  return (this._flags & 1) !== 0;
890
920
  }
891
921
  get isRejected() {
892
922
  this._consumeFlags(
893
923
  2
894
- /* Rejected */
924
+ /* AsyncFlags.Rejected */
895
925
  );
896
926
  return (this._flags & 2) !== 0;
897
927
  }
898
928
  get isResolved() {
899
929
  this._consumeFlags(
900
930
  4
901
- /* Resolved */
931
+ /* AsyncFlags.Resolved */
902
932
  );
903
933
  return (this._flags & 4) !== 0;
904
934
  }
905
935
  get isReady() {
906
936
  this._consumeFlags(
907
937
  8
908
- /* Ready */
938
+ /* AsyncFlags.Ready */
909
939
  );
910
940
  return (this._flags & 8) !== 0;
911
941
  }
912
942
  get isSettled() {
913
943
  this._consumeFlags(
914
944
  6
915
- /* Settled */
945
+ /* AsyncFlags.Settled */
916
946
  );
917
947
  return (this._flags & 6) !== 0;
918
948
  }
@@ -928,13 +958,7 @@ class ReactivePromiseImpl {
928
958
  }
929
959
  ref = currentConsumer.ref;
930
960
  const prevEdge = this._awaitSubs.get(ref) ?? findAndRemoveDirty(currentConsumer, this);
931
- edge = createEdge(
932
- prevEdge,
933
- EdgeType.Promise,
934
- this,
935
- this._updatedCount,
936
- currentConsumer.computedCount
937
- );
961
+ edge = createEdge(prevEdge, 1, this, this._updatedCount, currentConsumer.computedCount);
938
962
  }
939
963
  const wrappedFulfilled = onfulfilled ? (value) => {
940
964
  try {
@@ -970,16 +994,13 @@ class ReactivePromiseImpl {
970
994
  return this.then(null, onrejected);
971
995
  }
972
996
  finally(onfinally) {
973
- return this.then(
974
- (value) => {
975
- onfinally?.();
976
- return value;
977
- },
978
- (reason) => {
979
- onfinally?.();
980
- throw reason;
981
- }
982
- );
997
+ return this.then((value) => {
998
+ onfinally?.();
999
+ return value;
1000
+ }, (reason) => {
1001
+ onfinally?.();
1002
+ throw reason;
1003
+ });
983
1004
  }
984
1005
  get [Symbol.toStringTag]() {
985
1006
  return `ReactivePromise`;
@@ -1001,7 +1022,7 @@ function createPromise(promise, signal2) {
1001
1022
  p["_equals"] = signal2.def.equals;
1002
1023
  p["_initFlags"](
1003
1024
  1
1004
- /* Pending */
1025
+ /* AsyncFlags.Pending */
1005
1026
  );
1006
1027
  p["_setPromise"](promise);
1007
1028
  return p;
@@ -1018,7 +1039,7 @@ function createRelay(activate, scope, opts) {
1018
1039
  }
1019
1040
  const signal2 = p["_signal"];
1020
1041
  signal2.subs = /* @__PURE__ */ new Map();
1021
- signal2._state = ReactiveFnState.Dirty;
1042
+ signal2._state = 2;
1022
1043
  active = false;
1023
1044
  currentSub = void 0;
1024
1045
  };
@@ -1063,7 +1084,7 @@ function createRelay(activate, scope, opts) {
1063
1084
  p["_equals"] = equalsFrom(opts?.equals);
1064
1085
  p["_initFlags"](
1065
1086
  128 | 1
1066
- /* Pending */
1087
+ /* AsyncFlags.Pending */
1067
1088
  );
1068
1089
  return p;
1069
1090
  }
@@ -1073,7 +1094,7 @@ function createTask(task, scope, opts) {
1073
1094
  p["_equals"] = equalsFrom(opts?.equals);
1074
1095
  p["_initFlags"](
1075
1096
  64
1076
- /* isRunnable */
1097
+ /* AsyncFlags.isRunnable */
1077
1098
  );
1078
1099
  const throwIfRunning = opts?.throwIfRunning === true;
1079
1100
  p["run"] = ((...args) => {
@@ -1099,7 +1120,7 @@ function getSignal(signal2) {
1099
1120
  }
1100
1121
  }
1101
1122
  const updatedAt = checkSignal(signal2);
1102
- const newEdge = createEdge(prevEdge, EdgeType.Signal, signal2, updatedAt, computedCount);
1123
+ const newEdge = createEdge(prevEdge, 0, signal2, updatedAt, computedCount);
1103
1124
  signal2.subs.set(ref, newEdge);
1104
1125
  deps.set(signal2, newEdge);
1105
1126
  } else {
@@ -1115,26 +1136,26 @@ function getSignal(signal2) {
1115
1136
  }
1116
1137
  function checkSignal(signal2) {
1117
1138
  const { ref, _state: state } = signal2;
1118
- if (state < ReactiveFnState.Dirty) {
1139
+ if (state < 2) {
1119
1140
  return signal2.updatedCount;
1120
1141
  }
1121
- if (state >= ReactiveFnState.MaybeDirty) {
1142
+ if (state >= 3) {
1122
1143
  let edge = signal2.dirtyHead;
1123
1144
  while (edge !== void 0) {
1124
- if (edge.type === EdgeType.Promise) {
1145
+ if (edge.type === 1) {
1125
1146
  const dep2 = edge.dep;
1126
1147
  if (dep2._getPending()) {
1127
1148
  const value = signal2._value;
1128
1149
  dep2["_awaitSubs"].set(ref, edge);
1129
1150
  value._setPending();
1130
- signal2._state = ReactiveFnState.Pending;
1151
+ signal2._state = 1;
1131
1152
  signal2.dirtyHead = edge;
1132
1153
  return signal2.updatedCount;
1133
1154
  } else if (edge.updatedAt === edge.dep._updatedCount) {
1134
1155
  dep2["_awaitSubs"].set(ref, edge);
1135
1156
  } else {
1136
1157
  signal2.dirtyHead = edge.nextDirty;
1137
- signal2._state = ReactiveFnState.Dirty;
1158
+ signal2._state = 2;
1138
1159
  break;
1139
1160
  }
1140
1161
  edge = edge.nextDirty;
@@ -1145,23 +1166,23 @@ function checkSignal(signal2) {
1145
1166
  dep.subs.set(ref, edge);
1146
1167
  if (edge.updatedAt !== updatedAt) {
1147
1168
  signal2.dirtyHead = edge.nextDirty;
1148
- signal2._state = ReactiveFnState.Dirty;
1169
+ signal2._state = 2;
1149
1170
  break;
1150
1171
  }
1151
1172
  edge = edge.nextDirty;
1152
1173
  }
1153
1174
  }
1154
1175
  const newState = signal2._state;
1155
- if (newState === ReactiveFnState.Dirty) {
1176
+ if (newState === 2) {
1156
1177
  if (signal2._isLazy) {
1157
1178
  signal2.updatedCount++;
1158
1179
  } else {
1159
1180
  runSignal(signal2);
1160
1181
  }
1161
- } else if (newState === ReactiveFnState.PendingDirty) {
1182
+ } else if (newState === 4) {
1162
1183
  signal2._value._clearPending();
1163
1184
  }
1164
- signal2._state = ReactiveFnState.Clean;
1185
+ signal2._state = 0;
1165
1186
  signal2.dirtyHead = void 0;
1166
1187
  return signal2.updatedCount;
1167
1188
  }
@@ -1330,56 +1351,56 @@ function hashDate(date, _seen) {
1330
1351
  return hashNumber(
1331
1352
  date.getTime(),
1332
1353
  14
1333
- /* DATE */
1354
+ /* HashType.DATE */
1334
1355
  );
1335
1356
  }
1336
1357
  function hashRegExp(regexp, _seen) {
1337
1358
  const h = hashStr(
1338
1359
  regexp.source + regexp.flags,
1339
1360
  15
1340
- /* REGEXP */
1361
+ /* HashType.REGEXP */
1341
1362
  );
1342
1363
  return (h ^ regexp.lastIndex) >>> 0;
1343
1364
  }
1344
1365
  const UNDEFINED = hashStr(
1345
1366
  "undefined",
1346
1367
  0
1347
- /* UNDEFINED */
1368
+ /* HashType.UNDEFINED */
1348
1369
  );
1349
1370
  const NULL = hashStr(
1350
1371
  "null",
1351
1372
  1
1352
- /* NULL */
1373
+ /* HashType.NULL */
1353
1374
  );
1354
1375
  const TRUE = hashStr(
1355
1376
  "true",
1356
1377
  2
1357
- /* TRUE */
1378
+ /* HashType.TRUE */
1358
1379
  );
1359
1380
  const FALSE = hashStr(
1360
1381
  "false",
1361
1382
  3
1362
- /* FALSE */
1383
+ /* HashType.FALSE */
1363
1384
  );
1364
1385
  const ARRAY = hashStr(
1365
1386
  "array",
1366
1387
  7
1367
- /* ARRAY */
1388
+ /* HashType.ARRAY */
1368
1389
  );
1369
1390
  const OBJECT = hashStr(
1370
1391
  "object",
1371
1392
  8
1372
- /* OBJECT */
1393
+ /* HashType.OBJECT */
1373
1394
  );
1374
1395
  const SET = hashStr(
1375
1396
  "set",
1376
1397
  13
1377
- /* SET */
1398
+ /* HashType.SET */
1378
1399
  );
1379
1400
  const MAP = hashStr(
1380
1401
  "map",
1381
1402
  12
1382
- /* MAP */
1403
+ /* HashType.MAP */
1383
1404
  );
1384
1405
  const getObjectProto = Object.getPrototypeOf;
1385
1406
  const PROTO_TO_HASH = /* @__PURE__ */ new Map([
@@ -1403,19 +1424,19 @@ function hashValue(node, seen = []) {
1403
1424
  return hashStr(
1404
1425
  String(node),
1405
1426
  4
1406
- /* NUMBER */
1427
+ /* HashType.NUMBER */
1407
1428
  );
1408
1429
  case "string":
1409
1430
  return hashStr(
1410
1431
  node,
1411
1432
  5
1412
- /* STRING */
1433
+ /* HashType.STRING */
1413
1434
  );
1414
1435
  case "bigint":
1415
1436
  return hashStr(
1416
1437
  node.toString(),
1417
1438
  6
1418
- /* BIGINT */
1439
+ /* HashType.BIGINT */
1419
1440
  );
1420
1441
  case "object": {
1421
1442
  if (node === null) {
@@ -1426,7 +1447,7 @@ function hashValue(node, seen = []) {
1426
1447
  return hashStr(
1427
1448
  String(index),
1428
1449
  11
1429
- /* CYCLE */
1450
+ /* HashType.CYCLE */
1430
1451
  );
1431
1452
  }
1432
1453
  const hashFn = PROTO_TO_HASH.get(getObjectProto(node));
@@ -1444,7 +1465,7 @@ function hashValue(node, seen = []) {
1444
1465
  return hashStr(
1445
1466
  node.toString(),
1446
1467
  10
1447
- /* SYMBOL */
1468
+ /* HashType.SYMBOL */
1448
1469
  );
1449
1470
  }
1450
1471
  }
@@ -1456,7 +1477,7 @@ function getObjectHash(obj) {
1456
1477
  id = hashNumber(
1457
1478
  nextHashMapId++,
1458
1479
  9
1459
- /* REFERENCE */
1480
+ /* HashType.REFERENCE */
1460
1481
  );
1461
1482
  objectToHashMap.set(obj, id);
1462
1483
  }
@@ -1473,25 +1494,16 @@ function hashReactiveFn(fn, args) {
1473
1494
  h = h << 13 | h >>> 19;
1474
1495
  return imul(h, 5) + 3864292196 >>> 0;
1475
1496
  }
1476
- var ReactiveFnState = /* @__PURE__ */ ((ReactiveFnState2) => {
1477
- ReactiveFnState2[ReactiveFnState2["Clean"] = 0] = "Clean";
1478
- ReactiveFnState2[ReactiveFnState2["Pending"] = 1] = "Pending";
1479
- ReactiveFnState2[ReactiveFnState2["Dirty"] = 2] = "Dirty";
1480
- ReactiveFnState2[ReactiveFnState2["MaybeDirty"] = 3] = "MaybeDirty";
1481
- ReactiveFnState2[ReactiveFnState2["PendingDirty"] = 4] = "PendingDirty";
1482
- return ReactiveFnState2;
1483
- })(ReactiveFnState || {});
1484
1497
  let ID = 0;
1485
1498
  function createReactiveDefinition(id, desc, compute, equals, isRelay2, paramKey, tracer) {
1486
- return {
1487
- id,
1488
- desc,
1499
+ const def = {
1489
1500
  compute,
1490
1501
  equals: equalsFrom(equals),
1491
1502
  isRelay: isRelay2,
1492
1503
  paramKey,
1493
- tracer
1504
+ tracer: void 0
1494
1505
  };
1506
+ return def;
1495
1507
  }
1496
1508
  class ReactiveSignal {
1497
1509
  // Bitmask containing state in the first 2 bits and boolean properties in the remaining bits
@@ -1512,6 +1524,7 @@ class ReactiveSignal {
1512
1524
  _listeners = null;
1513
1525
  _value = void 0;
1514
1526
  tracerMeta;
1527
+ desc;
1515
1528
  // Reference to the shared definition
1516
1529
  def;
1517
1530
  constructor(def, args, key, scope) {
@@ -1520,6 +1533,7 @@ class ReactiveSignal {
1520
1533
  this.key = key;
1521
1534
  this.args = args;
1522
1535
  this.def = def;
1536
+ this.desc = def.desc;
1523
1537
  }
1524
1538
  get _state() {
1525
1539
  return this.flags & 7;
@@ -1655,13 +1669,14 @@ function createReactiveSignal(def, args = [], key, scope) {
1655
1669
  }
1656
1670
  let CONTEXT_ID = 0;
1657
1671
  class ContextImpl {
1672
+ defaultValue;
1673
+ _key;
1674
+ _description;
1658
1675
  constructor(defaultValue, desc) {
1659
1676
  this.defaultValue = defaultValue;
1660
1677
  this._description = desc ?? `context:${CONTEXT_ID++}`;
1661
1678
  this._key = Symbol(this._description);
1662
1679
  }
1663
- _key;
1664
- _description;
1665
1680
  }
1666
1681
  const context = (initialValue, description) => {
1667
1682
  return new ContextImpl(initialValue, description);
@@ -1679,9 +1694,7 @@ function withContexts(contexts, fn) {
1679
1694
  const getContext = (context2) => {
1680
1695
  const scope = CURRENT_SCOPE ?? getCurrentConsumer()?.scope;
1681
1696
  if (scope === void 0) {
1682
- throw new Error(
1683
- "getContext must be used within a reactive function, a withContext, or within a framework-specific context provider."
1684
- );
1697
+ throw new Error("getContext must be used within a reactive function, a withContext, or within a framework-specific context provider.");
1685
1698
  }
1686
1699
  return scope.getContext(context2) ?? context2.defaultValue;
1687
1700
  };
@@ -1817,6 +1830,7 @@ exports.hashValue = hashValue;
1817
1830
  exports.isPromise = isPromise;
1818
1831
  exports.isReactivePromise = isReactivePromise;
1819
1832
  exports.isRelay = isRelay$1;
1833
+ exports.isSignal = isSignal;
1820
1834
  exports.notifier = notifier;
1821
1835
  exports.registerCustomHash = registerCustomHash;
1822
1836
  exports.runSignal = runSignal;
@@ -1829,4 +1843,4 @@ exports.signal = signal;
1829
1843
  exports.unwatchSignal = unwatchSignal;
1830
1844
  exports.watchSignal = watchSignal;
1831
1845
  exports.withContexts = withContexts;
1832
- //# sourceMappingURL=contexts-DoZWv_3I.js.map
1846
+ //# sourceMappingURL=contexts-DCujds9v.js.map