cross-state 0.56.4 → 1.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.
Files changed (107) hide show
  1. package/dist/{diff-CElc7pJI.d.ts → diff-CAQaunfv.d.cts} +3 -3
  2. package/dist/{diff-BslUrJZE.d.cts → diff-DFvRd-Gf.d.ts} +3 -3
  3. package/dist/{extendedJson-BZkQBXEv.js → extendedJson-Dv9q6rps.js} +2 -2
  4. package/dist/{extendedJson-BZkQBXEv.js.map → extendedJson-Dv9q6rps.js.map} +1 -1
  5. package/dist/{extendedJson-Dn2F7Edo.cjs → extendedJson-ursQ8DbQ.cjs} +1 -1
  6. package/dist/{extendedJson-Dn2F7Edo.cjs.map → extendedJson-ursQ8DbQ.cjs.map} +1 -1
  7. package/dist/index.cjs +9 -11
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.cts +4 -4
  10. package/dist/index.d.ts +4 -4
  11. package/dist/index.js +7 -9
  12. package/dist/index.js.map +1 -1
  13. package/dist/mutative/index.cjs +2 -1
  14. package/dist/mutative/index.d.cts +2 -2
  15. package/dist/mutative/index.d.ts +2 -2
  16. package/dist/mutative/index.js +2 -1
  17. package/dist/mutative/register.cjs +4 -3
  18. package/dist/mutative/register.cjs.map +1 -1
  19. package/dist/mutative/register.d.cts +2 -4
  20. package/dist/mutative/register.d.ts +2 -2
  21. package/dist/mutative/register.js +4 -3
  22. package/dist/mutative/register.js.map +1 -1
  23. package/dist/{mutativeMethods-Bhd1Yi22.d.ts → mutativeMethods-BT1Cim3p.d.ts} +3 -3
  24. package/dist/{mutativeMethods-DWhwZRzv.d.cts → mutativeMethods-C8VcZWED.d.cts} +3 -3
  25. package/dist/{mutativeMethods-CgXk_bMt.cjs → mutativeMethods-CkNycpO9.cjs} +6 -7
  26. package/dist/{mutativeMethods-CgXk_bMt.cjs.map → mutativeMethods-CkNycpO9.cjs.map} +1 -1
  27. package/dist/{mutativeMethods-CZKeRIDL.js → mutativeMethods-Jowr0Znn.js} +4 -6
  28. package/dist/{mutativeMethods-CZKeRIDL.js.map → mutativeMethods-Jowr0Znn.js.map} +1 -1
  29. package/dist/{patchMethods-hhlLwtqE.cjs → patchMethods-B7Hm5-Qh.cjs} +4 -6
  30. package/dist/{patchMethods-hhlLwtqE.cjs.map → patchMethods-B7Hm5-Qh.cjs.map} +1 -1
  31. package/dist/{patchMethods-DXWygPZ6.d.ts → patchMethods-BmyvvHnP.d.cts} +4 -4
  32. package/dist/{patchMethods-BT4Tg5aG.d.cts → patchMethods-CixmHmNt.d.ts} +4 -4
  33. package/dist/{patchMethods-C_f3PORQ.js → patchMethods-iK2F87G0.js} +5 -7
  34. package/dist/{patchMethods-C_f3PORQ.js.map → patchMethods-iK2F87G0.js.map} +1 -1
  35. package/dist/patches/index.cjs +3 -3
  36. package/dist/patches/index.d.cts +3 -3
  37. package/dist/patches/index.d.ts +3 -3
  38. package/dist/patches/index.js +3 -3
  39. package/dist/patches/register.cjs +4 -4
  40. package/dist/patches/register.cjs.map +1 -1
  41. package/dist/patches/register.d.cts +3 -5
  42. package/dist/patches/register.d.ts +3 -3
  43. package/dist/patches/register.js +4 -4
  44. package/dist/patches/register.js.map +1 -1
  45. package/dist/{chunk-CUT6urMc.cjs → path-B-Rq5q6m.cjs} +14 -1
  46. package/dist/path-B-Rq5q6m.cjs.map +1 -0
  47. package/dist/path-CyYq74W8.js +8 -0
  48. package/dist/path-CyYq74W8.js.map +1 -0
  49. package/dist/persist/register.cjs +5 -5
  50. package/dist/persist/register.cjs.map +1 -1
  51. package/dist/persist/register.d.cts +2 -4
  52. package/dist/persist/register.d.ts +2 -2
  53. package/dist/persist/register.js +5 -5
  54. package/dist/persist/register.js.map +1 -1
  55. package/dist/{persist-CLgS5Cqw.js → persist-Bunx8xfQ.js} +12 -15
  56. package/dist/persist-Bunx8xfQ.js.map +1 -0
  57. package/dist/{persist-olbNkcdZ.d.ts → persist-CHRYYolx.d.cts} +3 -3
  58. package/dist/{persist-DboMIMOK.cjs → persist-DMbVdqS_.cjs} +11 -14
  59. package/dist/persist-DMbVdqS_.cjs.map +1 -0
  60. package/dist/{persist-DVKRq8RQ.d.cts → persist-DyI_JLxZ.d.ts} +3 -3
  61. package/dist/{propAccess-BdLsqViO.cjs → propAccess-C2AIn9RC.cjs} +4 -6
  62. package/dist/{propAccess-BdLsqViO.cjs.map → propAccess-C2AIn9RC.cjs.map} +1 -1
  63. package/dist/{propAccess-B260LXN1.js → propAccess-DvWFpYoj.js} +5 -7
  64. package/dist/{propAccess-B260LXN1.js.map → propAccess-DvWFpYoj.js.map} +1 -1
  65. package/dist/react/index.cjs +66 -80
  66. package/dist/react/index.cjs.map +1 -1
  67. package/dist/react/index.d.cts +70 -70
  68. package/dist/react/index.d.ts +70 -70
  69. package/dist/react/index.js +62 -77
  70. package/dist/react/index.js.map +1 -1
  71. package/dist/react/register.cjs +5 -5
  72. package/dist/react/register.cjs.map +1 -1
  73. package/dist/react/register.d.cts +3 -5
  74. package/dist/react/register.d.ts +3 -3
  75. package/dist/react/register.js +5 -5
  76. package/dist/react/register.js.map +1 -1
  77. package/dist/{scope-CfLlLxo9.cjs → scope-C1bcfK8e.cjs} +32 -7
  78. package/dist/scope-C1bcfK8e.cjs.map +1 -0
  79. package/dist/{scope-D3jkIPgn.d.ts → scope-CESkVNvI.d.cts} +3 -3
  80. package/dist/{scope-7LeON9bZ.js → scope-CKGsCVn3.js} +20 -7
  81. package/dist/scope-CKGsCVn3.js.map +1 -0
  82. package/dist/{scope-CcBxgcrs.d.cts → scope-DJXSRsGy.d.ts} +3 -3
  83. package/dist/{store-MBrcOgtz.d.cts → store-BRHFhRPm.d.ts} +21 -21
  84. package/dist/{store-CdST5wJZ.cjs → store-C1NYHLgR.cjs} +12 -13
  85. package/dist/store-C1NYHLgR.cjs.map +1 -0
  86. package/dist/{store-DnZ6fsiJ.d.ts → store-XcnTdeiJ.d.cts} +21 -21
  87. package/dist/{store-Dx8w7yT-.js → store-v3RYWzVg.js} +13 -14
  88. package/dist/store-v3RYWzVg.js.map +1 -0
  89. package/dist/{storeMethods-B_RzvMaV.cjs → storeMethods-CNu7VD6w.cjs} +135 -60
  90. package/dist/storeMethods-CNu7VD6w.cjs.map +1 -0
  91. package/dist/{storeMethods-BrKuusQ2.js → storeMethods-CQhXlHpl.js} +115 -59
  92. package/dist/storeMethods-CQhXlHpl.js.map +1 -0
  93. package/dist/{storeMethods-CmWv1YMe.d.cts → storeMethods-Dsz0-Cda.d.ts} +4 -4
  94. package/dist/{storeMethods-Cb1ur5K3.d.ts → storeMethods-y3PlfTHV.d.cts} +4 -4
  95. package/package.json +26 -37
  96. package/dist/hash-DNFM5y_h.js +0 -19
  97. package/dist/hash-DNFM5y_h.js.map +0 -1
  98. package/dist/hash-Dv3XlmHn.cjs +0 -30
  99. package/dist/hash-Dv3XlmHn.cjs.map +0 -1
  100. package/dist/persist-CLgS5Cqw.js.map +0 -1
  101. package/dist/persist-DboMIMOK.cjs.map +0 -1
  102. package/dist/scope-7LeON9bZ.js.map +0 -1
  103. package/dist/scope-CfLlLxo9.cjs.map +0 -1
  104. package/dist/store-CdST5wJZ.cjs.map +0 -1
  105. package/dist/store-Dx8w7yT-.js.map +0 -1
  106. package/dist/storeMethods-B_RzvMaV.cjs.map +0 -1
  107. package/dist/storeMethods-BrKuusQ2.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { Cancel, Duration, KeyType, Store, WildcardPath } from "./store-DnZ6fsiJ.js";
