signalium 2.2.1 → 2.2.3
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 +15 -0
- package/dist/cjs/development/{core-api-BLfPllpC.js → core-api-C6HCIyL3.js} +2 -2
- package/dist/cjs/development/{core-api-BLfPllpC.js.map → core-api-C6HCIyL3.js.map} +1 -1
- package/dist/cjs/development/{debug-C4VkJKKv.js → debug-3nd-6Gnf.js} +82 -51
- package/dist/cjs/development/debug-3nd-6Gnf.js.map +1 -0
- package/dist/cjs/development/debug.js +1 -1
- package/dist/cjs/development/index.js +2 -2
- package/dist/cjs/development/react/index.js +2 -2
- package/dist/cjs/development/utils.js +2 -2
- package/dist/cjs/production/{contexts-D9PmMMc5.js → contexts-DoZWv_3I.js} +82 -51
- package/dist/cjs/production/contexts-DoZWv_3I.js.map +1 -0
- package/dist/cjs/production/{core-api-nNbd4L7C.js → core-api-CUviCxtM.js} +2 -2
- package/dist/cjs/production/{core-api-nNbd4L7C.js.map → core-api-CUviCxtM.js.map} +1 -1
- package/dist/cjs/production/debug.js +1 -1
- package/dist/cjs/production/index.js +2 -2
- package/dist/cjs/production/react/index.js +2 -2
- package/dist/cjs/production/utils.js +2 -2
- package/dist/esm/development/{core-api-BKTJuFkJ.js → core-api-CjsScNn1.js} +2 -2
- package/dist/esm/development/{core-api-BKTJuFkJ.js.map → core-api-CjsScNn1.js.map} +1 -1
- package/dist/esm/development/{debug-qm_Izoi_.js → debug-BfudYKc4.js} +82 -51
- package/dist/esm/development/debug-BfudYKc4.js.map +1 -0
- package/dist/esm/development/debug.js +1 -1
- package/dist/esm/development/index.js +2 -2
- package/dist/esm/development/react/index.js +2 -2
- package/dist/esm/development/utils.js +3 -3
- package/dist/esm/internals/async.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/utils/hash.d.ts +1 -3
- package/dist/esm/internals/utils/hash.d.ts.map +1 -1
- package/dist/esm/internals/watch.d.ts.map +1 -1
- package/dist/esm/production/{contexts-BLI-Vgt4.js → contexts-CilfS6eG.js} +82 -51
- package/dist/esm/production/contexts-CilfS6eG.js.map +1 -0
- package/dist/esm/production/{core-api-Ckj2uqeX.js → core-api-tTQttL8R.js} +2 -2
- package/dist/esm/production/{core-api-Ckj2uqeX.js.map → core-api-tTQttL8R.js.map} +1 -1
- package/dist/esm/production/debug.js +1 -1
- package/dist/esm/production/index.js +2 -2
- package/dist/esm/production/react/index.js +2 -2
- package/dist/esm/production/utils.js +3 -3
- package/dist/esm/types.d.ts +5 -1
- package/dist/esm/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/development/debug-C4VkJKKv.js.map +0 -1
- package/dist/cjs/production/contexts-D9PmMMc5.js.map +0 -1
- package/dist/esm/development/debug-qm_Izoi_.js.map +0 -1
- package/dist/esm/production/contexts-BLI-Vgt4.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const coreApi = require("./core-api-
|
|
4
|
-
const contexts = require("./contexts-
|
|
3
|
+
const coreApi = require("./core-api-CUviCxtM.js");
|
|
4
|
+
const contexts = require("./contexts-DoZWv_3I.js");
|
|
5
5
|
const utils = require("./utils.js");
|
|
6
6
|
exports.reactive = coreApi.reactive;
|
|
7
7
|
exports.reactiveMethod = coreApi.reactiveMethod;
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const react = require("react");
|
|
5
|
-
const contexts = require("../contexts-
|
|
6
|
-
const coreApi = require("../core-api-
|
|
5
|
+
const contexts = require("../contexts-DoZWv_3I.js");
|
|
6
|
+
const coreApi = require("../core-api-CUviCxtM.js");
|
|
7
7
|
const ScopeContext = react.createContext(void 0);
|
|
8
8
|
function useScope() {
|
|
9
9
|
return react.useContext(ScopeContext);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const coreApi = require("./core-api-
|
|
4
|
-
const contexts = require("./contexts-
|
|
3
|
+
const coreApi = require("./core-api-CUviCxtM.js");
|
|
4
|
+
const contexts = require("./contexts-DoZWv_3I.js");
|
|
5
5
|
function watchOnce(fn) {
|
|
6
6
|
const signal = coreApi.watcher(fn);
|
|
7
7
|
try {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as createReactiveDefinition, S as SignalScope, g as getCurrentScope, a as createReactiveSignal, b as createTask, d as createRelay, e as getScopeOwner } from "./debug-
|
|
1
|
+
import { c as createReactiveDefinition, S as SignalScope, g as getCurrentScope, a as createReactiveSignal, b as createTask, d as createRelay, e as getScopeOwner } from "./debug-BfudYKc4.js";
|
|
2
2
|
const DERIVED_DEFINITION_MAP = /* @__PURE__ */ new Map();
|
|
3
3
|
function getReactiveFnAndDefinition(fn, opts) {
|
|
4
4
|
let fnAndDef = DERIVED_DEFINITION_MAP.get(fn);
|
|
@@ -53,4 +53,4 @@ export {
|
|
|
53
53
|
task as t,
|
|
54
54
|
watcher as w
|
|
55
55
|
};
|
|
56
|
-
//# sourceMappingURL=core-api-
|
|
56
|
+
//# sourceMappingURL=core-api-CjsScNn1.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-api-
|
|
1
|
+
{"version":3,"file":"core-api-CjsScNn1.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":[],"mappings":";AAqBO,MAAM,6CAA6B,IAAA;AAEnC,SAAS,2BACd,IACA,MACoE;AACpE,MAAI,WAAW,uBAAuB,IAAI,EAAE;AAE5C,MAAI,CAAC,UAAU;AACb,UAAM,MAAM,yBAAyB,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,OAAO,MAAM,UAAU,MAAS;AAE7G,UAAM,WAAW,gBAAA;AAEjB,UAAM,aAAkC,IAAI,SAAS;AACnD,YAAM,QAAQ,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,MAAM,yBAAyB,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,OAAO,MAAM,UAAU,MAAS;AAE7G,QAAM,aAAkC,IAAI,SAAS;AACnD,WAAO,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,QAAQ,gBAAA;AAEd,SAAO,YAAY,UAAU,OAAO,IAAI;AAC1C;AAEO,MAAM,OAAO,CAClB,IACA,SAC0B;AAC1B,QAAM,QAAQ,gBAAA;AAEd,SAAO,WAAW,IAAI,OAAO,IAAI;AACnC;AAEO,SAAS,QAAW,IAAa,MAA8E;AACpH,QAAM,MAAM,yBAAyB,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,OAAO,QAAW,MAAM,MAAM;AAE3G,QAAM,QAAQ,MAAM,UAAU,IAAI,YAAY,CAAA,CAAE,IAAI,gBAAA;AAEpD,SAAO,qBAAqB,KAAK,QAAW,QAAW,KAAK;AAC9D;AAUO,MAAM,iBAAiB,CAC5B,SACA,SACsB;AACtB,QAAM,MAAM,yBAAyB,MAAM,IAAI,MAAM,MAAM,SAAS,MAAM,QAAQ,OAAO,QAAW,MAAS;AAE7G,QAAM,QAAQ,MAAM,UAAU,IAAI,YAAY,CAAA,CAAE,IAAI,gBAAA;AAEpD,SAAO,qBAAqB,KAAK,QAAW,QAAW,KAAK;AAC9D;"}
|
|
@@ -431,6 +431,7 @@ function watchActiveSignal(signal2) {
|
|
|
431
431
|
const { watchCount } = signal2;
|
|
432
432
|
const newWatchCount = watchCount + 1;
|
|
433
433
|
signal2.watchCount = newWatchCount;
|
|
434
|
+
cancelDeactivate(signal2);
|
|
434
435
|
if (signal2._isActive) {
|
|
435
436
|
return;
|
|
436
437
|
}
|
|
@@ -453,7 +454,6 @@ function watchSuspendedSignal(signal2) {
|
|
|
453
454
|
const newSuspendCount = suspendCount + 1;
|
|
454
455
|
signal2.watchCount = newWatchCount;
|
|
455
456
|
signal2.suspendCount = newSuspendCount;
|
|
456
|
-
signal2.scope?.removeFromGc(signal2);
|
|
457
457
|
cancelDeactivate(signal2);
|
|
458
458
|
if (watchCount === 0) {
|
|
459
459
|
for (const dep of signal2.deps.keys()) {
|
|
@@ -475,6 +475,7 @@ function resumeSignal(signal2) {
|
|
|
475
475
|
const { watchCount, suspendCount } = signal2;
|
|
476
476
|
const newSuspendCount = Math.max(suspendCount - 1, 0);
|
|
477
477
|
signal2.suspendCount = newSuspendCount;
|
|
478
|
+
cancelDeactivate(signal2);
|
|
478
479
|
if (watchCount > 0 && !signal2._isActive) {
|
|
479
480
|
for (const dep of signal2.deps.keys()) {
|
|
480
481
|
resumeSignal(dep);
|
|
@@ -556,6 +557,7 @@ const scheduleDeactivate = (signal2) => {
|
|
|
556
557
|
scheduleFlush();
|
|
557
558
|
};
|
|
558
559
|
const cancelDeactivate = (signal2) => {
|
|
560
|
+
signal2.scope?.removeFromGc(signal2);
|
|
559
561
|
PENDING_DEACTIVE.delete(signal2);
|
|
560
562
|
};
|
|
561
563
|
const scheduleListeners = (signal2) => {
|
|
@@ -1140,10 +1142,10 @@ class ReactivePromiseImpl {
|
|
|
1140
1142
|
this._promise = promise;
|
|
1141
1143
|
const flags = this._flags;
|
|
1142
1144
|
let awaitSubs = this._awaitSubs;
|
|
1143
|
-
if ((flags & 1) === 0) {
|
|
1144
|
-
awaitSubs = this._setPending();
|
|
1145
|
-
}
|
|
1146
1145
|
try {
|
|
1146
|
+
if ((flags & 1) === 0) {
|
|
1147
|
+
awaitSubs = this._setPending();
|
|
1148
|
+
}
|
|
1147
1149
|
const nextValue = await promise;
|
|
1148
1150
|
if (promise !== this._promise) {
|
|
1149
1151
|
return;
|
|
@@ -1386,6 +1388,9 @@ function createRelay(activate, scope, opts) {
|
|
|
1386
1388
|
currentSub = void 0;
|
|
1387
1389
|
};
|
|
1388
1390
|
const state = {
|
|
1391
|
+
get isPending() {
|
|
1392
|
+
return (p["_flags"] & 1) !== 0;
|
|
1393
|
+
},
|
|
1389
1394
|
get value() {
|
|
1390
1395
|
return p["_value"];
|
|
1391
1396
|
},
|
|
@@ -1435,7 +1440,11 @@ function createTask(task, scope, opts) {
|
|
|
1435
1440
|
64
|
|
1436
1441
|
/* isRunnable */
|
|
1437
1442
|
);
|
|
1443
|
+
const throwIfRunning = opts?.throwIfRunning === true;
|
|
1438
1444
|
p["run"] = ((...args) => {
|
|
1445
|
+
if (throwIfRunning && (p["_flags"] & 1) !== 0) {
|
|
1446
|
+
throw new Error("Task is already running");
|
|
1447
|
+
}
|
|
1439
1448
|
p._setPromise(fn(...args));
|
|
1440
1449
|
return p;
|
|
1441
1450
|
});
|
|
@@ -1610,30 +1619,22 @@ function hashStr(key, seed = 0) {
|
|
|
1610
1619
|
const c1 = 3432918353;
|
|
1611
1620
|
const c2 = 461845907;
|
|
1612
1621
|
let i = 0;
|
|
1613
|
-
while (i +
|
|
1614
|
-
let
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
h ^=
|
|
1622
|
+
while (i + 2 <= key.length) {
|
|
1623
|
+
let k = key.charCodeAt(i) & 65535 | (key.charCodeAt(i + 1) & 65535) << 16;
|
|
1624
|
+
k = imul(k, c1);
|
|
1625
|
+
k = k << 15 | k >>> 17;
|
|
1626
|
+
k = imul(k, c2);
|
|
1627
|
+
h ^= k;
|
|
1619
1628
|
h = h << 13 | h >>> 19;
|
|
1620
1629
|
h = imul(h, 5) + 3864292196;
|
|
1621
|
-
i +=
|
|
1622
|
-
}
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
k ^= (key.charCodeAt(i + 1) & 255) << 8;
|
|
1630
|
-
// eslint-disable-next-line no-fallthrough
|
|
1631
|
-
case 1:
|
|
1632
|
-
k ^= key.charCodeAt(i) & 255;
|
|
1633
|
-
k = imul(k, c1);
|
|
1634
|
-
k = k << 15 | k >>> 17;
|
|
1635
|
-
k = imul(k, c2);
|
|
1636
|
-
h ^= k;
|
|
1630
|
+
i += 2;
|
|
1631
|
+
}
|
|
1632
|
+
if (key.length & 1) {
|
|
1633
|
+
let k = key.charCodeAt(i) & 65535;
|
|
1634
|
+
k = imul(k, c1);
|
|
1635
|
+
k = k << 15 | k >>> 17;
|
|
1636
|
+
k = imul(k, c2);
|
|
1637
|
+
h ^= k;
|
|
1637
1638
|
}
|
|
1638
1639
|
h ^= key.length;
|
|
1639
1640
|
h ^= h >>> 16;
|
|
@@ -1644,8 +1645,9 @@ function hashStr(key, seed = 0) {
|
|
|
1644
1645
|
return h >>> 0;
|
|
1645
1646
|
}
|
|
1646
1647
|
function hashNumber(num, seed = 0) {
|
|
1648
|
+
let h = num < 0 ? seed ^ 2147483648 : seed;
|
|
1647
1649
|
num = abs(num);
|
|
1648
|
-
|
|
1650
|
+
const origNum = num;
|
|
1649
1651
|
const c1 = 3432918353;
|
|
1650
1652
|
const c2 = 461845907;
|
|
1651
1653
|
while (num >= 4294967295) {
|
|
@@ -1665,7 +1667,7 @@ function hashNumber(num, seed = 0) {
|
|
|
1665
1667
|
k = imul(k, c2);
|
|
1666
1668
|
h ^= k;
|
|
1667
1669
|
}
|
|
1668
|
-
const numBytes =
|
|
1670
|
+
const numBytes = origNum === 0 ? 1 : floor(log(origNum) / log(256)) + 1;
|
|
1669
1671
|
h ^= numBytes;
|
|
1670
1672
|
h ^= h >>> 16;
|
|
1671
1673
|
h = imul(h, 2246822507);
|
|
@@ -1674,12 +1676,12 @@ function hashNumber(num, seed = 0) {
|
|
|
1674
1676
|
h ^= h >>> 16;
|
|
1675
1677
|
return h >>> 0;
|
|
1676
1678
|
}
|
|
1677
|
-
function hashArray(arr) {
|
|
1678
|
-
let h =
|
|
1679
|
+
function hashArray(arr, seen) {
|
|
1680
|
+
let h = ARRAY;
|
|
1679
1681
|
const c1 = 3432918353;
|
|
1680
1682
|
const c2 = 461845907;
|
|
1681
1683
|
for (const item of arr) {
|
|
1682
|
-
let k = hashValue(item);
|
|
1684
|
+
let k = hashValue(item, seen);
|
|
1683
1685
|
k = imul(k, c1);
|
|
1684
1686
|
k = k << 15 | k >>> 17;
|
|
1685
1687
|
k = imul(k, c2);
|
|
@@ -1695,36 +1697,36 @@ function hashArray(arr) {
|
|
|
1695
1697
|
h ^= h >>> 16;
|
|
1696
1698
|
return h >>> 0;
|
|
1697
1699
|
}
|
|
1698
|
-
function hashObject(obj) {
|
|
1700
|
+
function hashObject(obj, seen) {
|
|
1699
1701
|
let sum = OBJECT;
|
|
1700
1702
|
const keys = Object.keys(obj);
|
|
1701
1703
|
for (const key of keys) {
|
|
1702
|
-
sum += hashValue(key) ^ hashValue(obj[key]);
|
|
1704
|
+
sum += imul(hashValue(key, seen), 2654435769) ^ hashValue(obj[key], seen);
|
|
1703
1705
|
}
|
|
1704
1706
|
return sum >>> 0;
|
|
1705
1707
|
}
|
|
1706
|
-
function hashSet(set) {
|
|
1707
|
-
let sum =
|
|
1708
|
+
function hashSet(set, seen) {
|
|
1709
|
+
let sum = SET;
|
|
1708
1710
|
for (const value of set) {
|
|
1709
|
-
sum += hashValue(value);
|
|
1711
|
+
sum += hashValue(value, seen);
|
|
1710
1712
|
}
|
|
1711
1713
|
return sum >>> 0;
|
|
1712
1714
|
}
|
|
1713
|
-
function hashMap(map) {
|
|
1714
|
-
let sum =
|
|
1715
|
+
function hashMap(map, seen) {
|
|
1716
|
+
let sum = MAP;
|
|
1715
1717
|
for (const [key, value] of map) {
|
|
1716
|
-
sum += hashValue(key) ^ hashValue(value);
|
|
1718
|
+
sum += imul(hashValue(key, seen), 2654435769) ^ hashValue(value, seen);
|
|
1717
1719
|
}
|
|
1718
1720
|
return sum >>> 0;
|
|
1719
1721
|
}
|
|
1720
|
-
function hashDate(date) {
|
|
1722
|
+
function hashDate(date, _seen) {
|
|
1721
1723
|
return hashNumber(
|
|
1722
1724
|
date.getTime(),
|
|
1723
1725
|
14
|
|
1724
1726
|
/* DATE */
|
|
1725
1727
|
);
|
|
1726
1728
|
}
|
|
1727
|
-
function hashRegExp(regexp) {
|
|
1729
|
+
function hashRegExp(regexp, _seen) {
|
|
1728
1730
|
const h = hashStr(
|
|
1729
1731
|
regexp.source + regexp.flags,
|
|
1730
1732
|
15
|
|
@@ -1752,7 +1754,7 @@ const FALSE = hashStr(
|
|
|
1752
1754
|
3
|
|
1753
1755
|
/* FALSE */
|
|
1754
1756
|
);
|
|
1755
|
-
hashStr(
|
|
1757
|
+
const ARRAY = hashStr(
|
|
1756
1758
|
"array",
|
|
1757
1759
|
7
|
|
1758
1760
|
/* ARRAY */
|
|
@@ -1762,6 +1764,16 @@ const OBJECT = hashStr(
|
|
|
1762
1764
|
8
|
|
1763
1765
|
/* OBJECT */
|
|
1764
1766
|
);
|
|
1767
|
+
const SET = hashStr(
|
|
1768
|
+
"set",
|
|
1769
|
+
13
|
|
1770
|
+
/* SET */
|
|
1771
|
+
);
|
|
1772
|
+
const MAP = hashStr(
|
|
1773
|
+
"map",
|
|
1774
|
+
12
|
|
1775
|
+
/* MAP */
|
|
1776
|
+
);
|
|
1765
1777
|
const getObjectProto = Object.getPrototypeOf;
|
|
1766
1778
|
const PROTO_TO_HASH = /* @__PURE__ */ new Map([
|
|
1767
1779
|
[Object.prototype, hashObject],
|
|
@@ -1772,7 +1784,7 @@ const PROTO_TO_HASH = /* @__PURE__ */ new Map([
|
|
|
1772
1784
|
[RegExp.prototype, hashRegExp]
|
|
1773
1785
|
]);
|
|
1774
1786
|
const registerCustomHash = (ctor, hashFn) => {
|
|
1775
|
-
PROTO_TO_HASH.set(ctor.prototype, hashFn);
|
|
1787
|
+
PROTO_TO_HASH.set(ctor.prototype, (obj, _seen) => hashFn(obj));
|
|
1776
1788
|
};
|
|
1777
1789
|
function hashValue(node, seen = []) {
|
|
1778
1790
|
switch (typeof node) {
|
|
@@ -1813,7 +1825,7 @@ function hashValue(node, seen = []) {
|
|
|
1813
1825
|
const hashFn = PROTO_TO_HASH.get(getObjectProto(node));
|
|
1814
1826
|
if (hashFn) {
|
|
1815
1827
|
seen.push(node);
|
|
1816
|
-
const hash = hashFn(node);
|
|
1828
|
+
const hash = hashFn(node, seen);
|
|
1817
1829
|
seen.pop();
|
|
1818
1830
|
return hash;
|
|
1819
1831
|
}
|
|
@@ -1843,9 +1855,16 @@ function getObjectHash(obj) {
|
|
|
1843
1855
|
}
|
|
1844
1856
|
return id;
|
|
1845
1857
|
}
|
|
1846
|
-
const EMPTY_ARRAY_HASH = hashArray([]);
|
|
1858
|
+
const EMPTY_ARRAY_HASH = hashArray([], []);
|
|
1847
1859
|
function hashReactiveFn(fn, args) {
|
|
1848
|
-
|
|
1860
|
+
const argsHash = args.length > 0 ? hashArray(args, []) : EMPTY_ARRAY_HASH;
|
|
1861
|
+
let k = imul(argsHash, 3432918353);
|
|
1862
|
+
k = k << 15 | k >>> 17;
|
|
1863
|
+
k = imul(k, 461845907);
|
|
1864
|
+
let h = getObjectHash(fn);
|
|
1865
|
+
h ^= k;
|
|
1866
|
+
h = h << 13 | h >>> 19;
|
|
1867
|
+
return imul(h, 5) + 3864292196 >>> 0;
|
|
1849
1868
|
}
|
|
1850
1869
|
const objectToIdMap = /* @__PURE__ */ new WeakMap();
|
|
1851
1870
|
let nextId = 1;
|
|
@@ -1992,22 +2011,33 @@ class ReactiveSignal {
|
|
|
1992
2011
|
get listeners() {
|
|
1993
2012
|
return this._listeners ?? (this._listeners = {
|
|
1994
2013
|
updatedAt: 0,
|
|
1995
|
-
current: /* @__PURE__ */ new
|
|
2014
|
+
current: /* @__PURE__ */ new Map(),
|
|
1996
2015
|
cachedBoundAdd: this.addListener.bind(this)
|
|
1997
2016
|
});
|
|
1998
2017
|
}
|
|
1999
2018
|
get value() {
|
|
2000
2019
|
return getSignal(this);
|
|
2001
2020
|
}
|
|
2002
|
-
addListener(listener) {
|
|
2021
|
+
addListener(listener, opts) {
|
|
2003
2022
|
const { current } = this.listeners;
|
|
2004
2023
|
if (!current.has(listener)) {
|
|
2024
|
+
let effective = listener;
|
|
2025
|
+
if (opts?.skipInitial) {
|
|
2026
|
+
let initial = true;
|
|
2027
|
+
effective = () => {
|
|
2028
|
+
if (initial) {
|
|
2029
|
+
initial = false;
|
|
2030
|
+
return;
|
|
2031
|
+
}
|
|
2032
|
+
listener();
|
|
2033
|
+
};
|
|
2034
|
+
}
|
|
2005
2035
|
if (!this._isListener) {
|
|
2006
2036
|
watchSignal(this, this._isSuspended);
|
|
2007
2037
|
this.flags |= 16;
|
|
2008
2038
|
}
|
|
2009
2039
|
schedulePull(this);
|
|
2010
|
-
current.
|
|
2040
|
+
current.set(listener, effective);
|
|
2011
2041
|
}
|
|
2012
2042
|
return () => {
|
|
2013
2043
|
if (current.has(listener)) {
|
|
@@ -2016,6 +2046,7 @@ class ReactiveSignal {
|
|
|
2016
2046
|
cancelPull(this);
|
|
2017
2047
|
unwatchSignal(this, this._isSuspended);
|
|
2018
2048
|
this.flags &= -17;
|
|
2049
|
+
this.listeners.updatedAt = 0;
|
|
2019
2050
|
}
|
|
2020
2051
|
}
|
|
2021
2052
|
};
|
|
@@ -2063,7 +2094,7 @@ const runListeners = (signal2) => {
|
|
|
2063
2094
|
return;
|
|
2064
2095
|
}
|
|
2065
2096
|
const { current } = listeners;
|
|
2066
|
-
for (const listener of current) {
|
|
2097
|
+
for (const listener of current.values()) {
|
|
2067
2098
|
listener();
|
|
2068
2099
|
}
|
|
2069
2100
|
};
|
|
@@ -2260,4 +2291,4 @@ export {
|
|
|
2260
2291
|
withContexts as y,
|
|
2261
2292
|
setGlobalContexts as z
|
|
2262
2293
|
};
|
|
2263
|
-
//# sourceMappingURL=debug-
|
|
2294
|
+
//# sourceMappingURL=debug-BfudYKc4.js.map
|