signalium 2.2.3 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/dist/cjs/development/config-B0MtLBgx.js.map +1 -1
- package/dist/cjs/development/{debug-3nd-6Gnf.js → debug-CmcrpeEO.js} +228 -207
- package/dist/cjs/development/debug-CmcrpeEO.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 +9 -8
- package/dist/cjs/development/index.js.map +1 -1
- package/dist/cjs/development/react/index.js +43 -38
- package/dist/cjs/development/react/index.js.map +1 -1
- package/dist/cjs/development/snapshot-BJN--_kH.js +147 -0
- package/dist/cjs/development/snapshot-BJN--_kH.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-DoZWv_3I.js → contexts-DCujds9v.js} +147 -133
- package/dist/cjs/production/contexts-DCujds9v.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 +9 -8
- package/dist/cjs/production/index.js.map +1 -1
- package/dist/cjs/production/react/index.js +43 -38
- package/dist/cjs/production/react/index.js.map +1 -1
- package/dist/cjs/production/snapshot-CRhlFRNu.js +147 -0
- package/dist/cjs/production/snapshot-CRhlFRNu.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-BfudYKc4.js → debug-B6Cqxyzi.js} +228 -205
- package/dist/esm/development/debug-B6Cqxyzi.js.map +1 -0
- package/dist/esm/development/debug.js +9 -9
- package/dist/esm/development/index.js +15 -14
- package/dist/esm/development/react/index.js +43 -38
- package/dist/esm/development/react/index.js.map +1 -1
- package/dist/esm/development/snapshot-BeaCnwxd.js +148 -0
- package/dist/esm/development/snapshot-BeaCnwxd.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/index.d.ts +1 -1
- package/dist/esm/index.d.ts.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 +1 -0
- 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 +4 -0
- 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-CilfS6eG.js → contexts-DL91-2Y8.js} +158 -144
- package/dist/esm/production/contexts-DL91-2Y8.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 +16 -15
- package/dist/esm/production/react/index.js +43 -38
- package/dist/esm/production/react/index.js.map +1 -1
- package/dist/esm/production/snapshot-Cj4ycaEt.js +148 -0
- package/dist/esm/production/snapshot-Cj4ycaEt.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/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-C6HCIyL3.js +0 -55
- package/dist/cjs/development/core-api-C6HCIyL3.js.map +0 -1
- package/dist/cjs/development/debug-3nd-6Gnf.js.map +0 -1
- package/dist/cjs/production/contexts-DoZWv_3I.js.map +0 -1
- package/dist/cjs/production/core-api-CUviCxtM.js +0 -55
- package/dist/cjs/production/core-api-CUviCxtM.js.map +0 -1
- package/dist/esm/development/core-api-CjsScNn1.js +0 -56
- package/dist/esm/development/core-api-CjsScNn1.js.map +0 -1
- package/dist/esm/development/debug-BfudYKc4.js.map +0 -1
- package/dist/esm/production/contexts-CilfS6eG.js.map +0 -1
- package/dist/esm/production/core-api-tTQttL8R.js +0 -56
- package/dist/esm/production/core-api-tTQttL8R.js.map +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
const config = require("./config-B0MtLBgx.js");
|
|
3
3
|
class WeakRefPolyfill {
|
|
4
|
+
value;
|
|
4
5
|
constructor(value) {
|
|
5
6
|
this.value = value;
|
|
6
7
|
}
|
|
@@ -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,8 +327,21 @@ 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;
|
|
339
|
+
const SIGNAL_BRAND = /* @__PURE__ */ Symbol.for("signalium.signal");
|
|
340
|
+
function isSignal(value) {
|
|
341
|
+
return typeof value === "object" && value !== null && value[SIGNAL_BRAND] === true;
|
|
342
|
+
}
|
|
333
343
|
class StateSignal {
|
|
344
|
+
[SIGNAL_BRAND] = true;
|
|
334
345
|
_value;
|
|
335
346
|
_equals;
|
|
336
347
|
_subs = /* @__PURE__ */ new Map();
|
|
@@ -340,8 +351,10 @@ class StateSignal {
|
|
|
340
351
|
constructor(value, equals = (a, b) => a === b, desc = "signal") {
|
|
341
352
|
this._value = value;
|
|
342
353
|
this._equals = equals;
|
|
343
|
-
|
|
344
|
-
|
|
354
|
+
{
|
|
355
|
+
this._id = STATE_ID++;
|
|
356
|
+
this._desc = desc;
|
|
357
|
+
}
|
|
345
358
|
}
|
|
346
359
|
get value() {
|
|
347
360
|
this.consume();
|
|
@@ -363,7 +376,7 @@ class StateSignal {
|
|
|
363
376
|
{
|
|
364
377
|
const tracer = getTracerProxy();
|
|
365
378
|
tracer?.emit({
|
|
366
|
-
type: TracerEventType.ConsumeState,
|
|
379
|
+
type: exports.TracerEventType.ConsumeState,
|
|
367
380
|
id: currentConsumer.tracerMeta.id,
|
|
368
381
|
name: this._desc,
|
|
369
382
|
childId: this._id,
|
|
@@ -385,7 +398,7 @@ class StateSignal {
|
|
|
385
398
|
}
|
|
386
399
|
dirtySignal(sub);
|
|
387
400
|
}
|
|
388
|
-
this._subs
|
|
401
|
+
this._subs.clear();
|
|
389
402
|
scheduleListeners(this);
|
|
390
403
|
}
|
|
391
404
|
addListener(listener) {
|
|
@@ -406,13 +419,12 @@ function runListeners$1(signal2) {
|
|
|
406
419
|
listener();
|
|
407
420
|
}
|
|
408
421
|
}
|
|
409
|
-
const FALSE_EQUALS$1 = () => false;
|
|
410
422
|
function signal(initialValue, opts) {
|
|
411
|
-
const equals = opts?.equals === false ? FALSE_EQUALS
|
|
423
|
+
const equals = opts?.equals === false ? FALSE_EQUALS : opts?.equals ?? ((a, b) => a === b);
|
|
412
424
|
return new StateSignal(initialValue, equals, opts?.desc);
|
|
413
425
|
}
|
|
414
426
|
const notifier = (opts) => {
|
|
415
|
-
return new StateSignal(void 0, FALSE_EQUALS
|
|
427
|
+
return new StateSignal(void 0, FALSE_EQUALS, opts?.desc);
|
|
416
428
|
};
|
|
417
429
|
function watchSignal(signal2, parentIsSuspended) {
|
|
418
430
|
if (parentIsSuspended) {
|
|
@@ -536,7 +548,8 @@ let PENDING_GC = /* @__PURE__ */ new Set();
|
|
|
536
548
|
const microtask = () => Promise.resolve();
|
|
537
549
|
let currentFlush = null;
|
|
538
550
|
const scheduleFlush = (fn) => {
|
|
539
|
-
if (currentFlush)
|
|
551
|
+
if (currentFlush)
|
|
552
|
+
return;
|
|
540
553
|
let resolve;
|
|
541
554
|
const promise = new Promise((r) => resolve = r);
|
|
542
555
|
currentFlush = { promise, resolve };
|
|
@@ -573,7 +586,8 @@ const scheduleTracer = (tracer) => {
|
|
|
573
586
|
};
|
|
574
587
|
const scheduleGcSweep = (scope) => {
|
|
575
588
|
PENDING_GC.add(scope);
|
|
576
|
-
if (PENDING_GC.size > 1)
|
|
589
|
+
if (PENDING_GC.size > 1)
|
|
590
|
+
return;
|
|
577
591
|
scheduleIdleCallback(() => {
|
|
578
592
|
for (const scope2 of PENDING_GC) {
|
|
579
593
|
scope2.sweepGc();
|
|
@@ -583,6 +597,8 @@ const scheduleGcSweep = (scope) => {
|
|
|
583
597
|
};
|
|
584
598
|
const flushWatchers = async () => {
|
|
585
599
|
const flush = currentFlush;
|
|
600
|
+
if (!flush)
|
|
601
|
+
return;
|
|
586
602
|
while (PENDING_ASYNC_PULLS.length > 0 || PENDING_PULLS.size > 0) {
|
|
587
603
|
const asyncPulls = PENDING_ASYNC_PULLS;
|
|
588
604
|
PENDING_ASYNC_PULLS = [];
|
|
@@ -626,19 +642,17 @@ const settled = async () => {
|
|
|
626
642
|
};
|
|
627
643
|
function dirtySignal(signal2) {
|
|
628
644
|
const prevState = signal2._state;
|
|
629
|
-
if (prevState ===
|
|
645
|
+
if (prevState === 2) {
|
|
630
646
|
return;
|
|
631
647
|
}
|
|
632
|
-
signal2._state =
|
|
633
|
-
if (prevState <
|
|
648
|
+
signal2._state = 2;
|
|
649
|
+
if (prevState < 3) {
|
|
634
650
|
propagateDirty(signal2);
|
|
635
651
|
}
|
|
636
652
|
}
|
|
637
653
|
function propagateDirty(signal2) {
|
|
638
654
|
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
|
-
);
|
|
655
|
+
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
656
|
}
|
|
643
657
|
if (isRelay(signal2)) {
|
|
644
658
|
if (signal2.watchCount > 0) {
|
|
@@ -649,31 +663,32 @@ function propagateDirty(signal2) {
|
|
|
649
663
|
schedulePull(signal2);
|
|
650
664
|
}
|
|
651
665
|
dirtySignalConsumers(signal2.subs);
|
|
652
|
-
signal2.subs
|
|
666
|
+
signal2.subs.clear();
|
|
653
667
|
}
|
|
654
668
|
}
|
|
655
669
|
function dirtySignalConsumers(map) {
|
|
656
670
|
for (const [subRef, edge] of map) {
|
|
657
671
|
const sub = subRef.deref();
|
|
658
|
-
if (sub === void 0 || sub.computedCount !== edge.consumedAt)
|
|
672
|
+
if (sub === void 0 || sub.computedCount !== edge.consumedAt)
|
|
673
|
+
continue;
|
|
659
674
|
const dirtyState = sub._state;
|
|
660
675
|
switch (dirtyState) {
|
|
661
|
-
case
|
|
662
|
-
sub._state =
|
|
676
|
+
case 0:
|
|
677
|
+
sub._state = 3;
|
|
663
678
|
sub.dirtyHead = edge;
|
|
664
679
|
edge.nextDirty = void 0;
|
|
665
680
|
propagateDirty(sub);
|
|
666
681
|
break;
|
|
667
|
-
case
|
|
668
|
-
case
|
|
669
|
-
case
|
|
682
|
+
case 1:
|
|
683
|
+
case 3:
|
|
684
|
+
case 4: {
|
|
670
685
|
let subEdge = sub.dirtyHead;
|
|
671
686
|
const ord = edge.ord;
|
|
672
687
|
if (subEdge.ord > ord) {
|
|
673
688
|
sub.dirtyHead = edge;
|
|
674
689
|
edge.nextDirty = subEdge;
|
|
675
|
-
if (dirtyState ===
|
|
676
|
-
sub._state =
|
|
690
|
+
if (dirtyState === 1 || dirtyState === 4) {
|
|
691
|
+
sub._state = 3;
|
|
677
692
|
propagateDirty(sub);
|
|
678
693
|
}
|
|
679
694
|
} else {
|
|
@@ -694,21 +709,25 @@ function dirtySignalConsumers(map) {
|
|
|
694
709
|
}
|
|
695
710
|
}
|
|
696
711
|
let CURRENT_ORD = 0;
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
712
|
+
class EdgeBase {
|
|
713
|
+
type;
|
|
714
|
+
dep;
|
|
715
|
+
ord;
|
|
716
|
+
updatedAt;
|
|
717
|
+
consumedAt;
|
|
718
|
+
nextDirty;
|
|
719
|
+
constructor(type, dep, updatedAt, consumedAt) {
|
|
720
|
+
this.type = type;
|
|
721
|
+
this.dep = dep;
|
|
722
|
+
this.ord = CURRENT_ORD++;
|
|
723
|
+
this.updatedAt = updatedAt;
|
|
724
|
+
this.consumedAt = consumedAt;
|
|
725
|
+
this.nextDirty = void 0;
|
|
726
|
+
}
|
|
727
|
+
}
|
|
702
728
|
function createEdge(prevEdge, type, dep, updatedAt, consumedAt) {
|
|
703
729
|
if (prevEdge === void 0) {
|
|
704
|
-
return
|
|
705
|
-
type,
|
|
706
|
-
dep,
|
|
707
|
-
ord: CURRENT_ORD++,
|
|
708
|
-
updatedAt,
|
|
709
|
-
consumedAt,
|
|
710
|
-
nextDirty: void 0
|
|
711
|
-
};
|
|
730
|
+
return new EdgeBase(type, dep, updatedAt, consumedAt);
|
|
712
731
|
}
|
|
713
732
|
prevEdge.ord = CURRENT_ORD++;
|
|
714
733
|
prevEdge.updatedAt = updatedAt;
|
|
@@ -736,14 +755,6 @@ function findAndRemoveDirty(sub, dep) {
|
|
|
736
755
|
}
|
|
737
756
|
return void 0;
|
|
738
757
|
}
|
|
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
758
|
const GeneratorResultConstructor = (function* () {
|
|
748
759
|
})().constructor;
|
|
749
760
|
function isGeneratorResult(value) {
|
|
@@ -870,6 +881,9 @@ function callback(fn, idx, deps) {
|
|
|
870
881
|
}
|
|
871
882
|
return callback2.fn;
|
|
872
883
|
}
|
|
884
|
+
function isAbortError(error) {
|
|
885
|
+
return error instanceof DOMException && error.name === "AbortError";
|
|
886
|
+
}
|
|
873
887
|
const arrayFrom = Array.from;
|
|
874
888
|
function isThenable(v) {
|
|
875
889
|
return v !== null && typeof v === "object" && typeof v.then === "function";
|
|
@@ -932,12 +946,15 @@ class ReactivePromiseImpl {
|
|
|
932
946
|
let remaining = len;
|
|
933
947
|
let rejected = false;
|
|
934
948
|
const onFulfillAt = (i) => (v) => {
|
|
935
|
-
if (rejected)
|
|
949
|
+
if (rejected)
|
|
950
|
+
return;
|
|
936
951
|
results[i] = v;
|
|
937
|
-
if (--remaining === 0)
|
|
952
|
+
if (--remaining === 0)
|
|
953
|
+
p._setValue(results);
|
|
938
954
|
};
|
|
939
955
|
const onReject = (r) => {
|
|
940
|
-
if (rejected)
|
|
956
|
+
if (rejected)
|
|
957
|
+
return;
|
|
941
958
|
rejected = true;
|
|
942
959
|
p._setError(r);
|
|
943
960
|
};
|
|
@@ -950,15 +967,18 @@ class ReactivePromiseImpl {
|
|
|
950
967
|
const p = new ReactivePromiseImpl();
|
|
951
968
|
const arr = arrayFrom(values);
|
|
952
969
|
const len = arr.length;
|
|
953
|
-
if (len === 0)
|
|
970
|
+
if (len === 0)
|
|
971
|
+
return p;
|
|
954
972
|
let settled2 = false;
|
|
955
973
|
const onFulfill = (v) => {
|
|
956
|
-
if (settled2)
|
|
974
|
+
if (settled2)
|
|
975
|
+
return;
|
|
957
976
|
settled2 = true;
|
|
958
977
|
p._setValue(v);
|
|
959
978
|
};
|
|
960
979
|
const onReject = (r) => {
|
|
961
|
-
if (settled2)
|
|
980
|
+
if (settled2)
|
|
981
|
+
return;
|
|
962
982
|
settled2 = true;
|
|
963
983
|
p._setError(r);
|
|
964
984
|
};
|
|
@@ -979,12 +999,14 @@ class ReactivePromiseImpl {
|
|
|
979
999
|
const errors = new Array(len);
|
|
980
1000
|
let fulfilled = false;
|
|
981
1001
|
const onFulfill = (value) => {
|
|
982
|
-
if (fulfilled)
|
|
1002
|
+
if (fulfilled)
|
|
1003
|
+
return;
|
|
983
1004
|
fulfilled = true;
|
|
984
1005
|
p._setValue(value);
|
|
985
1006
|
};
|
|
986
1007
|
const onRejectAt = (index) => (reason) => {
|
|
987
|
-
if (fulfilled)
|
|
1008
|
+
if (fulfilled)
|
|
1009
|
+
return;
|
|
988
1010
|
errors[index] = reason;
|
|
989
1011
|
if (--pending === 0) {
|
|
990
1012
|
p._setError(new AggregateError(errors, "All promises were rejected in ReactivePromise.any"));
|
|
@@ -1007,11 +1029,13 @@ class ReactivePromiseImpl {
|
|
|
1007
1029
|
let remaining = len;
|
|
1008
1030
|
const onFulfillAt = (index) => (value) => {
|
|
1009
1031
|
results[index] = { status: "fulfilled", value };
|
|
1010
|
-
if (--remaining === 0)
|
|
1032
|
+
if (--remaining === 0)
|
|
1033
|
+
p._setValue(results);
|
|
1011
1034
|
};
|
|
1012
1035
|
const onRejectAt = (index) => (reason) => {
|
|
1013
1036
|
results[index] = { status: "rejected", reason };
|
|
1014
|
-
if (--remaining === 0)
|
|
1037
|
+
if (--remaining === 0)
|
|
1038
|
+
p._setValue(results);
|
|
1015
1039
|
};
|
|
1016
1040
|
for (let i = 0; i < len; i++) {
|
|
1017
1041
|
thenLoop(arr[i], onFulfillAt(i), onRejectAt(i));
|
|
@@ -1019,7 +1043,8 @@ class ReactivePromiseImpl {
|
|
|
1019
1043
|
return p;
|
|
1020
1044
|
}
|
|
1021
1045
|
static resolve(value) {
|
|
1022
|
-
if (value instanceof ReactivePromiseImpl)
|
|
1046
|
+
if (value instanceof ReactivePromiseImpl)
|
|
1047
|
+
return value;
|
|
1023
1048
|
return new ReactivePromiseImpl((resolve) => resolve(value));
|
|
1024
1049
|
}
|
|
1025
1050
|
static reject(reason) {
|
|
@@ -1030,7 +1055,7 @@ class ReactivePromiseImpl {
|
|
|
1030
1055
|
p._equals = DEFAULT_EQUALS;
|
|
1031
1056
|
p._initFlags(
|
|
1032
1057
|
1
|
|
1033
|
-
/* Pending */
|
|
1058
|
+
/* AsyncFlags.Pending */
|
|
1034
1059
|
);
|
|
1035
1060
|
const resolve = (value) => {
|
|
1036
1061
|
if (value && typeof value.then === "function") {
|
|
@@ -1049,7 +1074,7 @@ class ReactivePromiseImpl {
|
|
|
1049
1074
|
const tracer = getTracerProxy();
|
|
1050
1075
|
if (tracer !== void 0 && this._signal !== void 0 && (baseFlags & 1) !== 0) {
|
|
1051
1076
|
tracer.emit({
|
|
1052
|
-
type: TracerEventType.StartLoading,
|
|
1077
|
+
type: exports.TracerEventType.StartLoading,
|
|
1053
1078
|
id: this._signal.tracerMeta.id
|
|
1054
1079
|
});
|
|
1055
1080
|
}
|
|
@@ -1058,7 +1083,8 @@ class ReactivePromiseImpl {
|
|
|
1058
1083
|
}
|
|
1059
1084
|
_consumeFlags(flags) {
|
|
1060
1085
|
const currentConsumer = getCurrentConsumer();
|
|
1061
|
-
if (currentConsumer === void 0)
|
|
1086
|
+
if (currentConsumer === void 0)
|
|
1087
|
+
return;
|
|
1062
1088
|
if ((this._flags & 128) !== 0) {
|
|
1063
1089
|
this._connect();
|
|
1064
1090
|
}
|
|
@@ -1070,11 +1096,13 @@ class ReactivePromiseImpl {
|
|
|
1070
1096
|
_connect() {
|
|
1071
1097
|
const signal2 = this._signal;
|
|
1072
1098
|
const currentConsumer = getCurrentConsumer();
|
|
1099
|
+
if (currentConsumer === signal2)
|
|
1100
|
+
return;
|
|
1073
1101
|
if (currentConsumer?.watchCount === 0) {
|
|
1074
1102
|
const { ref, computedCount, deps } = currentConsumer;
|
|
1075
1103
|
const prevEdge = deps.get(signal2);
|
|
1076
1104
|
if (prevEdge?.consumedAt !== computedCount) {
|
|
1077
|
-
const newEdge = createEdge(prevEdge,
|
|
1105
|
+
const newEdge = createEdge(prevEdge, 0, signal2, signal2.updatedCount, computedCount);
|
|
1078
1106
|
signal2.subs.set(ref, newEdge);
|
|
1079
1107
|
deps.set(signal2, newEdge);
|
|
1080
1108
|
}
|
|
@@ -1109,12 +1137,12 @@ class ReactivePromiseImpl {
|
|
|
1109
1137
|
if (tracer !== void 0 && this._signal !== void 0) {
|
|
1110
1138
|
if (setTrue & 1 && allChanged & 1) {
|
|
1111
1139
|
tracer.emit({
|
|
1112
|
-
type: TracerEventType.StartLoading,
|
|
1140
|
+
type: exports.TracerEventType.StartLoading,
|
|
1113
1141
|
id: this._signal.tracerMeta.id
|
|
1114
1142
|
});
|
|
1115
1143
|
} else if (setFalse & 1 && allChanged & 1) {
|
|
1116
1144
|
tracer.emit({
|
|
1117
|
-
type: TracerEventType.EndLoading,
|
|
1145
|
+
type: exports.TracerEventType.EndLoading,
|
|
1118
1146
|
id: this._signal.tracerMeta.id,
|
|
1119
1147
|
value: isRelay$1(this) ? "..." : this._value
|
|
1120
1148
|
});
|
|
@@ -1131,7 +1159,7 @@ class ReactivePromiseImpl {
|
|
|
1131
1159
|
}
|
|
1132
1160
|
this._setFlags(
|
|
1133
1161
|
1
|
|
1134
|
-
/* Pending */
|
|
1162
|
+
/* AsyncFlags.Pending */
|
|
1135
1163
|
);
|
|
1136
1164
|
dirtySignalConsumers(this._awaitSubs);
|
|
1137
1165
|
return this._awaitSubs = /* @__PURE__ */ new Map();
|
|
@@ -1194,6 +1222,10 @@ class ReactivePromiseImpl {
|
|
|
1194
1222
|
}
|
|
1195
1223
|
}
|
|
1196
1224
|
_setError(nextError, awaitSubs = this._awaitSubs) {
|
|
1225
|
+
if (nextError !== this._error && !isAbortError(nextError)) {
|
|
1226
|
+
const desc = this._signal?.desc ?? this._signal?.tracerMeta?.desc;
|
|
1227
|
+
console.error(`[signalium] Unhandled async error${desc ? ` in "${desc}"` : ""}:`, nextError);
|
|
1228
|
+
}
|
|
1197
1229
|
let error = this._error;
|
|
1198
1230
|
let notifyFlags = 0;
|
|
1199
1231
|
if (error !== nextError) {
|
|
@@ -1223,7 +1255,7 @@ class ReactivePromiseImpl {
|
|
|
1223
1255
|
}
|
|
1224
1256
|
}
|
|
1225
1257
|
_scheduleSubs(awaitSubs, dirty) {
|
|
1226
|
-
const newState = dirty ?
|
|
1258
|
+
const newState = dirty ? 2 : 4;
|
|
1227
1259
|
for (const ref of awaitSubs.keys()) {
|
|
1228
1260
|
const signal2 = ref.deref();
|
|
1229
1261
|
if (signal2 === void 0) {
|
|
@@ -1236,49 +1268,49 @@ class ReactivePromiseImpl {
|
|
|
1236
1268
|
get value() {
|
|
1237
1269
|
this._consumeFlags(
|
|
1238
1270
|
16
|
|
1239
|
-
/* Value */
|
|
1271
|
+
/* AsyncFlags.Value */
|
|
1240
1272
|
);
|
|
1241
1273
|
return this._value;
|
|
1242
1274
|
}
|
|
1243
1275
|
get error() {
|
|
1244
1276
|
this._consumeFlags(
|
|
1245
1277
|
32
|
|
1246
|
-
/* Error */
|
|
1278
|
+
/* AsyncFlags.Error */
|
|
1247
1279
|
);
|
|
1248
1280
|
return this._error;
|
|
1249
1281
|
}
|
|
1250
1282
|
get isPending() {
|
|
1251
1283
|
this._consumeFlags(
|
|
1252
1284
|
1
|
|
1253
|
-
/* Pending */
|
|
1285
|
+
/* AsyncFlags.Pending */
|
|
1254
1286
|
);
|
|
1255
1287
|
return (this._flags & 1) !== 0;
|
|
1256
1288
|
}
|
|
1257
1289
|
get isRejected() {
|
|
1258
1290
|
this._consumeFlags(
|
|
1259
1291
|
2
|
|
1260
|
-
/* Rejected */
|
|
1292
|
+
/* AsyncFlags.Rejected */
|
|
1261
1293
|
);
|
|
1262
1294
|
return (this._flags & 2) !== 0;
|
|
1263
1295
|
}
|
|
1264
1296
|
get isResolved() {
|
|
1265
1297
|
this._consumeFlags(
|
|
1266
1298
|
4
|
|
1267
|
-
/* Resolved */
|
|
1299
|
+
/* AsyncFlags.Resolved */
|
|
1268
1300
|
);
|
|
1269
1301
|
return (this._flags & 4) !== 0;
|
|
1270
1302
|
}
|
|
1271
1303
|
get isReady() {
|
|
1272
1304
|
this._consumeFlags(
|
|
1273
1305
|
8
|
|
1274
|
-
/* Ready */
|
|
1306
|
+
/* AsyncFlags.Ready */
|
|
1275
1307
|
);
|
|
1276
1308
|
return (this._flags & 8) !== 0;
|
|
1277
1309
|
}
|
|
1278
1310
|
get isSettled() {
|
|
1279
1311
|
this._consumeFlags(
|
|
1280
1312
|
6
|
|
1281
|
-
/* Settled */
|
|
1313
|
+
/* AsyncFlags.Settled */
|
|
1282
1314
|
);
|
|
1283
1315
|
return (this._flags & 6) !== 0;
|
|
1284
1316
|
}
|
|
@@ -1294,13 +1326,7 @@ class ReactivePromiseImpl {
|
|
|
1294
1326
|
}
|
|
1295
1327
|
ref = currentConsumer.ref;
|
|
1296
1328
|
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
|
-
);
|
|
1329
|
+
edge = createEdge(prevEdge, 1, this, this._updatedCount, currentConsumer.computedCount);
|
|
1304
1330
|
}
|
|
1305
1331
|
const wrappedFulfilled = onfulfilled ? (value) => {
|
|
1306
1332
|
try {
|
|
@@ -1336,16 +1362,13 @@ class ReactivePromiseImpl {
|
|
|
1336
1362
|
return this.then(null, onrejected);
|
|
1337
1363
|
}
|
|
1338
1364
|
finally(onfinally) {
|
|
1339
|
-
return this.then(
|
|
1340
|
-
(
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
throw reason;
|
|
1347
|
-
}
|
|
1348
|
-
);
|
|
1365
|
+
return this.then((value) => {
|
|
1366
|
+
onfinally?.();
|
|
1367
|
+
return value;
|
|
1368
|
+
}, (reason) => {
|
|
1369
|
+
onfinally?.();
|
|
1370
|
+
throw reason;
|
|
1371
|
+
});
|
|
1349
1372
|
}
|
|
1350
1373
|
get [Symbol.toStringTag]() {
|
|
1351
1374
|
return `ReactivePromise`;
|
|
@@ -1367,7 +1390,7 @@ function createPromise(promise, signal2) {
|
|
|
1367
1390
|
p["_equals"] = signal2.def.equals;
|
|
1368
1391
|
p["_initFlags"](
|
|
1369
1392
|
1
|
|
1370
|
-
/* Pending */
|
|
1393
|
+
/* AsyncFlags.Pending */
|
|
1371
1394
|
);
|
|
1372
1395
|
p["_setPromise"](promise);
|
|
1373
1396
|
return p;
|
|
@@ -1384,7 +1407,7 @@ function createRelay(activate, scope, opts) {
|
|
|
1384
1407
|
}
|
|
1385
1408
|
const signal2 = p["_signal"];
|
|
1386
1409
|
signal2.subs = /* @__PURE__ */ new Map();
|
|
1387
|
-
signal2._state =
|
|
1410
|
+
signal2._state = 2;
|
|
1388
1411
|
active = false;
|
|
1389
1412
|
currentSub = void 0;
|
|
1390
1413
|
};
|
|
@@ -1429,7 +1452,7 @@ function createRelay(activate, scope, opts) {
|
|
|
1429
1452
|
p["_equals"] = equalsFrom(opts?.equals);
|
|
1430
1453
|
p["_initFlags"](
|
|
1431
1454
|
128 | 1
|
|
1432
|
-
/* Pending */
|
|
1455
|
+
/* AsyncFlags.Pending */
|
|
1433
1456
|
);
|
|
1434
1457
|
return p;
|
|
1435
1458
|
}
|
|
@@ -1439,7 +1462,7 @@ function createTask(task, scope, opts) {
|
|
|
1439
1462
|
p["_equals"] = equalsFrom(opts?.equals);
|
|
1440
1463
|
p["_initFlags"](
|
|
1441
1464
|
64
|
|
1442
|
-
/* isRunnable */
|
|
1465
|
+
/* AsyncFlags.isRunnable */
|
|
1443
1466
|
);
|
|
1444
1467
|
const throwIfRunning = opts?.throwIfRunning === true;
|
|
1445
1468
|
p["run"] = ((...args) => {
|
|
@@ -1462,12 +1485,12 @@ function getSignal(signal2) {
|
|
|
1462
1485
|
if (prevEdge === void 0) {
|
|
1463
1486
|
{
|
|
1464
1487
|
getTracerProxy()?.emit({
|
|
1465
|
-
type: TracerEventType.Connected,
|
|
1488
|
+
type: exports.TracerEventType.Connected,
|
|
1466
1489
|
id: currentConsumer.tracerMeta.id,
|
|
1467
1490
|
childId: signal2.tracerMeta.id,
|
|
1468
1491
|
name: signal2.tracerMeta.desc,
|
|
1469
1492
|
params: signal2.tracerMeta.params,
|
|
1470
|
-
nodeType: SignalType.Reactive
|
|
1493
|
+
nodeType: exports.SignalType.Reactive
|
|
1471
1494
|
});
|
|
1472
1495
|
}
|
|
1473
1496
|
if (currentConsumer.watchCount > 0) {
|
|
@@ -1475,7 +1498,7 @@ function getSignal(signal2) {
|
|
|
1475
1498
|
}
|
|
1476
1499
|
}
|
|
1477
1500
|
const updatedAt = checkSignal(signal2);
|
|
1478
|
-
const newEdge = createEdge(prevEdge,
|
|
1501
|
+
const newEdge = createEdge(prevEdge, 0, signal2, updatedAt, computedCount);
|
|
1479
1502
|
signal2.subs.set(ref, newEdge);
|
|
1480
1503
|
deps.set(signal2, newEdge);
|
|
1481
1504
|
} else {
|
|
@@ -1491,26 +1514,26 @@ function getSignal(signal2) {
|
|
|
1491
1514
|
}
|
|
1492
1515
|
function checkSignal(signal2) {
|
|
1493
1516
|
const { ref, _state: state } = signal2;
|
|
1494
|
-
if (state <
|
|
1517
|
+
if (state < 2) {
|
|
1495
1518
|
return signal2.updatedCount;
|
|
1496
1519
|
}
|
|
1497
|
-
if (state >=
|
|
1520
|
+
if (state >= 3) {
|
|
1498
1521
|
let edge = signal2.dirtyHead;
|
|
1499
1522
|
while (edge !== void 0) {
|
|
1500
|
-
if (edge.type ===
|
|
1523
|
+
if (edge.type === 1) {
|
|
1501
1524
|
const dep2 = edge.dep;
|
|
1502
1525
|
if (dep2._getPending()) {
|
|
1503
1526
|
const value = signal2._value;
|
|
1504
1527
|
dep2["_awaitSubs"].set(ref, edge);
|
|
1505
1528
|
value._setPending();
|
|
1506
|
-
signal2._state =
|
|
1529
|
+
signal2._state = 1;
|
|
1507
1530
|
signal2.dirtyHead = edge;
|
|
1508
1531
|
return signal2.updatedCount;
|
|
1509
1532
|
} else if (edge.updatedAt === edge.dep._updatedCount) {
|
|
1510
1533
|
dep2["_awaitSubs"].set(ref, edge);
|
|
1511
1534
|
} else {
|
|
1512
1535
|
signal2.dirtyHead = edge.nextDirty;
|
|
1513
|
-
signal2._state =
|
|
1536
|
+
signal2._state = 2;
|
|
1514
1537
|
break;
|
|
1515
1538
|
}
|
|
1516
1539
|
edge = edge.nextDirty;
|
|
@@ -1521,23 +1544,23 @@ function checkSignal(signal2) {
|
|
|
1521
1544
|
dep.subs.set(ref, edge);
|
|
1522
1545
|
if (edge.updatedAt !== updatedAt) {
|
|
1523
1546
|
signal2.dirtyHead = edge.nextDirty;
|
|
1524
|
-
signal2._state =
|
|
1547
|
+
signal2._state = 2;
|
|
1525
1548
|
break;
|
|
1526
1549
|
}
|
|
1527
1550
|
edge = edge.nextDirty;
|
|
1528
1551
|
}
|
|
1529
1552
|
}
|
|
1530
1553
|
const newState = signal2._state;
|
|
1531
|
-
if (newState ===
|
|
1554
|
+
if (newState === 2) {
|
|
1532
1555
|
if (signal2._isLazy) {
|
|
1533
1556
|
signal2.updatedCount++;
|
|
1534
1557
|
} else {
|
|
1535
1558
|
runSignal(signal2);
|
|
1536
1559
|
}
|
|
1537
|
-
} else if (newState ===
|
|
1560
|
+
} else if (newState === 4) {
|
|
1538
1561
|
signal2._value._clearPending();
|
|
1539
1562
|
}
|
|
1540
|
-
signal2._state =
|
|
1563
|
+
signal2._state = 0;
|
|
1541
1564
|
signal2.dirtyHead = void 0;
|
|
1542
1565
|
if (getTracerProxy() !== void 0 && signal2.tracerMeta?.tracer) {
|
|
1543
1566
|
scheduleTracer(signal2.tracerMeta.tracer);
|
|
@@ -1549,7 +1572,7 @@ function runSignal(signal2) {
|
|
|
1549
1572
|
{
|
|
1550
1573
|
tracer = getTracerProxy();
|
|
1551
1574
|
tracer?.emit({
|
|
1552
|
-
type: TracerEventType.StartUpdate,
|
|
1575
|
+
type: exports.TracerEventType.StartUpdate,
|
|
1553
1576
|
id: signal2.tracerMeta.id
|
|
1554
1577
|
});
|
|
1555
1578
|
}
|
|
@@ -1588,7 +1611,7 @@ function runSignal(signal2) {
|
|
|
1588
1611
|
setCurrentConsumer(prevConsumer);
|
|
1589
1612
|
{
|
|
1590
1613
|
tracer?.emit({
|
|
1591
|
-
type: TracerEventType.EndUpdate,
|
|
1614
|
+
type: exports.TracerEventType.EndUpdate,
|
|
1592
1615
|
id: signal2.tracerMeta.id,
|
|
1593
1616
|
value: isRelay(signal2) ? "..." : signal2._value
|
|
1594
1617
|
});
|
|
@@ -1724,56 +1747,56 @@ function hashDate(date, _seen) {
|
|
|
1724
1747
|
return hashNumber(
|
|
1725
1748
|
date.getTime(),
|
|
1726
1749
|
14
|
|
1727
|
-
/* DATE */
|
|
1750
|
+
/* HashType.DATE */
|
|
1728
1751
|
);
|
|
1729
1752
|
}
|
|
1730
1753
|
function hashRegExp(regexp, _seen) {
|
|
1731
1754
|
const h = hashStr(
|
|
1732
1755
|
regexp.source + regexp.flags,
|
|
1733
1756
|
15
|
|
1734
|
-
/* REGEXP */
|
|
1757
|
+
/* HashType.REGEXP */
|
|
1735
1758
|
);
|
|
1736
1759
|
return (h ^ regexp.lastIndex) >>> 0;
|
|
1737
1760
|
}
|
|
1738
1761
|
const UNDEFINED = hashStr(
|
|
1739
1762
|
"undefined",
|
|
1740
1763
|
0
|
|
1741
|
-
/* UNDEFINED */
|
|
1764
|
+
/* HashType.UNDEFINED */
|
|
1742
1765
|
);
|
|
1743
1766
|
const NULL = hashStr(
|
|
1744
1767
|
"null",
|
|
1745
1768
|
1
|
|
1746
|
-
/* NULL */
|
|
1769
|
+
/* HashType.NULL */
|
|
1747
1770
|
);
|
|
1748
1771
|
const TRUE = hashStr(
|
|
1749
1772
|
"true",
|
|
1750
1773
|
2
|
|
1751
|
-
/* TRUE */
|
|
1774
|
+
/* HashType.TRUE */
|
|
1752
1775
|
);
|
|
1753
1776
|
const FALSE = hashStr(
|
|
1754
1777
|
"false",
|
|
1755
1778
|
3
|
|
1756
|
-
/* FALSE */
|
|
1779
|
+
/* HashType.FALSE */
|
|
1757
1780
|
);
|
|
1758
1781
|
const ARRAY = hashStr(
|
|
1759
1782
|
"array",
|
|
1760
1783
|
7
|
|
1761
|
-
/* ARRAY */
|
|
1784
|
+
/* HashType.ARRAY */
|
|
1762
1785
|
);
|
|
1763
1786
|
const OBJECT = hashStr(
|
|
1764
1787
|
"object",
|
|
1765
1788
|
8
|
|
1766
|
-
/* OBJECT */
|
|
1789
|
+
/* HashType.OBJECT */
|
|
1767
1790
|
);
|
|
1768
1791
|
const SET = hashStr(
|
|
1769
1792
|
"set",
|
|
1770
1793
|
13
|
|
1771
|
-
/* SET */
|
|
1794
|
+
/* HashType.SET */
|
|
1772
1795
|
);
|
|
1773
1796
|
const MAP = hashStr(
|
|
1774
1797
|
"map",
|
|
1775
1798
|
12
|
|
1776
|
-
/* MAP */
|
|
1799
|
+
/* HashType.MAP */
|
|
1777
1800
|
);
|
|
1778
1801
|
const getObjectProto = Object.getPrototypeOf;
|
|
1779
1802
|
const PROTO_TO_HASH = /* @__PURE__ */ new Map([
|
|
@@ -1797,19 +1820,19 @@ function hashValue(node, seen = []) {
|
|
|
1797
1820
|
return hashStr(
|
|
1798
1821
|
String(node),
|
|
1799
1822
|
4
|
|
1800
|
-
/* NUMBER */
|
|
1823
|
+
/* HashType.NUMBER */
|
|
1801
1824
|
);
|
|
1802
1825
|
case "string":
|
|
1803
1826
|
return hashStr(
|
|
1804
1827
|
node,
|
|
1805
1828
|
5
|
|
1806
|
-
/* STRING */
|
|
1829
|
+
/* HashType.STRING */
|
|
1807
1830
|
);
|
|
1808
1831
|
case "bigint":
|
|
1809
1832
|
return hashStr(
|
|
1810
1833
|
node.toString(),
|
|
1811
1834
|
6
|
|
1812
|
-
/* BIGINT */
|
|
1835
|
+
/* HashType.BIGINT */
|
|
1813
1836
|
);
|
|
1814
1837
|
case "object": {
|
|
1815
1838
|
if (node === null) {
|
|
@@ -1820,7 +1843,7 @@ function hashValue(node, seen = []) {
|
|
|
1820
1843
|
return hashStr(
|
|
1821
1844
|
String(index),
|
|
1822
1845
|
11
|
|
1823
|
-
/* CYCLE */
|
|
1846
|
+
/* HashType.CYCLE */
|
|
1824
1847
|
);
|
|
1825
1848
|
}
|
|
1826
1849
|
const hashFn = PROTO_TO_HASH.get(getObjectProto(node));
|
|
@@ -1838,7 +1861,7 @@ function hashValue(node, seen = []) {
|
|
|
1838
1861
|
return hashStr(
|
|
1839
1862
|
node.toString(),
|
|
1840
1863
|
10
|
|
1841
|
-
/* SYMBOL */
|
|
1864
|
+
/* HashType.SYMBOL */
|
|
1842
1865
|
);
|
|
1843
1866
|
}
|
|
1844
1867
|
}
|
|
@@ -1850,7 +1873,7 @@ function getObjectHash(obj) {
|
|
|
1850
1873
|
id = hashNumber(
|
|
1851
1874
|
nextHashMapId++,
|
|
1852
1875
|
9
|
|
1853
|
-
/* REFERENCE */
|
|
1876
|
+
/* HashType.REFERENCE */
|
|
1854
1877
|
);
|
|
1855
1878
|
objectToHashMap.set(obj, id);
|
|
1856
1879
|
}
|
|
@@ -1884,8 +1907,10 @@ function isPlainArray(arr) {
|
|
|
1884
1907
|
return Array.isArray(arr);
|
|
1885
1908
|
}
|
|
1886
1909
|
function stringifyValue(value) {
|
|
1887
|
-
if (value === null)
|
|
1888
|
-
|
|
1910
|
+
if (value === null)
|
|
1911
|
+
return "null";
|
|
1912
|
+
if (value === void 0)
|
|
1913
|
+
return "undefined";
|
|
1889
1914
|
switch (typeof value) {
|
|
1890
1915
|
case "number":
|
|
1891
1916
|
case "boolean":
|
|
@@ -1917,25 +1942,21 @@ function stringifyValue(value) {
|
|
|
1917
1942
|
return getObjectId(value);
|
|
1918
1943
|
}
|
|
1919
1944
|
}
|
|
1920
|
-
var ReactiveFnState = /* @__PURE__ */ ((ReactiveFnState2) => {
|
|
1921
|
-
ReactiveFnState2[ReactiveFnState2["Clean"] = 0] = "Clean";
|
|
1922
|
-
ReactiveFnState2[ReactiveFnState2["Pending"] = 1] = "Pending";
|
|
1923
|
-
ReactiveFnState2[ReactiveFnState2["Dirty"] = 2] = "Dirty";
|
|
1924
|
-
ReactiveFnState2[ReactiveFnState2["MaybeDirty"] = 3] = "MaybeDirty";
|
|
1925
|
-
ReactiveFnState2[ReactiveFnState2["PendingDirty"] = 4] = "PendingDirty";
|
|
1926
|
-
return ReactiveFnState2;
|
|
1927
|
-
})(ReactiveFnState || {});
|
|
1928
1945
|
let ID = 0;
|
|
1929
1946
|
function createReactiveDefinition(id, desc, compute, equals, isRelay2, paramKey, tracer) {
|
|
1930
|
-
|
|
1931
|
-
id,
|
|
1932
|
-
desc,
|
|
1947
|
+
const def = {
|
|
1933
1948
|
compute,
|
|
1934
1949
|
equals: equalsFrom(equals),
|
|
1935
1950
|
isRelay: isRelay2,
|
|
1936
1951
|
paramKey,
|
|
1937
|
-
tracer
|
|
1952
|
+
tracer: void 0
|
|
1938
1953
|
};
|
|
1954
|
+
{
|
|
1955
|
+
def.id = id;
|
|
1956
|
+
def.desc = desc;
|
|
1957
|
+
def.tracer = tracer;
|
|
1958
|
+
}
|
|
1959
|
+
return def;
|
|
1939
1960
|
}
|
|
1940
1961
|
class ReactiveSignal {
|
|
1941
1962
|
// Bitmask containing state in the first 2 bits and boolean properties in the remaining bits
|
|
@@ -1956,6 +1977,7 @@ class ReactiveSignal {
|
|
|
1956
1977
|
_listeners = null;
|
|
1957
1978
|
_value = void 0;
|
|
1958
1979
|
tracerMeta;
|
|
1980
|
+
desc;
|
|
1959
1981
|
// Reference to the shared definition
|
|
1960
1982
|
def;
|
|
1961
1983
|
constructor(def, args, key, scope) {
|
|
@@ -1964,6 +1986,7 @@ class ReactiveSignal {
|
|
|
1964
1986
|
this.key = key;
|
|
1965
1987
|
this.args = args;
|
|
1966
1988
|
this.def = def;
|
|
1989
|
+
this.desc = def.desc;
|
|
1967
1990
|
{
|
|
1968
1991
|
this.tracerMeta = {
|
|
1969
1992
|
id: def.id ?? key ?? hashValue([def.compute, ID++]),
|
|
@@ -2107,13 +2130,14 @@ function createReactiveSignal(def, args = [], key, scope) {
|
|
|
2107
2130
|
}
|
|
2108
2131
|
let CONTEXT_ID = 0;
|
|
2109
2132
|
class ContextImpl {
|
|
2133
|
+
defaultValue;
|
|
2134
|
+
_key;
|
|
2135
|
+
_description;
|
|
2110
2136
|
constructor(defaultValue, desc) {
|
|
2111
2137
|
this.defaultValue = defaultValue;
|
|
2112
2138
|
this._description = desc ?? `context:${CONTEXT_ID++}`;
|
|
2113
2139
|
this._key = Symbol(this._description);
|
|
2114
2140
|
}
|
|
2115
|
-
_key;
|
|
2116
|
-
_description;
|
|
2117
2141
|
}
|
|
2118
2142
|
const context = (initialValue, description) => {
|
|
2119
2143
|
return new ContextImpl(initialValue, description);
|
|
@@ -2131,9 +2155,7 @@ function withContexts(contexts, fn) {
|
|
|
2131
2155
|
const getContext = (context2) => {
|
|
2132
2156
|
const scope = CURRENT_SCOPE ?? getCurrentConsumer()?.scope;
|
|
2133
2157
|
if (scope === void 0) {
|
|
2134
|
-
throw new Error(
|
|
2135
|
-
"getContext must be used within a reactive function, a withContext, or within a framework-specific context provider."
|
|
2136
|
-
);
|
|
2158
|
+
throw new Error("getContext must be used within a reactive function, a withContext, or within a framework-specific context provider.");
|
|
2137
2159
|
}
|
|
2138
2160
|
return scope.getContext(context2) ?? context2.defaultValue;
|
|
2139
2161
|
};
|
|
@@ -2252,9 +2274,7 @@ const getScopeOwner = (obj) => {
|
|
|
2252
2274
|
};
|
|
2253
2275
|
exports.ReactivePromise = ReactivePromise;
|
|
2254
2276
|
exports.SignalScope = SignalScope;
|
|
2255
|
-
exports.SignalType = SignalType;
|
|
2256
2277
|
exports.Tracer = Tracer;
|
|
2257
|
-
exports.TracerEventType = TracerEventType;
|
|
2258
2278
|
exports.VisualizerNode = VisualizerNode;
|
|
2259
2279
|
exports.callback = callback;
|
|
2260
2280
|
exports.clearGlobalContexts = clearGlobalContexts;
|
|
@@ -2276,6 +2296,7 @@ exports.hashValue = hashValue;
|
|
|
2276
2296
|
exports.isPromise = isPromise;
|
|
2277
2297
|
exports.isReactivePromise = isReactivePromise;
|
|
2278
2298
|
exports.isRelay = isRelay$1;
|
|
2299
|
+
exports.isSignal = isSignal;
|
|
2279
2300
|
exports.notifier = notifier;
|
|
2280
2301
|
exports.registerCustomHash = registerCustomHash;
|
|
2281
2302
|
exports.removeTracer = removeTracer;
|
|
@@ -2290,4 +2311,4 @@ exports.signal = signal;
|
|
|
2290
2311
|
exports.unwatchSignal = unwatchSignal;
|
|
2291
2312
|
exports.watchSignal = watchSignal;
|
|
2292
2313
|
exports.withContexts = withContexts;
|
|
2293
|
-
//# sourceMappingURL=debug-
|
|
2314
|
+
//# sourceMappingURL=debug-CmcrpeEO.js.map
|