1
+ import { M as KeyType, V as WildcardPath, b as Duration, g as Cancel, r as Store } from "./store-XcnTdeiJ.cjs";
2
2
 
3
3
  //#region src/persist/persistStorage.d.ts
4
4
  interface PersistStorageBase {
@@ -57,5 +57,5 @@ declare class Persist<T> {
57
57
  }
58
58
  declare function persist<T>(store: Store<T>, options: PersistOptions<T>): Persist<T>;
59
59
  //#endregion
60
- export { Persist, PersistOptions, PersistStorage, PersistStorageBase, PersistStorageWithKeys, PersistStorageWithLength, PersistStorageWithListItems, persist };
61
- //# sourceMappingURL=persist-olbNkcdZ.d.ts.map
60
+ export { PersistStorageBase as a, PersistStorageWithListItems as c, PersistStorage as i, PersistOptions as n, PersistStorageWithKeys as o, persist as r, PersistStorageWithLength as s, Persist as t };
61
+ //# sourceMappingURL=persist-CHRYYolx.d.cts.map
@@ -1,7 +1,7 @@
1
- const require_store = require('./store-CdST5wJZ.cjs');
2
- const require_propAccess = require('./propAccess-BdLsqViO.cjs');
3
- const require_patchMethods = require('./patchMethods-hhlLwtqE.cjs');
4
- const require_extendedJson = require('./extendedJson-Dn2F7Edo.cjs');
1
+ const require_store = require('./store-C1NYHLgR.cjs');
2
+ const require_propAccess = require('./propAccess-C2AIn9RC.cjs');
3
+ const require_patchMethods = require('./patchMethods-B7Hm5-Qh.cjs');
4
+ const require_extendedJson = require('./extendedJson-ursQ8DbQ.cjs');
5
5
 
6
6
  //#region src/lib/promiseChain.ts
7
7
  function promiseChain(value) {
@@ -9,8 +9,7 @@ function promiseChain(value) {
9
9
  return {
10
10
  value,
11
11
  next(fn) {
12
- const next = require_store.isPromise(value) ? value.then((value$1) => fn(value$1)) : fn(value);
13
- return promiseChain(next);
12
+ return promiseChain(require_store.isPromise(value) ? value.then((value$1) => fn(value$1)) : fn(value));
14
13
  }
15
14
  };
16
15
  }
@@ -193,8 +192,7 @@ var Persist = class {
193
192
  const toWrite = entries.filter(([key, value]) => {
194
193
  if (key.type !== "data" || !value) return;
195
194
  if (!this.paths.find((p) => p.path.length === 1 && p.path[0] === "*" && key.path.length === 0 || p.path.length === key.path.length && isAncestor(p.path, key.path))) return null;
196
- const inSaveQueue = this.queue.getRefs().find((ref) => isAncestor(ref, key.path) || isAncestor(key.path, ref));
197
- return !inSaveQueue;
195
+ return !this.queue.getRefs().find((ref) => isAncestor(ref, key.path) || isAncestor(key.path, ref));
198
196
  }).map(([key, value]) => {
199
197
  try {
200
198
  return {
@@ -202,7 +200,7 @@ var Persist = class {
202
200
  value: !value || value === "undefined" ? void 0 : require_extendedJson.fromExtendedJsonString(value)
203
201
  };
204
202
  } catch {
205
- return void 0;
203
+ return;
206
204
  }
207
205
  }).filter(Boolean);
208
206
  if (toWrite.length > 0) {
@@ -223,10 +221,9 @@ var Persist = class {
223
221
  type: "data",
224
222
  path
225
223
  });
226
- const value = require_propAccess.get(this.store.get(), path);
227
- return promiseChain(value).next((value$1) => {
228
- if (value$1 === void 0) return this.storage.removeItem(key);
229
- else return this.storage.setItem(key, require_extendedJson.toExtendedJsonString(value$1));
224
+ return promiseChain(require_propAccess.get(this.store.get(), path)).next((value) => {
225
+ if (value === void 0) return this.storage.removeItem(key);
226
+ else return this.storage.setItem(key, require_extendedJson.toExtendedJsonString(value));
230
227
  }).next(() => {
231
228
  this.channel.postMessage(path);
232
229
  if (this.store.version) return this.storage.setItem(this.buildKey({
@@ -260,4 +257,4 @@ Object.defineProperty(exports, 'persist', {
260
257
  return persist;
261
258
  }
262
259
  });
263
- //# sourceMappingURL=persist-DboMIMOK.cjs.map
260
+ //# sourceMappingURL=persist-DMbVdqS_.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persist-DMbVdqS_.cjs","names":["isPromise","value","entries: Map<KeyType, unknown>","path","isPromise","store: Store<T>","options: PersistOptions<T>","queue","castArrayPath","calcDuration","subscribePatches","path","shallowEqual","isPromise","fromExtendedJsonString","remove","set","get","toExtendedJsonString"],"sources":["../src/lib/promiseChain.ts","../src/persist/persistPathHelpers.ts","../src/persist/persistStorage.ts","../src/persist/persist.ts"],"sourcesContent":["import isPromise from '@lib/isPromise';\n\nexport interface Chain<T> {\n value: T;\n next<S>(fn: (value: Awaited<T>) => S): T extends Promise<any> ? Chain<Promise<S>> : Chain<S>;\n}\n\nexport default function promiseChain<T>(value: T | (() => T)): Chain<T> {\n if (value instanceof Function) {\n value = value();\n }\n\n return {\n value,\n next(fn) {\n const next = isPromise(value)\n ? value.then((value) => fn(value as Awaited<T>))\n : fn(value as Awaited<T>);\n\n return promiseChain(next) as any;\n },\n };\n}\n","import type { KeyType } from '@lib/path';\n\nexport const isAncestor = (ancestor: KeyType[], path: KeyType[]): boolean => {\n return (\n ancestor.length <= path.length &&\n ancestor.every((v, i) => v === '*' || path[i] === '*' || v === path[i])\n );\n};\n\nexport const split = (value: any, path: KeyType[]): { path: KeyType[]; value: unknown }[] => {\n const [first, ...rest] = path;\n if (first === undefined) return [{ path: [], value }];\n\n let entries: Map<KeyType, unknown>;\n if (value instanceof Map) {\n entries = value;\n } else if (value instanceof Set) {\n entries = new Map([...value].map((v, i) => [i, v]));\n } else if (Array.isArray(value)) {\n entries = new Map(value.map((v, i) => [i, v]));\n } else if (typeof value === 'object' && value !== null) {\n entries = new Map(Object.entries(value));\n } else {\n return [{ path: [], value }];\n }\n\n if (first === '*') {\n return [...entries].flatMap(([k, v]) =>\n split(v, rest).map(({ path, value }) => ({ path: [k, ...path], value })),\n );\n }\n\n const subValue = entries.get(first);\n if (subValue === undefined) return [{ path: [], value }];\n\n return split(subValue, rest).map(({ path, value }) => ({ path: [first, ...path], value }));\n};\n","import isPromise from '@lib/isPromise';\nimport promiseChain from '@lib/promiseChain';\n\nexport interface PersistStorageBase {\n getItem: (key: string) => string | null | Promise<string | null>;\n setItem: (key: string, value: string) => void | Promise<unknown>;\n removeItem: (key: string) => void | Promise<unknown>;\n}\n\nexport interface PersistStorageWithKeys extends PersistStorageBase {\n keys: () => string[] | Promise<string[]>;\n}\n\nexport interface PersistStorageWithLength extends PersistStorageBase {\n length: number | (() => number | Promise<number>);\n key: (keyIndex: number) => string | null | Promise<string | null>;\n}\n\nexport interface PersistStorageWithListItems extends PersistStorageBase {\n listItems: () => Map<string, string> | Promise<Map<string, string>>;\n}\n\nexport type PersistStorage =\n | PersistStorageWithKeys\n | PersistStorageWithLength\n | PersistStorageWithListItems;\n\nexport function normalizeStorage(storage: PersistStorage): PersistStorageWithListItems {\n return {\n getItem: storage.getItem.bind(storage),\n setItem: storage.setItem.bind(storage),\n removeItem: storage.removeItem.bind(storage),\n\n listItems() {\n if ('listItems' in storage) {\n return storage.listItems();\n }\n\n return promiseChain(() => {\n if ('keys' in storage) {\n return storage.keys();\n } else {\n return promiseChain(\n storage.length instanceof Function ? storage.length() : storage.length,\n )\n .next((length) => {\n const keys = Array.from({ length }, (_, index) => storage.key(index));\n return keys.some(isPromise) ? Promise.all(keys) : (keys as (string | null)[]);\n })\n .next((keys) => {\n return keys.filter((key): key is string => typeof key === 'string');\n }).value;\n }\n })\n .next((keys) => {\n const results = keys.map(\n (key) =>\n promiseChain(storage.getItem(key)).next((value) => [key, value] as const).value,\n );\n\n return results.some(isPromise)\n ? Promise.all(results)\n : (results as [string, string | null][]);\n })\n .next((results) => {\n return new Map(results.filter(([, value]) => value !== null) as [string, string][]);\n }).value;\n },\n };\n}\n","import { type Cancel, type Duration, type Store } from '@core';\nimport { calcDuration } from '@lib/calcDuration';\nimport { shallowEqual } from '@lib/equals';\nimport { fromExtendedJsonString, toExtendedJsonString } from '@lib/extendedJson';\nimport isPromise from '@lib/isPromise';\nimport type { KeyType, WildcardPath } from '@lib/path';\nimport promiseChain from '@lib/promiseChain';\nimport { castArrayPath, get, remove, set } from '@lib/propAccess';\nimport { queue } from '@lib/queue';\nimport { subscribePatches } from '@patches/patchMethods';\nimport { isAncestor, split } from '@persist/persistPathHelpers';\nimport {\n normalizeStorage,\n type PersistStorage,\n type PersistStorageWithListItems,\n} from './persistStorage';\n\ntype PathOption<T> =\n | WildcardPath<T>\n | {\n path: WildcardPath<T>;\n // throttle?: Duration;\n };\n\ntype Key = { type: 'internal'; path: string } | { type: 'data'; path: KeyType[] };\n\nexport interface PersistOptions<T> {\n id: string;\n storage: PersistStorage;\n paths?: PathOption<T>[];\n throttle?: Duration;\n persistInitialState?: boolean;\n}\n\nexport class Persist<T> {\n readonly storage: PersistStorageWithListItems;\n readonly [Symbol.dispose]!: Cancel;\n\n readonly paths: {\n path: KeyType[];\n throttle?: number;\n }[];\n\n readonly initialized: Promise<void>;\n\n private resolveInitialized?: () => void;\n\n private channel: BroadcastChannel;\n\n private queue = queue();\n\n private handles = new Set<Cancel>();\n\n private stopped = false;\n\n private updateInProgress = new Map<string, unknown>();\n\n private prefix;\n\n constructor(\n public readonly store: Store<T>,\n public readonly options: PersistOptions<T>,\n ) {\n this.storage = normalizeStorage(options.storage);\n this.channel = new BroadcastChannel(`cross-state-persist_${options.id}`);\n this.prefix = `${options.id}:`;\n\n if (Symbol.dispose) {\n this[Symbol.dispose] = () => this.stop();\n }\n\n this.paths = (options.paths ?? [])\n .map<{\n path: KeyType[];\n throttle?: number;\n }>((p) => {\n if (isPlainPath(p)) {\n return {\n path: castArrayPath(p),\n throttle: options.throttle && calcDuration(options.throttle),\n };\n }\n\n const _p = p as { path: KeyType[]; throttle?: Duration };\n\n return {\n path: castArrayPath(_p.path),\n throttle:\n (_p.throttle && calcDuration(_p.throttle)) ??\n (options.throttle && calcDuration(options.throttle)),\n };\n })\n .sort((a, b) => b.path.length - a.path.length);\n\n if (this.paths.length === 0) {\n this.paths.push({\n path: ['*'],\n throttle: options.throttle && calcDuration(options.throttle),\n });\n }\n\n this.initialized = new Promise((resolve) => {\n this.resolveInitialized = resolve;\n });\n\n this.watchStore();\n this.watchStorage();\n }\n\n private watchStore() {\n const throttle = Math.min(...this.paths.map((p) => p.throttle ?? 0)) || undefined;\n\n const cancel = subscribePatches.apply(this.store as Store<unknown>, [\n (patches, reversePatches) => {\n let i = 0;\n for (const patch of patches) {\n const reversePatch = reversePatches[i++];\n\n const stringPath = JSON.stringify(patch.path);\n if (\n this.updateInProgress.has(stringPath) &&\n this.updateInProgress.get(stringPath) ===\n (patch.op === 'remove' ? undefined : patch.value)\n ) {\n continue;\n }\n\n const matchingPaths = this.paths.filter(\n (p) => isAncestor(p.path, patch.path) || isAncestor(patch.path, p.path),\n );\n\n for (const { path } of matchingPaths) {\n if (path.length <= patch.path.length) {\n const pathToSave = patch.path.slice(0, path.length);\n this.queue(() => this.save(pathToSave), pathToSave);\n } else if (patch.op === 'remove') {\n const subValues = split(\n reversePatch?.op === 'add' ? reversePatch.value : {},\n path.slice(patch.path.length),\n );\n\n for (const { path } of subValues) {\n this.queue(() => this.save([...patch.path, ...path]), [...patch.path, ...path]);\n }\n } else {\n const updatedValues = split(patch.value, path.slice(patch.path.length));\n const removedValues = split(\n reversePatch?.op !== 'remove' ? (reversePatch?.value ?? {}) : {},\n path.slice(patch.path.length),\n ).filter((v) => !updatedValues.some((u) => shallowEqual(u.path, v.path)));\n\n for (const { path } of updatedValues) {\n this.queue(() => this.save([...patch.path, ...path]), [...patch.path, ...path]);\n }\n for (const { path } of removedValues) {\n this.queue(() => this.save([...patch.path, ...path]), [...patch.path, ...path]);\n }\n }\n }\n }\n },\n { runNow: this.options.persistInitialState ?? false, passive: true, throttle },\n ]);\n\n this.handles.add(cancel);\n }\n\n private async watchStorage() {\n if (!this.options.persistInitialState) {\n let items = this.storage.listItems();\n if (isPromise(items)) {\n items = await items;\n }\n\n if (this.stopped) {\n return;\n }\n\n const toLoad = new Map(\n [...items.entries()]\n .sort((a, b) => b[1].length - a[1].length)\n .map(([key, value]) => [this.parseKey(key), value])\n .filter(([key]) => key) as [Key, string][],\n );\n\n this.queue(() => this.load(toLoad));\n }\n\n this.queue(() => this.resolveInitialized?.());\n\n const listener = (event: MessageEvent) => {\n this.queue(() => this.load([{ type: 'data', path: event.data }]));\n };\n\n this.channel.addEventListener('message', listener);\n this.handles.add(() => this.channel.removeEventListener('message', listener));\n }\n\n private buildKey({ type, path }: Key) {\n return `${this.prefix}${type === 'internal' ? path : JSON.stringify(path)}`;\n }\n\n private parseKey(key: string): Key | undefined {\n if (!key.startsWith(this.prefix)) {\n return;\n }\n\n key = key.slice(this.prefix.length);\n\n if (!key.startsWith('[')) {\n return { type: 'internal', path: key };\n }\n\n return { type: 'data', path: JSON.parse(key) as KeyType[] };\n }\n\n private load(items: Key[] | Map<Key, string>): void | Promise<void> {\n return promiseChain(() => {\n if (Array.isArray(items)) {\n return promiseChain(() => {\n const entries = items.map(\n (key) =>\n promiseChain(() => {\n return this.storage.getItem(this.buildKey(key));\n }).next((value) => [key, value] as const).value,\n );\n\n return entries.some(isPromise)\n ? Promise.all(entries)\n : (entries as [Key, string | null][]);\n }).next((entries) => {\n return entries.filter((entry) => entry !== null) as [Key, string][];\n }).value;\n } else {\n return [...items.entries()];\n }\n }).next((entries) => {\n if (this.stopped) {\n return;\n }\n\n const toWrite = entries\n .filter(([key, value]) => {\n if (key.type !== 'data' || !value) {\n return;\n }\n\n if (\n !this.paths.find(\n (p) =>\n (p.path.length === 1 && p.path[0] === '*' && key.path.length === 0) ||\n (p.path.length === key.path.length && isAncestor(p.path, key.path)),\n )\n ) {\n return null;\n }\n\n const inSaveQueue = this.queue\n .getRefs()\n .find((ref) => isAncestor(ref, key.path) || isAncestor(key.path, ref));\n return !inSaveQueue;\n })\n .map(([key, value]) => {\n try {\n return {\n path: key.path,\n value: !value || value === 'undefined' ? undefined : fromExtendedJsonString(value),\n };\n } catch {\n return undefined;\n }\n })\n .filter(Boolean) as { path: KeyType[]; value: unknown }[];\n\n if (toWrite.length > 0) {\n for (const { path, value } of toWrite) {\n this.updateInProgress.set(JSON.stringify(path), value);\n }\n\n this.store.set((state) => {\n for (const { path, value } of toWrite) {\n if (value === undefined) {\n state = remove(state, path as any);\n } else {\n state = set(state, path as any, value);\n }\n }\n\n return state;\n });\n\n this.updateInProgress.clear();\n }\n\n const versionEntry = entries.find(\n ([key]) => key.type === 'internal' && key.path === 'version',\n );\n if (versionEntry) {\n this.store.version = versionEntry[1];\n }\n }).value;\n }\n\n private save(path: KeyType[]): void | Promise<unknown> {\n const key = this.buildKey({ type: 'data', path });\n const value = get(this.store.get() as any, path);\n\n return promiseChain(value)\n .next((value) => {\n if (value === undefined) {\n return this.storage.removeItem(key);\n } else {\n return this.storage.setItem(key, toExtendedJsonString(value));\n }\n })\n .next(() => {\n this.channel.postMessage(path);\n\n if (this.store.version) {\n return this.storage.setItem(\n this.buildKey({ type: 'internal', path: 'version' }),\n this.store.version,\n );\n } else {\n return this.storage.removeItem(this.buildKey({ type: 'internal', path: 'version' }));\n }\n }).value;\n }\n\n async stop(): Promise<void> {\n this.stopped = true;\n\n for (const handle of this.handles) {\n handle();\n }\n\n await this.queue.whenDone();\n this.channel.close();\n }\n}\n\nexport function persist<T>(store: Store<T>, options: PersistOptions<T>): Persist<T> {\n return new Persist<T>(store, options);\n}\n\nfunction isPlainPath<T>(p: PathOption<T>): p is WildcardPath<T> & (KeyType[] | string) {\n return typeof p === 'string' || Array.isArray(p);\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Cancel, Duration, KeyType, Store, WildcardPath } from "./store-MBrcOgtz.cjs";
1
+ import { M as KeyType, V as WildcardPath, b as Duration, g as Cancel, r as Store } from "./store-BRHFhRPm.js";
2
2
 
3
3
  //#region src/persist/persistStorage.d.ts
4
4
  interface PersistStorageBase {
@@ -57,5 +57,5 @@ declare class Persist<T> {
57
57
  }
58
58
  declare function persist<T>(store: Store<T>, options: PersistOptions<T>): Persist<T>;
59
59
  //#endregion
60
- export { Persist, PersistOptions, PersistStorage, PersistStorageBase, PersistStorageWithKeys, PersistStorageWithLength, PersistStorageWithListItems, persist };
61
- //# sourceMappingURL=persist-DVKRq8RQ.d.cts.map
60
+ export { PersistStorageBase as a, PersistStorageWithListItems as c, PersistStorage as i, PersistOptions as n, PersistStorageWithKeys as o, persist as r, PersistStorageWithLength as s, Persist as t };
61
+ //# sourceMappingURL=persist-DyI_JLxZ.d.ts.map
@@ -72,8 +72,7 @@ function castArrayPath(path) {
72
72
  return path.split(".");
73
73
  }
74
74
  function get(object, path) {
75
- const _path = castArrayPath(path);
76
- const [first, ...rest] = _path;
75
+ const [first, ...rest] = castArrayPath(path);
77
76
  if (first === void 0 || !object) return object;
78
77
  if (object instanceof Map) return get(object.get(first), rest);
79
78
  if (object instanceof Set) return get(Array.from(object)[Number(first)], rest);
@@ -81,8 +80,7 @@ function get(object, path) {
81
80
  throw new Error(`Could not get ${path} of ${object}`);
82
81
  }
83
82
  function set(object, path, value, rootPath = path) {
84
- const _path = castArrayPath(path);
85
- const [first, ...rest] = _path;
83
+ const [first, ...rest] = castArrayPath(path);
86
84
  if (first === void 0) return value;
87
85
  if (object instanceof Map) {
88
86
  const copy = flatClone(object);
@@ -105,7 +103,7 @@ function set(object, path, value, rootPath = path) {
105
103
  }
106
104
  function remove(object, path) {
107
105
  const _path = castArrayPath(path);
108
- if (_path.length === 0) return void 0;
106
+ if (_path.length === 0) return;
109
107
  const parentPath = _path.slice(0, -1);
110
108
  const key = _path[_path.length - 1];
111
109
  const parent = flatClone(get(object, parentPath));
@@ -182,4 +180,4 @@ Object.defineProperty(exports, 'strictEqual', {
182
180
  return strictEqual;
183
181
  }
184
182
  });
185
- //# sourceMappingURL=propAccess-BdLsqViO.cjs.map
183
+ //# sourceMappingURL=propAccess-C2AIn9RC.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"propAccess-BdLsqViO.cjs","names":["a","b"],"sources":["../src/lib/equals.ts","../src/lib/helpers.ts","../src/lib/clone.ts","../src/lib/propAccess.ts"],"sourcesContent":["export interface EqualityOptions {\n /** Treat undefined values as absent\n * @default false\n */\n undefinedEqualsAbsent?: boolean;\n}\n\nexport function strictEqual(a: any, b: any): boolean {\n return a === b;\n}\n\nexport function shallowEqual(a: any, b: any, options?: EqualityOptions): boolean {\n return internalEqual(a, b, strictEqual, options);\n}\n\nexport function deepEqual(a: any, b: any, options?: EqualityOptions): boolean {\n return internalEqual(a, b, (a, b) => deepEqual(a, b, options), options);\n}\n\nconst internalEqual = (\n a: any,\n b: any,\n comp: (a: any, b: any) => boolean,\n { undefinedEqualsAbsent = false }: EqualityOptions = {},\n) => {\n if (a === b) {\n return true;\n }\n\n if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') {\n // eslint-disable-next-line no-self-compare\n return a !== a && b !== b;\n }\n\n if (a.constructor !== b.constructor) {\n return false;\n }\n\n if (a.constructor === Object || Array.isArray(a)) {\n let entries1 = Object.entries(a);\n let entries2 = Object.entries(b);\n\n if (undefinedEqualsAbsent) {\n entries1 = entries1.filter(([_, value]) => value !== undefined);\n entries2 = entries2.filter(([_, value]) => value !== undefined);\n }\n\n return (\n entries1.length === entries2.length &&\n entries1.every(([key, value]) => key in b && comp(value, b[key]))\n );\n }\n\n if (a instanceof Date) {\n return a.getTime() === b.getTime();\n }\n\n if (a instanceof RegExp) {\n return a.source === b.source && a.flags === b.flags;\n }\n\n if (a instanceof Map) {\n let entries1 = [...a.entries()];\n let entries2 = [...b.entries()];\n\n if (undefinedEqualsAbsent) {\n entries1 = entries1.filter(([_, value]) => value !== undefined);\n entries2 = entries2.filter(([_, value]) => value !== undefined);\n }\n\n return (\n entries1.length === entries2.length &&\n entries1.every(([key, value]) => b.has(key) && comp(value, b.get(key)))\n );\n }\n\n if (a instanceof Set) {\n return a.size === b.size && [...a.values()].every((value) => b.has(value));\n }\n\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView(a)) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n\n const a_ = new Int8Array(a.buffer);\n const b_ = new Int8Array(b.buffer);\n return a_.every((value, i) => value === b_[i]);\n }\n\n return false;\n};\n","export function isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return (\n (prototype === null ||\n prototype === Object.prototype ||\n Object.getPrototypeOf(prototype) === null) &&\n !(Symbol.toStringTag in value) &&\n !(Symbol.iterator in value)\n );\n}\n","import { isObject } from '@lib/helpers';\n\nexport function flatClone<T>(object: T): T {\n if (object instanceof Map) {\n return new Map(object) as any;\n }\n\n if (object instanceof Set) {\n return new Set(object) as any;\n }\n\n if (Array.isArray(object)) {\n return [...object] as any;\n }\n\n if (isObject(object)) {\n return { ...object };\n }\n\n return object;\n}\n","import type { Constrain } from '@lib/constrain';\nimport { isObject } from '@lib/helpers';\nimport { flatClone } from './clone';\nimport type { KeyType, Path, SettablePath, SettableValue, Value } from './path';\n\nexport function castArrayPath(path: string | KeyType[]): KeyType[] {\n if (Array.isArray(path)) {\n return path;\n }\n\n if (path === '') {\n return [];\n }\n\n return (path as string).split('.');\n}\n\nexport function get<T, const P>(object: T, path: Constrain<P, Path<T>>): Value<T, P> {\n const _path = castArrayPath(path as any);\n const [first, ...rest] = _path;\n\n if (first === undefined || !object) {\n return object as Value<T, P>;\n }\n\n if (object instanceof Map) {\n return get(object.get(first), rest);\n }\n\n if (object instanceof Set) {\n return get(Array.from(object)[Number(first)], rest);\n }\n\n if (isObject(object)) {\n return get(object[first as keyof T], rest as any) as Value<T, P>;\n }\n\n throw new Error(`Could not get ${path} of ${object}`);\n}\n\nexport function set<T, const P>(\n object: T,\n path: Constrain<P, SettablePath<T>>,\n value: SettableValue<T, P>,\n rootPath: string | readonly KeyType[] = path,\n): T {\n const _path = castArrayPath(path as any);\n const [first, ...rest] = _path;\n\n if (first === undefined) {\n return value as T;\n }\n\n if (object instanceof Map) {\n const copy = flatClone(object);\n const child = copy.get(first);\n copy.set(first, set(child, rest as any, value, rootPath));\n return copy;\n }\n\n if (object instanceof Set) {\n const copy = [...object];\n const child = copy[Number(first)];\n copy[Number(first)] = set(child, rest as any, value, rootPath);\n return new Set(copy) as any;\n }\n\n if (isObject(object) || object === undefined) {\n const copy = flatClone(object ?? ({} as T));\n copy[first as keyof T] = set(copy[first as keyof T], rest as any, value as any, rootPath);\n return copy;\n }\n\n throw new Error(`Could not set ${path} of ${object}`);\n}\n\nexport function remove<T, const P>(object: T, path: Constrain<P, Path<T, true>>): T {\n const _path = castArrayPath(path as any);\n\n if (_path.length === 0) {\n return undefined as any;\n }\n\n const parentPath = _path.slice(0, -1);\n const key = _path[_path.length - 1];\n\n const parent = flatClone(get(object, parentPath as any));\n\n if (parent instanceof Map) {\n parent.delete(key);\n } else if (parent instanceof Set) {\n const value = Array.from(parent)[Number(key)];\n parent.delete(value);\n } else if (Array.isArray(parent)) {\n parent.splice(Number(key), 1);\n } else {\n delete parent[key as keyof typeof parent];\n }\n\n return set(object, parentPath as any, parent);\n}\n\nexport function join(a: string, b: string): string {\n return [a, b].filter(Boolean).join('.');\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"propAccess-C2AIn9RC.cjs","names":["a","b"],"sources":["../src/lib/equals.ts","../src/lib/helpers.ts","../src/lib/clone.ts","../src/lib/propAccess.ts"],"sourcesContent":["export interface EqualityOptions {\n /** Treat undefined values as absent\n * @default false\n */\n undefinedEqualsAbsent?: boolean;\n}\n\nexport function strictEqual(a: any, b: any): boolean {\n return a === b;\n}\n\nexport function shallowEqual(a: any, b: any, options?: EqualityOptions): boolean {\n return internalEqual(a, b, strictEqual, options);\n}\n\nexport function deepEqual(a: any, b: any, options?: EqualityOptions): boolean {\n return internalEqual(a, b, (a, b) => deepEqual(a, b, options), options);\n}\n\nconst internalEqual = (\n a: any,\n b: any,\n comp: (a: any, b: any) => boolean,\n { undefinedEqualsAbsent = false }: EqualityOptions = {},\n) => {\n if (a === b) {\n return true;\n }\n\n if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') {\n // eslint-disable-next-line no-self-compare\n return a !== a && b !== b;\n }\n\n if (a.constructor !== b.constructor) {\n return false;\n }\n\n if (a.constructor === Object || Array.isArray(a)) {\n let entries1 = Object.entries(a);\n let entries2 = Object.entries(b);\n\n if (undefinedEqualsAbsent) {\n entries1 = entries1.filter(([_, value]) => value !== undefined);\n entries2 = entries2.filter(([_, value]) => value !== undefined);\n }\n\n return (\n entries1.length === entries2.length &&\n entries1.every(([key, value]) => key in b && comp(value, b[key]))\n );\n }\n\n if (a instanceof Date) {\n return a.getTime() === b.getTime();\n }\n\n if (a instanceof RegExp) {\n return a.source === b.source && a.flags === b.flags;\n }\n\n if (a instanceof Map) {\n let entries1 = [...a.entries()];\n let entries2 = [...b.entries()];\n\n if (undefinedEqualsAbsent) {\n entries1 = entries1.filter(([_, value]) => value !== undefined);\n entries2 = entries2.filter(([_, value]) => value !== undefined);\n }\n\n return (\n entries1.length === entries2.length &&\n entries1.every(([key, value]) => b.has(key) && comp(value, b.get(key)))\n );\n }\n\n if (a instanceof Set) {\n return a.size === b.size && [...a.values()].every((value) => b.has(value));\n }\n\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView(a)) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n\n const a_ = new Int8Array(a.buffer);\n const b_ = new Int8Array(b.buffer);\n return a_.every((value, i) => value === b_[i]);\n }\n\n return false;\n};\n","export function isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return (\n (prototype === null ||\n prototype === Object.prototype ||\n Object.getPrototypeOf(prototype) === null) &&\n !(Symbol.toStringTag in value) &&\n !(Symbol.iterator in value)\n );\n}\n","import { isObject } from '@lib/helpers';\n\nexport function flatClone<T>(object: T): T {\n if (object instanceof Map) {\n return new Map(object) as any;\n }\n\n if (object instanceof Set) {\n return new Set(object) as any;\n }\n\n if (Array.isArray(object)) {\n return [...object] as any;\n }\n\n if (isObject(object)) {\n return { ...object };\n }\n\n return object;\n}\n","import type { Constrain } from '@lib/constrain';\nimport { isObject } from '@lib/helpers';\nimport { flatClone } from './clone';\nimport type { KeyType, Path, SettablePath, SettableValue, Value } from './path';\n\nexport function castArrayPath(path: string | KeyType[]): KeyType[] {\n if (Array.isArray(path)) {\n return path;\n }\n\n if (path === '') {\n return [];\n }\n\n return (path as string).split('.');\n}\n\nexport function get<T, const P>(object: T, path: Constrain<P, Path<T>>): Value<T, P> {\n const _path = castArrayPath(path as any);\n const [first, ...rest] = _path;\n\n if (first === undefined || !object) {\n return object as Value<T, P>;\n }\n\n if (object instanceof Map) {\n return get(object.get(first), rest);\n }\n\n if (object instanceof Set) {\n return get(Array.from(object)[Number(first)], rest);\n }\n\n if (isObject(object)) {\n return get(object[first as keyof T], rest as any) as Value<T, P>;\n }\n\n throw new Error(`Could not get ${path} of ${object}`);\n}\n\nexport function set<T, const P>(\n object: T,\n path: Constrain<P, SettablePath<T>>,\n value: SettableValue<T, P>,\n rootPath: string | readonly KeyType[] = path,\n): T {\n const _path = castArrayPath(path as any);\n const [first, ...rest] = _path;\n\n if (first === undefined) {\n return value as T;\n }\n\n if (object instanceof Map) {\n const copy = flatClone(object);\n const child = copy.get(first);\n copy.set(first, set(child, rest as any, value, rootPath));\n return copy;\n }\n\n if (object instanceof Set) {\n const copy = [...object];\n const child = copy[Number(first)];\n copy[Number(first)] = set(child, rest as any, value, rootPath);\n return new Set(copy) as any;\n }\n\n if (isObject(object) || object === undefined) {\n const copy = flatClone(object ?? ({} as T));\n copy[first as keyof T] = set(copy[first as keyof T], rest as any, value as any, rootPath);\n return copy;\n }\n\n throw new Error(`Could not set ${path} of ${object}`);\n}\n\nexport function remove<T, const P>(object: T, path: Constrain<P, Path<T, true>>): T {\n const _path = castArrayPath(path as any);\n\n if (_path.length === 0) {\n return undefined as any;\n }\n\n const parentPath = _path.slice(0, -1);\n const key = _path[_path.length - 1];\n\n const parent = flatClone(get(object, parentPath as any));\n\n if (parent instanceof Map) {\n parent.delete(key);\n } else if (parent instanceof Set) {\n const value = Array.from(parent)[Number(key)];\n parent.delete(value);\n } else if (Array.isArray(parent)) {\n parent.splice(Number(key), 1);\n } else {\n delete parent[key as keyof typeof parent];\n }\n\n return set(object, parentPath as any, parent);\n}\n\nexport function join(a: string, b: string): string {\n return [a, b].filter(Boolean).join('.');\n}\n"],"mappings":"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"}
@@ -71,8 +71,7 @@ function castArrayPath(path) {
71
71
  return path.split(".");
72
72
  }
73
73
  function get(object, path) {
74
- const _path = castArrayPath(path);
75
- const [first, ...rest] = _path;
74
+ const [first, ...rest] = castArrayPath(path);
76
75
  if (first === void 0 || !object) return object;
77
76
  if (object instanceof Map) return get(object.get(first), rest);
78
77
  if (object instanceof Set) return get(Array.from(object)[Number(first)], rest);
@@ -80,8 +79,7 @@ function get(object, path) {
80
79
  throw new Error(`Could not get ${path} of ${object}`);
81
80
  }
82
81
  function set(object, path, value, rootPath = path) {
83
- const _path = castArrayPath(path);
84
- const [first, ...rest] = _path;
82
+ const [first, ...rest] = castArrayPath(path);
85
83
  if (first === void 0) return value;
86
84
  if (object instanceof Map) {
87
85
  const copy = flatClone(object);
@@ -104,7 +102,7 @@ function set(object, path, value, rootPath = path) {
104
102
  }
105
103
  function remove(object, path) {
106
104
  const _path = castArrayPath(path);
107
- if (_path.length === 0) return void 0;
105
+ if (_path.length === 0) return;
108
106
  const parentPath = _path.slice(0, -1);
109
107
  const key = _path[_path.length - 1];
110
108
  const parent = flatClone(get(object, parentPath));
@@ -121,5 +119,5 @@ function join(a, b) {
121
119
  }
122
120
 
123
121
  //#endregion
124
- export { castArrayPath, deepEqual, get, isObject, isPlainObject, join, remove, set, shallowEqual, strictEqual };
125
- //# sourceMappingURL=propAccess-B260LXN1.js.map
122
+ export { set as a, deepEqual as c, remove as i, shallowEqual as l, get as n, isObject as o, join as r, isPlainObject as s, castArrayPath as t, strictEqual as u };
123
+ //# sourceMappingURL=propAccess-DvWFpYoj.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"propAccess-B260LXN1.js","names":["a","b"],"sources":["../src/lib/equals.ts","../src/lib/helpers.ts","../src/lib/clone.ts","../src/lib/propAccess.ts"],"sourcesContent":["export interface EqualityOptions {\n /** Treat undefined values as absent\n * @default false\n */\n undefinedEqualsAbsent?: boolean;\n}\n\nexport function strictEqual(a: any, b: any): boolean {\n return a === b;\n}\n\nexport function shallowEqual(a: any, b: any, options?: EqualityOptions): boolean {\n return internalEqual(a, b, strictEqual, options);\n}\n\nexport function deepEqual(a: any, b: any, options?: EqualityOptions): boolean {\n return internalEqual(a, b, (a, b) => deepEqual(a, b, options), options);\n}\n\nconst internalEqual = (\n a: any,\n b: any,\n comp: (a: any, b: any) => boolean,\n { undefinedEqualsAbsent = false }: EqualityOptions = {},\n) => {\n if (a === b) {\n return true;\n }\n\n if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') {\n // eslint-disable-next-line no-self-compare\n return a !== a && b !== b;\n }\n\n if (a.constructor !== b.constructor) {\n return false;\n }\n\n if (a.constructor === Object || Array.isArray(a)) {\n let entries1 = Object.entries(a);\n let entries2 = Object.entries(b);\n\n if (undefinedEqualsAbsent) {\n entries1 = entries1.filter(([_, value]) => value !== undefined);\n entries2 = entries2.filter(([_, value]) => value !== undefined);\n }\n\n return (\n entries1.length === entries2.length &&\n entries1.every(([key, value]) => key in b && comp(value, b[key]))\n );\n }\n\n if (a instanceof Date) {\n return a.getTime() === b.getTime();\n }\n\n if (a instanceof RegExp) {\n return a.source === b.source && a.flags === b.flags;\n }\n\n if (a instanceof Map) {\n let entries1 = [...a.entries()];\n let entries2 = [...b.entries()];\n\n if (undefinedEqualsAbsent) {\n entries1 = entries1.filter(([_, value]) => value !== undefined);\n entries2 = entries2.filter(([_, value]) => value !== undefined);\n }\n\n return (\n entries1.length === entries2.length &&\n entries1.every(([key, value]) => b.has(key) && comp(value, b.get(key)))\n );\n }\n\n if (a instanceof Set) {\n return a.size === b.size && [...a.values()].every((value) => b.has(value));\n }\n\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView(a)) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n\n const a_ = new Int8Array(a.buffer);\n const b_ = new Int8Array(b.buffer);\n return a_.every((value, i) => value === b_[i]);\n }\n\n return false;\n};\n","export function isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return (\n (prototype === null ||\n prototype === Object.prototype ||\n Object.getPrototypeOf(prototype) === null) &&\n !(Symbol.toStringTag in value) &&\n !(Symbol.iterator in value)\n );\n}\n","import { isObject } from '@lib/helpers';\n\nexport function flatClone<T>(object: T): T {\n if (object instanceof Map) {\n return new Map(object) as any;\n }\n\n if (object instanceof Set) {\n return new Set(object) as any;\n }\n\n if (Array.isArray(object)) {\n return [...object] as any;\n }\n\n if (isObject(object)) {\n return { ...object };\n }\n\n return object;\n}\n","import type { Constrain } from '@lib/constrain';\nimport { isObject } from '@lib/helpers';\nimport { flatClone } from './clone';\nimport type { KeyType, Path, SettablePath, SettableValue, Value } from './path';\n\nexport function castArrayPath(path: string | KeyType[]): KeyType[] {\n if (Array.isArray(path)) {\n return path;\n }\n\n if (path === '') {\n return [];\n }\n\n return (path as string).split('.');\n}\n\nexport function get<T, const P>(object: T, path: Constrain<P, Path<T>>): Value<T, P> {\n const _path = castArrayPath(path as any);\n const [first, ...rest] = _path;\n\n if (first === undefined || !object) {\n return object as Value<T, P>;\n }\n\n if (object instanceof Map) {\n return get(object.get(first), rest);\n }\n\n if (object instanceof Set) {\n return get(Array.from(object)[Number(first)], rest);\n }\n\n if (isObject(object)) {\n return get(object[first as keyof T], rest as any) as Value<T, P>;\n }\n\n throw new Error(`Could not get ${path} of ${object}`);\n}\n\nexport function set<T, const P>(\n object: T,\n path: Constrain<P, SettablePath<T>>,\n value: SettableValue<T, P>,\n rootPath: string | readonly KeyType[] = path,\n): T {\n const _path = castArrayPath(path as any);\n const [first, ...rest] = _path;\n\n if (first === undefined) {\n return value as T;\n }\n\n if (object instanceof Map) {\n const copy = flatClone(object);\n const child = copy.get(first);\n copy.set(first, set(child, rest as any, value, rootPath));\n return copy;\n }\n\n if (object instanceof Set) {\n const copy = [...object];\n const child = copy[Number(first)];\n copy[Number(first)] = set(child, rest as any, value, rootPath);\n return new Set(copy) as any;\n }\n\n if (isObject(object) || object === undefined) {\n const copy = flatClone(object ?? ({} as T));\n copy[first as keyof T] = set(copy[first as keyof T], rest as any, value as any, rootPath);\n return copy;\n }\n\n throw new Error(`Could not set ${path} of ${object}`);\n}\n\nexport function remove<T, const P>(object: T, path: Constrain<P, Path<T, true>>): T {\n const _path = castArrayPath(path as any);\n\n if (_path.length === 0) {\n return undefined as any;\n }\n\n const parentPath = _path.slice(0, -1);\n const key = _path[_path.length - 1];\n\n const parent = flatClone(get(object, parentPath as any));\n\n if (parent instanceof Map) {\n parent.delete(key);\n } else if (parent instanceof Set) {\n const value = Array.from(parent)[Number(key)];\n parent.delete(value);\n } else if (Array.isArray(parent)) {\n parent.splice(Number(key), 1);\n } else {\n delete parent[key as keyof typeof parent];\n }\n\n return set(object, parentPath as any, parent);\n}\n\nexport function join(a: string, b: string): string {\n return [a, b].filter(Boolean).join('.');\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"propAccess-DvWFpYoj.js","names":["a","b"],"sources":["../src/lib/equals.ts","../src/lib/helpers.ts","../src/lib/clone.ts","../src/lib/propAccess.ts"],"sourcesContent":["export interface EqualityOptions {\n /** Treat undefined values as absent\n * @default false\n */\n undefinedEqualsAbsent?: boolean;\n}\n\nexport function strictEqual(a: any, b: any): boolean {\n return a === b;\n}\n\nexport function shallowEqual(a: any, b: any, options?: EqualityOptions): boolean {\n return internalEqual(a, b, strictEqual, options);\n}\n\nexport function deepEqual(a: any, b: any, options?: EqualityOptions): boolean {\n return internalEqual(a, b, (a, b) => deepEqual(a, b, options), options);\n}\n\nconst internalEqual = (\n a: any,\n b: any,\n comp: (a: any, b: any) => boolean,\n { undefinedEqualsAbsent = false }: EqualityOptions = {},\n) => {\n if (a === b) {\n return true;\n }\n\n if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') {\n // eslint-disable-next-line no-self-compare\n return a !== a && b !== b;\n }\n\n if (a.constructor !== b.constructor) {\n return false;\n }\n\n if (a.constructor === Object || Array.isArray(a)) {\n let entries1 = Object.entries(a);\n let entries2 = Object.entries(b);\n\n if (undefinedEqualsAbsent) {\n entries1 = entries1.filter(([_, value]) => value !== undefined);\n entries2 = entries2.filter(([_, value]) => value !== undefined);\n }\n\n return (\n entries1.length === entries2.length &&\n entries1.every(([key, value]) => key in b && comp(value, b[key]))\n );\n }\n\n if (a instanceof Date) {\n return a.getTime() === b.getTime();\n }\n\n if (a instanceof RegExp) {\n return a.source === b.source && a.flags === b.flags;\n }\n\n if (a instanceof Map) {\n let entries1 = [...a.entries()];\n let entries2 = [...b.entries()];\n\n if (undefinedEqualsAbsent) {\n entries1 = entries1.filter(([_, value]) => value !== undefined);\n entries2 = entries2.filter(([_, value]) => value !== undefined);\n }\n\n return (\n entries1.length === entries2.length &&\n entries1.every(([key, value]) => b.has(key) && comp(value, b.get(key)))\n );\n }\n\n if (a instanceof Set) {\n return a.size === b.size && [...a.values()].every((value) => b.has(value));\n }\n\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView(a)) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n\n const a_ = new Int8Array(a.buffer);\n const b_ = new Int8Array(b.buffer);\n return a_.every((value, i) => value === b_[i]);\n }\n\n return false;\n};\n","export function isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return (\n (prototype === null ||\n prototype === Object.prototype ||\n Object.getPrototypeOf(prototype) === null) &&\n !(Symbol.toStringTag in value) &&\n !(Symbol.iterator in value)\n );\n}\n","import { isObject } from '@lib/helpers';\n\nexport function flatClone<T>(object: T): T {\n if (object instanceof Map) {\n return new Map(object) as any;\n }\n\n if (object instanceof Set) {\n return new Set(object) as any;\n }\n\n if (Array.isArray(object)) {\n return [...object] as any;\n }\n\n if (isObject(object)) {\n return { ...object };\n }\n\n return object;\n}\n","import type { Constrain } from '@lib/constrain';\nimport { isObject } from '@lib/helpers';\nimport { flatClone } from './clone';\nimport type { KeyType, Path, SettablePath, SettableValue, Value } from './path';\n\nexport function castArrayPath(path: string | KeyType[]): KeyType[] {\n if (Array.isArray(path)) {\n return path;\n }\n\n if (path === '') {\n return [];\n }\n\n return (path as string).split('.');\n}\n\nexport function get<T, const P>(object: T, path: Constrain<P, Path<T>>): Value<T, P> {\n const _path = castArrayPath(path as any);\n const [first, ...rest] = _path;\n\n if (first === undefined || !object) {\n return object as Value<T, P>;\n }\n\n if (object instanceof Map) {\n return get(object.get(first), rest);\n }\n\n if (object instanceof Set) {\n return get(Array.from(object)[Number(first)], rest);\n }\n\n if (isObject(object)) {\n return get(object[first as keyof T], rest as any) as Value<T, P>;\n }\n\n throw new Error(`Could not get ${path} of ${object}`);\n}\n\nexport function set<T, const P>(\n object: T,\n path: Constrain<P, SettablePath<T>>,\n value: SettableValue<T, P>,\n rootPath: string | readonly KeyType[] = path,\n): T {\n const _path = castArrayPath(path as any);\n const [first, ...rest] = _path;\n\n if (first === undefined) {\n return value as T;\n }\n\n if (object instanceof Map) {\n const copy = flatClone(object);\n const child = copy.get(first);\n copy.set(first, set(child, rest as any, value, rootPath));\n return copy;\n }\n\n if (object instanceof Set) {\n const copy = [...object];\n const child = copy[Number(first)];\n copy[Number(first)] = set(child, rest as any, value, rootPath);\n return new Set(copy) as any;\n }\n\n if (isObject(object) || object === undefined) {\n const copy = flatClone(object ?? ({} as T));\n copy[first as keyof T] = set(copy[first as keyof T], rest as any, value as any, rootPath);\n return copy;\n }\n\n throw new Error(`Could not set ${path} of ${object}`);\n}\n\nexport function remove<T, const P>(object: T, path: Constrain<P, Path<T, true>>): T {\n const _path = castArrayPath(path as any);\n\n if (_path.length === 0) {\n return undefined as any;\n }\n\n const parentPath = _path.slice(0, -1);\n const key = _path[_path.length - 1];\n\n const parent = flatClone(get(object, parentPath as any));\n\n if (parent instanceof Map) {\n parent.delete(key);\n } else if (parent instanceof Set) {\n const value = Array.from(parent)[Number(key)];\n parent.delete(value);\n } else if (Array.isArray(parent)) {\n parent.splice(Number(key), 1);\n } else {\n delete parent[key as keyof typeof parent];\n }\n\n return set(object, parentPath as any, parent);\n}\n\nexport function join(a: string, b: string): string {\n return [a, b].filter(Boolean).join('.');\n}\n"],"mappings":"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"}
@@ -1,11 +1,12 @@
1
- const require_chunk = require('../chunk-CUT6urMc.cjs');
2
- const require_store = require('../store-CdST5wJZ.cjs');
3
- const require_propAccess = require('../propAccess-BdLsqViO.cjs');
4
- const require_hash = require('../hash-Dv3XlmHn.cjs');
5
- const require_extendedJson = require('../extendedJson-Dn2F7Edo.cjs');
6
- const require_storeMethods = require('../storeMethods-B_RzvMaV.cjs');
7
- const react = require_chunk.__toESM(require("react"));
8
- const react_jsx_runtime = require_chunk.__toESM(require("react/jsx-runtime"));
1
+ const require_path = require('../path-B-Rq5q6m.cjs');
2
+ const require_store = require('../store-C1NYHLgR.cjs');
3
+ const require_propAccess = require('../propAccess-C2AIn9RC.cjs');
4
+ const require_extendedJson = require('../extendedJson-ursQ8DbQ.cjs');
5
+ const require_storeMethods = require('../storeMethods-CNu7VD6w.cjs');
6
+ let react = require("react");
7
+ react = require_path.__toESM(react);
8
+ let react_jsx_runtime = require("react/jsx-runtime");
9
+ react_jsx_runtime = require_path.__toESM(react_jsx_runtime);
9
10
 
10
11
  //#region src/react/form/customInput.tsx
11
12
  function CustomInput({ name, children,...props }) {
@@ -107,21 +108,17 @@ function FormField({ name = "", component, commitOnBlur, commitDebounce, render,
107
108
  function FormForEach({ name, renderElement, children }) {
108
109
  const form = this.useForm();
109
110
  const names = this.useFormState(() => {
110
- const field = form.getField(name);
111
- return field.names;
111
+ return form.getField(name).names;
112
112
  });
113
113
  const add = (0, react.useCallback)((...args) => {
114
- const field = form.getField(name);
115
- field.add(...args);
116
- }, [form]);
114
+ form.getField(name).add(...args);
115
+ }, [form, name]);
117
116
  const remove = (0, react.useCallback)((key) => {
118
- const field = form.getField(name);
119
- field.remove(key);
120
- }, [form]);
117
+ form.getField(name).remove(key);
118
+ }, [form, name]);
121
119
  const setValue = (0, react.useCallback)((value) => {
122
- const field = form.getField(name);
123
- field.setValue(value);
124
- }, [form]);
120
+ form.getField(name).setValue(value);
121
+ }, [form, name]);
125
122
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [renderElement && names.map((name$1, index) => {
126
123
  const key = name$1.split(".").pop();
127
124
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react.Fragment, { children: renderElement({
@@ -141,39 +138,38 @@ function FormForEach({ name, renderElement, children }) {
141
138
  //#endregion
142
139
  //#region src/react/form/useFormAutosave.ts
143
140
  function useFormAutosave(form) {
144
- const { formState, options, getDraft } = form;
145
- const debounceTime = require_store.calcDuration(options.autoSave?.debounce ?? 2e3);
146
- const latestRef = (0, react.useRef)({ options });
141
+ const debounceTime = require_store.calcDuration(form.options.autoSave?.debounce ?? 2e3);
142
+ const latestRef = require_storeMethods.useLatestRef(form);
147
143
  const lastValue = (0, react.useRef)(void 0);
148
144
  const q = (0, react.useMemo)(() => require_store.queue(), []);
149
145
  const run = (0, react.useMemo)(() => require_store.debounce(async () => {
150
- const { options: options$1 } = latestRef.current;
151
- const save = options$1.autoSave?.save;
152
- const draft = getDraft();
146
+ const save = latestRef.current.options.autoSave?.save;
147
+ const draft = latestRef.current.getDraft();
153
148
  lastValue.current = draft;
154
149
  q.clear();
155
150
  q(async () => {
156
151
  try {
157
- formState.set("saveInProgress", true);
158
- await save?.(draft, form);
159
- if (q.size === 0 && options$1.autoSave?.resetAfterSave) form.reset();
152
+ latestRef.current.formState.set("saveInProgress", true);
153
+ await save?.(draft, latestRef.current);
154
+ if (q.size === 0 && latestRef.current.options.autoSave?.resetAfterSave) latestRef.current.reset();
160
155
  } finally {
161
- formState.set("saveInProgress", false);
162
- if (q.size === 0) formState.set("saveScheduled", false);
156
+ latestRef.current.formState.set("saveInProgress", false);
157
+ if (q.size === 0) latestRef.current.formState.set("saveScheduled", false);
163
158
  }
164
159
  });
165
- }, debounceTime), [formState, debounceTime]);
160
+ }, debounceTime), [
161
+ latestRef,
162
+ debounceTime,
163
+ q
164
+ ]);
166
165
  (0, react.useEffect)(() => {
167
- if (!options.autoSave?.save) return;
168
- return formState.map((state) => state.draft).subscribe(() => {
169
- if (require_propAccess.deepEqual(getDraft(), lastValue.current)) return;
166
+ if (!latestRef.current.options.autoSave?.save) return;
167
+ return latestRef.current.formState.map((state) => state.draft).subscribe(() => {
168
+ if (require_propAccess.deepEqual(latestRef.current.getDraft(), lastValue.current)) return;
170
169
  run();
171
- formState.set("saveScheduled", true);
170
+ latestRef.current.formState.set("saveScheduled", true);
172
171
  }, { runNow: false });
173
- }, [formState]);
174
- (0, react.useEffect)(() => {
175
- latestRef.current = { options };
176
- });
172
+ }, [latestRef, run]);
177
173
  }
178
174
 
179
175
  //#endregion
@@ -182,7 +178,7 @@ function FormContainer({ form,...formProps }) {
182
178
  const formInstance = form.useForm();
183
179
  const hasTriggeredValidations = form.useFormState((state) => state.hasTriggeredValidations);
184
180
  const formRef = (0, react.useRef)(null);
185
- function updateValidity(errors, buttonElement) {
181
+ const updateValidity = require_storeMethods.useLatestFunction((errors, buttonElement) => {
186
182
  const formElement = formRef.current;
187
183
  if (!formElement) return;
188
184
  const localizedErrors = new Map([...errors.entries()].map(([field, errors$1]) => [field, errors$1.map((error) => formInstance.options.localizeError?.(error, field) ?? error)]));
@@ -191,10 +187,10 @@ function FormContainer({ form,...formProps }) {
191
187
  const errorString = [...errors.values()].flat().join("\n");
192
188
  buttonElement.setCustomValidity(errorString);
193
189
  }
194
- }
190
+ });
195
191
  (0, react.useEffect)(() => {
196
192
  return formInstance.formState.map(() => formInstance.getErrors()).subscribe((errors) => updateValidity(errors));
197
- }, []);
193
+ }, [formInstance, updateValidity]);
198
194
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("form", {
199
195
  ref: formRef,
200
196
  noValidate: true,
@@ -209,8 +205,7 @@ function FormContainer({ form,...formProps }) {
209
205
  const buttonElement = event.nativeEvent instanceof SubmitEvent && event.nativeEvent.submitter instanceof HTMLButtonElement ? event.nativeEvent.submitter : void 0;
210
206
  updateValidity(formInstance.getErrors(), buttonElement);
211
207
  formElement.reportValidity();
212
- const isValid = formInstance.validate();
213
- if (isValid) await formProps.onSubmit?.(event, {
208
+ if (formInstance.validate()) await formProps.onSubmit?.(event, {
214
209
  ...formInstance,
215
210
  ...getDerivedState(formInstance)
216
211
  });
@@ -221,13 +216,12 @@ function FormContainer({ form,...formProps }) {
221
216
  });
222
217
  }
223
218
  function getField(form, path) {
224
- const field = {
219
+ return {
225
220
  get originalValue() {
226
221
  return form.original !== void 0 ? require_propAccess.get(form.original, path) : void 0;
227
222
  },
228
223
  get value() {
229
- const draft = form.getDraft();
230
- return require_propAccess.get(draft ?? form.original ?? form.options.defaultValue, path);
224
+ return require_propAccess.get(form.getDraft() ?? form.original ?? form.options.defaultValue, path);
231
225
  },
232
226
  setValue(update) {
233
227
  form.formState.set("draft", (draft = form.original ?? form.options.defaultValue) => {
@@ -239,8 +233,7 @@ function getField(form, path) {
239
233
  return !require_propAccess.deepEqual(this.originalValue, this.value, { undefinedEqualsAbsent: true });
240
234
  },
241
235
  get errors() {
242
- const errors = form.getErrors();
243
- return errors.get(path) ?? [];
236
+ return form.getErrors().get(path) ?? [];
244
237
  },
245
238
  get names() {
246
239
  const { value } = this;
@@ -271,7 +264,6 @@ function getField(form, path) {
271
264
  });
272
265
  }
273
266
  };
274
- return field;
275
267
  }
276
268
  function getErrors(draft, original, validations) {
277
269
  const errors = /* @__PURE__ */ new Map();
@@ -425,8 +417,9 @@ var Form = class Form {
425
417
  });
426
418
  }, [
427
419
  original,
428
- defaultValue,
429
- options.transform
420
+ options.defaultValue,
421
+ options.transform,
422
+ formState
430
423
  ]);
431
424
  useFormAutosave(context);
432
425
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(this.context.Provider, {
@@ -438,8 +431,7 @@ var Form = class Form {
438
431
  });
439
432
  }
440
433
  FormState({ selector, children }) {
441
- const selectedState = this.useFormState(selector);
442
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: children(selectedState) });
434
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: children(this.useFormState(selector)) });
443
435
  }
444
436
  Field(props) {
445
437
  return Reflect.apply(FormField, this, [{
@@ -473,11 +465,11 @@ function castArray(value) {
473
465
  //#endregion
474
466
  //#region src/react/url/urlHelpers.ts
475
467
  function defaultDeserializer(value) {
476
- if (value === void 0) return void 0;
468
+ if (value === void 0) return;
477
469
  try {
478
470
  return require_extendedJson.fromExtendedJsonString(value);
479
471
  } catch {
480
- return void 0;
472
+ return;
481
473
  }
482
474
  }
483
475
  function defaultSerializer(value) {
@@ -561,8 +553,7 @@ var UrlParamStore = class UrlParamStore extends require_store.Store {
561
553
  getUrlValue() {
562
554
  const href = urlStore.get();
563
555
  const url = new URL(href);
564
- const params = new URLSearchParams(url[this.urlOptions.type].slice(1) || "");
565
- return params.get(this.urlOptions.key);
556
+ return new URLSearchParams(url[this.urlOptions.type].slice(1) || "").get(this.urlOptions.key);
566
557
  }
567
558
  getStorageValue() {
568
559
  return this.storageKey !== null ? localStorage.getItem(this.storageKey) : null;
@@ -581,8 +572,7 @@ var UrlParamStore = class UrlParamStore extends require_store.Store {
581
572
  if (!this.isPathActive() && this.lastHref !== void 0) href = this.lastHref;
582
573
  if (this.lastHref === href && this.lastStorageValue === storageValue) return this.lastValue;
583
574
  const url = new URL(href);
584
- const params = new URLSearchParams(url[this.urlOptions.type].slice(1));
585
- const urlValue = params.get(this.urlOptions.key);
575
+ const urlValue = new URLSearchParams(url[this.urlOptions.type].slice(1)).get(this.urlOptions.key);
586
576
  const value = urlValue !== null ? this.urlOptions.deserialize(urlValue) : this.storageKey !== null && storageValue !== null ? this.urlOptions.deserialize(storageValue) : this.urlOptions.defaultValue;
587
577
  this.lastHref = href;
588
578
  this.lastStorageValue = storageValue;
@@ -610,16 +600,14 @@ var UrlParamStore = class UrlParamStore extends require_store.Store {
610
600
  if (update instanceof Function) {
611
601
  const before = this.get();
612
602
  const valueBefore = require_propAccess.get(before, path);
613
- const valueAfter = update(valueBefore);
614
- update = require_propAccess.set(before, path, valueAfter);
603
+ update = require_propAccess.set(before, path, update(valueBefore));
615
604
  } else if (path.length > 0) update = require_propAccess.set(this.get(), path, update);
616
605
  if (this.isPathActive()) this.updateUrl(update);
617
606
  else this.updateStorage(update);
618
607
  }
619
608
  parse(path) {
620
609
  const url = new URL(path, window.location.href);
621
- const params = new URLSearchParams(url[this.urlOptions.type].slice(1) || "");
622
- const urlValue = params.get(this.urlOptions.key);
610
+ const urlValue = new URLSearchParams(url[this.urlOptions.type].slice(1) || "").get(this.urlOptions.key);
623
611
  return urlValue !== null ? this.urlOptions.deserialize(urlValue) : this.urlOptions.defaultValue;
624
612
  }
625
613
  };
@@ -631,32 +619,30 @@ function createUrlParam(options) {
631
619
  //#region src/react/useDecoupledState.ts
632
620
  function useDecoupledState(value, onChange, options = {}) {
633
621
  const [dirty, setDirty] = (0, react.useState)();
634
- const ref = (0, react.useRef)({
635
- onChange,
636
- onCommit: options.onCommit
637
- });
638
- (0, react.useEffect)(() => {
639
- ref.current = {
640
- onChange,
641
- onCommit: options.onCommit
642
- };
643
- }, [onChange]);
622
+ const latestOnChange = require_storeMethods.useLatestFunction(onChange);
623
+ const latestOnCommit = require_storeMethods.useLatestFunction(options.onCommit ?? (() => {}));
624
+ const debounceOptions = require_storeMethods.useMemoEquals(options.debounce);
625
+ const throttleOptions = require_storeMethods.useMemoEquals(options.throttle);
644
626
  const update = (0, react.useMemo)(() => {
645
- const { onChange: onChange$1, onCommit } = ref.current;
646
627
  const update$1 = (value$1) => {
647
- onChange$1(value$1);
628
+ latestOnChange(value$1);
648
629
  setDirty(void 0);
649
- onCommit?.(value$1);
630
+ latestOnCommit(value$1);
650
631
  };
651
632
  let delayedUpdate;
652
- if (options.debounce) delayedUpdate = require_store.debounce(update$1, options.debounce);
653
- else if (options.throttle) delayedUpdate = require_store.throttle(update$1, options.throttle);
633
+ if (debounceOptions) delayedUpdate = require_store.debounce(update$1, debounceOptions);
634
+ else if (throttleOptions) delayedUpdate = require_store.throttle(update$1, throttleOptions);
654
635
  else delayedUpdate = (value$1) => (0, react.startTransition)(() => update$1(value$1));
655
636
  return (value$1) => {
656
637
  setDirty({ v: value$1 });
657
638
  delayedUpdate(value$1);
658
639
  };
659
- }, [require_hash.simpleHash([options.debounce, options.throttle])]);
640
+ }, [
641
+ latestOnChange,
642
+ latestOnCommit,
643
+ debounceOptions,
644
+ throttleOptions
645
+ ]);
660
646
  return [dirty ? dirty.v : value, update];
661
647
  }
662
648