signalium 2.2.2 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/dist/cjs/development/config-B0MtLBgx.js.map +1 -1
- package/dist/cjs/development/{debug-DuXQhd5q.js → debug-gCDAvnLM.js} +237 -214
- package/dist/cjs/development/debug-gCDAvnLM.js.map +1 -0
- package/dist/cjs/development/debug.js +9 -3
- package/dist/cjs/development/debug.js.map +1 -1
- package/dist/cjs/development/index.js +8 -8
- package/dist/cjs/development/react/index.js +43 -38
- package/dist/cjs/development/react/index.js.map +1 -1
- package/dist/cjs/development/snapshot-Di0yziPX.js +147 -0
- package/dist/cjs/development/snapshot-Di0yziPX.js.map +1 -0
- package/dist/cjs/development/transform/index.js +137 -118
- package/dist/cjs/development/transform/index.js.map +1 -1
- package/dist/cjs/development/utils.js +5 -3
- package/dist/cjs/development/utils.js.map +1 -1
- package/dist/cjs/production/config-B0MtLBgx.js.map +1 -1
- package/dist/cjs/production/{contexts-DOH1tHd8.js → contexts-Wgq2NOVX.js} +156 -140
- package/dist/cjs/production/contexts-Wgq2NOVX.js.map +1 -0
- package/dist/cjs/production/debug.js +61 -66
- package/dist/cjs/production/debug.js.map +1 -1
- package/dist/cjs/production/index.js +8 -8
- package/dist/cjs/production/react/index.js +43 -38
- package/dist/cjs/production/react/index.js.map +1 -1
- package/dist/cjs/production/snapshot-YJJyLbxS.js +147 -0
- package/dist/cjs/production/snapshot-YJJyLbxS.js.map +1 -0
- package/dist/cjs/production/transform/index.js +137 -118
- package/dist/cjs/production/transform/index.js.map +1 -1
- package/dist/cjs/production/utils.js +5 -3
- package/dist/cjs/production/utils.js.map +1 -1
- package/dist/esm/development/config-CPQL7hX-.js.map +1 -1
- package/dist/esm/development/{debug-E2E1pZe5.js → debug-AoHfqs62.js} +221 -196
- package/dist/esm/development/debug-AoHfqs62.js.map +1 -0
- package/dist/esm/development/debug.js +1 -1
- package/dist/esm/development/index.js +6 -6
- package/dist/esm/development/react/index.js +43 -38
- package/dist/esm/development/react/index.js.map +1 -1
- package/dist/esm/development/snapshot-Bq0Um_hQ.js +148 -0
- package/dist/esm/development/snapshot-Bq0Um_hQ.js.map +1 -0
- package/dist/esm/development/transform/index.js +137 -118
- package/dist/esm/development/transform/index.js.map +1 -1
- package/dist/esm/development/utils.js +7 -4
- package/dist/esm/development/utils.js.map +1 -1
- package/dist/esm/internals/async.d.ts.map +1 -1
- package/dist/esm/internals/core-api.d.ts +2 -2
- package/dist/esm/internals/core-api.d.ts.map +1 -1
- package/dist/esm/internals/edge.d.ts +4 -4
- package/dist/esm/internals/edge.d.ts.map +1 -1
- package/dist/esm/internals/reactive.d.ts +14 -4
- package/dist/esm/internals/reactive.d.ts.map +1 -1
- package/dist/esm/internals/scheduling.d.ts.map +1 -1
- package/dist/esm/internals/signal.d.ts.map +1 -1
- package/dist/esm/internals/utils/snapshot.d.ts +29 -0
- package/dist/esm/internals/utils/snapshot.d.ts.map +1 -0
- package/dist/esm/production/config-CPQL7hX-.js.map +1 -1
- package/dist/esm/production/{contexts-Dj9Y86xW.js → contexts-X0gSj6rQ.js} +159 -143
- package/dist/esm/production/contexts-X0gSj6rQ.js.map +1 -0
- package/dist/esm/production/debug.js +51 -54
- package/dist/esm/production/debug.js.map +1 -1
- package/dist/esm/production/index.js +7 -7
- package/dist/esm/production/react/index.js +43 -38
- package/dist/esm/production/react/index.js.map +1 -1
- package/dist/esm/production/snapshot-CDS1d8mq.js +148 -0
- package/dist/esm/production/snapshot-CDS1d8mq.js.map +1 -0
- package/dist/esm/production/transform/index.js +137 -118
- package/dist/esm/production/transform/index.js.map +1 -1
- package/dist/esm/production/utils.js +7 -4
- package/dist/esm/production/utils.js.map +1 -1
- package/dist/esm/react/index.d.ts +1 -1
- package/dist/esm/react/index.d.ts.map +1 -1
- package/dist/esm/react/provider.d.ts.map +1 -1
- package/dist/esm/react/use-reactive.d.ts +1 -0
- package/dist/esm/react/use-reactive.d.ts.map +1 -1
- package/dist/esm/transform/callback.d.ts.map +1 -1
- package/dist/esm/transform/promise.d.ts.map +1 -1
- package/dist/esm/types.d.ts +5 -1
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/utils.d.ts +1 -0
- package/dist/esm/utils.d.ts.map +1 -1
- package/package.json +7 -5
- package/dist/cjs/development/core-api-C8J7lYBC.js +0 -55
- package/dist/cjs/development/core-api-C8J7lYBC.js.map +0 -1
- package/dist/cjs/development/debug-DuXQhd5q.js.map +0 -1
- package/dist/cjs/production/contexts-DOH1tHd8.js.map +0 -1
- package/dist/cjs/production/core-api-Cx2_AumW.js +0 -55
- package/dist/cjs/production/core-api-Cx2_AumW.js.map +0 -1
- package/dist/esm/development/core-api-CF5aK2Lx.js +0 -56
- package/dist/esm/development/core-api-CF5aK2Lx.js.map +0 -1
- package/dist/esm/development/debug-E2E1pZe5.js.map +0 -1
- package/dist/esm/production/contexts-Dj9Y86xW.js.map +0 -1
- package/dist/esm/production/core-api-D_uw3umM.js +0 -56
- package/dist/esm/production/core-api-D_uw3umM.js.map +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
const config = require("./config-B0MtLBgx.js");
|
|
3
3
|
class WeakRefPolyfill {
|
|
4
|
+
value;
|
|
4
5
|
constructor(value) {
|
|
5
6
|
this.value = value;
|
|
6
7
|
}
|
|
@@ -16,7 +17,14 @@ 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
|
+
};
|
|
20
28
|
class StateSignal {
|
|
21
29
|
_value;
|
|
22
30
|
_equals;
|
|
@@ -27,8 +35,6 @@ class StateSignal {
|
|
|
27
35
|
constructor(value, equals = (a, b) => a === b, desc = "signal") {
|
|
28
36
|
this._value = value;
|
|
29
37
|
this._equals = equals;
|
|
30
|
-
this._id = STATE_ID++;
|
|
31
|
-
this._desc = desc;
|
|
32
38
|
}
|
|
33
39
|
get value() {
|
|
34
40
|
this.consume();
|
|
@@ -59,7 +65,7 @@ class StateSignal {
|
|
|
59
65
|
}
|
|
60
66
|
dirtySignal(sub);
|
|
61
67
|
}
|
|
62
|
-
this._subs
|
|
68
|
+
this._subs.clear();
|
|
63
69
|
scheduleListeners(this);
|
|
64
70
|
}
|
|
65
71
|
addListener(listener) {
|
|
@@ -80,13 +86,12 @@ function runListeners$1(signal2) {
|
|
|
80
86
|
listener();
|
|
81
87
|
}
|
|
82
88
|
}
|
|
83
|
-
const FALSE_EQUALS$1 = () => false;
|
|
84
89
|
function signal(initialValue, opts) {
|
|
85
|
-
const equals = opts?.equals === false ? FALSE_EQUALS
|
|
90
|
+
const equals = opts?.equals === false ? FALSE_EQUALS : opts?.equals ?? ((a, b) => a === b);
|
|
86
91
|
return new StateSignal(initialValue, equals, opts?.desc);
|
|
87
92
|
}
|
|
88
93
|
const notifier = (opts) => {
|
|
89
|
-
return new StateSignal(void 0, FALSE_EQUALS
|
|
94
|
+
return new StateSignal(void 0, FALSE_EQUALS, opts?.desc);
|
|
90
95
|
};
|
|
91
96
|
function watchSignal(signal2, parentIsSuspended) {
|
|
92
97
|
if (parentIsSuspended) {
|
|
@@ -209,7 +214,8 @@ let PENDING_GC = /* @__PURE__ */ new Set();
|
|
|
209
214
|
const microtask = () => Promise.resolve();
|
|
210
215
|
let currentFlush = null;
|
|
211
216
|
const scheduleFlush = (fn) => {
|
|
212
|
-
if (currentFlush)
|
|
217
|
+
if (currentFlush)
|
|
218
|
+
return;
|
|
213
219
|
let resolve;
|
|
214
220
|
const promise = new Promise((r) => resolve = r);
|
|
215
221
|
currentFlush = { promise, resolve };
|
|
@@ -242,7 +248,8 @@ const scheduleTracer = (tracer) => {
|
|
|
242
248
|
};
|
|
243
249
|
const scheduleGcSweep = (scope) => {
|
|
244
250
|
PENDING_GC.add(scope);
|
|
245
|
-
if (PENDING_GC.size > 1)
|
|
251
|
+
if (PENDING_GC.size > 1)
|
|
252
|
+
return;
|
|
246
253
|
scheduleIdleCallback(() => {
|
|
247
254
|
for (const scope2 of PENDING_GC) {
|
|
248
255
|
scope2.sweepGc();
|
|
@@ -252,6 +259,8 @@ const scheduleGcSweep = (scope) => {
|
|
|
252
259
|
};
|
|
253
260
|
const flushWatchers = async () => {
|
|
254
261
|
const flush = currentFlush;
|
|
262
|
+
if (!flush)
|
|
263
|
+
return;
|
|
255
264
|
while (PENDING_ASYNC_PULLS.length > 0 || PENDING_PULLS.size > 0) {
|
|
256
265
|
const asyncPulls = PENDING_ASYNC_PULLS;
|
|
257
266
|
PENDING_ASYNC_PULLS = [];
|
|
@@ -289,19 +298,17 @@ const settled = async () => {
|
|
|
289
298
|
};
|
|
290
299
|
function dirtySignal(signal2) {
|
|
291
300
|
const prevState = signal2._state;
|
|
292
|
-
if (prevState ===
|
|
301
|
+
if (prevState === 2) {
|
|
293
302
|
return;
|
|
294
303
|
}
|
|
295
|
-
signal2._state =
|
|
296
|
-
if (prevState <
|
|
304
|
+
signal2._state = 2;
|
|
305
|
+
if (prevState < 3) {
|
|
297
306
|
propagateDirty(signal2);
|
|
298
307
|
}
|
|
299
308
|
}
|
|
300
309
|
function propagateDirty(signal2) {
|
|
301
310
|
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
|
-
);
|
|
311
|
+
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
312
|
}
|
|
306
313
|
if (isRelay(signal2)) {
|
|
307
314
|
if (signal2.watchCount > 0) {
|
|
@@ -312,31 +319,32 @@ function propagateDirty(signal2) {
|
|
|
312
319
|
schedulePull(signal2);
|
|
313
320
|
}
|
|
314
321
|
dirtySignalConsumers(signal2.subs);
|
|
315
|
-
signal2.subs
|
|
322
|
+
signal2.subs.clear();
|
|
316
323
|
}
|
|
317
324
|
}
|
|
318
325
|
function dirtySignalConsumers(map) {
|
|
319
326
|
for (const [subRef, edge] of map) {
|
|
320
327
|
const sub = subRef.deref();
|
|
321
|
-
if (sub === void 0 || sub.computedCount !== edge.consumedAt)
|
|
328
|
+
if (sub === void 0 || sub.computedCount !== edge.consumedAt)
|
|
329
|
+
continue;
|
|
322
330
|
const dirtyState = sub._state;
|
|
323
331
|
switch (dirtyState) {
|
|
324
|
-
case
|
|
325
|
-
sub._state =
|
|
332
|
+
case 0:
|
|
333
|
+
sub._state = 3;
|
|
326
334
|
sub.dirtyHead = edge;
|
|
327
335
|
edge.nextDirty = void 0;
|
|
328
336
|
propagateDirty(sub);
|
|
329
337
|
break;
|
|
330
|
-
case
|
|
331
|
-
case
|
|
332
|
-
case
|
|
338
|
+
case 1:
|
|
339
|
+
case 3:
|
|
340
|
+
case 4: {
|
|
333
341
|
let subEdge = sub.dirtyHead;
|
|
334
342
|
const ord = edge.ord;
|
|
335
343
|
if (subEdge.ord > ord) {
|
|
336
344
|
sub.dirtyHead = edge;
|
|
337
345
|
edge.nextDirty = subEdge;
|
|
338
|
-
if (dirtyState ===
|
|
339
|
-
sub._state =
|
|
346
|
+
if (dirtyState === 1 || dirtyState === 4) {
|
|
347
|
+
sub._state = 3;
|
|
340
348
|
propagateDirty(sub);
|
|
341
349
|
}
|
|
342
350
|
} else {
|
|
@@ -354,21 +362,25 @@ function dirtySignalConsumers(map) {
|
|
|
354
362
|
}
|
|
355
363
|
}
|
|
356
364
|
let CURRENT_ORD = 0;
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
365
|
+
class EdgeBase {
|
|
366
|
+
type;
|
|
367
|
+
dep;
|
|
368
|
+
ord;
|
|
369
|
+
updatedAt;
|
|
370
|
+
consumedAt;
|
|
371
|
+
nextDirty;
|
|
372
|
+
constructor(type, dep, updatedAt, consumedAt) {
|
|
373
|
+
this.type = type;
|
|
374
|
+
this.dep = dep;
|
|
375
|
+
this.ord = CURRENT_ORD++;
|
|
376
|
+
this.updatedAt = updatedAt;
|
|
377
|
+
this.consumedAt = consumedAt;
|
|
378
|
+
this.nextDirty = void 0;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
362
381
|
function createEdge(prevEdge, type, dep, updatedAt, consumedAt) {
|
|
363
382
|
if (prevEdge === void 0) {
|
|
364
|
-
return
|
|
365
|
-
type,
|
|
366
|
-
dep,
|
|
367
|
-
ord: CURRENT_ORD++,
|
|
368
|
-
updatedAt,
|
|
369
|
-
consumedAt,
|
|
370
|
-
nextDirty: void 0
|
|
371
|
-
};
|
|
383
|
+
return new EdgeBase(type, dep, updatedAt, consumedAt);
|
|
372
384
|
}
|
|
373
385
|
prevEdge.ord = CURRENT_ORD++;
|
|
374
386
|
prevEdge.updatedAt = updatedAt;
|
|
@@ -396,14 +408,6 @@ function findAndRemoveDirty(sub, dep) {
|
|
|
396
408
|
}
|
|
397
409
|
return void 0;
|
|
398
410
|
}
|
|
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
411
|
const GeneratorResultConstructor = (function* () {
|
|
408
412
|
})().constructor;
|
|
409
413
|
function isGeneratorResult(value) {
|
|
@@ -592,12 +596,15 @@ class ReactivePromiseImpl {
|
|
|
592
596
|
let remaining = len;
|
|
593
597
|
let rejected = false;
|
|
594
598
|
const onFulfillAt = (i) => (v) => {
|
|
595
|
-
if (rejected)
|
|
599
|
+
if (rejected)
|
|
600
|
+
return;
|
|
596
601
|
results[i] = v;
|
|
597
|
-
if (--remaining === 0)
|
|
602
|
+
if (--remaining === 0)
|
|
603
|
+
p._setValue(results);
|
|
598
604
|
};
|
|
599
605
|
const onReject = (r) => {
|
|
600
|
-
if (rejected)
|
|
606
|
+
if (rejected)
|
|
607
|
+
return;
|
|
601
608
|
rejected = true;
|
|
602
609
|
p._setError(r);
|
|
603
610
|
};
|
|
@@ -610,15 +617,18 @@ class ReactivePromiseImpl {
|
|
|
610
617
|
const p = new ReactivePromiseImpl();
|
|
611
618
|
const arr = arrayFrom(values);
|
|
612
619
|
const len = arr.length;
|
|
613
|
-
if (len === 0)
|
|
620
|
+
if (len === 0)
|
|
621
|
+
return p;
|
|
614
622
|
let settled2 = false;
|
|
615
623
|
const onFulfill = (v) => {
|
|
616
|
-
if (settled2)
|
|
624
|
+
if (settled2)
|
|
625
|
+
return;
|
|
617
626
|
settled2 = true;
|
|
618
627
|
p._setValue(v);
|
|
619
628
|
};
|
|
620
629
|
const onReject = (r) => {
|
|
621
|
-
if (settled2)
|
|
630
|
+
if (settled2)
|
|
631
|
+
return;
|
|
622
632
|
settled2 = true;
|
|
623
633
|
p._setError(r);
|
|
624
634
|
};
|
|
@@ -639,12 +649,14 @@ class ReactivePromiseImpl {
|
|
|
639
649
|
const errors = new Array(len);
|
|
640
650
|
let fulfilled = false;
|
|
641
651
|
const onFulfill = (value) => {
|
|
642
|
-
if (fulfilled)
|
|
652
|
+
if (fulfilled)
|
|
653
|
+
return;
|
|
643
654
|
fulfilled = true;
|
|
644
655
|
p._setValue(value);
|
|
645
656
|
};
|
|
646
657
|
const onRejectAt = (index) => (reason) => {
|
|
647
|
-
if (fulfilled)
|
|
658
|
+
if (fulfilled)
|
|
659
|
+
return;
|
|
648
660
|
errors[index] = reason;
|
|
649
661
|
if (--pending === 0) {
|
|
650
662
|
p._setError(new AggregateError(errors, "All promises were rejected in ReactivePromise.any"));
|
|
@@ -667,11 +679,13 @@ class ReactivePromiseImpl {
|
|
|
667
679
|
let remaining = len;
|
|
668
680
|
const onFulfillAt = (index) => (value) => {
|
|
669
681
|
results[index] = { status: "fulfilled", value };
|
|
670
|
-
if (--remaining === 0)
|
|
682
|
+
if (--remaining === 0)
|
|
683
|
+
p._setValue(results);
|
|
671
684
|
};
|
|
672
685
|
const onRejectAt = (index) => (reason) => {
|
|
673
686
|
results[index] = { status: "rejected", reason };
|
|
674
|
-
if (--remaining === 0)
|
|
687
|
+
if (--remaining === 0)
|
|
688
|
+
p._setValue(results);
|
|
675
689
|
};
|
|
676
690
|
for (let i = 0; i < len; i++) {
|
|
677
691
|
thenLoop(arr[i], onFulfillAt(i), onRejectAt(i));
|
|
@@ -679,7 +693,8 @@ class ReactivePromiseImpl {
|
|
|
679
693
|
return p;
|
|
680
694
|
}
|
|
681
695
|
static resolve(value) {
|
|
682
|
-
if (value instanceof ReactivePromiseImpl)
|
|
696
|
+
if (value instanceof ReactivePromiseImpl)
|
|
697
|
+
return value;
|
|
683
698
|
return new ReactivePromiseImpl((resolve) => resolve(value));
|
|
684
699
|
}
|
|
685
700
|
static reject(reason) {
|
|
@@ -690,7 +705,7 @@ class ReactivePromiseImpl {
|
|
|
690
705
|
p._equals = DEFAULT_EQUALS;
|
|
691
706
|
p._initFlags(
|
|
692
707
|
1
|
|
693
|
-
/* Pending */
|
|
708
|
+
/* AsyncFlags.Pending */
|
|
694
709
|
);
|
|
695
710
|
const resolve = (value) => {
|
|
696
711
|
if (value && typeof value.then === "function") {
|
|
@@ -709,7 +724,8 @@ class ReactivePromiseImpl {
|
|
|
709
724
|
}
|
|
710
725
|
_consumeFlags(flags) {
|
|
711
726
|
const currentConsumer = getCurrentConsumer();
|
|
712
|
-
if (currentConsumer === void 0)
|
|
727
|
+
if (currentConsumer === void 0)
|
|
728
|
+
return;
|
|
713
729
|
if ((this._flags & 128) !== 0) {
|
|
714
730
|
this._connect();
|
|
715
731
|
}
|
|
@@ -725,7 +741,7 @@ class ReactivePromiseImpl {
|
|
|
725
741
|
const { ref, computedCount, deps } = currentConsumer;
|
|
726
742
|
const prevEdge = deps.get(signal2);
|
|
727
743
|
if (prevEdge?.consumedAt !== computedCount) {
|
|
728
|
-
const newEdge = createEdge(prevEdge,
|
|
744
|
+
const newEdge = createEdge(prevEdge, 0, signal2, signal2.updatedCount, computedCount);
|
|
729
745
|
signal2.subs.set(ref, newEdge);
|
|
730
746
|
deps.set(signal2, newEdge);
|
|
731
747
|
}
|
|
@@ -765,7 +781,7 @@ class ReactivePromiseImpl {
|
|
|
765
781
|
}
|
|
766
782
|
this._setFlags(
|
|
767
783
|
1
|
|
768
|
-
/* Pending */
|
|
784
|
+
/* AsyncFlags.Pending */
|
|
769
785
|
);
|
|
770
786
|
dirtySignalConsumers(this._awaitSubs);
|
|
771
787
|
return this._awaitSubs = /* @__PURE__ */ new Map();
|
|
@@ -777,10 +793,10 @@ class ReactivePromiseImpl {
|
|
|
777
793
|
this._promise = promise;
|
|
778
794
|
const flags = this._flags;
|
|
779
795
|
let awaitSubs = this._awaitSubs;
|
|
780
|
-
if ((flags & 1) === 0) {
|
|
781
|
-
awaitSubs = this._setPending();
|
|
782
|
-
}
|
|
783
796
|
try {
|
|
797
|
+
if ((flags & 1) === 0) {
|
|
798
|
+
awaitSubs = this._setPending();
|
|
799
|
+
}
|
|
784
800
|
const nextValue = await promise;
|
|
785
801
|
if (promise !== this._promise) {
|
|
786
802
|
return;
|
|
@@ -857,7 +873,7 @@ class ReactivePromiseImpl {
|
|
|
857
873
|
}
|
|
858
874
|
}
|
|
859
875
|
_scheduleSubs(awaitSubs, dirty) {
|
|
860
|
-
const newState = dirty ?
|
|
876
|
+
const newState = dirty ? 2 : 4;
|
|
861
877
|
for (const ref of awaitSubs.keys()) {
|
|
862
878
|
const signal2 = ref.deref();
|
|
863
879
|
if (signal2 === void 0) {
|
|
@@ -870,49 +886,49 @@ class ReactivePromiseImpl {
|
|
|
870
886
|
get value() {
|
|
871
887
|
this._consumeFlags(
|
|
872
888
|
16
|
|
873
|
-
/* Value */
|
|
889
|
+
/* AsyncFlags.Value */
|
|
874
890
|
);
|
|
875
891
|
return this._value;
|
|
876
892
|
}
|
|
877
893
|
get error() {
|
|
878
894
|
this._consumeFlags(
|
|
879
895
|
32
|
|
880
|
-
/* Error */
|
|
896
|
+
/* AsyncFlags.Error */
|
|
881
897
|
);
|
|
882
898
|
return this._error;
|
|
883
899
|
}
|
|
884
900
|
get isPending() {
|
|
885
901
|
this._consumeFlags(
|
|
886
902
|
1
|
|
887
|
-
/* Pending */
|
|
903
|
+
/* AsyncFlags.Pending */
|
|
888
904
|
);
|
|
889
905
|
return (this._flags & 1) !== 0;
|
|
890
906
|
}
|
|
891
907
|
get isRejected() {
|
|
892
908
|
this._consumeFlags(
|
|
893
909
|
2
|
|
894
|
-
/* Rejected */
|
|
910
|
+
/* AsyncFlags.Rejected */
|
|
895
911
|
);
|
|
896
912
|
return (this._flags & 2) !== 0;
|
|
897
913
|
}
|
|
898
914
|
get isResolved() {
|
|
899
915
|
this._consumeFlags(
|
|
900
916
|
4
|
|
901
|
-
/* Resolved */
|
|
917
|
+
/* AsyncFlags.Resolved */
|
|
902
918
|
);
|
|
903
919
|
return (this._flags & 4) !== 0;
|
|
904
920
|
}
|
|
905
921
|
get isReady() {
|
|
906
922
|
this._consumeFlags(
|
|
907
923
|
8
|
|
908
|
-
/* Ready */
|
|
924
|
+
/* AsyncFlags.Ready */
|
|
909
925
|
);
|
|
910
926
|
return (this._flags & 8) !== 0;
|
|
911
927
|
}
|
|
912
928
|
get isSettled() {
|
|
913
929
|
this._consumeFlags(
|
|
914
930
|
6
|
|
915
|
-
/* Settled */
|
|
931
|
+
/* AsyncFlags.Settled */
|
|
916
932
|
);
|
|
917
933
|
return (this._flags & 6) !== 0;
|
|
918
934
|
}
|
|
@@ -928,13 +944,7 @@ class ReactivePromiseImpl {
|
|
|
928
944
|
}
|
|
929
945
|
ref = currentConsumer.ref;
|
|
930
946
|
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
|
-
);
|
|
947
|
+
edge = createEdge(prevEdge, 1, this, this._updatedCount, currentConsumer.computedCount);
|
|
938
948
|
}
|
|
939
949
|
const wrappedFulfilled = onfulfilled ? (value) => {
|
|
940
950
|
try {
|
|
@@ -970,16 +980,13 @@ class ReactivePromiseImpl {
|
|
|
970
980
|
return this.then(null, onrejected);
|
|
971
981
|
}
|
|
972
982
|
finally(onfinally) {
|
|
973
|
-
return this.then(
|
|
974
|
-
(
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
throw reason;
|
|
981
|
-
}
|
|
982
|
-
);
|
|
983
|
+
return this.then((value) => {
|
|
984
|
+
onfinally?.();
|
|
985
|
+
return value;
|
|
986
|
+
}, (reason) => {
|
|
987
|
+
onfinally?.();
|
|
988
|
+
throw reason;
|
|
989
|
+
});
|
|
983
990
|
}
|
|
984
991
|
get [Symbol.toStringTag]() {
|
|
985
992
|
return `ReactivePromise`;
|
|
@@ -1001,7 +1008,7 @@ function createPromise(promise, signal2) {
|
|
|
1001
1008
|
p["_equals"] = signal2.def.equals;
|
|
1002
1009
|
p["_initFlags"](
|
|
1003
1010
|
1
|
|
1004
|
-
/* Pending */
|
|
1011
|
+
/* AsyncFlags.Pending */
|
|
1005
1012
|
);
|
|
1006
1013
|
p["_setPromise"](promise);
|
|
1007
1014
|
return p;
|
|
@@ -1018,11 +1025,14 @@ function createRelay(activate, scope, opts) {
|
|
|
1018
1025
|
}
|
|
1019
1026
|
const signal2 = p["_signal"];
|
|
1020
1027
|
signal2.subs = /* @__PURE__ */ new Map();
|
|
1021
|
-
signal2._state =
|
|
1028
|
+
signal2._state = 2;
|
|
1022
1029
|
active = false;
|
|
1023
1030
|
currentSub = void 0;
|
|
1024
1031
|
};
|
|
1025
1032
|
const state = {
|
|
1033
|
+
get isPending() {
|
|
1034
|
+
return (p["_flags"] & 1) !== 0;
|
|
1035
|
+
},
|
|
1026
1036
|
get value() {
|
|
1027
1037
|
return p["_value"];
|
|
1028
1038
|
},
|
|
@@ -1060,7 +1070,7 @@ function createRelay(activate, scope, opts) {
|
|
|
1060
1070
|
p["_equals"] = equalsFrom(opts?.equals);
|
|
1061
1071
|
p["_initFlags"](
|
|
1062
1072
|
128 | 1
|
|
1063
|
-
/* Pending */
|
|
1073
|
+
/* AsyncFlags.Pending */
|
|
1064
1074
|
);
|
|
1065
1075
|
return p;
|
|
1066
1076
|
}
|
|
@@ -1070,9 +1080,13 @@ function createTask(task, scope, opts) {
|
|
|
1070
1080
|
p["_equals"] = equalsFrom(opts?.equals);
|
|
1071
1081
|
p["_initFlags"](
|
|
1072
1082
|
64
|
|
1073
|
-
/* isRunnable */
|
|
1083
|
+
/* AsyncFlags.isRunnable */
|
|
1074
1084
|
);
|
|
1085
|
+
const throwIfRunning = opts?.throwIfRunning === true;
|
|
1075
1086
|
p["run"] = ((...args) => {
|
|
1087
|
+
if (throwIfRunning && (p["_flags"] & 1) !== 0) {
|
|
1088
|
+
throw new Error("Task is already running");
|
|
1089
|
+
}
|
|
1076
1090
|
p._setPromise(fn(...args));
|
|
1077
1091
|
return p;
|
|
1078
1092
|
});
|
|
@@ -1092,7 +1106,7 @@ function getSignal(signal2) {
|
|
|
1092
1106
|
}
|
|
1093
1107
|
}
|
|
1094
1108
|
const updatedAt = checkSignal(signal2);
|
|
1095
|
-
const newEdge = createEdge(prevEdge,
|
|
1109
|
+
const newEdge = createEdge(prevEdge, 0, signal2, updatedAt, computedCount);
|
|
1096
1110
|
signal2.subs.set(ref, newEdge);
|
|
1097
1111
|
deps.set(signal2, newEdge);
|
|
1098
1112
|
} else {
|
|
@@ -1108,26 +1122,26 @@ function getSignal(signal2) {
|
|
|
1108
1122
|
}
|
|
1109
1123
|
function checkSignal(signal2) {
|
|
1110
1124
|
const { ref, _state: state } = signal2;
|
|
1111
|
-
if (state <
|
|
1125
|
+
if (state < 2) {
|
|
1112
1126
|
return signal2.updatedCount;
|
|
1113
1127
|
}
|
|
1114
|
-
if (state >=
|
|
1128
|
+
if (state >= 3) {
|
|
1115
1129
|
let edge = signal2.dirtyHead;
|
|
1116
1130
|
while (edge !== void 0) {
|
|
1117
|
-
if (edge.type ===
|
|
1131
|
+
if (edge.type === 1) {
|
|
1118
1132
|
const dep2 = edge.dep;
|
|
1119
1133
|
if (dep2._getPending()) {
|
|
1120
1134
|
const value = signal2._value;
|
|
1121
1135
|
dep2["_awaitSubs"].set(ref, edge);
|
|
1122
1136
|
value._setPending();
|
|
1123
|
-
signal2._state =
|
|
1137
|
+
signal2._state = 1;
|
|
1124
1138
|
signal2.dirtyHead = edge;
|
|
1125
1139
|
return signal2.updatedCount;
|
|
1126
1140
|
} else if (edge.updatedAt === edge.dep._updatedCount) {
|
|
1127
1141
|
dep2["_awaitSubs"].set(ref, edge);
|
|
1128
1142
|
} else {
|
|
1129
1143
|
signal2.dirtyHead = edge.nextDirty;
|
|
1130
|
-
signal2._state =
|
|
1144
|
+
signal2._state = 2;
|
|
1131
1145
|
break;
|
|
1132
1146
|
}
|
|
1133
1147
|
edge = edge.nextDirty;
|
|
@@ -1138,23 +1152,23 @@ function checkSignal(signal2) {
|
|
|
1138
1152
|
dep.subs.set(ref, edge);
|
|
1139
1153
|
if (edge.updatedAt !== updatedAt) {
|
|
1140
1154
|
signal2.dirtyHead = edge.nextDirty;
|
|
1141
|
-
signal2._state =
|
|
1155
|
+
signal2._state = 2;
|
|
1142
1156
|
break;
|
|
1143
1157
|
}
|
|
1144
1158
|
edge = edge.nextDirty;
|
|
1145
1159
|
}
|
|
1146
1160
|
}
|
|
1147
1161
|
const newState = signal2._state;
|
|
1148
|
-
if (newState ===
|
|
1162
|
+
if (newState === 2) {
|
|
1149
1163
|
if (signal2._isLazy) {
|
|
1150
1164
|
signal2.updatedCount++;
|
|
1151
1165
|
} else {
|
|
1152
1166
|
runSignal(signal2);
|
|
1153
1167
|
}
|
|
1154
|
-
} else if (newState ===
|
|
1168
|
+
} else if (newState === 4) {
|
|
1155
1169
|
signal2._value._clearPending();
|
|
1156
1170
|
}
|
|
1157
|
-
signal2._state =
|
|
1171
|
+
signal2._state = 0;
|
|
1158
1172
|
signal2.dirtyHead = void 0;
|
|
1159
1173
|
return signal2.updatedCount;
|
|
1160
1174
|
}
|
|
@@ -1323,56 +1337,56 @@ function hashDate(date, _seen) {
|
|
|
1323
1337
|
return hashNumber(
|
|
1324
1338
|
date.getTime(),
|
|
1325
1339
|
14
|
|
1326
|
-
/* DATE */
|
|
1340
|
+
/* HashType.DATE */
|
|
1327
1341
|
);
|
|
1328
1342
|
}
|
|
1329
1343
|
function hashRegExp(regexp, _seen) {
|
|
1330
1344
|
const h = hashStr(
|
|
1331
1345
|
regexp.source + regexp.flags,
|
|
1332
1346
|
15
|
|
1333
|
-
/* REGEXP */
|
|
1347
|
+
/* HashType.REGEXP */
|
|
1334
1348
|
);
|
|
1335
1349
|
return (h ^ regexp.lastIndex) >>> 0;
|
|
1336
1350
|
}
|
|
1337
1351
|
const UNDEFINED = hashStr(
|
|
1338
1352
|
"undefined",
|
|
1339
1353
|
0
|
|
1340
|
-
/* UNDEFINED */
|
|
1354
|
+
/* HashType.UNDEFINED */
|
|
1341
1355
|
);
|
|
1342
1356
|
const NULL = hashStr(
|
|
1343
1357
|
"null",
|
|
1344
1358
|
1
|
|
1345
|
-
/* NULL */
|
|
1359
|
+
/* HashType.NULL */
|
|
1346
1360
|
);
|
|
1347
1361
|
const TRUE = hashStr(
|
|
1348
1362
|
"true",
|
|
1349
1363
|
2
|
|
1350
|
-
/* TRUE */
|
|
1364
|
+
/* HashType.TRUE */
|
|
1351
1365
|
);
|
|
1352
1366
|
const FALSE = hashStr(
|
|
1353
1367
|
"false",
|
|
1354
1368
|
3
|
|
1355
|
-
/* FALSE */
|
|
1369
|
+
/* HashType.FALSE */
|
|
1356
1370
|
);
|
|
1357
1371
|
const ARRAY = hashStr(
|
|
1358
1372
|
"array",
|
|
1359
1373
|
7
|
|
1360
|
-
/* ARRAY */
|
|
1374
|
+
/* HashType.ARRAY */
|
|
1361
1375
|
);
|
|
1362
1376
|
const OBJECT = hashStr(
|
|
1363
1377
|
"object",
|
|
1364
1378
|
8
|
|
1365
|
-
/* OBJECT */
|
|
1379
|
+
/* HashType.OBJECT */
|
|
1366
1380
|
);
|
|
1367
1381
|
const SET = hashStr(
|
|
1368
1382
|
"set",
|
|
1369
1383
|
13
|
|
1370
|
-
/* SET */
|
|
1384
|
+
/* HashType.SET */
|
|
1371
1385
|
);
|
|
1372
1386
|
const MAP = hashStr(
|
|
1373
1387
|
"map",
|
|
1374
1388
|
12
|
|
1375
|
-
/* MAP */
|
|
1389
|
+
/* HashType.MAP */
|
|
1376
1390
|
);
|
|
1377
1391
|
const getObjectProto = Object.getPrototypeOf;
|
|
1378
1392
|
const PROTO_TO_HASH = /* @__PURE__ */ new Map([
|
|
@@ -1396,19 +1410,19 @@ function hashValue(node, seen = []) {
|
|
|
1396
1410
|
return hashStr(
|
|
1397
1411
|
String(node),
|
|
1398
1412
|
4
|
|
1399
|
-
/* NUMBER */
|
|
1413
|
+
/* HashType.NUMBER */
|
|
1400
1414
|
);
|
|
1401
1415
|
case "string":
|
|
1402
1416
|
return hashStr(
|
|
1403
1417
|
node,
|
|
1404
1418
|
5
|
|
1405
|
-
/* STRING */
|
|
1419
|
+
/* HashType.STRING */
|
|
1406
1420
|
);
|
|
1407
1421
|
case "bigint":
|
|
1408
1422
|
return hashStr(
|
|
1409
1423
|
node.toString(),
|
|
1410
1424
|
6
|
|
1411
|
-
/* BIGINT */
|
|
1425
|
+
/* HashType.BIGINT */
|
|
1412
1426
|
);
|
|
1413
1427
|
case "object": {
|
|
1414
1428
|
if (node === null) {
|
|
@@ -1419,7 +1433,7 @@ function hashValue(node, seen = []) {
|
|
|
1419
1433
|
return hashStr(
|
|
1420
1434
|
String(index),
|
|
1421
1435
|
11
|
|
1422
|
-
/* CYCLE */
|
|
1436
|
+
/* HashType.CYCLE */
|
|
1423
1437
|
);
|
|
1424
1438
|
}
|
|
1425
1439
|
const hashFn = PROTO_TO_HASH.get(getObjectProto(node));
|
|
@@ -1437,7 +1451,7 @@ function hashValue(node, seen = []) {
|
|
|
1437
1451
|
return hashStr(
|
|
1438
1452
|
node.toString(),
|
|
1439
1453
|
10
|
|
1440
|
-
/* SYMBOL */
|
|
1454
|
+
/* HashType.SYMBOL */
|
|
1441
1455
|
);
|
|
1442
1456
|
}
|
|
1443
1457
|
}
|
|
@@ -1449,7 +1463,7 @@ function getObjectHash(obj) {
|
|
|
1449
1463
|
id = hashNumber(
|
|
1450
1464
|
nextHashMapId++,
|
|
1451
1465
|
9
|
|
1452
|
-
/* REFERENCE */
|
|
1466
|
+
/* HashType.REFERENCE */
|
|
1453
1467
|
);
|
|
1454
1468
|
objectToHashMap.set(obj, id);
|
|
1455
1469
|
}
|
|
@@ -1466,25 +1480,16 @@ function hashReactiveFn(fn, args) {
|
|
|
1466
1480
|
h = h << 13 | h >>> 19;
|
|
1467
1481
|
return imul(h, 5) + 3864292196 >>> 0;
|
|
1468
1482
|
}
|
|
1469
|
-
var ReactiveFnState = /* @__PURE__ */ ((ReactiveFnState2) => {
|
|
1470
|
-
ReactiveFnState2[ReactiveFnState2["Clean"] = 0] = "Clean";
|
|
1471
|
-
ReactiveFnState2[ReactiveFnState2["Pending"] = 1] = "Pending";
|
|
1472
|
-
ReactiveFnState2[ReactiveFnState2["Dirty"] = 2] = "Dirty";
|
|
1473
|
-
ReactiveFnState2[ReactiveFnState2["MaybeDirty"] = 3] = "MaybeDirty";
|
|
1474
|
-
ReactiveFnState2[ReactiveFnState2["PendingDirty"] = 4] = "PendingDirty";
|
|
1475
|
-
return ReactiveFnState2;
|
|
1476
|
-
})(ReactiveFnState || {});
|
|
1477
1483
|
let ID = 0;
|
|
1478
1484
|
function createReactiveDefinition(id, desc, compute, equals, isRelay2, paramKey, tracer) {
|
|
1479
|
-
|
|
1480
|
-
id,
|
|
1481
|
-
desc,
|
|
1485
|
+
const def = {
|
|
1482
1486
|
compute,
|
|
1483
1487
|
equals: equalsFrom(equals),
|
|
1484
1488
|
isRelay: isRelay2,
|
|
1485
1489
|
paramKey,
|
|
1486
|
-
tracer
|
|
1490
|
+
tracer: void 0
|
|
1487
1491
|
};
|
|
1492
|
+
return def;
|
|
1488
1493
|
}
|
|
1489
1494
|
class ReactiveSignal {
|
|
1490
1495
|
// Bitmask containing state in the first 2 bits and boolean properties in the remaining bits
|
|
@@ -1553,22 +1558,33 @@ class ReactiveSignal {
|
|
|
1553
1558
|
get listeners() {
|
|
1554
1559
|
return this._listeners ?? (this._listeners = {
|
|
1555
1560
|
updatedAt: 0,
|
|
1556
|
-
current: /* @__PURE__ */ new
|
|
1561
|
+
current: /* @__PURE__ */ new Map(),
|
|
1557
1562
|
cachedBoundAdd: this.addListener.bind(this)
|
|
1558
1563
|
});
|
|
1559
1564
|
}
|
|
1560
1565
|
get value() {
|
|
1561
1566
|
return getSignal(this);
|
|
1562
1567
|
}
|
|
1563
|
-
addListener(listener) {
|
|
1568
|
+
addListener(listener, opts) {
|
|
1564
1569
|
const { current } = this.listeners;
|
|
1565
1570
|
if (!current.has(listener)) {
|
|
1571
|
+
let effective = listener;
|
|
1572
|
+
if (opts?.skipInitial) {
|
|
1573
|
+
let initial = true;
|
|
1574
|
+
effective = () => {
|
|
1575
|
+
if (initial) {
|
|
1576
|
+
initial = false;
|
|
1577
|
+
return;
|
|
1578
|
+
}
|
|
1579
|
+
listener();
|
|
1580
|
+
};
|
|
1581
|
+
}
|
|
1566
1582
|
if (!this._isListener) {
|
|
1567
1583
|
watchSignal(this, this._isSuspended);
|
|
1568
1584
|
this.flags |= 16;
|
|
1569
1585
|
}
|
|
1570
1586
|
schedulePull(this);
|
|
1571
|
-
current.
|
|
1587
|
+
current.set(listener, effective);
|
|
1572
1588
|
}
|
|
1573
1589
|
return () => {
|
|
1574
1590
|
if (current.has(listener)) {
|
|
@@ -1577,6 +1593,7 @@ class ReactiveSignal {
|
|
|
1577
1593
|
cancelPull(this);
|
|
1578
1594
|
unwatchSignal(this, this._isSuspended);
|
|
1579
1595
|
this.flags &= -17;
|
|
1596
|
+
this.listeners.updatedAt = 0;
|
|
1580
1597
|
}
|
|
1581
1598
|
}
|
|
1582
1599
|
};
|
|
@@ -1624,7 +1641,7 @@ const runListeners = (signal2) => {
|
|
|
1624
1641
|
return;
|
|
1625
1642
|
}
|
|
1626
1643
|
const { current } = listeners;
|
|
1627
|
-
for (const listener of current) {
|
|
1644
|
+
for (const listener of current.values()) {
|
|
1628
1645
|
listener();
|
|
1629
1646
|
}
|
|
1630
1647
|
};
|
|
@@ -1636,13 +1653,14 @@ function createReactiveSignal(def, args = [], key, scope) {
|
|
|
1636
1653
|
}
|
|
1637
1654
|
let CONTEXT_ID = 0;
|
|
1638
1655
|
class ContextImpl {
|
|
1656
|
+
defaultValue;
|
|
1657
|
+
_key;
|
|
1658
|
+
_description;
|
|
1639
1659
|
constructor(defaultValue, desc) {
|
|
1640
1660
|
this.defaultValue = defaultValue;
|
|
1641
1661
|
this._description = desc ?? `context:${CONTEXT_ID++}`;
|
|
1642
1662
|
this._key = Symbol(this._description);
|
|
1643
1663
|
}
|
|
1644
|
-
_key;
|
|
1645
|
-
_description;
|
|
1646
1664
|
}
|
|
1647
1665
|
const context = (initialValue, description) => {
|
|
1648
1666
|
return new ContextImpl(initialValue, description);
|
|
@@ -1660,9 +1678,7 @@ function withContexts(contexts, fn) {
|
|
|
1660
1678
|
const getContext = (context2) => {
|
|
1661
1679
|
const scope = CURRENT_SCOPE ?? getCurrentConsumer()?.scope;
|
|
1662
1680
|
if (scope === void 0) {
|
|
1663
|
-
throw new Error(
|
|
1664
|
-
"getContext must be used within a reactive function, a withContext, or within a framework-specific context provider."
|
|
1665
|
-
);
|
|
1681
|
+
throw new Error("getContext must be used within a reactive function, a withContext, or within a framework-specific context provider.");
|
|
1666
1682
|
}
|
|
1667
1683
|
return scope.getContext(context2) ?? context2.defaultValue;
|
|
1668
1684
|
};
|
|
@@ -1810,4 +1826,4 @@ exports.signal = signal;
|
|
|
1810
1826
|
exports.unwatchSignal = unwatchSignal;
|
|
1811
1827
|
exports.watchSignal = watchSignal;
|
|
1812
1828
|
exports.withContexts = withContexts;
|
|
1813
|
-
//# sourceMappingURL=contexts-
|
|
1829
|
+
//# sourceMappingURL=contexts-Wgq2NOVX.js.map
|