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