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