signalium 2.2.0 → 2.2.2
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 +13 -0
- package/dist/cjs/development/{core-api-BO_W1aEw.js → core-api-C8J7lYBC.js} +2 -2
- package/dist/cjs/development/{core-api-BO_W1aEw.js.map → core-api-C8J7lYBC.js.map} +1 -1
- package/dist/cjs/development/{debug-DW86yXJK.js → debug-DuXQhd5q.js} +62 -51
- package/dist/cjs/development/debug-DuXQhd5q.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-BAkp5KrR.js → contexts-DOH1tHd8.js} +62 -51
- package/dist/cjs/production/contexts-DOH1tHd8.js.map +1 -0
- package/dist/cjs/production/{core-api-B2d0JjB_.js → core-api-Cx2_AumW.js} +2 -2
- package/dist/cjs/production/{core-api-B2d0JjB_.js.map → core-api-Cx2_AumW.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-CotzAQ5V.js → core-api-CF5aK2Lx.js} +2 -2
- package/dist/esm/development/{core-api-CotzAQ5V.js.map → core-api-CF5aK2Lx.js.map} +1 -1
- package/dist/esm/development/{debug-DoBIh4Lm.js → debug-E2E1pZe5.js} +62 -51
- package/dist/esm/development/debug-E2E1pZe5.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 +1 -0
- package/dist/esm/internals/async.d.ts.map +1 -1
- package/dist/esm/internals/scheduling.d.ts +3 -0
- 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-CYAwBumI.js → contexts-Dj9Y86xW.js} +62 -51
- package/dist/esm/production/contexts-Dj9Y86xW.js.map +1 -0
- package/dist/esm/production/{core-api-BY3r_t3J.js → core-api-D_uw3umM.js} +2 -2
- package/dist/esm/production/{core-api-BY3r_t3J.js.map → core-api-D_uw3umM.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/package.json +1 -1
- package/dist/cjs/development/debug-DW86yXJK.js.map +0 -1
- package/dist/cjs/production/contexts-BAkp5KrR.js.map +0 -1
- package/dist/esm/development/debug-DoBIh4Lm.js.map +0 -1
- package/dist/esm/production/contexts-CYAwBumI.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# signalium
|
|
2
2
|
|
|
3
|
+
## 2.2.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 0aedc29: Fix bugs with async reactive functions never resolving
|
|
8
|
+
- 5f0aafc: Add better tests for the hash function, fix some minor edge cases
|
|
9
|
+
|
|
10
|
+
## 2.2.1
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- 5378406: Fix async and add chaos tests
|
|
15
|
+
|
|
3
16
|
## 2.2.0
|
|
4
17
|
|
|
5
18
|
### Minor Changes
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
const debug = require("./debug-
|
|
2
|
+
const debug = require("./debug-DuXQhd5q.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-C8J7lYBC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-api-
|
|
1
|
+
{"version":3,"file":"core-api-C8J7lYBC.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;;;;;;;;"}
|
|
@@ -432,6 +432,7 @@ function watchActiveSignal(signal2) {
|
|
|
432
432
|
const { watchCount } = signal2;
|
|
433
433
|
const newWatchCount = watchCount + 1;
|
|
434
434
|
signal2.watchCount = newWatchCount;
|
|
435
|
+
cancelDeactivate(signal2);
|
|
435
436
|
if (signal2._isActive) {
|
|
436
437
|
return;
|
|
437
438
|
}
|
|
@@ -454,7 +455,6 @@ function watchSuspendedSignal(signal2) {
|
|
|
454
455
|
const newSuspendCount = suspendCount + 1;
|
|
455
456
|
signal2.watchCount = newWatchCount;
|
|
456
457
|
signal2.suspendCount = newSuspendCount;
|
|
457
|
-
signal2.scope?.removeFromGc(signal2);
|
|
458
458
|
cancelDeactivate(signal2);
|
|
459
459
|
if (watchCount === 0) {
|
|
460
460
|
for (const dep of signal2.deps.keys()) {
|
|
@@ -476,6 +476,7 @@ function resumeSignal(signal2) {
|
|
|
476
476
|
const { watchCount, suspendCount } = signal2;
|
|
477
477
|
const newSuspendCount = Math.max(suspendCount - 1, 0);
|
|
478
478
|
signal2.suspendCount = newSuspendCount;
|
|
479
|
+
cancelDeactivate(signal2);
|
|
479
480
|
if (watchCount > 0 && !signal2._isActive) {
|
|
480
481
|
for (const dep of signal2.deps.keys()) {
|
|
481
482
|
resumeSignal(dep);
|
|
@@ -557,6 +558,7 @@ const scheduleDeactivate = (signal2) => {
|
|
|
557
558
|
scheduleFlush();
|
|
558
559
|
};
|
|
559
560
|
const cancelDeactivate = (signal2) => {
|
|
561
|
+
signal2.scope?.removeFromGc(signal2);
|
|
560
562
|
PENDING_DEACTIVE.delete(signal2);
|
|
561
563
|
};
|
|
562
564
|
const scheduleListeners = (signal2) => {
|
|
@@ -1120,8 +1122,11 @@ class ReactivePromiseImpl {
|
|
|
1120
1122
|
}
|
|
1121
1123
|
}
|
|
1122
1124
|
}
|
|
1125
|
+
_getPending() {
|
|
1126
|
+
return (this._flags & 1) !== 0;
|
|
1127
|
+
}
|
|
1123
1128
|
_setPending() {
|
|
1124
|
-
if (
|
|
1129
|
+
if (this._getPending()) {
|
|
1125
1130
|
return this._awaitSubs;
|
|
1126
1131
|
}
|
|
1127
1132
|
this._setFlags(
|
|
@@ -1132,11 +1137,7 @@ class ReactivePromiseImpl {
|
|
|
1132
1137
|
return this._awaitSubs = /* @__PURE__ */ new Map();
|
|
1133
1138
|
}
|
|
1134
1139
|
_clearPending() {
|
|
1135
|
-
this.
|
|
1136
|
-
0,
|
|
1137
|
-
1
|
|
1138
|
-
/* Pending */
|
|
1139
|
-
);
|
|
1140
|
+
this._setValue(this._value);
|
|
1140
1141
|
}
|
|
1141
1142
|
async _setPromise(promise) {
|
|
1142
1143
|
this._promise = promise;
|
|
@@ -1491,7 +1492,7 @@ function checkSignal(signal2) {
|
|
|
1491
1492
|
while (edge !== void 0) {
|
|
1492
1493
|
if (edge.type === EdgeType.Promise) {
|
|
1493
1494
|
const dep2 = edge.dep;
|
|
1494
|
-
if (dep2.
|
|
1495
|
+
if (dep2._getPending()) {
|
|
1495
1496
|
const value = signal2._value;
|
|
1496
1497
|
dep2["_awaitSubs"].set(ref, edge);
|
|
1497
1498
|
value._setPending();
|
|
@@ -1612,30 +1613,22 @@ function hashStr(key, seed = 0) {
|
|
|
1612
1613
|
const c1 = 3432918353;
|
|
1613
1614
|
const c2 = 461845907;
|
|
1614
1615
|
let i = 0;
|
|
1615
|
-
while (i +
|
|
1616
|
-
let
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
h ^=
|
|
1616
|
+
while (i + 2 <= key.length) {
|
|
1617
|
+
let k = key.charCodeAt(i) & 65535 | (key.charCodeAt(i + 1) & 65535) << 16;
|
|
1618
|
+
k = imul(k, c1);
|
|
1619
|
+
k = k << 15 | k >>> 17;
|
|
1620
|
+
k = imul(k, c2);
|
|
1621
|
+
h ^= k;
|
|
1621
1622
|
h = h << 13 | h >>> 19;
|
|
1622
1623
|
h = imul(h, 5) + 3864292196;
|
|
1623
|
-
i +=
|
|
1624
|
-
}
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
k ^= (key.charCodeAt(i + 1) & 255) << 8;
|
|
1632
|
-
// eslint-disable-next-line no-fallthrough
|
|
1633
|
-
case 1:
|
|
1634
|
-
k ^= key.charCodeAt(i) & 255;
|
|
1635
|
-
k = imul(k, c1);
|
|
1636
|
-
k = k << 15 | k >>> 17;
|
|
1637
|
-
k = imul(k, c2);
|
|
1638
|
-
h ^= k;
|
|
1624
|
+
i += 2;
|
|
1625
|
+
}
|
|
1626
|
+
if (key.length & 1) {
|
|
1627
|
+
let k = key.charCodeAt(i) & 65535;
|
|
1628
|
+
k = imul(k, c1);
|
|
1629
|
+
k = k << 15 | k >>> 17;
|
|
1630
|
+
k = imul(k, c2);
|
|
1631
|
+
h ^= k;
|
|
1639
1632
|
}
|
|
1640
1633
|
h ^= key.length;
|
|
1641
1634
|
h ^= h >>> 16;
|
|
@@ -1646,8 +1639,9 @@ function hashStr(key, seed = 0) {
|
|
|
1646
1639
|
return h >>> 0;
|
|
1647
1640
|
}
|
|
1648
1641
|
function hashNumber(num, seed = 0) {
|
|
1642
|
+
let h = num < 0 ? seed ^ 2147483648 : seed;
|
|
1649
1643
|
num = abs(num);
|
|
1650
|
-
|
|
1644
|
+
const origNum = num;
|
|
1651
1645
|
const c1 = 3432918353;
|
|
1652
1646
|
const c2 = 461845907;
|
|
1653
1647
|
while (num >= 4294967295) {
|
|
@@ -1667,7 +1661,7 @@ function hashNumber(num, seed = 0) {
|
|
|
1667
1661
|
k = imul(k, c2);
|
|
1668
1662
|
h ^= k;
|
|
1669
1663
|
}
|
|
1670
|
-
const numBytes =
|
|
1664
|
+
const numBytes = origNum === 0 ? 1 : floor(log(origNum) / log(256)) + 1;
|
|
1671
1665
|
h ^= numBytes;
|
|
1672
1666
|
h ^= h >>> 16;
|
|
1673
1667
|
h = imul(h, 2246822507);
|
|
@@ -1676,12 +1670,12 @@ function hashNumber(num, seed = 0) {
|
|
|
1676
1670
|
h ^= h >>> 16;
|
|
1677
1671
|
return h >>> 0;
|
|
1678
1672
|
}
|
|
1679
|
-
function hashArray(arr) {
|
|
1680
|
-
let h =
|
|
1673
|
+
function hashArray(arr, seen) {
|
|
1674
|
+
let h = ARRAY;
|
|
1681
1675
|
const c1 = 3432918353;
|
|
1682
1676
|
const c2 = 461845907;
|
|
1683
1677
|
for (const item of arr) {
|
|
1684
|
-
let k = hashValue(item);
|
|
1678
|
+
let k = hashValue(item, seen);
|
|
1685
1679
|
k = imul(k, c1);
|
|
1686
1680
|
k = k << 15 | k >>> 17;
|
|
1687
1681
|
k = imul(k, c2);
|
|
@@ -1697,36 +1691,36 @@ function hashArray(arr) {
|
|
|
1697
1691
|
h ^= h >>> 16;
|
|
1698
1692
|
return h >>> 0;
|
|
1699
1693
|
}
|
|
1700
|
-
function hashObject(obj) {
|
|
1694
|
+
function hashObject(obj, seen) {
|
|
1701
1695
|
let sum = OBJECT;
|
|
1702
1696
|
const keys = Object.keys(obj);
|
|
1703
1697
|
for (const key of keys) {
|
|
1704
|
-
sum += hashValue(key) ^ hashValue(obj[key]);
|
|
1698
|
+
sum += imul(hashValue(key, seen), 2654435769) ^ hashValue(obj[key], seen);
|
|
1705
1699
|
}
|
|
1706
1700
|
return sum >>> 0;
|
|
1707
1701
|
}
|
|
1708
|
-
function hashSet(set) {
|
|
1709
|
-
let sum =
|
|
1702
|
+
function hashSet(set, seen) {
|
|
1703
|
+
let sum = SET;
|
|
1710
1704
|
for (const value of set) {
|
|
1711
|
-
sum += hashValue(value);
|
|
1705
|
+
sum += hashValue(value, seen);
|
|
1712
1706
|
}
|
|
1713
1707
|
return sum >>> 0;
|
|
1714
1708
|
}
|
|
1715
|
-
function hashMap(map) {
|
|
1716
|
-
let sum =
|
|
1709
|
+
function hashMap(map, seen) {
|
|
1710
|
+
let sum = MAP;
|
|
1717
1711
|
for (const [key, value] of map) {
|
|
1718
|
-
sum += hashValue(key) ^ hashValue(value);
|
|
1712
|
+
sum += imul(hashValue(key, seen), 2654435769) ^ hashValue(value, seen);
|
|
1719
1713
|
}
|
|
1720
1714
|
return sum >>> 0;
|
|
1721
1715
|
}
|
|
1722
|
-
function hashDate(date) {
|
|
1716
|
+
function hashDate(date, _seen) {
|
|
1723
1717
|
return hashNumber(
|
|
1724
1718
|
date.getTime(),
|
|
1725
1719
|
14
|
|
1726
1720
|
/* DATE */
|
|
1727
1721
|
);
|
|
1728
1722
|
}
|
|
1729
|
-
function hashRegExp(regexp) {
|
|
1723
|
+
function hashRegExp(regexp, _seen) {
|
|
1730
1724
|
const h = hashStr(
|
|
1731
1725
|
regexp.source + regexp.flags,
|
|
1732
1726
|
15
|
|
@@ -1754,7 +1748,7 @@ const FALSE = hashStr(
|
|
|
1754
1748
|
3
|
|
1755
1749
|
/* FALSE */
|
|
1756
1750
|
);
|
|
1757
|
-
hashStr(
|
|
1751
|
+
const ARRAY = hashStr(
|
|
1758
1752
|
"array",
|
|
1759
1753
|
7
|
|
1760
1754
|
/* ARRAY */
|
|
@@ -1764,6 +1758,16 @@ const OBJECT = hashStr(
|
|
|
1764
1758
|
8
|
|
1765
1759
|
/* OBJECT */
|
|
1766
1760
|
);
|
|
1761
|
+
const SET = hashStr(
|
|
1762
|
+
"set",
|
|
1763
|
+
13
|
|
1764
|
+
/* SET */
|
|
1765
|
+
);
|
|
1766
|
+
const MAP = hashStr(
|
|
1767
|
+
"map",
|
|
1768
|
+
12
|
|
1769
|
+
/* MAP */
|
|
1770
|
+
);
|
|
1767
1771
|
const getObjectProto = Object.getPrototypeOf;
|
|
1768
1772
|
const PROTO_TO_HASH = /* @__PURE__ */ new Map([
|
|
1769
1773
|
[Object.prototype, hashObject],
|
|
@@ -1774,7 +1778,7 @@ const PROTO_TO_HASH = /* @__PURE__ */ new Map([
|
|
|
1774
1778
|
[RegExp.prototype, hashRegExp]
|
|
1775
1779
|
]);
|
|
1776
1780
|
const registerCustomHash = (ctor, hashFn) => {
|
|
1777
|
-
PROTO_TO_HASH.set(ctor.prototype, hashFn);
|
|
1781
|
+
PROTO_TO_HASH.set(ctor.prototype, (obj, _seen) => hashFn(obj));
|
|
1778
1782
|
};
|
|
1779
1783
|
function hashValue(node, seen = []) {
|
|
1780
1784
|
switch (typeof node) {
|
|
@@ -1815,7 +1819,7 @@ function hashValue(node, seen = []) {
|
|
|
1815
1819
|
const hashFn = PROTO_TO_HASH.get(getObjectProto(node));
|
|
1816
1820
|
if (hashFn) {
|
|
1817
1821
|
seen.push(node);
|
|
1818
|
-
const hash = hashFn(node);
|
|
1822
|
+
const hash = hashFn(node, seen);
|
|
1819
1823
|
seen.pop();
|
|
1820
1824
|
return hash;
|
|
1821
1825
|
}
|
|
@@ -1845,9 +1849,16 @@ function getObjectHash(obj) {
|
|
|
1845
1849
|
}
|
|
1846
1850
|
return id;
|
|
1847
1851
|
}
|
|
1848
|
-
const EMPTY_ARRAY_HASH = hashArray([]);
|
|
1852
|
+
const EMPTY_ARRAY_HASH = hashArray([], []);
|
|
1849
1853
|
function hashReactiveFn(fn, args) {
|
|
1850
|
-
|
|
1854
|
+
const argsHash = args.length > 0 ? hashArray(args, []) : EMPTY_ARRAY_HASH;
|
|
1855
|
+
let k = imul(argsHash, 3432918353);
|
|
1856
|
+
k = k << 15 | k >>> 17;
|
|
1857
|
+
k = imul(k, 461845907);
|
|
1858
|
+
let h = getObjectHash(fn);
|
|
1859
|
+
h ^= k;
|
|
1860
|
+
h = h << 13 | h >>> 19;
|
|
1861
|
+
return imul(h, 5) + 3864292196 >>> 0;
|
|
1851
1862
|
}
|
|
1852
1863
|
const objectToIdMap = /* @__PURE__ */ new WeakMap();
|
|
1853
1864
|
let nextId = 1;
|
|
@@ -2260,4 +2271,4 @@ exports.signal = signal;
|
|
|
2260
2271
|
exports.unwatchSignal = unwatchSignal;
|
|
2261
2272
|
exports.watchSignal = watchSignal;
|
|
2262
2273
|
exports.withContexts = withContexts;
|
|
2263
|
-
//# sourceMappingURL=debug-
|
|
2274
|
+
//# sourceMappingURL=debug-DuXQhd5q.js.map
|