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.
Files changed (45) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cjs/development/{core-api-BO_W1aEw.js → core-api-C8J7lYBC.js} +2 -2
  3. package/dist/cjs/development/{core-api-BO_W1aEw.js.map → core-api-C8J7lYBC.js.map} +1 -1
  4. package/dist/cjs/development/{debug-DW86yXJK.js → debug-DuXQhd5q.js} +62 -51
  5. package/dist/cjs/development/debug-DuXQhd5q.js.map +1 -0
  6. package/dist/cjs/development/debug.js +1 -1
  7. package/dist/cjs/development/index.js +2 -2
  8. package/dist/cjs/development/react/index.js +2 -2
  9. package/dist/cjs/development/utils.js +2 -2
  10. package/dist/cjs/production/{contexts-BAkp5KrR.js → contexts-DOH1tHd8.js} +62 -51
  11. package/dist/cjs/production/contexts-DOH1tHd8.js.map +1 -0
  12. package/dist/cjs/production/{core-api-B2d0JjB_.js → core-api-Cx2_AumW.js} +2 -2
  13. package/dist/cjs/production/{core-api-B2d0JjB_.js.map → core-api-Cx2_AumW.js.map} +1 -1
  14. package/dist/cjs/production/debug.js +1 -1
  15. package/dist/cjs/production/index.js +2 -2
  16. package/dist/cjs/production/react/index.js +2 -2
  17. package/dist/cjs/production/utils.js +2 -2
  18. package/dist/esm/development/{core-api-CotzAQ5V.js → core-api-CF5aK2Lx.js} +2 -2
  19. package/dist/esm/development/{core-api-CotzAQ5V.js.map → core-api-CF5aK2Lx.js.map} +1 -1
  20. package/dist/esm/development/{debug-DoBIh4Lm.js → debug-E2E1pZe5.js} +62 -51
  21. package/dist/esm/development/debug-E2E1pZe5.js.map +1 -0
  22. package/dist/esm/development/debug.js +1 -1
  23. package/dist/esm/development/index.js +2 -2
  24. package/dist/esm/development/react/index.js +2 -2
  25. package/dist/esm/development/utils.js +3 -3
  26. package/dist/esm/internals/async.d.ts +1 -0
  27. package/dist/esm/internals/async.d.ts.map +1 -1
  28. package/dist/esm/internals/scheduling.d.ts +3 -0
  29. package/dist/esm/internals/scheduling.d.ts.map +1 -1
  30. package/dist/esm/internals/utils/hash.d.ts +1 -3
  31. package/dist/esm/internals/utils/hash.d.ts.map +1 -1
  32. package/dist/esm/internals/watch.d.ts.map +1 -1
  33. package/dist/esm/production/{contexts-CYAwBumI.js → contexts-Dj9Y86xW.js} +62 -51
  34. package/dist/esm/production/contexts-Dj9Y86xW.js.map +1 -0
  35. package/dist/esm/production/{core-api-BY3r_t3J.js → core-api-D_uw3umM.js} +2 -2
  36. package/dist/esm/production/{core-api-BY3r_t3J.js.map → core-api-D_uw3umM.js.map} +1 -1
  37. package/dist/esm/production/debug.js +1 -1
  38. package/dist/esm/production/index.js +2 -2
  39. package/dist/esm/production/react/index.js +2 -2
  40. package/dist/esm/production/utils.js +3 -3
  41. package/package.json +1 -1
  42. package/dist/cjs/development/debug-DW86yXJK.js.map +0 -1
  43. package/dist/cjs/production/contexts-BAkp5KrR.js.map +0 -1
  44. package/dist/esm/development/debug-DoBIh4Lm.js.map +0 -1
  45. package/dist/esm/production/contexts-CYAwBumI.js.map +0 -1
@@ -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-DoBIh4Lm.js";
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-E2E1pZe5.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-CotzAQ5V.js.map
56
+ //# sourceMappingURL=core-api-CF5aK2Lx.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"core-api-CotzAQ5V.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;"}
1
+ {"version":3,"file":"core-api-CF5aK2Lx.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) => {
@@ -1119,8 +1121,11 @@ class ReactivePromiseImpl {
1119
1121
  }
1120
1122
  }
1121
1123
  }
