signalium 2.2.2 → 2.3.0

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