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