1124
+ _getPending() {
1125
+ return (this._flags & 1) !== 0;
1126
+ }
1122
1127
  _setPending() {
1123
- if ((this._flags & 1) !== 0) {
1128
+ if (this._getPending()) {
1124
1129
  return this._awaitSubs;
1125
1130
  }
1126
1131
  this._setFlags(
@@ -1131,11 +1136,7 @@ class ReactivePromiseImpl {
1131
1136
  return this._awaitSubs = /* @__PURE__ */ new Map();
1132
1137
  }
1133
1138
  _clearPending() {
1134
- this._setFlags(
1135
- 0,
1136
- 1
1137
- /* Pending */
1138
- );
1139
+ this._setValue(this._value);
1139
1140
  }
1140
1141
  async _setPromise(promise) {
1141
1142
  this._promise = promise;
@@ -1490,7 +1491,7 @@ function checkSignal(signal2) {
1490
1491
  while (edge !== void 0) {
1491
1492
  if (edge.type === EdgeType.Promise) {
1492
1493
  const dep2 = edge.dep;
1493
- if (dep2.isPending) {
1494
+ if (dep2._getPending()) {
1494
1495
  const value = signal2._value;
1495
1496
  dep2["_awaitSubs"].set(ref, edge);
1496
1497
  value._setPending();
@@ -1611,30 +1612,22 @@ function hashStr(key, seed = 0) {
1611
1612
  const c1 = 3432918353;
1612
1613
  const c2 = 461845907;
1613
1614
  let i = 0;
1614
- while (i + 4 <= key.length) {
1615
- let k2 = key.charCodeAt(i) & 255 | (key.charCodeAt(i + 1) & 255) << 8 | (key.charCodeAt(i + 2) & 255) << 16 | (key.charCodeAt(i + 3) & 255) << 24;
1616
- k2 = imul(k2, c1);
1617
- k2 = k2 << 15 | k2 >>> 17;
1618
- k2 = imul(k2, c2);
1619
- h ^= k2;
1615
+ while (i + 2 <= key.length) {
1616
+ let k = key.charCodeAt(i) & 65535 | (key.charCodeAt(i + 1) & 65535) << 16;
1617
+ k = imul(k, c1);
1618
+ k = k << 15 | k >>> 17;
1619
+ k = imul(k, c2);
1620
+ h ^= k;
1620
1621
  h = h << 13 | h >>> 19;
1621
1622
  h = imul(h, 5) + 3864292196;
1622
- i += 4;
1623
- }
1624
- let k = 0;
1625
- switch (key.length & 3) {
1626
- case 3:
1627
- k ^= (key.charCodeAt(i + 2) & 255) << 16;
1628
- // eslint-disable-next-line no-fallthrough
1629
- case 2:
1630
- k ^= (key.charCodeAt(i + 1) & 255) << 8;
1631
- // eslint-disable-next-line no-fallthrough
1632
- case 1:
1633
- k ^= key.charCodeAt(i) & 255;
1634
- k = imul(k, c1);
1635
- k = k << 15 | k >>> 17;
1636
- k = imul(k, c2);
1637
- h ^= k;
1623
+ i += 2;
1624
+ }
1625
+ if (key.length & 1) {
1626
+ let k = key.charCodeAt(i) & 65535;
1627
+ k = imul(k, c1);
1628
+ k = k << 15 | k >>> 17;
1629
+ k = imul(k, c2);
1630
+ h ^= k;
1638
1631
  }
1639
1632
  h ^= key.length;
1640
1633
  h ^= h >>> 16;
@@ -1645,8 +1638,9 @@ function hashStr(key, seed = 0) {
1645
1638
  return h >>> 0;
1646
1639
  }
1647
1640
  function hashNumber(num, seed = 0) {
1641
+ let h = num < 0 ? seed ^ 2147483648 : seed;
1648
1642
  num = abs(num);
1649
- let h = seed;
1643
+ const origNum = num;
1650
1644
  const c1 = 3432918353;
1651
1645
  const c2 = 461845907;
1652
1646
  while (num >= 4294967295) {
@@ -1666,7 +1660,7 @@ function hashNumber(num, seed = 0) {
1666
1660
  k = imul(k, c2);
1667
1661
  h ^= k;
1668
1662
  }
1669
- const numBytes = num === 0 ? 1 : floor(log(num) / log(256)) + 1;
1663
+ const numBytes = origNum === 0 ? 1 : floor(log(origNum) / log(256)) + 1;
1670
1664
  h ^= numBytes;
1671
1665
  h ^= h >>> 16;
1672
1666
  h = imul(h, 2246822507);
@@ -1675,12 +1669,12 @@ function hashNumber(num, seed = 0) {
1675
1669
  h ^= h >>> 16;
1676
1670
  return h >>> 0;
1677
1671
  }
1678
- function hashArray(arr) {
1679
- let h = 7;
1672
+ function hashArray(arr, seen) {
1673
+ let h = ARRAY;
1680
1674
  const c1 = 3432918353;
1681
1675
  const c2 = 461845907;
1682
1676
  for (const item of arr) {
1683
- let k = hashValue(item);
1677
+ let k = hashValue(item, seen);
1684
1678
  k = imul(k, c1);
1685
1679
  k = k << 15 | k >>> 17;
1686
1680
  k = imul(k, c2);
@@ -1696,36 +1690,36 @@ function hashArray(arr) {
1696
1690
  h ^= h >>> 16;
1697
1691
  return h >>> 0;
1698
1692
  }
1699
- function hashObject(obj) {
1693
+ function hashObject(obj, seen) {
1700
1694
  let sum = OBJECT;
1701
1695
  const keys = Object.keys(obj);
1702
1696
  for (const key of keys) {
1703
- sum += hashValue(key) ^ hashValue(obj[key]);
1697
+ sum += imul(hashValue(key, seen), 2654435769) ^ hashValue(obj[key], seen);
1704
1698
  }
1705
1699
  return sum >>> 0;
1706
1700
  }
1707
- function hashSet(set) {
1708
- let sum = 13;
1701
+ function hashSet(set, seen) {
1702
+ let sum = SET;
1709
1703
  for (const value of set) {
1710
- sum += hashValue(value);
1704
+ sum += hashValue(value, seen);
1711
1705
  }
1712
1706
  return sum >>> 0;
1713
1707
  }
1714
- function hashMap(map) {
1715
- let sum = 12;
1708
+ function hashMap(map, seen) {
1709
+ let sum = MAP;
1716
1710
  for (const [key, value] of map) {
1717
- sum += hashValue(key) ^ hashValue(value);
1711
+ sum += imul(hashValue(key, seen), 2654435769) ^ hashValue(value, seen);
1718
1712
  }
1719
1713
  return sum >>> 0;
1720
1714
  }
1721
- function hashDate(date) {
1715
+ function hashDate(date, _seen) {
1722
1716
  return hashNumber(
1723
1717
  date.getTime(),
1724
1718
  14
1725
1719
  /* DATE */
1726
1720
  );
1727
1721
  }
1728
- function hashRegExp(regexp) {
1722
+ function hashRegExp(regexp, _seen) {
1729
1723
  const h = hashStr(
1730
1724
  regexp.source + regexp.flags,
1731
1725
  15
@@ -1753,7 +1747,7 @@ const FALSE = hashStr(
1753
1747
  3
1754
1748
  /* FALSE */
1755
1749
  );
1756
- hashStr(
1750
+ const ARRAY = hashStr(
1757
1751
  "array",
1758
1752
  7
1759
1753
  /* ARRAY */
@@ -1763,6 +1757,16 @@ const OBJECT = hashStr(
1763
1757
  8
1764
1758
  /* OBJECT */
1765
1759
  );
1760
+ const SET = hashStr(
1761
+ "set",
1762
+ 13
1763
+ /* SET */
1764
+ );
1765
+ const MAP = hashStr(
1766
+ "map",
1767
+ 12
1768
+ /* MAP */
1769
+ );
1766
1770
  const getObjectProto = Object.getPrototypeOf;
1767
1771
  const PROTO_TO_HASH = /* @__PURE__ */ new Map([
1768
1772
  [Object.prototype, hashObject],
@@ -1773,7 +1777,7 @@ const PROTO_TO_HASH = /* @__PURE__ */ new Map([
1773
1777
  [RegExp.prototype, hashRegExp]
1774
1778
  ]);
1775
1779
  const registerCustomHash = (ctor, hashFn) => {
1776
- PROTO_TO_HASH.set(ctor.prototype, hashFn);
1780
+ PROTO_TO_HASH.set(ctor.prototype, (obj, _seen) => hashFn(obj));
1777
1781
  };
1778
1782
  function hashValue(node, seen = []) {
1779
1783
  switch (typeof node) {
@@ -1814,7 +1818,7 @@ function hashValue(node, seen = []) {
1814
1818
  const hashFn = PROTO_TO_HASH.get(getObjectProto(node));
1815
1819
  if (hashFn) {
1816
1820
  seen.push(node);
1817
- const hash = hashFn(node);
1821
+ const hash = hashFn(node, seen);
1818
1822
  seen.pop();
1819
1823
  return hash;
1820
1824
  }
@@ -1844,9 +1848,16 @@ function getObjectHash(obj) {
1844
1848
  }
1845
1849
  return id;
1846
1850
  }
1847
- const EMPTY_ARRAY_HASH = hashArray([]);
1851
+ const EMPTY_ARRAY_HASH = hashArray([], []);
1848
1852
  function hashReactiveFn(fn, args) {
1849
- return getObjectHash(fn) ^ (args.length > 0 ? hashArray(args) : EMPTY_ARRAY_HASH);
1853
+ const argsHash = args.length > 0 ? hashArray(args, []) : EMPTY_ARRAY_HASH;
1854
+ let k = imul(argsHash, 3432918353);
1855
+ k = k << 15 | k >>> 17;
1856
+ k = imul(k, 461845907);
1857
+ let h = getObjectHash(fn);
1858
+ h ^= k;
1859
+ h = h << 13 | h >>> 19;
1860
+ return imul(h, 5) + 3864292196 >>> 0;
1850
1861
  }
1851
1862
  const objectToIdMap = /* @__PURE__ */ new WeakMap();
1852
1863
  let nextId = 1;
@@ -2261,4 +2272,4 @@ export {
2261
2272
  withContexts as y,
2262
2273
  setGlobalContexts as z
2263
2274
  };
2264
- //# sourceMappingURL=debug-DoBIh4Lm.js.map
2275
+ //# sourceMappingURL=debug-E2E1pZe5.js.map