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