signalium 3.0.2 → 4.0.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 +39 -0
- package/dist/cjs/development/{component-shared-Cug2Y5YZ.js → component-shared-BjwFh5Jq.js} +2 -2
- package/dist/cjs/development/{component-shared-Cug2Y5YZ.js.map → component-shared-BjwFh5Jq.js.map} +1 -1
- package/dist/cjs/development/config-D6wyrhrW.js +58 -0
- package/dist/cjs/development/config-D6wyrhrW.js.map +1 -0
- package/dist/cjs/development/config.js +1 -1
- package/dist/cjs/development/{debug-C46WDxhL.js → debug-CbAX7VeM.js} +260 -43
- package/dist/cjs/development/debug-CbAX7VeM.js.map +1 -0
- package/dist/cjs/development/debug.js +3 -1
- package/dist/cjs/development/debug.js.map +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 +399 -52
- package/dist/cjs/development/react/index.js.map +1 -1
- package/dist/cjs/development/react/index.server.js +2 -2
- package/dist/cjs/development/react/index.server.js.map +1 -1
- package/dist/cjs/development/react/server.js +1 -1
- package/dist/cjs/development/{snapshot-CbZ6IH3B.js → snapshot-BTMVSd8Y.js} +4 -2
- package/dist/cjs/development/snapshot-BTMVSd8Y.js.map +1 -0
- package/dist/cjs/development/transform/index.js +5 -2
- package/dist/cjs/development/transform/index.js.map +1 -1
- package/dist/cjs/development/utils.js +34 -2
- package/dist/cjs/development/utils.js.map +1 -1
- package/dist/cjs/production/{component-shared-D0J85PUi.js → component-shared-CcxyLg4p.js} +2 -2
- package/dist/cjs/production/{component-shared-D0J85PUi.js.map → component-shared-CcxyLg4p.js.map} +1 -1
- package/dist/cjs/production/config-BHvmcsLQ.js +52 -0
- package/dist/cjs/production/config-BHvmcsLQ.js.map +1 -0
- package/dist/cjs/production/config.js +1 -1
- package/dist/cjs/production/{contexts-CM3QLfV8.js → contexts-waczQzHZ.js} +260 -43
- package/dist/cjs/production/contexts-waczQzHZ.js.map +1 -0
- package/dist/cjs/production/debug.js +3 -1
- package/dist/cjs/production/debug.js.map +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 +399 -52
- package/dist/cjs/production/react/index.js.map +1 -1
- package/dist/cjs/production/react/index.server.js +2 -2
- package/dist/cjs/production/react/index.server.js.map +1 -1
- package/dist/cjs/production/react/server.js +1 -1
- package/dist/cjs/production/{snapshot-DWwH7_9y.js → snapshot-7264bWj1.js} +4 -2
- package/dist/cjs/production/snapshot-7264bWj1.js.map +1 -0
- package/dist/cjs/production/transform/index.js +5 -2
- package/dist/cjs/production/transform/index.js.map +1 -1
- package/dist/cjs/production/utils.js +34 -2
- package/dist/cjs/production/utils.js.map +1 -1
- package/dist/esm/config.d.ts +1 -1
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/debug.d.ts +1 -0
- package/dist/esm/debug.d.ts.map +1 -1
- package/dist/esm/development/{component-shared-CLSmdnGU.js → component-shared-B3Q6mIzY.js} +2 -2
- package/dist/esm/development/{component-shared-CLSmdnGU.js.map → component-shared-B3Q6mIzY.js.map} +1 -1
- package/dist/esm/development/config-CQLKpPRj.js +59 -0
- package/dist/esm/development/config-CQLKpPRj.js.map +1 -0
- package/dist/esm/development/config.js +2 -2
- package/dist/esm/development/{debug-BTLbgTPK.js → debug-C3HD8WcT.js} +288 -71
- package/dist/esm/development/debug-C3HD8WcT.js.map +1 -0
- package/dist/esm/development/debug.js +12 -10
- package/dist/esm/development/index.js +18 -17
- package/dist/esm/development/react/index.js +400 -53
- package/dist/esm/development/react/index.js.map +1 -1
- package/dist/esm/development/react/index.server.js +2 -2
- package/dist/esm/development/react/index.server.js.map +1 -1
- package/dist/esm/development/react/server.js +1 -1
- package/dist/esm/development/{snapshot-CkndI4Hh.js → snapshot-CCKlBy-y.js} +7 -5
- package/dist/esm/development/snapshot-CCKlBy-y.js.map +1 -0
- package/dist/esm/development/transform/index.js +5 -2
- package/dist/esm/development/transform/index.js.map +1 -1
- package/dist/esm/development/utils.js +38 -6
- package/dist/esm/development/utils.js.map +1 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/internals/async.d.ts.map +1 -1
- package/dist/esm/internals/config.d.ts +40 -0
- package/dist/esm/internals/config.d.ts.map +1 -1
- package/dist/esm/internals/lease.d.ts +30 -0
- package/dist/esm/internals/lease.d.ts.map +1 -0
- package/dist/esm/internals/reactive.d.ts +18 -1
- 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/utils/hash.d.ts +7 -0
- package/dist/esm/internals/utils/hash.d.ts.map +1 -1
- package/dist/esm/internals/utils/snapshot.d.ts +2 -0
- package/dist/esm/internals/utils/snapshot.d.ts.map +1 -1
- package/dist/esm/internals/watch.d.ts +3 -2
- package/dist/esm/internals/watch.d.ts.map +1 -1
- package/dist/esm/production/{component-shared-Dva0S5e3.js → component-shared-CycOXiis.js} +2 -2
- package/dist/esm/production/{component-shared-Dva0S5e3.js.map → component-shared-CycOXiis.js.map} +1 -1
- package/dist/esm/production/config-BhtwQYAN.js +53 -0
- package/dist/esm/production/config-BhtwQYAN.js.map +1 -0
- package/dist/esm/production/config.js +2 -2
- package/dist/esm/production/{contexts-FxCndlvf.js → contexts-ry5lvNSx.js} +291 -74
- package/dist/esm/production/contexts-ry5lvNSx.js.map +1 -0
- package/dist/esm/production/debug.js +3 -1
- package/dist/esm/production/index.js +19 -18
- package/dist/esm/production/react/index.js +400 -53
- package/dist/esm/production/react/index.js.map +1 -1
- package/dist/esm/production/react/index.server.js +2 -2
- package/dist/esm/production/react/index.server.js.map +1 -1
- package/dist/esm/production/react/server.js +1 -1
- package/dist/esm/production/{snapshot-CdCaJJ0L.js → snapshot-1d_HVP3L.js} +7 -5
- package/dist/esm/production/snapshot-1d_HVP3L.js.map +1 -0
- package/dist/esm/production/transform/index.js +5 -2
- package/dist/esm/production/transform/index.js.map +1 -1
- package/dist/esm/production/utils.js +39 -7
- package/dist/esm/production/utils.js.map +1 -1
- package/dist/esm/react/async-component.d.ts +10 -2
- package/dist/esm/react/async-component.d.ts.map +1 -1
- package/dist/esm/react/component-server.d.ts +6 -2
- package/dist/esm/react/component-server.d.ts.map +1 -1
- package/dist/esm/react/component.d.ts +5 -2
- package/dist/esm/react/component.d.ts.map +1 -1
- package/dist/esm/react/delivery.d.ts +107 -0
- package/dist/esm/react/delivery.d.ts.map +1 -0
- package/dist/esm/react/index.d.ts +3 -2
- package/dist/esm/react/index.d.ts.map +1 -1
- package/dist/esm/react/pause-signals-context.d.ts +16 -2
- package/dist/esm/react/pause-signals-context.d.ts.map +1 -1
- package/dist/esm/react/props-hash.d.ts +20 -0
- package/dist/esm/react/props-hash.d.ts.map +1 -0
- package/dist/esm/react/use-reactive.d.ts +6 -3
- package/dist/esm/react/use-reactive.d.ts.map +1 -1
- package/dist/esm/transform/async.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/transform/use-reactive.d.ts.map +1 -1
- package/dist/esm/transform/utils.d.ts +1 -1
- package/dist/esm/transform/utils.d.ts.map +1 -1
- package/dist/esm/types.d.ts +20 -1
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/utils.d.ts +17 -1
- package/dist/esm/utils.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/development/config-B0MtLBgx.js +0 -21
- package/dist/cjs/development/config-B0MtLBgx.js.map +0 -1
- package/dist/cjs/development/debug-C46WDxhL.js.map +0 -1
- package/dist/cjs/development/snapshot-CbZ6IH3B.js.map +0 -1
- package/dist/cjs/production/config-B0MtLBgx.js +0 -21
- package/dist/cjs/production/config-B0MtLBgx.js.map +0 -1
- package/dist/cjs/production/contexts-CM3QLfV8.js.map +0 -1
- package/dist/cjs/production/snapshot-DWwH7_9y.js.map +0 -1
- package/dist/esm/development/config-CPQL7hX-.js +0 -22
- package/dist/esm/development/config-CPQL7hX-.js.map +0 -1
- package/dist/esm/development/debug-BTLbgTPK.js.map +0 -1
- package/dist/esm/development/snapshot-CkndI4Hh.js.map +0 -1
- package/dist/esm/production/config-CPQL7hX-.js +0 -22
- package/dist/esm/production/config-CPQL7hX-.js.map +0 -1
- package/dist/esm/production/contexts-FxCndlvf.js.map +0 -1
- package/dist/esm/production/snapshot-CdCaJJ0L.js.map +0 -1
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/** One MurmurHash3 block round: mixes the 32-bit block `k` into `h`. */
|
|
2
|
+
export declare function mixHash(h: number, k: number): number;
|
|
3
|
+
/** MurmurHash3 finalization over `length` blocks. */
|
|
4
|
+
export declare function finalizeHash(h: number, length: number): number;
|
|
5
|
+
/** `hashObject` over keys the caller already has; `obj` must be on `seen`. */
|
|
6
|
+
export declare function hashObjectKeys(obj: object, keys: string[], seen: unknown[]): number;
|
|
7
|
+
export declare const ARRAY_SEED: number;
|
|
1
8
|
export declare const registerCustomHash: <T>(ctor: new (...args: any[]) => T, hashFn: (obj: T) => number) => void;
|
|
2
9
|
export declare function hashValue(node: unknown, seen?: unknown[]): number;
|
|
3
10
|
export declare function getObjectHash(obj: object): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../../../src/internals/utils/hash.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../../../src/internals/utils/hash.ts"],"names":[],"mappings":"AA+EA,wEAAwE;AACxE,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,UAc3C;AAED,qDAAqD;AACrD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAYrD;AAgBD,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,UAS1E;AAqDD,eAAO,MAAM,UAAU,QAAmC,CAAC;AAgB3D,eAAO,MAAM,kBAAkB,GAAI,CAAC,QAAQ,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,SAEhG,CAAC;AAEF,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,GAAE,OAAO,EAAO,UAsC5D;AAKD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOjD;AAKD,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,UAW3D"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export type SnapshotFn = (current: unknown, prev: unknown) => unknown;
|
|
2
|
+
export declare function snapshotArray(current: unknown[], prev: unknown, snap: SnapshotFn): unknown[];
|
|
3
|
+
export declare function snapshotPlainObject(current: Record<string, unknown>, prev: unknown, snap: SnapshotFn): Record<string, unknown>;
|
|
2
4
|
/**
|
|
3
5
|
* Register a custom snapshot function for instances of a class.
|
|
4
6
|
* The function receives the current value, the previous snapshot (or undefined),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../../src/internals/utils/snapshot.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../../src/internals/utils/snapshot.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;AAMtE,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,EAAE,CAa5F;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,UAAU,GACf,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmBzB;AAsGD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,sBAAsB,GAAI,CAAC,SAAS,MAAM,QAC/C,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,cACnB,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,UAAU,KAAK,CAAC,KACvE,IAUF,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAuB3E"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ReactiveSignal } from './reactive.js';
|
|
2
|
+
import type { DeactivateOptions } from '../types.js';
|
|
2
3
|
export declare function watchSignal(signal: ReactiveSignal<any, any>): void;
|
|
3
|
-
export declare function unwatchSignal(signal: ReactiveSignal<any, any
|
|
4
|
+
export declare function unwatchSignal(signal: ReactiveSignal<any, any>, options?: DeactivateOptions): void;
|
|
4
5
|
export declare function activateSignal(signal: ReactiveSignal<any, any>): void;
|
|
5
|
-
export declare function deactivateSignal(signal: ReactiveSignal<any, any
|
|
6
|
+
export declare function deactivateSignal(signal: ReactiveSignal<any, any>, options?: DeactivateOptions): void;
|
|
6
7
|
//# sourceMappingURL=watch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/internals/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAW,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/internals/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAW,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIrD,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAelE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,OAAO,GAAE,iBAAsB,QAS9F;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAQrE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,OAAO,GAAE,iBAAsB,QAejG"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a as getCurrentScope, c as createReactiveSignal, b as generatorResultToPromiseWithConsumer, d as setCurrentConsumer, e as getCurrentConsumer } from "./contexts-ry5lvNSx.js";
|
|
2
2
|
function isGeneratorFunction(fn) {
|
|
3
3
|
return typeof fn === "function" && fn.constructor?.name === "GeneratorFunction";
|
|
4
4
|
}
|
|
@@ -31,4 +31,4 @@ export {
|
|
|
31
31
|
createServerAsyncComponentWrapper as c,
|
|
32
32
|
isAsyncFunctionWithoutTransform as i
|
|
33
33
|
};
|
|
34
|
-
//# sourceMappingURL=component-shared-
|
|
34
|
+
//# sourceMappingURL=component-shared-CycOXiis.js.map
|
package/dist/esm/production/{component-shared-Dva0S5e3.js.map → component-shared-CycOXiis.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-shared-
|
|
1
|
+
{"version":3,"file":"component-shared-CycOXiis.js","sources":["../../../.tsc-out/react/component-shared.js"],"sourcesContent":["import { getCurrentConsumer, setCurrentConsumer } from '../internals/consumer.js';\nimport { getCurrentScope } from '../internals/contexts.js';\nimport { createReactiveSignal } from '../internals/reactive.js';\nimport { generatorResultToPromiseWithConsumer } from '../internals/generators.js';\nexport function isGeneratorFunction(fn) {\n return (typeof fn === 'function' && fn.constructor?.name === 'GeneratorFunction');\n}\nexport function isAsyncFunctionWithoutTransform(fn) {\n return typeof fn === 'function' && fn.constructor?.name === 'AsyncFunction';\n}\n/**\n * Wrap a Babel-transformed async generator in a real `async function` that drives it\n * with {@link generatorResultToPromiseWithConsumer}. Used on the server (RSC + SSR)\n * where hooks-based Suspense replay is not appropriate.\n */\nexport function createServerAsyncComponentWrapper(fn) {\n return async function (props) {\n const scope = getCurrentScope();\n const owned = createReactiveSignal({ compute: () => null, equals: () => true, isRelay: false, tracer: undefined }, [], undefined, scope);\n return generatorResultToPromiseWithConsumer(fn(props), owned);\n };\n}\n/**\n * Wrap a sync render function with consumer/scope tracking. Used by the server\n * `component()` for non-generator definitions.\n */\nexport function createServerSyncComponentWrapper(fn) {\n return function (props) {\n const scope = getCurrentScope();\n const owned = createReactiveSignal({ compute: () => null, equals: () => true, isRelay: false, tracer: undefined }, [], undefined, scope);\n const prevConsumer = getCurrentConsumer();\n try {\n setCurrentConsumer(owned);\n return fn(props);\n }\n finally {\n setCurrentConsumer(prevConsumer);\n }\n };\n}\n"],"names":[],"mappings":";AAIO,SAAS,oBAAoB,IAAI;AACpC,SAAQ,OAAO,OAAO,cAAc,GAAG,aAAa,SAAS;AACjE;AACO,SAAS,gCAAgC,IAAI;AAChD,SAAO,OAAO,OAAO,cAAc,GAAG,aAAa,SAAS;AAChE;AAMO,SAAS,kCAAkC,IAAI;AAClD,SAAO,eAAgB,OAAO;AAC1B,UAAM,QAAQ,gBAAe;AAC7B,UAAM,QAAQ,qBAAqB,EAAE,SAAS,MAAM,MAAM,QAAQ,MAAM,MAAM,SAAS,OAAO,QAAQ,OAAS,GAAI,CAAA,GAAI,QAAW,KAAK;AACvI,WAAO,qCAAqC,GAAG,KAAK,GAAG,KAAK;AAAA,EAChE;AACJ;AAKO,SAAS,iCAAiC,IAAI;AACjD,SAAO,SAAU,OAAO;AACpB,UAAM,QAAQ,gBAAe;AAC7B,UAAM,QAAQ,qBAAqB,EAAE,SAAS,MAAM,MAAM,QAAQ,MAAM,MAAM,SAAS,OAAO,QAAQ,OAAS,GAAI,CAAA,GAAI,QAAW,KAAK;AACvI,UAAM,eAAe,mBAAkB;AACvC,QAAI;AACA,yBAAmB,KAAK;AACxB,aAAO,GAAG,KAAK;AAAA,IACnB,UACR;AACY,yBAAmB,YAAY;AAAA,IACnC;AAAA,EACJ;AACJ;"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
let _scheduleFlush = (flushWatchers) => {
|
|
2
|
+
setTimeout(() => {
|
|
3
|
+
flushWatchers();
|
|
4
|
+
}, 0);
|
|
5
|
+
};
|
|
6
|
+
let _runBatch = (fn) => fn();
|
|
7
|
+
const DEFAULT_RENDER_LEASE_TTL = 1e4;
|
|
8
|
+
let _renderLeaseTtl = DEFAULT_RENDER_LEASE_TTL;
|
|
9
|
+
const MAX_TIMEOUT = 2 ** 31 - 1;
|
|
10
|
+
function validateRenderLeaseTtl(ttl) {
|
|
11
|
+
if (typeof ttl !== "number" || Number.isNaN(ttl) || ttl <= 0) {
|
|
12
|
+
return _renderLeaseTtl;
|
|
13
|
+
}
|
|
14
|
+
if (ttl > MAX_TIMEOUT) {
|
|
15
|
+
return MAX_TIMEOUT;
|
|
16
|
+
}
|
|
17
|
+
return ttl;
|
|
18
|
+
}
|
|
19
|
+
let _reactDelivery = "sync";
|
|
20
|
+
const resolvedPromise = Promise.resolve();
|
|
21
|
+
let _scheduleReactDelivery = (fn) => {
|
|
22
|
+
resolvedPromise.then(fn);
|
|
23
|
+
};
|
|
24
|
+
function setConfig(cfg) {
|
|
25
|
+
_scheduleFlush = cfg.scheduleFlush ?? _scheduleFlush;
|
|
26
|
+
_runBatch = cfg.runBatch ?? _runBatch;
|
|
27
|
+
if (cfg.renderLeaseTtl !== void 0) {
|
|
28
|
+
_renderLeaseTtl = validateRenderLeaseTtl(cfg.renderLeaseTtl);
|
|
29
|
+
}
|
|
30
|
+
_reactDelivery = cfg.reactDelivery ?? _reactDelivery;
|
|
31
|
+
_scheduleReactDelivery = cfg.scheduleReactDelivery ?? _scheduleReactDelivery;
|
|
32
|
+
}
|
|
33
|
+
const scheduleFlush = (fn) => {
|
|
34
|
+
_scheduleFlush(fn);
|
|
35
|
+
};
|
|
36
|
+
const runBatch = (fn) => {
|
|
37
|
+
_runBatch(fn);
|
|
38
|
+
};
|
|
39
|
+
const getRenderLeaseTtl = () => _renderLeaseTtl;
|
|
40
|
+
const getReactDelivery = () => _reactDelivery;
|
|
41
|
+
const scheduleReactDelivery = (fn) => {
|
|
42
|
+
_scheduleReactDelivery(fn);
|
|
43
|
+
};
|
|
44
|
+
export {
|
|
45
|
+
MAX_TIMEOUT as M,
|
|
46
|
+
scheduleFlush as a,
|
|
47
|
+
getRenderLeaseTtl as b,
|
|
48
|
+
setConfig as c,
|
|
49
|
+
getReactDelivery as g,
|
|
50
|
+
runBatch as r,
|
|
51
|
+
scheduleReactDelivery as s
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=config-BhtwQYAN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-BhtwQYAN.js","sources":["../../../.tsc-out/internals/config.js"],"sourcesContent":["let _scheduleFlush = flushWatchers => {\n setTimeout(() => {\n flushWatchers();\n }, 0);\n};\nlet _runBatch = fn => fn();\n/** Default render lease TTL (ms). It must outlive a transition render, which React caps at 5 s. */\nexport const DEFAULT_RENDER_LEASE_TTL = 10_000;\nlet _renderLeaseTtl = DEFAULT_RENDER_LEASE_TTL;\n/** The longest `setTimeout` delay (2^31 - 1 ms); longer ones fire immediately. */\nexport const MAX_TIMEOUT = 2 ** 31 - 1;\nfunction validateRenderLeaseTtl(ttl) {\n if (typeof ttl !== 'number' || Number.isNaN(ttl) || ttl <= 0) {\n if (IS_DEV) {\n console.warn(`signalium: setConfig({ renderLeaseTtl: ${String(ttl)} }) ignored; it must be a positive number of milliseconds.`);\n }\n return _renderLeaseTtl;\n }\n if (ttl > MAX_TIMEOUT) {\n if (IS_DEV) {\n console.warn(`signalium: setConfig({ renderLeaseTtl: ${String(ttl)} }) clamped to ${MAX_TIMEOUT} ms, the longest timer delay.`);\n }\n return MAX_TIMEOUT;\n }\n return ttl;\n}\nlet _reactDelivery = 'sync';\nconst resolvedPromise = Promise.resolve();\nlet _scheduleReactDelivery = fn => {\n resolvedPromise.then(fn);\n};\nexport function setConfig(cfg) {\n _scheduleFlush = cfg.scheduleFlush ?? _scheduleFlush;\n _runBatch = cfg.runBatch ?? _runBatch;\n if (cfg.renderLeaseTtl !== undefined) {\n _renderLeaseTtl = validateRenderLeaseTtl(cfg.renderLeaseTtl);\n }\n _reactDelivery = cfg.reactDelivery ?? _reactDelivery;\n _scheduleReactDelivery = cfg.scheduleReactDelivery ?? _scheduleReactDelivery;\n}\nexport const scheduleFlush = (fn) => {\n _scheduleFlush(fn);\n};\nexport const runBatch = (fn) => {\n _runBatch(fn);\n};\nexport const getRenderLeaseTtl = () => _renderLeaseTtl;\nexport const getReactDelivery = () => _reactDelivery;\nexport const scheduleReactDelivery = (fn) => {\n _scheduleReactDelivery(fn);\n};\n"],"names":[],"mappings":"AAAA,IAAI,iBAAiB,CAAA,kBAAiB;AAClC,aAAW,MAAM;AACb,kBAAA;AAAA,EACJ,GAAG,CAAC;AACR;AACA,IAAI,YAAY,QAAM,GAAA;AAEf,MAAM,2BAA2B;AACxC,IAAI,kBAAkB;AAEf,MAAM,cAAc,KAAK,KAAK;AACrC,SAAS,uBAAuB,KAAK;AACjC,MAAI,OAAO,QAAQ,YAAY,OAAO,MAAM,GAAG,KAAK,OAAO,GAAG;AAI1D,WAAO;AAAA,EACX;AACA,MAAI,MAAM,aAAa;AAInB,WAAO;AAAA,EACX;AACA,SAAO;AACX;AACA,IAAI,iBAAiB;AACrB,MAAM,kBAAkB,QAAQ,QAAA;AAChC,IAAI,yBAAyB,CAAA,OAAM;AAC/B,kBAAgB,KAAK,EAAE;AAC3B;AACO,SAAS,UAAU,KAAK;AAC3B,mBAAiB,IAAI,iBAAiB;AACtC,cAAY,IAAI,YAAY;AAC5B,MAAI,IAAI,mBAAmB,QAAW;AAClC,sBAAkB,uBAAuB,IAAI,cAAc;AAAA,EAC/D;AACA,mBAAiB,IAAI,iBAAiB;AACtC,2BAAyB,IAAI,yBAAyB;AAC1D;AACO,MAAM,gBAAgB,CAAC,OAAO;AACjC,iBAAe,EAAE;AACrB;AACO,MAAM,WAAW,CAAC,OAAO;AAC5B,YAAU,EAAE;AAChB;AACO,MAAM,oBAAoB,MAAM;AAChC,MAAM,mBAAmB,MAAM;AAC/B,MAAM,wBAAwB,CAAC,OAAO;AACzC,yBAAuB,EAAE;AAC7B;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a as scheduleFlush$1, r as runBatch, b as getRenderLeaseTtl, M as MAX_TIMEOUT } from "./config-BhtwQYAN.js";
|
|
2
2
|
let CURRENT_CONSUMER;
|
|
3
3
|
const setCurrentConsumer = (consumer) => {
|
|
4
4
|
CURRENT_CONSUMER = consumer;
|
|
@@ -99,12 +99,12 @@ function watchSignal(signal2) {
|
|
|
99
99
|
}
|
|
100
100
|
activateSignal(signal2);
|
|
101
101
|
}
|
|
102
|
-
function unwatchSignal(signal2) {
|
|
102
|
+
function unwatchSignal(signal2, options = {}) {
|
|
103
103
|
const { watchCount } = signal2;
|
|
104
104
|
const newWatchCount = Math.max(watchCount - 1, 0);
|
|
105
105
|
signal2.watchCount = newWatchCount;
|
|
106
106
|
if (newWatchCount === 0) {
|
|
107
|
-
scheduleDeactivate(signal2);
|
|
107
|
+
scheduleDeactivate(signal2, options);
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
function activateSignal(signal2) {
|
|
@@ -114,22 +114,22 @@ function activateSignal(signal2) {
|
|
|
114
114
|
checkSignal(signal2);
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
-
function deactivateSignal(signal2) {
|
|
117
|
+
function deactivateSignal(signal2, options = {}) {
|
|
118
118
|
signal2._isActive = false;
|
|
119
119
|
for (const dep of signal2.deps.keys()) {
|
|
120
120
|
const newWatchCount = Math.max(dep.watchCount - 1, 0);
|
|
121
121
|
dep.watchCount = newWatchCount;
|
|
122
122
|
if (newWatchCount === 0) {
|
|
123
|
-
deactivateSignal(dep);
|
|
123
|
+
deactivateSignal(dep, options);
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
if (isRelay(signal2)) {
|
|
127
|
-
signal2._value?.();
|
|
127
|
+
signal2._value?.(options);
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
let PENDING_PULLS = /* @__PURE__ */ new Set();
|
|
131
131
|
let PENDING_ASYNC_PULLS = [];
|
|
132
|
-
let PENDING_DEACTIVE = /* @__PURE__ */ new
|
|
132
|
+
let PENDING_DEACTIVE = /* @__PURE__ */ new Map();
|
|
133
133
|
let PENDING_LISTENERS = [];
|
|
134
134
|
const microtask = () => Promise.resolve();
|
|
135
135
|
let currentFlush = null;
|
|
@@ -152,8 +152,9 @@ const scheduleAsyncPull = (signal2) => {
|
|
|
152
152
|
PENDING_ASYNC_PULLS.push(signal2);
|
|
153
153
|
scheduleFlush();
|
|
154
154
|
};
|
|
155
|
-
const scheduleDeactivate = (signal2) => {
|
|
156
|
-
PENDING_DEACTIVE.
|
|
155
|
+
const scheduleDeactivate = (signal2, options = {}) => {
|
|
156
|
+
const existing = PENDING_DEACTIVE.get(signal2);
|
|
157
|
+
PENDING_DEACTIVE.set(signal2, existing === void 0 ? options : { isPausing: Boolean(existing.isPausing && options.isPausing) });
|
|
157
158
|
scheduleFlush();
|
|
158
159
|
};
|
|
159
160
|
const cancelDeactivate = (signal2) => {
|
|
@@ -184,8 +185,8 @@ const flushWatchers = async () => {
|
|
|
184
185
|
}
|
|
185
186
|
currentFlush = null;
|
|
186
187
|
runBatch(() => {
|
|
187
|
-
for (const signal2 of PENDING_DEACTIVE) {
|
|
188
|
-
deactivateSignal(signal2);
|
|
188
|
+
for (const [signal2, options] of PENDING_DEACTIVE) {
|
|
189
|
+
deactivateSignal(signal2, options);
|
|
189
190
|
}
|
|
190
191
|
PENDING_DEACTIVE.clear();
|
|
191
192
|
for (const signal2 of PENDING_LISTENERS) {
|
|
@@ -927,11 +928,11 @@ function createRelay(activate, scope, opts) {
|
|
|
927
928
|
const p = new ReactivePromiseImpl();
|
|
928
929
|
let active = false;
|
|
929
930
|
let currentSub;
|
|
930
|
-
const unsubscribe = () => {
|
|
931
|
+
const unsubscribe = (options) => {
|
|
931
932
|
if (typeof currentSub === "function") {
|
|
932
933
|
currentSub();
|
|
933
934
|
} else if (currentSub !== void 0) {
|
|
934
|
-
currentSub.deactivate?.();
|
|
935
|
+
currentSub.deactivate?.(options);
|
|
935
936
|
}
|
|
936
937
|
const signal2 = p["_signal"];
|
|
937
938
|
signal2.subs = /* @__PURE__ */ new Map();
|
|
@@ -1203,32 +1204,43 @@ function hashNumber(num, seed = 0) {
|
|
|
1203
1204
|
h ^= h >>> 16;
|
|
1204
1205
|
return h >>> 0;
|
|
1205
1206
|
}
|
|
1206
|
-
function
|
|
1207
|
-
let h = ARRAY;
|
|
1207
|
+
function mixHash(h, k) {
|
|
1208
1208
|
const c1 = 3432918353;
|
|
1209
1209
|
const c2 = 461845907;
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1210
|
+
const n = 3864292196;
|
|
1211
|
+
k = imul(k, c1);
|
|
1212
|
+
k = k << 15 | k >>> 17;
|
|
1213
|
+
k = imul(k, c2);
|
|
1214
|
+
h ^= k;
|
|
1215
|
+
h = h << 13 | h >>> 19;
|
|
1216
|
+
return imul(h, 5) + n | 0;
|
|
1217
|
+
}
|
|
1218
|
+
function finalizeHash(h, length) {
|
|
1219
|
+
const fmix1 = 2246822507;
|
|
1220
|
+
const fmix2 = 3266489909;
|
|
1221
|
+
h ^= length;
|
|
1220
1222
|
h ^= h >>> 16;
|
|
1221
|
-
h = imul(h,
|
|
1223
|
+
h = imul(h, fmix1);
|
|
1222
1224
|
h ^= h >>> 13;
|
|
1223
|
-
h = imul(h,
|
|
1225
|
+
h = imul(h, fmix2);
|
|
1224
1226
|
h ^= h >>> 16;
|
|
1225
1227
|
return h >>> 0;
|
|
1226
1228
|
}
|
|
1229
|
+
function hashArray(arr, seen) {
|
|
1230
|
+
let h = ARRAY_SEED;
|
|
1231
|
+
for (const item of arr) {
|
|
1232
|
+
h = mixHash(h, hashValue(item, seen));
|
|
1233
|
+
}
|
|
1234
|
+
return finalizeHash(h, arr.length);
|
|
1235
|
+
}
|
|
1227
1236
|
function hashObject(obj, seen) {
|
|
1237
|
+
return hashObjectKeys(obj, Object.keys(obj), seen);
|
|
1238
|
+
}
|
|
1239
|
+
function hashObjectKeys(obj, keys, seen) {
|
|
1240
|
+
const keyMultiplier = 2654435769;
|
|
1228
1241
|
let sum = OBJECT;
|
|
1229
|
-
const keys = Object.keys(obj);
|
|
1230
1242
|
for (const key of keys) {
|
|
1231
|
-
sum += imul(hashValue(key, seen),
|
|
1243
|
+
sum += imul(hashValue(key, seen), keyMultiplier) ^ hashValue(obj[key], seen);
|
|
1232
1244
|
}
|
|
1233
1245
|
return sum >>> 0;
|
|
1234
1246
|
}
|
|
@@ -1240,9 +1252,10 @@ function hashSet(set, seen) {
|
|
|
1240
1252
|
return sum >>> 0;
|
|
1241
1253
|
}
|
|
1242
1254
|
function hashMap(map, seen) {
|
|
1255
|
+
const keyMultiplier = 2654435769;
|
|
1243
1256
|
let sum = MAP;
|
|
1244
1257
|
for (const [key, value] of map) {
|
|
1245
|
-
sum += imul(hashValue(key, seen),
|
|
1258
|
+
sum += imul(hashValue(key, seen), keyMultiplier) ^ hashValue(value, seen);
|
|
1246
1259
|
}
|
|
1247
1260
|
return sum >>> 0;
|
|
1248
1261
|
}
|
|
@@ -1281,7 +1294,7 @@ const FALSE = hashStr(
|
|
|
1281
1294
|
3
|
|
1282
1295
|
/* HashType.FALSE */
|
|
1283
1296
|
);
|
|
1284
|
-
const
|
|
1297
|
+
const ARRAY_SEED = hashStr(
|
|
1285
1298
|
"array",
|
|
1286
1299
|
7
|
|
1287
1300
|
/* HashType.ARRAY */
|
|
@@ -1393,6 +1406,95 @@ function hashReactiveFn(fn, args) {
|
|
|
1393
1406
|
h = h << 13 | h >>> 19;
|
|
1394
1407
|
return imul(h, 5) + 3864292196 >>> 0;
|
|
1395
1408
|
}
|
|
1409
|
+
let young = /* @__PURE__ */ new Set();
|
|
1410
|
+
let old = /* @__PURE__ */ new Set();
|
|
1411
|
+
let timer;
|
|
1412
|
+
const pinned = /* @__PURE__ */ new Map();
|
|
1413
|
+
const SUSPENDED_LEASE_HOLD_TTLS = 30;
|
|
1414
|
+
function armTimer() {
|
|
1415
|
+
timer = setTimeout(sweepLeases, getRenderLeaseTtl());
|
|
1416
|
+
timer.unref?.();
|
|
1417
|
+
}
|
|
1418
|
+
function sweepLeases() {
|
|
1419
|
+
timer = void 0;
|
|
1420
|
+
const expired = old;
|
|
1421
|
+
for (const signal2 of expired) {
|
|
1422
|
+
signal2._releaseLease();
|
|
1423
|
+
}
|
|
1424
|
+
expired.clear();
|
|
1425
|
+
old = young;
|
|
1426
|
+
young = expired;
|
|
1427
|
+
if (old.size > 0) {
|
|
1428
|
+
armTimer();
|
|
1429
|
+
}
|
|
1430
|
+
}
|
|
1431
|
+
function addLease(signal2) {
|
|
1432
|
+
if (!pinned.delete(signal2)) {
|
|
1433
|
+
old.delete(signal2);
|
|
1434
|
+
}
|
|
1435
|
+
young.add(signal2);
|
|
1436
|
+
if (timer === void 0) {
|
|
1437
|
+
armTimer();
|
|
1438
|
+
}
|
|
1439
|
+
}
|
|
1440
|
+
function removeLease(signal2) {
|
|
1441
|
+
if (!young.delete(signal2) && !old.delete(signal2)) {
|
|
1442
|
+
pinned.delete(signal2);
|
|
1443
|
+
}
|
|
1444
|
+
}
|
|
1445
|
+
function pinLease(signal2) {
|
|
1446
|
+
if (!signal2._isLeased) {
|
|
1447
|
+
return void 0;
|
|
1448
|
+
}
|
|
1449
|
+
young.delete(signal2);
|
|
1450
|
+
old.delete(signal2);
|
|
1451
|
+
const token = {};
|
|
1452
|
+
pinned.set(signal2, token);
|
|
1453
|
+
return token;
|
|
1454
|
+
}
|
|
1455
|
+
function unpinLease(signal2, token) {
|
|
1456
|
+
if (pinned.get(signal2) === token && signal2._isLeased) {
|
|
1457
|
+
addLease(signal2);
|
|
1458
|
+
}
|
|
1459
|
+
}
|
|
1460
|
+
function holdLeaseUntilSettled(signal2, thenable) {
|
|
1461
|
+
const token = pinLease(signal2);
|
|
1462
|
+
if (token === void 0) {
|
|
1463
|
+
return;
|
|
1464
|
+
}
|
|
1465
|
+
const renew = () => unpinLease(signal2, token);
|
|
1466
|
+
thenable.then(renew, renew);
|
|
1467
|
+
}
|
|
1468
|
+
function holdSuspendedLease(signal2) {
|
|
1469
|
+
const token = pinLease(signal2);
|
|
1470
|
+
if (token === void 0) {
|
|
1471
|
+
return;
|
|
1472
|
+
}
|
|
1473
|
+
const hold = setTimeout(() => unpinLease(signal2, token), Math.min(getRenderLeaseTtl() * SUSPENDED_LEASE_HOLD_TTLS, MAX_TIMEOUT));
|
|
1474
|
+
hold.unref?.();
|
|
1475
|
+
}
|
|
1476
|
+
function releaseAbandonedAttempt(signal2) {
|
|
1477
|
+
const token = pinned.get(signal2);
|
|
1478
|
+
if (token !== void 0) {
|
|
1479
|
+
unpinLease(signal2, token);
|
|
1480
|
+
}
|
|
1481
|
+
}
|
|
1482
|
+
function releaseRenderLeases() {
|
|
1483
|
+
if (timer !== void 0) {
|
|
1484
|
+
clearTimeout(timer);
|
|
1485
|
+
timer = void 0;
|
|
1486
|
+
}
|
|
1487
|
+
const leases = [...old, ...young, ...pinned.keys()];
|
|
1488
|
+
old = /* @__PURE__ */ new Set();
|
|
1489
|
+
young = /* @__PURE__ */ new Set();
|
|
1490
|
+
pinned.clear();
|
|
1491
|
+
for (const signal2 of leases) {
|
|
1492
|
+
signal2._releaseLease();
|
|
1493
|
+
}
|
|
1494
|
+
}
|
|
1495
|
+
function getRenderLeaseCount() {
|
|
1496
|
+
return young.size + old.size + pinned.size;
|
|
1497
|
+
}
|
|
1396
1498
|
let ID = 0;
|
|
1397
1499
|
function createReactiveDefinition(id, desc, compute, equals, isRelay2, paramKey, tracer) {
|
|
1398
1500
|
const def = {
|
|
@@ -1452,6 +1554,9 @@ class ReactiveSignal {
|
|
|
1452
1554
|
this.flags &= -33;
|
|
1453
1555
|
}
|
|
1454
1556
|
}
|
|
1557
|
+
get _isLeased() {
|
|
1558
|
+
return (this.flags & 128) !== 0;
|
|
1559
|
+
}
|
|
1455
1560
|
get _isLazy() {
|
|
1456
1561
|
return (this.flags & 64) !== 0;
|
|
1457
1562
|
}
|
|
@@ -1466,6 +1571,7 @@ class ReactiveSignal {
|
|
|
1466
1571
|
return this._listeners ?? (this._listeners = {
|
|
1467
1572
|
updatedAt: 0,
|
|
1468
1573
|
current: /* @__PURE__ */ new Map(),
|
|
1574
|
+
pausedReaders: 0,
|
|
1469
1575
|
cachedBoundAdd: this.addListener.bind(this)
|
|
1470
1576
|
});
|
|
1471
1577
|
}
|
|
@@ -1473,7 +1579,8 @@ class ReactiveSignal {
|
|
|
1473
1579
|
return getSignal(this);
|
|
1474
1580
|
}
|
|
1475
1581
|
addListener(listener, opts) {
|
|
1476
|
-
const
|
|
1582
|
+
const meta = this.listeners;
|
|
1583
|
+
const { current } = meta;
|
|
1477
1584
|
if (!current.has(listener)) {
|
|
1478
1585
|
let effective = listener;
|
|
1479
1586
|
if (opts?.skipInitial) {
|
|
@@ -1486,23 +1593,39 @@ class ReactiveSignal {
|
|
|
1486
1593
|
listener();
|
|
1487
1594
|
};
|
|
1488
1595
|
}
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1596
|
+
const flags = this.flags;
|
|
1597
|
+
current.set(listener, effective);
|
|
1598
|
+
const unpaused = meta.pausedReaders < current.size;
|
|
1599
|
+
if ((flags & 16) === 0) {
|
|
1600
|
+
this.flags = flags | 16;
|
|
1601
|
+
} else if ((flags & 128) !== 0 && (unpaused || (flags & 256) === 0)) {
|
|
1602
|
+
this.flags = flags & -129;
|
|
1603
|
+
removeLease(this);
|
|
1604
|
+
}
|
|
1605
|
+
if (unpaused) {
|
|
1606
|
+
this._takeListenerWatch();
|
|
1607
|
+
} else {
|
|
1608
|
+
this._pauseListenerWatch();
|
|
1492
1609
|
}
|
|
1493
1610
|
if (this.watchCount > 0) {
|
|
1494
1611
|
schedulePull(this);
|
|
1495
1612
|
}
|
|
1496
|
-
current.set(listener, effective);
|
|
1497
1613
|
}
|
|
1498
1614
|
return () => {
|
|
1499
1615
|
if (current.has(listener)) {
|
|
1500
1616
|
current.delete(listener);
|
|
1501
1617
|
if (current.size === 0) {
|
|
1618
|
+
const flags = this.flags;
|
|
1619
|
+
if ((flags & 128) !== 0)
|
|
1620
|
+
return;
|
|
1502
1621
|
cancelPull(this);
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1622
|
+
this.flags = flags & -273;
|
|
1623
|
+
if ((flags & 256) !== 0) {
|
|
1624
|
+
unwatchSignal(this);
|
|
1625
|
+
}
|
|
1626
|
+
meta.updatedAt = 0;
|
|
1627
|
+
} else if (meta.pausedReaders >= current.size) {
|
|
1628
|
+
this._pauseListenerWatch();
|
|
1506
1629
|
}
|
|
1507
1630
|
}
|
|
1508
1631
|
};
|
|
@@ -1510,15 +1633,99 @@ class ReactiveSignal {
|
|
|
1510
1633
|
// This method is used in React hooks specifically. It returns a bound add method
|
|
1511
1634
|
// that is cached to avoid creating a new one on each call, and it eagerly sets
|
|
1512
1635
|
// the listener as watched so that relays that are accessed will be activated.
|
|
1636
|
+
//
|
|
1637
|
+
// The eager watch is a lease (see `lease.ts`): the commit's subscription claims it, and a
|
|
1638
|
+
// discarded render's lease expires. Each render of a still-leased signal extends it.
|
|
1513
1639
|
addListenerLazy(watch = true) {
|
|
1514
|
-
|
|
1640
|
+
const flags = this.flags;
|
|
1641
|
+
if ((flags & 16) === 0) {
|
|
1515
1642
|
if (watch) {
|
|
1516
1643
|
watchSignal(this);
|
|
1644
|
+
this.flags |= 16 | 128 | 256;
|
|
1645
|
+
} else {
|
|
1646
|
+
this.flags |= 16 | 128;
|
|
1517
1647
|
}
|
|
1518
|
-
this
|
|
1648
|
+
addLease(this);
|
|
1649
|
+
} else if ((flags & 128) !== 0 || watch && (flags & 256) === 0) {
|
|
1650
|
+
if (watch && (flags & 256) === 0) {
|
|
1651
|
+
watchSignal(this);
|
|
1652
|
+
this.flags |= 256;
|
|
1653
|
+
}
|
|
1654
|
+
this.flags |= 128;
|
|
1655
|
+
addLease(this);
|
|
1519
1656
|
}
|
|
1520
1657
|
return this.listeners.cachedBoundAdd;
|
|
1521
1658
|
}
|
|
1659
|
+
/** Drops the listener watch; listeners stay subscribed. */
|
|
1660
|
+
_pauseWatch() {
|
|
1661
|
+
const flags = this.flags;
|
|
1662
|
+
if ((flags & 256) !== 0) {
|
|
1663
|
+
this.flags = flags & -257;
|
|
1664
|
+
unwatchSignal(this, { isPausing: true });
|
|
1665
|
+
}
|
|
1666
|
+
}
|
|
1667
|
+
/** Retakes the listener watch, pulling changes missed while unwatched. */
|
|
1668
|
+
_resumeWatch() {
|
|
1669
|
+
if ((this.flags & 16) !== 0 && this._takeListenerWatch()) {
|
|
1670
|
+
schedulePull(this);
|
|
1671
|
+
}
|
|
1672
|
+
}
|
|
1673
|
+
_takeListenerWatch() {
|
|
1674
|
+
if ((this.flags & 256) !== 0) {
|
|
1675
|
+
return false;
|
|
1676
|
+
}
|
|
1677
|
+
watchSignal(this);
|
|
1678
|
+
this.flags |= 256;
|
|
1679
|
+
return true;
|
|
1680
|
+
}
|
|
1681
|
+
/** `deferred` reconciles in a microtask, for a reader that unregisters before it unsubscribes. */
|
|
1682
|
+
_addPausedReaders(delta, deferred = false) {
|
|
1683
|
+
this.listeners.pausedReaders += delta;
|
|
1684
|
+
if (deferred) {
|
|
1685
|
+
queueMicrotask(() => this._reconcilePausedReaders());
|
|
1686
|
+
} else {
|
|
1687
|
+
this._reconcilePausedReaders();
|
|
1688
|
+
}
|
|
1689
|
+
}
|
|
1690
|
+
_reconcilePausedReaders() {
|
|
1691
|
+
const { current, pausedReaders } = this.listeners;
|
|
1692
|
+
if (current.size === 0)
|
|
1693
|
+
return;
|
|
1694
|
+
if (pausedReaders < current.size) {
|
|
1695
|
+
this._resumeWatch();
|
|
1696
|
+
} else {
|
|
1697
|
+
this._pauseListenerWatch();
|
|
1698
|
+
}
|
|
1699
|
+
}
|
|
1700
|
+
/** Pauses for the listeners' sake; an unclaimed render lease's watch belongs to its render. */
|
|
1701
|
+
_pauseListenerWatch() {
|
|
1702
|
+
if ((this.flags & 128) === 0) {
|
|
1703
|
+
this._pauseWatch();
|
|
1704
|
+
}
|
|
1705
|
+
}
|
|
1706
|
+
/** Releases an unclaimed render lease; a no-op once claimed. */
|
|
1707
|
+
_releaseLease() {
|
|
1708
|
+
const flags = this.flags;
|
|
1709
|
+
if ((flags & 128) === 0) {
|
|
1710
|
+
return;
|
|
1711
|
+
}
|
|
1712
|
+
const meta = this._listeners;
|
|
1713
|
+
if (meta !== null && meta.current.size > 0) {
|
|
1714
|
+
this.flags = flags & -129;
|
|
1715
|
+
if (meta.pausedReaders >= meta.current.size) {
|
|
1716
|
+
this._pauseWatch();
|
|
1717
|
+
}
|
|
1718
|
+
return;
|
|
1719
|
+
}
|
|
1720
|
+
this.flags = flags & -401;
|
|
1721
|
+
if (meta !== null) {
|
|
1722
|
+
meta.updatedAt = 0;
|
|
1723
|
+
}
|
|
1724
|
+
cancelPull(this);
|
|
1725
|
+
if ((flags & 256) !== 0) {
|
|
1726
|
+
unwatchSignal(this);
|
|
1727
|
+
}
|
|
1728
|
+
}
|
|
1522
1729
|
}
|
|
1523
1730
|
const runListeners = (signal2) => {
|
|
1524
1731
|
const { listeners } = signal2;
|
|
@@ -1659,41 +1866,51 @@ const getScopeOwner = (obj) => {
|
|
|
1659
1866
|
return scope;
|
|
1660
1867
|
};
|
|
1661
1868
|
export {
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1869
|
+
ARRAY_SEED as A,
|
|
1870
|
+
releaseAbandonedAttempt as B,
|
|
1871
|
+
signal as C,
|
|
1872
|
+
watchSignal as D,
|
|
1873
|
+
getSignal as E,
|
|
1874
|
+
unwatchSignal as F,
|
|
1875
|
+
registerCustomHash as G,
|
|
1876
|
+
setReactivePromise as H,
|
|
1877
|
+
notifier as I,
|
|
1878
|
+
isSignal as J,
|
|
1879
|
+
callback as K,
|
|
1880
|
+
settled as L,
|
|
1881
|
+
context as M,
|
|
1882
|
+
getContext as N,
|
|
1883
|
+
withContexts as O,
|
|
1884
|
+
setGlobalContexts as P,
|
|
1885
|
+
clearGlobalContexts as Q,
|
|
1670
1886
|
ReactivePromise as R,
|
|
1671
1887
|
SignalScope as S,
|
|
1672
|
-
|
|
1673
|
-
|
|
1888
|
+
setScopeOwner as T,
|
|
1889
|
+
getCurrentScope as a,
|
|
1890
|
+
generatorResultToPromiseWithConsumer as b,
|
|
1674
1891
|
createReactiveSignal as c,
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1892
|
+
setCurrentConsumer as d,
|
|
1893
|
+
getCurrentConsumer as e,
|
|
1894
|
+
setRequestScopeGetter as f,
|
|
1895
|
+
getRenderLeaseCount as g,
|
|
1896
|
+
createReactiveDefinition as h,
|
|
1897
|
+
createTask as i,
|
|
1898
|
+
createRelay as j,
|
|
1899
|
+
getScopeOwner as k,
|
|
1900
|
+
isReactivePromise as l,
|
|
1901
|
+
getGlobalScope as m,
|
|
1902
|
+
hashValue as n,
|
|
1903
|
+
getObjectHash as o,
|
|
1904
|
+
hashObjectKeys as p,
|
|
1905
|
+
mixHash as q,
|
|
1906
|
+
releaseRenderLeases as r,
|
|
1690
1907
|
scheduleTracer as s,
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1908
|
+
finalizeHash as t,
|
|
1909
|
+
checkSignal as u,
|
|
1910
|
+
isPromise as v,
|
|
1911
|
+
isThennable as w,
|
|
1912
|
+
runSignal as x,
|
|
1913
|
+
holdLeaseUntilSettled as y,
|
|
1914
|
+
holdSuspendedLease as z
|
|
1698
1915
|
};
|
|
1699
|
-
//# sourceMappingURL=contexts-
|
|
1916
|
+
//# sourceMappingURL=contexts-ry5lvNSx.js.map
|