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.
- package/CHANGELOG.md +18 -0
- package/dist/cjs/development/config-B0MtLBgx.js.map +1 -1
- package/dist/cjs/development/{debug-DuXQhd5q.js → debug-gCDAvnLM.js} +237 -214
- package/dist/cjs/development/debug-gCDAvnLM.js.map +1 -0
- package/dist/cjs/development/debug.js +9 -3
- package/dist/cjs/development/debug.js.map +1 -1
- package/dist/cjs/development/index.js +8 -8
- package/dist/cjs/development/react/index.js +43 -38
- package/dist/cjs/development/react/index.js.map +1 -1
- package/dist/cjs/development/snapshot-Di0yziPX.js +147 -0
- package/dist/cjs/development/snapshot-Di0yziPX.js.map +1 -0
- package/dist/cjs/development/transform/index.js +137 -118
- package/dist/cjs/development/transform/index.js.map +1 -1
- package/dist/cjs/development/utils.js +5 -3
- package/dist/cjs/development/utils.js.map +1 -1
- package/dist/cjs/production/config-B0MtLBgx.js.map +1 -1
- package/dist/cjs/production/{contexts-DOH1tHd8.js → contexts-Wgq2NOVX.js} +156 -140
- package/dist/cjs/production/contexts-Wgq2NOVX.js.map +1 -0
- package/dist/cjs/production/debug.js +61 -66
- package/dist/cjs/production/debug.js.map +1 -1
- package/dist/cjs/production/index.js +8 -8
- package/dist/cjs/production/react/index.js +43 -38
- package/dist/cjs/production/react/index.js.map +1 -1
- package/dist/cjs/production/snapshot-YJJyLbxS.js +147 -0
- package/dist/cjs/production/snapshot-YJJyLbxS.js.map +1 -0
- package/dist/cjs/production/transform/index.js +137 -118
- package/dist/cjs/production/transform/index.js.map +1 -1
- package/dist/cjs/production/utils.js +5 -3
- package/dist/cjs/production/utils.js.map +1 -1
- package/dist/esm/development/config-CPQL7hX-.js.map +1 -1
- package/dist/esm/development/{debug-E2E1pZe5.js → debug-AoHfqs62.js} +221 -196
- package/dist/esm/development/debug-AoHfqs62.js.map +1 -0
- package/dist/esm/development/debug.js +1 -1
- package/dist/esm/development/index.js +6 -6
- package/dist/esm/development/react/index.js +43 -38
- package/dist/esm/development/react/index.js.map +1 -1
- package/dist/esm/development/snapshot-Bq0Um_hQ.js +148 -0
- package/dist/esm/development/snapshot-Bq0Um_hQ.js.map +1 -0
- package/dist/esm/development/transform/index.js +137 -118
- package/dist/esm/development/transform/index.js.map +1 -1
- package/dist/esm/development/utils.js +7 -4
- package/dist/esm/development/utils.js.map +1 -1
- package/dist/esm/internals/async.d.ts.map +1 -1
- package/dist/esm/internals/core-api.d.ts +2 -2
- package/dist/esm/internals/core-api.d.ts.map +1 -1
- package/dist/esm/internals/edge.d.ts +4 -4
- package/dist/esm/internals/edge.d.ts.map +1 -1
- package/dist/esm/internals/reactive.d.ts +14 -4
- package/dist/esm/internals/reactive.d.ts.map +1 -1
- package/dist/esm/internals/scheduling.d.ts.map +1 -1
- package/dist/esm/internals/signal.d.ts.map +1 -1
- package/dist/esm/internals/utils/snapshot.d.ts +29 -0
- package/dist/esm/internals/utils/snapshot.d.ts.map +1 -0
- package/dist/esm/production/config-CPQL7hX-.js.map +1 -1
- package/dist/esm/production/{contexts-Dj9Y86xW.js → contexts-X0gSj6rQ.js} +159 -143
- package/dist/esm/production/contexts-X0gSj6rQ.js.map +1 -0
- package/dist/esm/production/debug.js +51 -54
- package/dist/esm/production/debug.js.map +1 -1
- package/dist/esm/production/index.js +7 -7
- package/dist/esm/production/react/index.js +43 -38
- package/dist/esm/production/react/index.js.map +1 -1
- package/dist/esm/production/snapshot-CDS1d8mq.js +148 -0
- package/dist/esm/production/snapshot-CDS1d8mq.js.map +1 -0
- package/dist/esm/production/transform/index.js +137 -118
- package/dist/esm/production/transform/index.js.map +1 -1
- package/dist/esm/production/utils.js +7 -4
- package/dist/esm/production/utils.js.map +1 -1
- package/dist/esm/react/index.d.ts +1 -1
- package/dist/esm/react/index.d.ts.map +1 -1
- package/dist/esm/react/provider.d.ts.map +1 -1
- package/dist/esm/react/use-reactive.d.ts +1 -0
- package/dist/esm/react/use-reactive.d.ts.map +1 -1
- package/dist/esm/transform/callback.d.ts.map +1 -1
- package/dist/esm/transform/promise.d.ts.map +1 -1
- package/dist/esm/types.d.ts +5 -1
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/utils.d.ts +1 -0
- package/dist/esm/utils.d.ts.map +1 -1
- package/package.json +7 -5
- package/dist/cjs/development/core-api-C8J7lYBC.js +0 -55
- package/dist/cjs/development/core-api-C8J7lYBC.js.map +0 -1
- package/dist/cjs/development/debug-DuXQhd5q.js.map +0 -1
- package/dist/cjs/production/contexts-DOH1tHd8.js.map +0 -1
- package/dist/cjs/production/core-api-Cx2_AumW.js +0 -55
- package/dist/cjs/production/core-api-Cx2_AumW.js.map +0 -1
- package/dist/esm/development/core-api-CF5aK2Lx.js +0 -56
- package/dist/esm/development/core-api-CF5aK2Lx.js.map +0 -1
- package/dist/esm/development/debug-E2E1pZe5.js.map +0 -1
- package/dist/esm/production/contexts-Dj9Y86xW.js.map +0 -1
- package/dist/esm/production/core-api-D_uw3umM.js +0 -56
- 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
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
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 !==
|
|
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,
|
|
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 ===
|
|
216
|
+
if (event.type === TracerEventType.Connected || event.type === TracerEventType.ConsumeState) {
|
|
216
217
|
const node = this.nodeMap.get(event.id);
|
|
217
|
-
if (!node || event.type ===
|
|
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 ===
|
|
222
|
-
const params = event.type ===
|
|
223
|
-
const nodeType = event.type ===
|
|
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 ===
|
|
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 ===
|
|
245
|
-
if (event.type ===
|
|
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 ===
|
|
249
|
+
} else if (event.type === TracerEventType.Disconnected) {
|
|
252
250
|
node.disconnectChild(event.childId);
|
|
253
|
-
} else if (event.type ===
|
|
251
|
+
} else if (event.type === TracerEventType.StartUpdate) {
|
|
254
252
|
node.startUpdate();
|
|
255
|
-
if (nextEvent && nextEvent.id === event.id && (nextEvent.type ===
|
|
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 ===
|
|
256
|
+
} else if (event.type === TracerEventType.EndUpdate) {
|
|
259
257
|
node.endUpdate(event.value, event.preserveChildren);
|
|
260
|
-
} else if (event.type ===
|
|
258
|
+
} else if (event.type === TracerEventType.StartLoading) {
|
|
261
259
|
node.startLoading();
|
|
262
260
|
skipDelay = true;
|
|
263
|
-
} else if (event.type ===
|
|
261
|
+
} else if (event.type === TracerEventType.EndLoading) {
|
|
264
262
|
node.endLoading(event.value);
|
|
265
|
-
} else if (event.type ===
|
|
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
|
-
|
|
343
|
-
|
|
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
|
|
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
|
|
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
|
|
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)
|
|
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)
|
|
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 ===
|
|
639
|
+
if (prevState === 2) {
|
|
629
640
|
return;
|
|
630
641
|
}
|
|
631
|
-
signal2._state =
|
|
632
|
-
if (prevState <
|
|
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
|
|
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)
|
|
666
|
+
if (sub === void 0 || sub.computedCount !== edge.consumedAt)
|
|
667
|
+
continue;
|
|
658
668
|
const dirtyState = sub._state;
|
|
659
669
|
switch (dirtyState) {
|
|
660
|
-
case
|
|
661
|
-
sub._state =
|
|
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
|
|
667
|
-
case
|
|
668
|
-
case
|
|
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 ===
|
|
675
|
-
sub._state =
|
|
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
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
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)
|
|
940
|
+
if (rejected)
|
|
941
|
+
return;
|
|
935
942
|
results[i] = v;
|
|
936
|
-
if (--remaining === 0)
|
|
943
|
+
if (--remaining === 0)
|
|
944
|
+
p._setValue(results);
|
|
937
945
|
};
|
|
938
946
|
const onReject = (r) => {
|
|
939
|
-
if (rejected)
|
|
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)
|
|
961
|
+
if (len === 0)
|
|
962
|
+
return p;
|
|
953
963
|
let settled2 = false;
|
|
954
964
|
const onFulfill = (v) => {
|
|
955
|
-
if (settled2)
|
|
965
|
+
if (settled2)
|
|
966
|
+
return;
|
|
956
967
|
settled2 = true;
|
|
957
968
|
p._setValue(v);
|
|
958
969
|
};
|
|
959
970
|
const onReject = (r) => {
|
|
960
|
-
if (settled2)
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
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,
|
|
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 ?
|
|
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
|
-
(
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
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 =
|
|
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,
|
|
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 <
|
|
1502
|
+
if (state < 2) {
|
|
1487
1503
|
return signal2.updatedCount;
|
|
1488
1504
|
}
|
|
1489
|
-
if (state >=
|
|
1505
|
+
if (state >= 3) {
|
|
1490
1506
|
let edge = signal2.dirtyHead;
|
|
1491
1507
|
while (edge !== void 0) {
|
|
1492
|
-
if (edge.type ===
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 ===
|
|
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 ===
|
|
1545
|
+
} else if (newState === 4) {
|
|
1530
1546
|
signal2._value._clearPending();
|
|
1531
1547
|
}
|
|
1532
|
-
signal2._state =
|
|
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)
|
|
1880
|
-
|
|
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
|
-
|
|
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
|
|
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.
|
|
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
|
-
|
|
2257
|
-
|
|
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-
|
|
2300
|
+
//# sourceMappingURL=debug-AoHfqs62.js.map
|