signalium 2.1.7 → 2.2.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 +6 -0
- package/dist/cjs/development/{core-api-C3NaxanI.js → core-api-BO_W1aEw.js} +2 -2
- package/dist/cjs/development/core-api-BO_W1aEw.js.map +1 -0
- package/dist/cjs/development/{debug-CjBhOupU.js → debug-DW86yXJK.js} +167 -42
- package/dist/cjs/development/debug-DW86yXJK.js.map +1 -0
- package/dist/cjs/development/debug.js +1 -1
- package/dist/cjs/development/index.js +3 -2
- package/dist/cjs/development/index.js.map +1 -1
- package/dist/cjs/development/react/index.js +8 -8
- package/dist/cjs/development/react/index.js.map +1 -1
- package/dist/cjs/development/utils.js +6 -6
- package/dist/cjs/development/utils.js.map +1 -1
- package/dist/cjs/production/{contexts-BTZGnOKa.js → contexts-BAkp5KrR.js} +167 -42
- package/dist/cjs/production/contexts-BAkp5KrR.js.map +1 -0
- package/dist/cjs/production/{core-api-B_CAhQeH.js → core-api-B2d0JjB_.js} +2 -2
- package/dist/cjs/production/core-api-B2d0JjB_.js.map +1 -0
- package/dist/cjs/production/debug.js +1 -1
- package/dist/cjs/production/index.js +3 -2
- package/dist/cjs/production/index.js.map +1 -1
- package/dist/cjs/production/react/index.js +8 -8
- package/dist/cjs/production/react/index.js.map +1 -1
- package/dist/cjs/production/utils.js +6 -6
- package/dist/cjs/production/utils.js.map +1 -1
- package/dist/esm/development/{core-api-DUouSDpe.js → core-api-CotzAQ5V.js} +2 -2
- package/dist/esm/development/core-api-CotzAQ5V.js.map +1 -0
- package/dist/esm/development/{debug-DeCeAOHQ.js → debug-DoBIh4Lm.js} +181 -56
- package/dist/esm/development/debug-DoBIh4Lm.js.map +1 -0
- package/dist/esm/development/debug.js +9 -9
- package/dist/esm/development/index.js +9 -8
- package/dist/esm/development/react/index.js +9 -9
- package/dist/esm/development/react/index.js.map +1 -1
- package/dist/esm/development/utils.js +7 -7
- package/dist/esm/development/utils.js.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/internals/async.d.ts.map +1 -1
- package/dist/esm/internals/contexts.d.ts.map +1 -1
- package/dist/esm/internals/reactive.d.ts +10 -2
- package/dist/esm/internals/reactive.d.ts.map +1 -1
- package/dist/esm/internals/scheduling.d.ts +2 -1
- package/dist/esm/internals/scheduling.d.ts.map +1 -1
- package/dist/esm/internals/watch.d.ts +5 -2
- package/dist/esm/internals/watch.d.ts.map +1 -1
- package/dist/esm/production/{contexts-Bg501Zo9.js → contexts-CYAwBumI.js} +173 -48
- package/dist/esm/production/contexts-CYAwBumI.js.map +1 -0
- package/dist/esm/production/{core-api-dRINtUzf.js → core-api-BY3r_t3J.js} +2 -2
- package/dist/esm/production/core-api-BY3r_t3J.js.map +1 -0
- package/dist/esm/production/debug.js +1 -1
- package/dist/esm/production/index.js +9 -8
- package/dist/esm/production/react/index.js +9 -9
- package/dist/esm/production/react/index.js.map +1 -1
- package/dist/esm/production/utils.js +7 -7
- package/dist/esm/production/utils.js.map +1 -1
- package/dist/esm/react/component.d.ts.map +1 -1
- package/dist/esm/react/index.d.ts +1 -0
- package/dist/esm/react/index.d.ts.map +1 -1
- package/dist/esm/react/use-reactive.d.ts.map +1 -1
- package/dist/esm/types.d.ts +1 -0
- package/dist/esm/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/development/core-api-C3NaxanI.js.map +0 -1
- package/dist/cjs/development/debug-CjBhOupU.js.map +0 -1
- package/dist/cjs/production/contexts-BTZGnOKa.js.map +0 -1
- package/dist/cjs/production/core-api-B_CAhQeH.js.map +0 -1
- package/dist/esm/development/core-api-DUouSDpe.js.map +0 -1
- package/dist/esm/development/debug-DeCeAOHQ.js.map +0 -1
- package/dist/esm/production/contexts-Bg501Zo9.js.map +0 -1
- package/dist/esm/production/core-api-dRINtUzf.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
const debug = require("./debug-
|
|
2
|
+
const debug = require("./debug-DW86yXJK.js");
|
|
3
3
|
const DERIVED_DEFINITION_MAP = /* @__PURE__ */ new Map();
|
|
4
4
|
function getReactiveFnAndDefinition(fn, opts) {
|
|
5
5
|
let fnAndDef = DERIVED_DEFINITION_MAP.get(fn);
|
|
@@ -52,4 +52,4 @@ exports.reactiveSignal = reactiveSignal;
|
|
|
52
52
|
exports.relay = relay;
|
|
53
53
|
exports.task = task;
|
|
54
54
|
exports.watcher = watcher;
|
|
55
|
-
//# sourceMappingURL=core-api-
|
|
55
|
+
//# sourceMappingURL=core-api-BO_W1aEw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-api-BO_W1aEw.js","sources":["../../../src/internals/core-api.ts"],"sourcesContent":["import {\n ReactiveTask,\n ReactiveValue,\n Watcher,\n ReactiveOptions,\n RelayActivate,\n type DiscriminatedReactivePromise,\n SignalOptions,\n ReactiveFn,\n ReadonlySignal,\n} from '../types.js';\nimport { getCurrentScope, getScopeOwner, SignalScope } from './contexts.js';\nimport {\n createReactiveDefinition,\n createReactiveSignal,\n ReactiveDefinition as ReactiveDefinition,\n} from './reactive.js';\nimport { createRelay, createTask } from './async.js';\nimport { Tracer } from './trace.js';\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport const DERIVED_DEFINITION_MAP = new Map<Function, [(...args: any) => any, ReactiveDefinition<any, any>]>();\n\nexport function getReactiveFnAndDefinition<T, Args extends unknown[]>(\n fn: (...args: Args) => T,\n opts?: ReactiveOptions<T, Args>,\n): [(...args: Args) => ReactiveValue<T>, ReactiveDefinition<T, Args>] {\n let fnAndDef = DERIVED_DEFINITION_MAP.get(fn);\n\n if (!fnAndDef) {\n const def = createReactiveDefinition(opts?.id, opts?.desc, fn, opts?.equals, false, opts?.paramKey, undefined);\n\n const defScope = getCurrentScope();\n\n const reactiveFn: ReactiveFn<T, Args> = (...args) => {\n const scope = getCurrentScope(defScope);\n const signal = scope.get(def, args as any);\n\n return signal.value;\n };\n\n fnAndDef = [reactiveFn, def];\n\n DERIVED_DEFINITION_MAP.set(fn, fnAndDef);\n }\n\n return fnAndDef;\n}\n\nexport function reactive<T, Args extends unknown[]>(\n fn: (...args: Args) => T,\n opts?: ReactiveOptions<T, Args>,\n): ReactiveFn<T, Args> {\n return getReactiveFnAndDefinition(fn, opts)[0];\n}\n\nexport const reactiveMethod = <T, Args extends unknown[]>(\n owner: object,\n fn: (...args: Args) => T,\n opts?: ReactiveOptions<T, Args>,\n): ReactiveFn<T, Args> => {\n const def = createReactiveDefinition(opts?.id, opts?.desc, fn, opts?.equals, false, opts?.paramKey, undefined);\n\n const reactiveFn: ReactiveFn<T, Args> = (...args) => {\n return getScopeOwner(owner).get(def, args as any).value;\n };\n\n DERIVED_DEFINITION_MAP.set(reactiveFn, [reactiveFn, def]);\n\n return reactiveFn;\n};\n\nexport function relay<T>(activate: RelayActivate<T>, opts?: SignalOptions<T>): DiscriminatedReactivePromise<T> {\n const scope = getCurrentScope();\n\n return createRelay(activate, scope, opts) as DiscriminatedReactivePromise<T>;\n}\n\nexport const task = <T, Args extends unknown[]>(\n fn: (...args: Args) => Promise<T>,\n opts?: SignalOptions<T>,\n): ReactiveTask<T, Args> => {\n const scope = getCurrentScope();\n\n return createTask(fn, scope, opts);\n};\n\nexport function watcher<T>(fn: () => T, opts?: SignalOptions<T> & { isolate?: boolean; tracer?: Tracer }): Watcher<T> {\n const def = createReactiveDefinition(opts?.id, opts?.desc, fn, opts?.equals, false, undefined, opts?.tracer);\n\n const scope = opts?.isolate ? new SignalScope([]) : getCurrentScope();\n\n return createReactiveSignal(def, undefined, undefined, scope);\n}\n\n/**\n * Creates a reactive signal from a compute function. This is useful for when you\n * want to create a signal that does not receive parameters, but is still reactive.\n *\n * @param compute\n * @param opts\n * @returns\n */\nexport const reactiveSignal = <T>(\n compute: () => T,\n opts?: SignalOptions<T> & { isolate?: boolean },\n): ReadonlySignal<T> => {\n const def = createReactiveDefinition(opts?.id, opts?.desc, compute, opts?.equals, false, undefined, undefined);\n\n const scope = opts?.isolate ? new SignalScope([]) : getCurrentScope();\n\n return createReactiveSignal(def, undefined, undefined, scope);\n};\n"],"names":["createReactiveDefinition","getCurrentScope","getScopeOwner","createRelay","createTask","SignalScope","createReactiveSignal"],"mappings":";;AAqBO,MAAM,6CAA6B,IAAA;AAEnC,SAAS,2BACd,IACA,MACoE;AACpE,MAAI,WAAW,uBAAuB,IAAI,EAAE;AAE5C,MAAI,CAAC,UAAU;AACb,UAAM,MAAMA,MAAAA,yBAAyB,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,OAAO,MAAM,UAAU,MAAS;AAE7G,UAAM,WAAWC,MAAAA,gBAAA;AAEjB,UAAM,aAAkC,IAAI,SAAS;AACnD,YAAM,QAAQA,MAAAA,gBAAgB,QAAQ;AACtC,YAAM,SAAS,MAAM,IAAI,KAAK,IAAW;AAEzC,aAAO,OAAO;AAAA,IAChB;AAEA,eAAW,CAAC,YAAY,GAAG;AAE3B,2BAAuB,IAAI,IAAI,QAAQ;AAAA,EACzC;AAEA,SAAO;AACT;AAEO,SAAS,SACd,IACA,MACqB;AACrB,SAAO,2BAA2B,IAAI,IAAI,EAAE,CAAC;AAC/C;AAEO,MAAM,iBAAiB,CAC5B,OACA,IACA,SACwB;AACxB,QAAM,MAAMD,MAAAA,yBAAyB,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,OAAO,MAAM,UAAU,MAAS;AAE7G,QAAM,aAAkC,IAAI,SAAS;AACnD,WAAOE,MAAAA,cAAc,KAAK,EAAE,IAAI,KAAK,IAAW,EAAE;AAAA,EACpD;AAEA,yBAAuB,IAAI,YAAY,CAAC,YAAY,GAAG,CAAC;AAExD,SAAO;AACT;AAEO,SAAS,MAAS,UAA4B,MAA0D;AAC7G,QAAM,QAAQD,MAAAA,gBAAA;AAEd,SAAOE,kBAAY,UAAU,OAAO,IAAI;AAC1C;AAEO,MAAM,OAAO,CAClB,IACA,SAC0B;AAC1B,QAAM,QAAQF,MAAAA,gBAAA;AAEd,SAAOG,iBAAW,IAAI,OAAO,IAAI;AACnC;AAEO,SAAS,QAAW,IAAa,MAA8E;AACpH,QAAM,MAAMJ,MAAAA,yBAAyB,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,OAAO,QAAW,MAAM,MAAM;AAE3G,QAAM,QAAQ,MAAM,UAAU,IAAIK,MAAAA,YAAY,CAAA,CAAE,IAAIJ,sBAAA;AAEpD,SAAOK,MAAAA,qBAAqB,KAAK,QAAW,QAAW,KAAK;AAC9D;AAUO,MAAM,iBAAiB,CAC5B,SACA,SACsB;AACtB,QAAM,MAAMN,MAAAA,yBAAyB,MAAM,IAAI,MAAM,MAAM,SAAS,MAAM,QAAQ,OAAO,QAAW,MAAS;AAE7G,QAAM,QAAQ,MAAM,UAAU,IAAIK,MAAAA,YAAY,CAAA,CAAE,IAAIJ,sBAAA;AAEpD,SAAOK,MAAAA,qBAAqB,KAAK,QAAW,QAAW,KAAK;AAC9D;;;;;;;;"}
|
|
@@ -414,40 +414,121 @@ function signal(initialValue, opts) {
|
|
|
414
414
|
const notifier = (opts) => {
|
|
415
415
|
return new StateSignal(void 0, FALSE_EQUALS$1, opts?.desc);
|
|
416
416
|
};
|
|
417
|
-
function watchSignal(signal2) {
|
|
417
|
+
function watchSignal(signal2, parentIsSuspended) {
|
|
418
|
+
if (parentIsSuspended) {
|
|
419
|
+
watchSuspendedSignal(signal2);
|
|
420
|
+
} else {
|
|
421
|
+
watchActiveSignal(signal2);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
function unwatchSignal(signal2, parentIsSuspended) {
|
|
425
|
+
if (parentIsSuspended) {
|
|
426
|
+
unwatchSuspendedSignal(signal2);
|
|
427
|
+
} else {
|
|
428
|
+
unwatchActiveSignal(signal2);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
function watchActiveSignal(signal2) {
|
|
418
432
|
const { watchCount } = signal2;
|
|
419
433
|
const newWatchCount = watchCount + 1;
|
|
420
434
|
signal2.watchCount = newWatchCount;
|
|
421
|
-
if (
|
|
422
|
-
|
|
423
|
-
for (const dep of signal2.deps.keys()) {
|
|
424
|
-
watchSignal(dep);
|
|
435
|
+
if (signal2._isActive) {
|
|
436
|
+
return;
|
|
425
437
|
}
|
|
426
|
-
|
|
427
|
-
|
|
438
|
+
for (const dep of signal2.deps.keys()) {
|
|
439
|
+
watchActiveSignal(dep);
|
|
428
440
|
}
|
|
441
|
+
activateSignal(signal2);
|
|
429
442
|
}
|
|
430
|
-
function
|
|
443
|
+
function unwatchActiveSignal(signal2) {
|
|
431
444
|
const { watchCount } = signal2;
|
|
432
|
-
const newWatchCount = Math.max(watchCount -
|
|
445
|
+
const newWatchCount = Math.max(watchCount - 1, 0);
|
|
433
446
|
signal2.watchCount = newWatchCount;
|
|
434
|
-
if (newWatchCount
|
|
435
|
-
|
|
447
|
+
if (newWatchCount === 0) {
|
|
448
|
+
scheduleDeactivate(signal2);
|
|
436
449
|
}
|
|
450
|
+
}
|
|
451
|
+
function watchSuspendedSignal(signal2) {
|
|
452
|
+
const { watchCount, suspendCount } = signal2;
|
|
453
|
+
const newWatchCount = watchCount + 1;
|
|
454
|
+
const newSuspendCount = suspendCount + 1;
|
|
455
|
+
signal2.watchCount = newWatchCount;
|
|
456
|
+
signal2.suspendCount = newSuspendCount;
|
|
457
|
+
signal2.scope?.removeFromGc(signal2);
|
|
458
|
+
cancelDeactivate(signal2);
|
|
459
|
+
if (watchCount === 0) {
|
|
460
|
+
for (const dep of signal2.deps.keys()) {
|
|
461
|
+
watchSuspendedSignal(dep);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
function unwatchSuspendedSignal(signal2) {
|
|
466
|
+
const { watchCount, suspendCount } = signal2;
|
|
467
|
+
const newWatchCount = Math.max(watchCount - 1, 0);
|
|
468
|
+
const newSuspendCount = Math.max(suspendCount - 1, 0);
|
|
469
|
+
signal2.watchCount = newWatchCount;
|
|
470
|
+
signal2.suspendCount = newSuspendCount;
|
|
471
|
+
if (newWatchCount === 0) {
|
|
472
|
+
scheduleDeactivate(signal2);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
function resumeSignal(signal2) {
|
|
476
|
+
const { watchCount, suspendCount } = signal2;
|
|
477
|
+
const newSuspendCount = Math.max(suspendCount - 1, 0);
|
|
478
|
+
signal2.suspendCount = newSuspendCount;
|
|
479
|
+
if (watchCount > 0 && !signal2._isActive) {
|
|
480
|
+
for (const dep of signal2.deps.keys()) {
|
|
481
|
+
resumeSignal(dep);
|
|
482
|
+
}
|
|
483
|
+
activateSignal(signal2);
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
function suspendSignal(signal2) {
|
|
487
|
+
const { watchCount, suspendCount } = signal2;
|
|
488
|
+
const newSuspendCount = suspendCount + 1;
|
|
489
|
+
signal2.suspendCount = newSuspendCount;
|
|
490
|
+
if (watchCount > 0 && newSuspendCount === watchCount) {
|
|
491
|
+
scheduleDeactivate(signal2);
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
function activateSignal(signal2) {
|
|
495
|
+
signal2.scope?.removeFromGc(signal2);
|
|
496
|
+
cancelDeactivate(signal2);
|
|
497
|
+
signal2._isActive = true;
|
|
498
|
+
if (isRelay(signal2)) {
|
|
499
|
+
checkSignal(signal2);
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
function deactivateSignal(signal2) {
|
|
503
|
+
const { watchCount, suspendCount } = signal2;
|
|
504
|
+
signal2._isActive = false;
|
|
505
|
+
const isSuspending = watchCount > 0 && suspendCount === watchCount;
|
|
437
506
|
for (const dep of signal2.deps.keys()) {
|
|
438
|
-
|
|
507
|
+
const { watchCount: depWatchCount, suspendCount: depSuspendCount } = dep;
|
|
508
|
+
if (isSuspending) {
|
|
509
|
+
const newSuspendCount = dep.suspendCount = depSuspendCount + 1;
|
|
510
|
+
if (newSuspendCount === depWatchCount) {
|
|
511
|
+
deactivateSignal(dep);
|
|
512
|
+
}
|
|
513
|
+
} else {
|
|
514
|
+
const newWatchCount = dep.watchCount = depWatchCount - 1;
|
|
515
|
+
if (newWatchCount === 0) {
|
|
516
|
+
deactivateSignal(dep);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
439
519
|
}
|
|
440
520
|
if (isRelay(signal2)) {
|
|
441
521
|
signal2._value?.();
|
|
442
522
|
}
|
|
443
|
-
if (
|
|
444
|
-
signal2.scope
|
|
523
|
+
if (watchCount === 0) {
|
|
524
|
+
signal2.scope?.markForGc(signal2);
|
|
525
|
+
signal2.reset();
|
|
445
526
|
}
|
|
446
527
|
}
|
|
447
528
|
const scheduleIdleCallback = typeof requestIdleCallback === "function" ? requestIdleCallback : (cb) => config.scheduleFlush(cb);
|
|
448
529
|
let PENDING_PULLS = /* @__PURE__ */ new Set();
|
|
449
530
|
let PENDING_ASYNC_PULLS = [];
|
|
450
|
-
let
|
|
531
|
+
let PENDING_DEACTIVE = /* @__PURE__ */ new Set();
|
|
451
532
|
let PENDING_LISTENERS = [];
|
|
452
533
|
let PENDING_TRACERS = [];
|
|
453
534
|
let PENDING_GC = /* @__PURE__ */ new Set();
|
|
@@ -471,11 +552,13 @@ const scheduleAsyncPull = (signal2) => {
|
|
|
471
552
|
PENDING_ASYNC_PULLS.push(signal2);
|
|
472
553
|
scheduleFlush();
|
|
473
554
|
};
|
|
474
|
-
const
|
|
475
|
-
|
|
476
|
-
PENDING_UNWATCH.set(unwatch, current + 1);
|
|
555
|
+
const scheduleDeactivate = (signal2) => {
|
|
556
|
+
PENDING_DEACTIVE.add(signal2);
|
|
477
557
|
scheduleFlush();
|
|
478
558
|
};
|
|
559
|
+
const cancelDeactivate = (signal2) => {
|
|
560
|
+
PENDING_DEACTIVE.delete(signal2);
|
|
561
|
+
};
|
|
479
562
|
const scheduleListeners = (signal2) => {
|
|
480
563
|
PENDING_LISTENERS.push(signal2);
|
|
481
564
|
scheduleFlush();
|
|
@@ -513,9 +596,10 @@ const flushWatchers = async () => {
|
|
|
513
596
|
}
|
|
514
597
|
currentFlush = null;
|
|
515
598
|
config.runBatch(() => {
|
|
516
|
-
for (const
|
|
517
|
-
|
|
599
|
+
for (const signal2 of PENDING_DEACTIVE) {
|
|
600
|
+
deactivateSignal(signal2);
|
|
518
601
|
}
|
|
602
|
+
PENDING_DEACTIVE.clear();
|
|
519
603
|
for (const signal2 of PENDING_LISTENERS) {
|
|
520
604
|
if (signal2 instanceof ReactiveSignal) {
|
|
521
605
|
runListeners(signal2);
|
|
@@ -529,11 +613,15 @@ const flushWatchers = async () => {
|
|
|
529
613
|
}
|
|
530
614
|
PENDING_TRACERS = [];
|
|
531
615
|
}
|
|
532
|
-
PENDING_UNWATCH.clear();
|
|
533
616
|
PENDING_LISTENERS = [];
|
|
534
617
|
});
|
|
535
618
|
flush.resolve();
|
|
536
619
|
};
|
|
620
|
+
const settled = async () => {
|
|
621
|
+
while (currentFlush) {
|
|
622
|
+
await currentFlush.promise;
|
|
623
|
+
}
|
|
624
|
+
};
|
|
537
625
|
function dirtySignal(signal2) {
|
|
538
626
|
const prevState = signal2._state;
|
|
539
627
|
if (prevState === ReactiveFnState.Dirty) {
|
|
@@ -555,7 +643,7 @@ function propagateDirty(signal2) {
|
|
|
555
643
|
scheduleAsyncPull(signal2);
|
|
556
644
|
}
|
|
557
645
|
} else {
|
|
558
|
-
if (signal2._isListener) {
|
|
646
|
+
if (signal2._isListener && !signal2._isSuspendedListener) {
|
|
559
647
|
schedulePull(signal2);
|
|
560
648
|
}
|
|
561
649
|
dirtySignalConsumers(signal2.subs);
|
|
@@ -861,15 +949,15 @@ class ReactivePromiseImpl {
|
|
|
861
949
|
const arr = arrayFrom(values);
|
|
862
950
|
const len = arr.length;
|
|
863
951
|
if (len === 0) return p;
|
|
864
|
-
let
|
|
952
|
+
let settled2 = false;
|
|
865
953
|
const onFulfill = (v) => {
|
|
866
|
-
if (
|
|
867
|
-
|
|
954
|
+
if (settled2) return;
|
|
955
|
+
settled2 = true;
|
|
868
956
|
p._setValue(v);
|
|
869
957
|
};
|
|
870
958
|
const onReject = (r) => {
|
|
871
|
-
if (
|
|
872
|
-
|
|
959
|
+
if (settled2) return;
|
|
960
|
+
settled2 = true;
|
|
873
961
|
p._setError(r);
|
|
874
962
|
};
|
|
875
963
|
for (let i = 0; i < len; i++) {
|
|
@@ -1296,7 +1384,6 @@ function createRelay(activate, scope, opts) {
|
|
|
1296
1384
|
const signal2 = p["_signal"];
|
|
1297
1385
|
signal2.subs = /* @__PURE__ */ new Map();
|
|
1298
1386
|
signal2._state = ReactiveFnState.Dirty;
|
|
1299
|
-
signal2.watchCount = 0;
|
|
1300
1387
|
active = false;
|
|
1301
1388
|
currentSub = void 0;
|
|
1302
1389
|
};
|
|
@@ -1376,7 +1463,7 @@ function getSignal(signal2) {
|
|
|
1376
1463
|
});
|
|
1377
1464
|
}
|
|
1378
1465
|
if (currentConsumer.watchCount > 0) {
|
|
1379
|
-
watchSignal(signal2);
|
|
1466
|
+
watchSignal(signal2, currentConsumer._isSuspended);
|
|
1380
1467
|
}
|
|
1381
1468
|
}
|
|
1382
1469
|
const updatedAt = checkSignal(signal2);
|
|
@@ -1501,10 +1588,10 @@ function runSignal(signal2) {
|
|
|
1501
1588
|
}
|
|
1502
1589
|
}
|
|
1503
1590
|
function disconnectSignal(signal2, computedCount = signal2.computedCount) {
|
|
1504
|
-
const { ref, deps } = signal2;
|
|
1591
|
+
const { ref, deps, _isSuspended: isSuspended } = signal2;
|
|
1505
1592
|
for (const [dep, edge] of deps) {
|
|
1506
1593
|
if (edge.consumedAt !== computedCount) {
|
|
1507
|
-
|
|
1594
|
+
unwatchSignal(dep, isSuspended);
|
|
1508
1595
|
dep.subs.delete(ref);
|
|
1509
1596
|
deps.delete(dep);
|
|
1510
1597
|
}
|
|
@@ -1844,6 +1931,7 @@ class ReactiveSignal {
|
|
|
1844
1931
|
updatedCount = 0;
|
|
1845
1932
|
computedCount = 0;
|
|
1846
1933
|
watchCount = 0;
|
|
1934
|
+
suspendCount = 0;
|
|
1847
1935
|
key;
|
|
1848
1936
|
args;
|
|
1849
1937
|
callbacks = void 0;
|
|
@@ -1876,21 +1964,31 @@ class ReactiveSignal {
|
|
|
1876
1964
|
get _isListener() {
|
|
1877
1965
|
return (this.flags & 16) !== 0;
|
|
1878
1966
|
}
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1967
|
+
get _isSuspendedListener() {
|
|
1968
|
+
return (this.flags & 32) !== 0;
|
|
1969
|
+
}
|
|
1970
|
+
get _isSuspended() {
|
|
1971
|
+
const { watchCount, suspendCount } = this;
|
|
1972
|
+
return watchCount > 0 && watchCount === suspendCount;
|
|
1973
|
+
}
|
|
1974
|
+
get _isActive() {
|
|
1975
|
+
return (this.flags & 64) !== 0;
|
|
1976
|
+
}
|
|
1977
|
+
set _isActive(isActive) {
|
|
1978
|
+
if (isActive) {
|
|
1979
|
+
this.flags |= 64;
|
|
1882
1980
|
} else {
|
|
1883
|
-
this.flags &= -
|
|
1981
|
+
this.flags &= -65;
|
|
1884
1982
|
}
|
|
1885
1983
|
}
|
|
1886
1984
|
get _isLazy() {
|
|
1887
|
-
return (this.flags &
|
|
1985
|
+
return (this.flags & 128) !== 0;
|
|
1888
1986
|
}
|
|
1889
1987
|
set _isLazy(isLazy) {
|
|
1890
1988
|
if (isLazy) {
|
|
1891
|
-
this.flags |=
|
|
1989
|
+
this.flags |= 128;
|
|
1892
1990
|
} else {
|
|
1893
|
-
this.flags &= -
|
|
1991
|
+
this.flags &= -129;
|
|
1894
1992
|
}
|
|
1895
1993
|
}
|
|
1896
1994
|
get listeners() {
|
|
@@ -1907,7 +2005,7 @@ class ReactiveSignal {
|
|
|
1907
2005
|
const { current } = this.listeners;
|
|
1908
2006
|
if (!current.has(listener)) {
|
|
1909
2007
|
if (!this._isListener) {
|
|
1910
|
-
watchSignal(this);
|
|
2008
|
+
watchSignal(this, this._isSuspended);
|
|
1911
2009
|
this.flags |= 16;
|
|
1912
2010
|
}
|
|
1913
2011
|
schedulePull(this);
|
|
@@ -1918,7 +2016,7 @@ class ReactiveSignal {
|
|
|
1918
2016
|
current.delete(listener);
|
|
1919
2017
|
if (current.size === 0) {
|
|
1920
2018
|
cancelPull(this);
|
|
1921
|
-
|
|
2019
|
+
unwatchSignal(this, this._isSuspended);
|
|
1922
2020
|
this.flags &= -17;
|
|
1923
2021
|
}
|
|
1924
2022
|
}
|
|
@@ -1929,11 +2027,37 @@ class ReactiveSignal {
|
|
|
1929
2027
|
// the listener as watched so that relays that are accessed will be activated.
|
|
1930
2028
|
addListenerLazy() {
|
|
1931
2029
|
if (!this._isListener) {
|
|
1932
|
-
watchSignal(this);
|
|
2030
|
+
watchSignal(this, this._isSuspended);
|
|
1933
2031
|
this.flags |= 16;
|
|
1934
2032
|
}
|
|
1935
2033
|
return this.listeners.cachedBoundAdd;
|
|
1936
2034
|
}
|
|
2035
|
+
setSuspended(suspended) {
|
|
2036
|
+
const { flags } = this;
|
|
2037
|
+
const isListener = (flags & 16) !== 0;
|
|
2038
|
+
const isSuspendedListener = (flags & 32) !== 0;
|
|
2039
|
+
if (suspended && !isSuspendedListener) {
|
|
2040
|
+
this.flags = flags | 32;
|
|
2041
|
+
if (isListener) {
|
|
2042
|
+
suspendSignal(this);
|
|
2043
|
+
}
|
|
2044
|
+
} else if (!suspended && isSuspendedListener) {
|
|
2045
|
+
this.flags = flags & -33;
|
|
2046
|
+
if (isListener) {
|
|
2047
|
+
resumeSignal(this);
|
|
2048
|
+
}
|
|
2049
|
+
}
|
|
2050
|
+
}
|
|
2051
|
+
reset() {
|
|
2052
|
+
this.flags = (this.def.isRelay ? 8 : 0) | 2;
|
|
2053
|
+
this.dirtyHead = void 0;
|
|
2054
|
+
this.updatedCount = 0;
|
|
2055
|
+
this.computedCount = 0;
|
|
2056
|
+
this.deps = /* @__PURE__ */ new Map();
|
|
2057
|
+
this.subs = /* @__PURE__ */ new Map();
|
|
2058
|
+
this.watchCount = 0;
|
|
2059
|
+
this.suspendCount = 0;
|
|
2060
|
+
}
|
|
1937
2061
|
}
|
|
1938
2062
|
const runListeners = (signal2) => {
|
|
1939
2063
|
const { listeners } = signal2;
|
|
@@ -2131,8 +2255,9 @@ exports.setGlobalContexts = setGlobalContexts;
|
|
|
2131
2255
|
exports.setReactivePromise = setReactivePromise;
|
|
2132
2256
|
exports.setScopeOwner = setScopeOwner;
|
|
2133
2257
|
exports.setTracing = setTracing;
|
|
2258
|
+
exports.settled = settled;
|
|
2134
2259
|
exports.signal = signal;
|
|
2135
2260
|
exports.unwatchSignal = unwatchSignal;
|
|
2136
2261
|
exports.watchSignal = watchSignal;
|
|
2137
2262
|
exports.withContexts = withContexts;
|
|
2138
|
-
//# sourceMappingURL=debug-
|
|
2263
|
+
//# sourceMappingURL=debug-DW86yXJK.js.map
|