cross-state 0.37.12 → 0.37.13

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 (61) hide show
  1. package/dist/cjs/diff.cjs +6 -2
  2. package/dist/cjs/diff.cjs.map +1 -1
  3. package/dist/cjs/hash.cjs +5 -2
  4. package/dist/cjs/hash.cjs.map +1 -1
  5. package/dist/cjs/index.cjs +18 -13
  6. package/dist/cjs/index.cjs.map +1 -1
  7. package/dist/cjs/mutative/index.cjs +8 -3
  8. package/dist/cjs/mutative/index.cjs.map +1 -1
  9. package/dist/cjs/mutative/register.cjs +5 -3
  10. package/dist/cjs/mutative/register.cjs.map +1 -1
  11. package/dist/cjs/mutativeMethods.cjs +5 -2
  12. package/dist/cjs/mutativeMethods.cjs.map +1 -1
  13. package/dist/cjs/patches/index.cjs +7 -3
  14. package/dist/cjs/patches/index.cjs.map +1 -1
  15. package/dist/cjs/patches/register.cjs +5 -3
  16. package/dist/cjs/patches/register.cjs.map +1 -1
  17. package/dist/cjs/propAccess.cjs +6 -1
  18. package/dist/cjs/propAccess.cjs.map +1 -1
  19. package/dist/cjs/react/index.cjs +38 -36
  20. package/dist/cjs/react/index.cjs.map +1 -1
  21. package/dist/cjs/react/register.cjs +6 -4
  22. package/dist/cjs/react/register.cjs.map +1 -1
  23. package/dist/cjs/scope.cjs +32 -43
  24. package/dist/cjs/scope.cjs.map +1 -1
  25. package/dist/cjs/store.cjs +53 -46
  26. package/dist/cjs/store.cjs.map +1 -1
  27. package/dist/cjs/storeMethods.cjs +467 -341
  28. package/dist/cjs/storeMethods.cjs.map +1 -1
  29. package/dist/cjs/urlStore.cjs +9 -6
  30. package/dist/cjs/urlStore.cjs.map +1 -1
  31. package/dist/es/diff.mjs +5 -5
  32. package/dist/es/diff.mjs.map +1 -1
  33. package/dist/es/hash.mjs +4 -4
  34. package/dist/es/hash.mjs.map +1 -1
  35. package/dist/es/index.mjs +17 -42
  36. package/dist/es/index.mjs.map +1 -1
  37. package/dist/es/mutative/index.mjs +1 -4
  38. package/dist/es/mutative/index.mjs.map +1 -1
  39. package/dist/es/mutative/register.mjs +3 -2
  40. package/dist/es/mutative/register.mjs.map +1 -1
  41. package/dist/es/mutativeMethods.mjs +4 -4
  42. package/dist/es/mutativeMethods.mjs.map +1 -1
  43. package/dist/es/patches/index.mjs +4 -4
  44. package/dist/es/patches/index.mjs.map +1 -1
  45. package/dist/es/patches/register.mjs +3 -2
  46. package/dist/es/patches/register.mjs.map +1 -1
  47. package/dist/es/propAccess.mjs +5 -12
  48. package/dist/es/propAccess.mjs.map +1 -1
  49. package/dist/es/react/index.mjs +36 -52
  50. package/dist/es/react/index.mjs.map +1 -1
  51. package/dist/es/react/register.mjs +4 -3
  52. package/dist/es/react/register.mjs.map +1 -1
  53. package/dist/es/scope.mjs +31 -52
  54. package/dist/es/scope.mjs.map +1 -1
  55. package/dist/es/store.mjs +52 -62
  56. package/dist/es/store.mjs.map +1 -1
  57. package/dist/es/storeMethods.mjs +455 -341
  58. package/dist/es/storeMethods.mjs.map +1 -1
  59. package/dist/es/urlStore.mjs +5 -7
  60. package/dist/es/urlStore.mjs.map +1 -1
  61. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/lib/updateHelpers.ts","../../src/persist/persistPathHelpers.ts","../../src/lib/maybeAsync.ts","../../src/persist/persistStorage.ts","../../src/persist/persist.ts"],"sourcesContent":["export function findOrDefault<T>(\n array: T[],\n predicate: (item: T) => boolean,\n defaultValue: T | (() => T),\n): T {\n const index = array.findIndex(predicate);\n\n if (index >= 0) {\n return array[index]!;\n }\n\n const value = defaultValue instanceof Function ? defaultValue() : defaultValue;\n array.push(value);\n return value;\n}\n","import { isObject } from '@lib/helpers';\nimport 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 = (\n value: any,\n path: KeyType[],\n): [value: unknown, subValues: { path: KeyType[]; value: unknown }[]] => {\n const [first, ...rest] = path;\n if (first === undefined) return [value, []];\n\n if (rest.length === 0) {\n if (first === '*')\n return [{}, Object.entries(value).map(([k, v]) => ({ path: [k], value: v }))];\n if (!(first in value)) return [value, []];\n const { [first]: subValue, ...newValue } = value;\n return [newValue, [{ path: [first], value: subValue }]];\n }\n\n const newValue = { ...value };\n const subValues = new Array<{ path: KeyType[]; value: unknown }>();\n for (const key of first === '*' ? Object.keys(value) : [first]) {\n if (!isObject(newValue[key])) return [value, []];\n const result = split(newValue[key], rest);\n newValue[key] = result[0];\n subValues.push(...result[1].map((s) => ({ path: [key, ...s.path], value: s.value })));\n }\n return [newValue, subValues];\n};\n","import isPromise from '@lib/isPromise';\nimport type { MaybePromise } from './maybePromise';\n\nexport function maybeAsync<T, R>(\n value: MaybePromise<T>,\n action: (value: T) => MaybePromise<R>,\n): MaybePromise<R> {\n if (isPromise(value)) {\n return value.then(action);\n }\n return action(value);\n}\n\nexport function maybeAsyncArray<T>(values: (() => MaybePromise<T>)[]): MaybePromise<T[]> {\n const run = (remainingValues: (() => MaybePromise<T>)[], results: T[]): MaybePromise<T[]> => {\n const [first, ...rest] = remainingValues;\n if (!first) {\n return results;\n }\n\n return maybeAsync(first(), (result) => run(rest, results.concat(result)));\n };\n\n return run(values, []);\n}\n","import { maybeAsync, maybeAsyncArray } from '@lib/maybeAsync';\n\nexport interface PersistStorageBase {\n getItem: (key: string) => string | null | Promise<string | null>;\n setItem: (key: string, value: string) => unknown | Promise<unknown>;\n removeItem: (key: string) => unknown | 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 type PersistStorage = PersistStorageBase &\n (PersistStorageWithKeys | PersistStorageWithLength);\n\nexport function normalizeStorage(storage: PersistStorage): PersistStorageWithKeys {\n return {\n getItem: storage.getItem.bind(storage),\n setItem: storage.setItem.bind(storage),\n removeItem: storage.removeItem.bind(storage),\n\n keys(): string[] | Promise<string[]> {\n if ('keys' in storage) {\n return storage.keys();\n }\n\n return maybeAsync(\n storage.length instanceof Function ? storage.length() : storage.length,\n (length) => {\n const keyPromises = maybeAsyncArray(\n Array.from({ length }, (_, index) => () => storage.key(index)),\n );\n\n return maybeAsync(keyPromises, (keys) =>\n keys.filter((key): key is string => typeof key === 'string'),\n );\n },\n );\n },\n };\n}\n","import { isAncestor } from './persistPathHelpers';\nimport {\n normalizeStorage,\n type PersistStorage,\n type PersistStorageWithKeys,\n} from './persistStorage';\nimport { type Cancel, type Store } from '@core';\nimport { diff } from '@lib/diff';\nimport { shallowEqual } from '@lib/equals';\nimport isPromise from '@lib/isPromise';\nimport { maybeAsync, maybeAsyncArray } from '@lib/maybeAsync';\nimport type { KeyType, WildcardPath } from '@lib/path';\nimport { castArrayPath, get, set } from '@lib/propAccess';\nimport { queue } from '@lib/queue';\n\ntype PathOption<T> =\n | WildcardPath<T>\n | {\n path: WildcardPath<T>;\n throttleMs?: number;\n };\n\nexport interface PersistOptions<T> {\n id: string;\n storage: PersistStorage;\n paths?: PathOption<T>[];\n throttleMs?: number;\n}\n\nexport class Persist<T> {\n readonly storage: PersistStorageWithKeys;\n\n readonly paths: {\n path: KeyType[];\n throttleMs?: 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?: [any, any];\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 this.paths = (options.paths ?? [])\n .map<{\n path: KeyType[];\n throttleMs?: number;\n }>((p) => {\n if (isPlainPath(p)) {\n return { path: castArrayPath(p) };\n }\n\n const _p = p as { path: KeyType[]; throttleMs?: number };\n\n return {\n path: castArrayPath(_p.path),\n throttleMs: _p.throttleMs,\n };\n })\n .sort((a, b) => b.path.length - a.path.length);\n\n if (this.paths.length === 0) {\n this.paths.push({ path: ['*'] });\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 let committed = this.store.get();\n\n const cancel = this.store.subscribe(\n (value) => {\n const [patches] = diff(committed, value);\n committed = value;\n\n for (const patch of patches) {\n if (\n this.updateInProgress &&\n shallowEqual(this.updateInProgress[0], patch.path) &&\n this.updateInProgress[1] === (patch.op === 'remove' ? undefined : patch.value)\n ) {\n continue;\n }\n\n const ancestor = this.paths.find((p) => isAncestor(p.path, patch.path));\n\n if (!ancestor) {\n continue;\n }\n\n const pathToSave = patch.path.slice(0, ancestor.path.length);\n this.queue(() => this.save(pathToSave), pathToSave);\n }\n },\n { runNow: false },\n );\n\n this.handles.add(cancel);\n }\n\n private async watchStorage() {\n let keys = this.storage.keys();\n if (isPromise(keys)) {\n keys = await keys;\n }\n\n if (this.stopped) {\n return;\n }\n\n for (const key of keys) {\n const path = this.parseKey(key);\n if (!path) {\n continue;\n }\n\n this.queue(() => this.load(path));\n }\n\n this.queue(() => this.resolveInitialized?.());\n\n const listener = (event: MessageEvent) => {\n this.queue(() => this.load(event.data));\n };\n\n this.channel.addEventListener('message', listener);\n this.handles.add(() => this.channel.removeEventListener('message', listener));\n }\n\n private buildKey(path: KeyType[]) {\n return `${this.prefix}${JSON.stringify(path)}`;\n }\n\n private parseKey(key: string) {\n if (!key.startsWith(this.prefix)) {\n return;\n }\n\n return JSON.parse(key.slice(this.prefix.length)) as KeyType[];\n }\n\n private load(path: KeyType[]) {\n const matchingPath = this.paths.find(\n (p) => p.path.length === path.length && isAncestor(p.path, path),\n );\n if (!matchingPath) {\n return;\n }\n\n const key = this.buildKey(path);\n\n return maybeAsync(this.storage.getItem(key), (value) => {\n if (this.stopped || !value) {\n return;\n }\n\n const inSaveQueue = this.queue\n .getRefs()\n .find((ref) => isAncestor(ref, path) || isAncestor(path, ref));\n if (inSaveQueue) {\n return;\n }\n\n const parsedValue = value === 'undefined' ? undefined : JSON.parse(value);\n\n this.updateInProgress = [path, parsedValue];\n this.store.set((state) => set(state, path as any, parsedValue));\n this.updateInProgress = undefined;\n });\n }\n\n private save(path: KeyType[]) {\n const key = this.buildKey(path);\n const value = get(this.store.get(), path as any);\n const serializedValue = value === undefined ? 'undefined' : JSON.stringify(value);\n\n return maybeAsync(this.storage.setItem(key, serializedValue), () => {\n this.channel.postMessage(path);\n\n return maybeAsync(this.storage.keys(), (keys) => {\n const toRemove = keys.filter((k) => {\n const parsedKey = this.parseKey(k);\n return (\n parsedKey && parsedKey.length > path.length && isAncestor(path, parsedKey)\n // !this.queue.getRefs().find((ref) => isAncestor(ref, parsedKey))\n );\n });\n\n return maybeAsyncArray(toRemove.map((k) => () => this.storage.removeItem(k)));\n });\n });\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"],"names":["a","b"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/lib/updateHelpers.ts","../../src/persist/persistPathHelpers.ts","../../src/lib/maybeAsync.ts","../../src/persist/persistStorage.ts","../../src/persist/persist.ts"],"sourcesContent":["export function findOrDefault<T>(\n array: T[],\n predicate: (item: T) => boolean,\n defaultValue: T | (() => T),\n): T {\n const index = array.findIndex(predicate);\n\n if (index >= 0) {\n return array[index]!;\n }\n\n const value = defaultValue instanceof Function ? defaultValue() : defaultValue;\n array.push(value);\n return value;\n}\n","import { isObject } from '@lib/helpers';\nimport 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 = (\n value: any,\n path: KeyType[],\n): [value: unknown, subValues: { path: KeyType[]; value: unknown }[]] => {\n const [first, ...rest] = path;\n if (first === undefined) return [value, []];\n\n if (rest.length === 0) {\n if (first === '*')\n return [{}, Object.entries(value).map(([k, v]) => ({ path: [k], value: v }))];\n if (!(first in value)) return [value, []];\n const { [first]: subValue, ...newValue } = value;\n return [newValue, [{ path: [first], value: subValue }]];\n }\n\n const newValue = { ...value };\n const subValues = new Array<{ path: KeyType[]; value: unknown }>();\n for (const key of first === '*' ? Object.keys(value) : [first]) {\n if (!isObject(newValue[key])) return [value, []];\n const result = split(newValue[key], rest);\n newValue[key] = result[0];\n subValues.push(...result[1].map((s) => ({ path: [key, ...s.path], value: s.value })));\n }\n return [newValue, subValues];\n};\n","import isPromise from '@lib/isPromise';\nimport type { MaybePromise } from './maybePromise';\n\nexport function maybeAsync<T, R>(\n value: MaybePromise<T>,\n action: (value: T) => MaybePromise<R>,\n): MaybePromise<R> {\n if (isPromise(value)) {\n return value.then(action);\n }\n return action(value);\n}\n\nexport function maybeAsyncArray<T>(values: (() => MaybePromise<T>)[]): MaybePromise<T[]> {\n const run = (remainingValues: (() => MaybePromise<T>)[], results: T[]): MaybePromise<T[]> => {\n const [first, ...rest] = remainingValues;\n if (!first) {\n return results;\n }\n\n return maybeAsync(first(), (result) => run(rest, results.concat(result)));\n };\n\n return run(values, []);\n}\n","import { maybeAsync, maybeAsyncArray } from '@lib/maybeAsync';\n\nexport interface PersistStorageBase {\n getItem: (key: string) => string | null | Promise<string | null>;\n setItem: (key: string, value: string) => unknown | Promise<unknown>;\n removeItem: (key: string) => unknown | 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 type PersistStorage = PersistStorageBase &\n (PersistStorageWithKeys | PersistStorageWithLength);\n\nexport function normalizeStorage(storage: PersistStorage): PersistStorageWithKeys {\n return {\n getItem: storage.getItem.bind(storage),\n setItem: storage.setItem.bind(storage),\n removeItem: storage.removeItem.bind(storage),\n\n keys(): string[] | Promise<string[]> {\n if ('keys' in storage) {\n return storage.keys();\n }\n\n return maybeAsync(\n storage.length instanceof Function ? storage.length() : storage.length,\n (length) => {\n const keyPromises = maybeAsyncArray(\n Array.from({ length }, (_, index) => () => storage.key(index)),\n );\n\n return maybeAsync(keyPromises, (keys) =>\n keys.filter((key): key is string => typeof key === 'string'),\n );\n },\n );\n },\n };\n}\n","import { isAncestor } from './persistPathHelpers';\nimport {\n normalizeStorage,\n type PersistStorage,\n type PersistStorageWithKeys,\n} from './persistStorage';\nimport { type Cancel, type Store } from '@core';\nimport { diff } from '@lib/diff';\nimport { shallowEqual } from '@lib/equals';\nimport isPromise from '@lib/isPromise';\nimport { maybeAsync, maybeAsyncArray } from '@lib/maybeAsync';\nimport type { KeyType, WildcardPath } from '@lib/path';\nimport { castArrayPath, get, set } from '@lib/propAccess';\nimport { queue } from '@lib/queue';\n\ntype PathOption<T> =\n | WildcardPath<T>\n | {\n path: WildcardPath<T>;\n throttleMs?: number;\n };\n\nexport interface PersistOptions<T> {\n id: string;\n storage: PersistStorage;\n paths?: PathOption<T>[];\n throttleMs?: number;\n}\n\nexport class Persist<T> {\n readonly storage: PersistStorageWithKeys;\n\n readonly paths: {\n path: KeyType[];\n throttleMs?: 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?: [any, any];\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 this.paths = (options.paths ?? [])\n .map<{\n path: KeyType[];\n throttleMs?: number;\n }>((p) => {\n if (isPlainPath(p)) {\n return { path: castArrayPath(p) };\n }\n\n const _p = p as { path: KeyType[]; throttleMs?: number };\n\n return {\n path: castArrayPath(_p.path),\n throttleMs: _p.throttleMs,\n };\n })\n .sort((a, b) => b.path.length - a.path.length);\n\n if (this.paths.length === 0) {\n this.paths.push({ path: ['*'] });\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 let committed = this.store.get();\n\n const cancel = this.store.subscribe(\n (value) => {\n const [patches] = diff(committed, value);\n committed = value;\n\n for (const patch of patches) {\n if (\n this.updateInProgress &&\n shallowEqual(this.updateInProgress[0], patch.path) &&\n this.updateInProgress[1] === (patch.op === 'remove' ? undefined : patch.value)\n ) {\n continue;\n }\n\n const ancestor = this.paths.find((p) => isAncestor(p.path, patch.path));\n\n if (!ancestor) {\n continue;\n }\n\n const pathToSave = patch.path.slice(0, ancestor.path.length);\n this.queue(() => this.save(pathToSave), pathToSave);\n }\n },\n { runNow: false },\n );\n\n this.handles.add(cancel);\n }\n\n private async watchStorage() {\n let keys = this.storage.keys();\n if (isPromise(keys)) {\n keys = await keys;\n }\n\n if (this.stopped) {\n return;\n }\n\n for (const key of keys) {\n const path = this.parseKey(key);\n if (!path) {\n continue;\n }\n\n this.queue(() => this.load(path));\n }\n\n this.queue(() => this.resolveInitialized?.());\n\n const listener = (event: MessageEvent) => {\n this.queue(() => this.load(event.data));\n };\n\n this.channel.addEventListener('message', listener);\n this.handles.add(() => this.channel.removeEventListener('message', listener));\n }\n\n private buildKey(path: KeyType[]) {\n return `${this.prefix}${JSON.stringify(path)}`;\n }\n\n private parseKey(key: string) {\n if (!key.startsWith(this.prefix)) {\n return;\n }\n\n return JSON.parse(key.slice(this.prefix.length)) as KeyType[];\n }\n\n private load(path: KeyType[]) {\n const matchingPath = this.paths.find(\n (p) => p.path.length === path.length && isAncestor(p.path, path),\n );\n if (!matchingPath) {\n return;\n }\n\n const key = this.buildKey(path);\n\n return maybeAsync(this.storage.getItem(key), (value) => {\n if (this.stopped || !value) {\n return;\n }\n\n const inSaveQueue = this.queue\n .getRefs()\n .find((ref) => isAncestor(ref, path) || isAncestor(path, ref));\n if (inSaveQueue) {\n return;\n }\n\n const parsedValue = value === 'undefined' ? undefined : JSON.parse(value);\n\n this.updateInProgress = [path, parsedValue];\n this.store.set((state) => set(state, path as any, parsedValue));\n this.updateInProgress = undefined;\n });\n }\n\n private save(path: KeyType[]) {\n const key = this.buildKey(path);\n const value = get(this.store.get(), path as any);\n const serializedValue = value === undefined ? 'undefined' : JSON.stringify(value);\n\n return maybeAsync(this.storage.setItem(key, serializedValue), () => {\n this.channel.postMessage(path);\n\n return maybeAsync(this.storage.keys(), (keys) => {\n const toRemove = keys.filter((k) => {\n const parsedKey = this.parseKey(k);\n return (\n parsedKey && parsedKey.length > path.length && isAncestor(path, parsedKey)\n // !this.queue.getRefs().find((ref) => isAncestor(ref, parsedKey))\n );\n });\n\n return maybeAsyncArray(toRemove.map((k) => () => this.storage.removeItem(k)));\n });\n });\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"],"names":[],"mappings":"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"}
@@ -1,5 +1,2 @@
1
- import { m } from "../mutativeMethods.mjs";
2
- export {
3
- m as mutativeMethods
4
- };
1
+ export { m as mutativeMethods } from '../mutativeMethods.mjs';
5
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,5 +1,6 @@
1
- import { S as Store, a as autobind } from "../store.mjs";
2
- import { m as mutativeMethods } from "../mutativeMethods.mjs";
1
+ import { S as Store, a as autobind } from '../store.mjs';
2
+ import { m as mutativeMethods } from '../mutativeMethods.mjs';
3
+
3
4
  Object.assign(Store.prototype, mutativeMethods);
4
5
  autobind(Store);
5
6
  //# sourceMappingURL=register.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"register.mjs","sources":["../../../src/mutative/register.ts"],"sourcesContent":["import { autobind } from '@lib/autobind';\nimport { mutativeMethods } from './mutativeMethods';\nimport { Store } from '@core';\n\ntype MutativeMethods = typeof mutativeMethods;\n\ndeclare module '@core' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface Store<T> extends MutativeMethods {}\n}\n\nObject.assign(Store.prototype, mutativeMethods);\nautobind(Store);\n"],"names":[],"mappings":";;AAWA,OAAO,OAAO,MAAM,WAAW,eAAe;AAC9C,SAAS,KAAK;"}
1
+ {"version":3,"file":"register.mjs","sources":["../../../src/mutative/register.ts"],"sourcesContent":["import { autobind } from '@lib/autobind';\nimport { mutativeMethods } from './mutativeMethods';\nimport { Store } from '@core';\n\ntype MutativeMethods = typeof mutativeMethods;\n\ndeclare module '@core' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface Store<T> extends MutativeMethods {}\n}\n\nObject.assign(Store.prototype, mutativeMethods);\nautobind(Store);\n"],"names":[],"mappings":";;;AAWA,MAAO,CAAA,MAAA,CAAO,KAAM,CAAA,SAAA,EAAW,eAAe,CAAA,CAAA;AAC9C,QAAA,CAAS,KAAK,CAAA"}
@@ -1,4 +1,5 @@
1
- import { create } from "mutative";
1
+ import { create } from 'mutative';
2
+
2
3
  function update(...args) {
3
4
  if (args.length === 1) {
4
5
  const [mutation] = args;
@@ -21,7 +22,6 @@ function update(...args) {
21
22
  const mutativeMethods = {
22
23
  update
23
24
  };
24
- export {
25
- mutativeMethods as m
26
- };
25
+
26
+ export { mutativeMethods as m };
27
27
  //# sourceMappingURL=mutativeMethods.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"mutativeMethods.mjs","sources":["../../src/mutative/mutativeMethods.ts"],"sourcesContent":["import type { Store } from '@core/store';\nimport { type Path, type Value } from '@lib/path';\nimport { create, type Draft } from 'mutative';\n\nexport type Mutation<T> = (draft: Draft<T>) => void;\n\nfunction update<T>(this: Store<T>, mutation: Mutation<T>): void;\n\nfunction update<T, const P extends Path<T>>(\n this: Store<T>,\n path: P,\n mutation: Mutation<Value<T, P>>,\n): void;\n\nfunction update<T, TPath extends Path<T>>(\n this: Store<T>,\n ...args: [recipe: Mutation<T>] | [path: TPath, mutation: Mutation<Value<T, TPath>>]\n) {\n if (args.length === 1) {\n const [mutation] = args;\n\n this.set((value) => {\n const result = create(value, (draft) => {\n mutation(draft);\n });\n return result;\n });\n } else {\n const [path, mutation] = args;\n\n this.set(path, (value) => {\n const result = create(value, (draft) => {\n mutation(draft);\n });\n return result;\n });\n }\n}\n\nexport const mutativeMethods: {\n update: typeof update;\n} = {\n update,\n};\n"],"names":[],"mappings":";AAcA,SAAS,UAEJ,MACH;AACI,MAAA,KAAK,WAAW,GAAG;AACf,UAAA,CAAC,QAAQ,IAAI;AAEd,SAAA,IAAI,CAAC,UAAU;AAClB,YAAM,SAAS,OAAO,OAAO,CAAC,UAAU;AACtC,iBAAS,KAAK;AAAA,MAAA,CACf;AACM,aAAA;AAAA,IAAA,CACR;AAAA,EAAA,OACI;AACC,UAAA,CAAC,MAAM,QAAQ,IAAI;AAEpB,SAAA,IAAI,MAAM,CAAC,UAAU;AACxB,YAAM,SAAS,OAAO,OAAO,CAAC,UAAU;AACtC,iBAAS,KAAK;AAAA,MAAA,CACf;AACM,aAAA;AAAA,IAAA,CACR;AAAA,EACH;AACF;AAEO,MAAM,kBAET;AAAA,EACF;AACF;"}
1
+ {"version":3,"file":"mutativeMethods.mjs","sources":["../../src/mutative/mutativeMethods.ts"],"sourcesContent":["import type { Store } from '@core/store';\nimport { type Path, type Value } from '@lib/path';\nimport { create, type Draft } from 'mutative';\n\nexport type Mutation<T> = (draft: Draft<T>) => void;\n\nfunction update<T>(this: Store<T>, mutation: Mutation<T>): void;\n\nfunction update<T, const P extends Path<T>>(\n this: Store<T>,\n path: P,\n mutation: Mutation<Value<T, P>>,\n): void;\n\nfunction update<T, TPath extends Path<T>>(\n this: Store<T>,\n ...args: [recipe: Mutation<T>] | [path: TPath, mutation: Mutation<Value<T, TPath>>]\n) {\n if (args.length === 1) {\n const [mutation] = args;\n\n this.set((value) => {\n const result = create(value, (draft) => {\n mutation(draft);\n });\n return result;\n });\n } else {\n const [path, mutation] = args;\n\n this.set(path, (value) => {\n const result = create(value, (draft) => {\n mutation(draft);\n });\n return result;\n });\n }\n}\n\nexport const mutativeMethods: {\n update: typeof update;\n} = {\n update,\n};\n"],"names":[],"mappings":";;AAcA,SAAS,UAEJ,IACH,EAAA;AACA,EAAI,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AACrB,IAAM,MAAA,CAAC,QAAQ,CAAI,GAAA,IAAA,CAAA;AAEnB,IAAK,IAAA,CAAA,GAAA,CAAI,CAAC,KAAU,KAAA;AAClB,MAAA,MAAM,MAAS,GAAA,MAAA,CAAO,KAAO,EAAA,CAAC,KAAU,KAAA;AACtC,QAAA,QAAA,CAAS,KAAK,CAAA,CAAA;AAAA,OACf,CAAA,CAAA;AACD,MAAO,OAAA,MAAA,CAAA;AAAA,KACR,CAAA,CAAA;AAAA,GACI,MAAA;AACL,IAAM,MAAA,CAAC,IAAM,EAAA,QAAQ,CAAI,GAAA,IAAA,CAAA;AAEzB,IAAK,IAAA,CAAA,GAAA,CAAI,IAAM,EAAA,CAAC,KAAU,KAAA;AACxB,MAAA,MAAM,MAAS,GAAA,MAAA,CAAO,KAAO,EAAA,CAAC,KAAU,KAAA;AACtC,QAAA,QAAA,CAAS,KAAK,CAAA,CAAA;AAAA,OACf,CAAA,CAAA;AACD,MAAO,OAAA,MAAA,CAAA;AAAA,KACR,CAAA,CAAA;AAAA,GACH;AACF,CAAA;AAEO,MAAM,eAET,GAAA;AAAA,EACF,MAAA;AACF;;;;"}
@@ -1,4 +1,5 @@
1
- import { d as diff, a as applyPatches$1 } from "../diff.mjs";
1
+ import { d as diff, a as applyPatches$1 } from '../diff.mjs';
2
+
2
3
  const genId = () => Math.random().toString(36).slice(2);
3
4
  function subscribePatches(listener, options) {
4
5
  if (!this.__patches) {
@@ -50,7 +51,6 @@ const patchMethods = {
50
51
  sync,
51
52
  acceptSync
52
53
  };
53
- export {
54
- patchMethods
55
- };
54
+
55
+ export { patchMethods };
56
56
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/patches/patchMethods.ts"],"sourcesContent":["import type { Cancel, SubscribeOptions } from '@core/commonTypes';\nimport type { Store } from '@core/store';\nimport { applyPatches as _applyPatches } from '@lib/applyPatches';\nimport { diff, type DiffOptions, type Patch } from '@lib/diff';\n\ndeclare module '@core' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface Store<T> {\n __patches?: Store<[Patch[], Patch[]]>;\n }\n}\n\nexport interface SubscribePatchOptions extends SubscribeOptions, DiffOptions {\n /** @default false */\n runNow?: boolean;\n}\n\nexport interface SyncMessage {\n id: string;\n previousId?: string;\n patches: Patch[];\n}\n\nexport type InteropPatch = Patch | { op: 'add' | 'replace' | 'remove'; value?: any };\n\nconst genId = () => Math.random().toString(36).slice(2);\n\nfunction subscribePatches<T>(\n this: Store<T>,\n listener: (patches: Patch[], reversePatches: Patch[]) => void,\n options?: SubscribePatchOptions,\n): Cancel {\n if (!this.__patches) {\n let previousValue = this.get();\n\n this.__patches = this.map((value) => {\n const result = diff(previousValue, value, options);\n previousValue = value;\n return result;\n });\n }\n\n const { stopAt, runNow, ...subscribeOptions } = options ?? {};\n\n const cancel = this.__patches.subscribe((p) => listener(...p), {\n ...subscribeOptions,\n runNow: false,\n });\n\n if (runNow) {\n listener(...diff(undefined, this.get(), options));\n }\n\n return cancel;\n}\n\nfunction applyPatches<T>(this: Store<T>, patches: InteropPatch[]): void;\nfunction applyPatches<T>(this: Store<T>, ...patches: InteropPatch[]): void;\nfunction applyPatches<T>(this: Store<T>, ...patches: (InteropPatch | InteropPatch[])[]): void {\n this.set((value) => _applyPatches(value, ...(patches.flat() as Patch[])));\n}\n\nfunction sync<T>(\n this: Store<T>,\n listener: (syncMessage: SyncMessage) => void,\n options?: Omit<SubscribePatchOptions, 'runNow'>,\n): Cancel {\n let previousId: string | undefined;\n\n return this.subscribePatches(\n (patches) => {\n const id = genId();\n const message = { id, previousId, patches };\n previousId = id;\n\n listener(message);\n },\n { ...options, runNow: true },\n );\n}\n\nfunction acceptSync<T>(this: Store<T>): (message: SyncMessage) => void {\n let previousId: string | undefined;\n\n return (message) => {\n if (message.previousId && message.previousId !== previousId) {\n throw new Error('previousId mismatch');\n }\n\n previousId = message.id;\n this.applyPatches(...message.patches);\n };\n}\n\nexport const patchMethods: {\n subscribePatches: typeof subscribePatches;\n applyPatches: typeof applyPatches;\n sync: typeof sync;\n acceptSync: typeof acceptSync;\n} = {\n subscribePatches,\n applyPatches,\n sync,\n acceptSync,\n};\n"],"names":["_applyPatches"],"mappings":";AAyBA,MAAM,QAAQ,MAAM,KAAK,SAAS,SAAS,EAAE,EAAE,MAAM,CAAC;AAEtD,SAAS,iBAEP,UACA,SACQ;AACJ,MAAA,CAAC,KAAK,WAAW;AACf,QAAA,gBAAgB,KAAK;AAEzB,SAAK,YAAY,KAAK,IAAI,CAAC,UAAU;AACnC,YAAM,SAAS,KAAK,eAAe,OAAO,OAAO;AACjC,sBAAA;AACT,aAAA;AAAA,IAAA,CACR;AAAA,EACH;AAEA,QAAM,EAAE,QAAQ,QAAQ,GAAG,iBAAiB,IAAI,WAAW;AAErD,QAAA,SAAS,KAAK,UAAU,UAAU,CAAC,MAAM,SAAS,GAAG,CAAC,GAAG;AAAA,IAC7D,GAAG;AAAA,IACH,QAAQ;AAAA,EAAA,CACT;AAED,MAAI,QAAQ;AACV,aAAS,GAAG,KAAK,QAAW,KAAK,IAAI,GAAG,OAAO,CAAC;AAAA,EAClD;AAEO,SAAA;AACT;AAIA,SAAS,gBAAmC,SAAkD;AACvF,OAAA,IAAI,CAAC,UAAUA,eAAc,OAAO,GAAI,QAAQ,KAAkB,CAAA,CAAC;AAC1E;AAEA,SAAS,KAEP,UACA,SACQ;AACJ,MAAA;AAEJ,SAAO,KAAK;AAAA,IACV,CAAC,YAAY;AACX,YAAM,KAAK;AACX,YAAM,UAAU,EAAE,IAAI,YAAY,QAAQ;AAC7B,mBAAA;AAEb,eAAS,OAAO;AAAA,IAClB;AAAA,IACA,EAAE,GAAG,SAAS,QAAQ,KAAK;AAAA,EAAA;AAE/B;AAEA,SAAS,aAA8D;AACjE,MAAA;AAEJ,SAAO,CAAC,YAAY;AAClB,QAAI,QAAQ,cAAc,QAAQ,eAAe,YAAY;AACrD,YAAA,IAAI,MAAM,qBAAqB;AAAA,IACvC;AAEA,iBAAa,QAAQ;AAChB,SAAA,aAAa,GAAG,QAAQ,OAAO;AAAA,EAAA;AAExC;AAEO,MAAM,eAKT;AAAA,EACF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/patches/patchMethods.ts"],"sourcesContent":["import type { Cancel, SubscribeOptions } from '@core/commonTypes';\nimport type { Store } from '@core/store';\nimport { applyPatches as _applyPatches } from '@lib/applyPatches';\nimport { diff, type DiffOptions, type Patch } from '@lib/diff';\n\ndeclare module '@core' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface Store<T> {\n __patches?: Store<[Patch[], Patch[]]>;\n }\n}\n\nexport interface SubscribePatchOptions extends SubscribeOptions, DiffOptions {\n /** @default false */\n runNow?: boolean;\n}\n\nexport interface SyncMessage {\n id: string;\n previousId?: string;\n patches: Patch[];\n}\n\nexport type InteropPatch = Patch | { op: 'add' | 'replace' | 'remove'; value?: any };\n\nconst genId = () => Math.random().toString(36).slice(2);\n\nfunction subscribePatches<T>(\n this: Store<T>,\n listener: (patches: Patch[], reversePatches: Patch[]) => void,\n options?: SubscribePatchOptions,\n): Cancel {\n if (!this.__patches) {\n let previousValue = this.get();\n\n this.__patches = this.map((value) => {\n const result = diff(previousValue, value, options);\n previousValue = value;\n return result;\n });\n }\n\n const { stopAt, runNow, ...subscribeOptions } = options ?? {};\n\n const cancel = this.__patches.subscribe((p) => listener(...p), {\n ...subscribeOptions,\n runNow: false,\n });\n\n if (runNow) {\n listener(...diff(undefined, this.get(), options));\n }\n\n return cancel;\n}\n\nfunction applyPatches<T>(this: Store<T>, patches: InteropPatch[]): void;\nfunction applyPatches<T>(this: Store<T>, ...patches: InteropPatch[]): void;\nfunction applyPatches<T>(this: Store<T>, ...patches: (InteropPatch | InteropPatch[])[]): void {\n this.set((value) => _applyPatches(value, ...(patches.flat() as Patch[])));\n}\n\nfunction sync<T>(\n this: Store<T>,\n listener: (syncMessage: SyncMessage) => void,\n options?: Omit<SubscribePatchOptions, 'runNow'>,\n): Cancel {\n let previousId: string | undefined;\n\n return this.subscribePatches(\n (patches) => {\n const id = genId();\n const message = { id, previousId, patches };\n previousId = id;\n\n listener(message);\n },\n { ...options, runNow: true },\n );\n}\n\nfunction acceptSync<T>(this: Store<T>): (message: SyncMessage) => void {\n let previousId: string | undefined;\n\n return (message) => {\n if (message.previousId && message.previousId !== previousId) {\n throw new Error('previousId mismatch');\n }\n\n previousId = message.id;\n this.applyPatches(...message.patches);\n };\n}\n\nexport const patchMethods: {\n subscribePatches: typeof subscribePatches;\n applyPatches: typeof applyPatches;\n sync: typeof sync;\n acceptSync: typeof acceptSync;\n} = {\n subscribePatches,\n applyPatches,\n sync,\n acceptSync,\n};\n"],"names":["_applyPatches"],"mappings":";;AAyBA,MAAM,KAAA,GAAQ,MAAM,IAAK,CAAA,MAAA,GAAS,QAAS,CAAA,EAAE,CAAE,CAAA,KAAA,CAAM,CAAC,CAAA,CAAA;AAEtD,SAAS,gBAAA,CAEP,UACA,OACQ,EAAA;AACR,EAAI,IAAA,CAAC,KAAK,SAAW,EAAA;AACnB,IAAI,IAAA,aAAA,GAAgB,KAAK,GAAI,EAAA,CAAA;AAE7B,IAAA,IAAA,CAAK,SAAY,GAAA,IAAA,CAAK,GAAI,CAAA,CAAC,KAAU,KAAA;AACnC,MAAA,MAAM,MAAS,GAAA,IAAA,CAAK,aAAe,EAAA,KAAA,EAAO,OAAO,CAAA,CAAA;AACjD,MAAgB,aAAA,GAAA,KAAA,CAAA;AAChB,MAAO,OAAA,MAAA,CAAA;AAAA,KACR,CAAA,CAAA;AAAA,GACH;AAEA,EAAA,MAAM,EAAE,MAAQ,EAAA,MAAA,EAAQ,GAAG,gBAAiB,EAAA,GAAI,WAAW,EAAC,CAAA;AAE5D,EAAM,MAAA,MAAA,GAAS,KAAK,SAAU,CAAA,SAAA,CAAU,CAAC,CAAM,KAAA,QAAA,CAAS,GAAG,CAAC,CAAG,EAAA;AAAA,IAC7D,GAAG,gBAAA;AAAA,IACH,MAAQ,EAAA,KAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,IAAI,MAAQ,EAAA;AACV,IAAA,QAAA,CAAS,GAAG,IAAK,CAAA,KAAA,CAAA,EAAW,KAAK,GAAI,EAAA,EAAG,OAAO,CAAC,CAAA,CAAA;AAAA,GAClD;AAEA,EAAO,OAAA,MAAA,CAAA;AACT,CAAA;AAIA,SAAS,gBAAmC,OAAkD,EAAA;AAC5F,EAAK,IAAA,CAAA,GAAA,CAAI,CAAC,KAAU,KAAAA,cAAA,CAAc,OAAO,GAAI,OAAA,CAAQ,IAAK,EAAa,CAAC,CAAA,CAAA;AAC1E,CAAA;AAEA,SAAS,IAAA,CAEP,UACA,OACQ,EAAA;AACR,EAAI,IAAA,UAAA,CAAA;AAEJ,EAAA,OAAO,IAAK,CAAA,gBAAA;AAAA,IACV,CAAC,OAAY,KAAA;AACX,MAAA,MAAM,KAAK,KAAM,EAAA,CAAA;AACjB,MAAA,MAAM,OAAU,GAAA,EAAE,EAAI,EAAA,UAAA,EAAY,OAAQ,EAAA,CAAA;AAC1C,MAAa,UAAA,GAAA,EAAA,CAAA;AAEb,MAAA,QAAA,CAAS,OAAO,CAAA,CAAA;AAAA,KAClB;AAAA,IACA,EAAE,GAAG,OAAS,EAAA,MAAA,EAAQ,IAAK,EAAA;AAAA,GAC7B,CAAA;AACF,CAAA;AAEA,SAAS,UAA8D,GAAA;AACrE,EAAI,IAAA,UAAA,CAAA;AAEJ,EAAA,OAAO,CAAC,OAAY,KAAA;AAClB,IAAA,IAAI,OAAQ,CAAA,UAAA,IAAc,OAAQ,CAAA,UAAA,KAAe,UAAY,EAAA;AAC3D,MAAM,MAAA,IAAI,MAAM,qBAAqB,CAAA,CAAA;AAAA,KACvC;AAEA,IAAA,UAAA,GAAa,OAAQ,CAAA,EAAA,CAAA;AACrB,IAAK,IAAA,CAAA,YAAA,CAAa,GAAG,OAAA,CAAQ,OAAO,CAAA,CAAA;AAAA,GACtC,CAAA;AACF,CAAA;AAEO,MAAM,YAKT,GAAA;AAAA,EACF,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AACF;;;;"}
@@ -1,5 +1,6 @@
1
- import { S as Store, a as autobind } from "../store.mjs";
2
- import { patchMethods } from "./index.mjs";
1
+ import { S as Store, a as autobind } from '../store.mjs';
2
+ import { patchMethods } from './index.mjs';
3
+
3
4
  Object.assign(Store.prototype, patchMethods);
4
5
  autobind(Store);
5
6
  //# sourceMappingURL=register.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"register.mjs","sources":["../../../src/patches/register.ts"],"sourcesContent":["import { Store } from '@core';\nimport { autobind } from '@lib/autobind';\nimport { patchMethods } from './patchMethods';\n\ntype PatchMethods = typeof patchMethods;\n\ndeclare module '@core' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface Store<T> extends PatchMethods {}\n}\n\nObject.assign(Store.prototype, patchMethods);\nautobind(Store);\n"],"names":[],"mappings":";;AAWA,OAAO,OAAO,MAAM,WAAW,YAAY;AAC3C,SAAS,KAAK;"}
1
+ {"version":3,"file":"register.mjs","sources":["../../../src/patches/register.ts"],"sourcesContent":["import { Store } from '@core';\nimport { autobind } from '@lib/autobind';\nimport { patchMethods } from './patchMethods';\n\ntype PatchMethods = typeof patchMethods;\n\ndeclare module '@core' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface Store<T> extends PatchMethods {}\n}\n\nObject.assign(Store.prototype, patchMethods);\nautobind(Store);\n"],"names":[],"mappings":";;;AAWA,MAAO,CAAA,MAAA,CAAO,KAAM,CAAA,SAAA,EAAW,YAAY,CAAA,CAAA;AAC3C,QAAA,CAAS,KAAK,CAAA"}
@@ -44,6 +44,7 @@ const internalEqual = (comp) => (a, b) => {
44
44
  }
45
45
  return false;
46
46
  };
47
+
47
48
  function isObject(value) {
48
49
  return typeof value === "object" && value !== null;
49
50
  }
@@ -54,6 +55,7 @@ function isPlainObject(value) {
54
55
  const prototype = Object.getPrototypeOf(value);
55
56
  return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);
56
57
  }
58
+
57
59
  function flatClone(object) {
58
60
  if (object instanceof Map) {
59
61
  return new Map(object);
@@ -69,6 +71,7 @@ function flatClone(object) {
69
71
  }
70
72
  return object;
71
73
  }
74
+
72
75
  function castArrayPath(path) {
73
76
  if (Array.isArray(path)) {
74
77
  return path;
@@ -144,16 +147,6 @@ function remove(object, path) {
144
147
  function join(a, b) {
145
148
  return [a, b].filter(Boolean).join(".");
146
149
  }
147
- export {
148
- isObject as a,
149
- shallowEqual as b,
150
- castArrayPath as c,
151
- deepEqual as d,
152
- strictEqual as e,
153
- get as g,
154
- isPlainObject as i,
155
- join as j,
156
- remove as r,
157
- set as s
158
- };
150
+
151
+ export { isObject as a, shallowEqual as b, castArrayPath as c, deepEqual as d, strictEqual as e, get as g, isPlainObject as i, join as j, remove as r, set as s };
159
152
  //# sourceMappingURL=propAccess.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"propAccess.mjs","sources":["../../src/lib/equals.ts","../../src/lib/helpers.ts","../../src/lib/clone.ts","../../src/lib/propAccess.ts"],"sourcesContent":["export function strictEqual(a: any, b: any): boolean {\n return a === b;\n}\n\nexport function shallowEqual(a: any, b: any): boolean {\n return internalEqual(strictEqual)(a, b);\n}\n\nexport function deepEqual(a: any, b: any): boolean {\n return internalEqual(deepEqual)(a, b);\n}\n\nconst internalEqual = (comp: (a: any, b: any) => boolean) => (a: any, b: any) => {\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 const entries1 = Object.entries(a);\n const entries2 = Object.entries(b);\n return (\n entries1.length === entries2.length && entries1.every(([key, value]) => 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 return a.size === b.size && [...a.entries()].every(([key, value]) => comp(value, b.get(key)));\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 { isObject } from '@lib/helpers';\nimport type { Update } from '../core/commonTypes';\nimport { flatClone } from './clone';\nimport type { GetKeys, KeyType, Path, PathAsArray, SettablePath, Value } from './path';\nimport type { IsAny, Object_, StringToArrayPath } from '@lib/typeHelpers';\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, P extends Path<T>>(object: T, path: P): 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, P extends SettablePath<T>>(\n object: T,\n path: P,\n value: Update<Value<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 if (value instanceof Function) {\n return value(object as Value<T, P>) as T;\n }\n\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, 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, 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, rootPath);\n return copy;\n }\n\n throw new Error(`Could not set ${path} of ${object}`);\n}\n\nexport function remove<T, P extends Path<T, true>>(object: T, path: P): 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 {\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"],"names":[],"mappings":"AAAgB,SAAA,YAAY,GAAQ,GAAiB;AACnD,SAAO,MAAM;AACf;AAEgB,SAAA,aAAa,GAAQ,GAAiB;AACpD,SAAO,cAAc,WAAW,EAAE,GAAG,CAAC;AACxC;AAEgB,SAAA,UAAU,GAAQ,GAAiB;AACjD,SAAO,cAAc,SAAS,EAAE,GAAG,CAAC;AACtC;AAEA,MAAM,gBAAgB,CAAC,SAAsC,CAAC,GAAQ,MAAW;AAC/E,MAAI,MAAM,GAAG;AACJ,WAAA;AAAA,EACT;AAEI,MAAA,MAAM,QAAQ,MAAM,QAAQ,OAAO,MAAM,YAAY,OAAO,MAAM,UAAU;AAEvE,WAAA,MAAM,KAAK,MAAM;AAAA,EAC1B;AAEI,MAAA,EAAE,gBAAgB,EAAE,aAAa;AAC5B,WAAA;AAAA,EACT;AAEA,MAAI,EAAE,gBAAgB,UAAU,MAAM,QAAQ,CAAC,GAAG;AAC1C,UAAA,WAAW,OAAO,QAAQ,CAAC;AAC3B,UAAA,WAAW,OAAO,QAAQ,CAAC;AACjC,WACE,SAAS,WAAW,SAAS,UAAU,SAAS,MAAM,CAAC,CAAC,KAAK,KAAK,MAAM,KAAK,OAAO,EAAE,GAAG,CAAC,CAAC;AAAA,EAE/F;AAEA,MAAI,aAAa,MAAM;AACrB,WAAO,EAAE,QAAA,MAAc,EAAE,QAAQ;AAAA,EACnC;AAEA,MAAI,aAAa,QAAQ;AACvB,WAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE;AAAA,EAChD;AAEA,MAAI,aAAa,KAAK;AACb,WAAA,EAAE,SAAS,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAS,CAAA,EAAE,MAAM,CAAC,CAAC,KAAK,KAAK,MAAM,KAAK,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC;AAAA,EAC9F;AAEA,MAAI,aAAa,KAAK;AACpB,WAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,GAAG,EAAE,OAAQ,CAAA,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC;AAAA,EAC3E;AAEA,MAAI,OAAO,gBAAgB,eAAe,YAAY,OAAO,CAAC,GAAG;AAC3D,QAAA,EAAE,eAAe,EAAE,YAAY;AAC1B,aAAA;AAAA,IACT;AAEA,UAAM,KAAK,IAAI,UAAU,EAAE,MAAM;AACjC,UAAM,KAAK,IAAI,UAAU,EAAE,MAAM;AAC1B,WAAA,GAAG,MAAM,CAAC,OAAO,MAAM,UAAU,GAAG,CAAC,CAAC;AAAA,EAC/C;AAEO,SAAA;AACT;AC7DO,SAAS,SAAS,OAAkD;AAClE,SAAA,OAAO,UAAU,YAAY,UAAU;AAChD;AAEO,SAAS,cAAc,OAAkD;AAC9E,MAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AACxC,WAAA;AAAA,EACT;AAEM,QAAA,YAAY,OAAO,eAAe,KAAK;AAC7C,UACG,cAAc,QACb,cAAc,OAAO,aACrB,OAAO,eAAe,SAAS,MAAM,SACvC,EAAE,OAAO,eAAe,UACxB,EAAE,OAAO,YAAY;AAEzB;ACfO,SAAS,UAAa,QAAc;AACzC,MAAI,kBAAkB,KAAK;AAClB,WAAA,IAAI,IAAI,MAAM;AAAA,EACvB;AAEA,MAAI,kBAAkB,KAAK;AAClB,WAAA,IAAI,IAAI,MAAM;AAAA,EACvB;AAEI,MAAA,MAAM,QAAQ,MAAM,GAAG;AAClB,WAAA,CAAC,GAAG,MAAM;AAAA,EACnB;AAEI,MAAA,SAAS,MAAM,GAAG;AACb,WAAA,EAAE,GAAG;EACd;AAEO,SAAA;AACT;ACdO,SAAS,cAAc,MAAqC;AAC7D,MAAA,MAAM,QAAQ,IAAI,GAAG;AAChB,WAAA;AAAA,EACT;AAEA,MAAI,SAAS,IAAI;AACf,WAAO;EACT;AAEQ,SAAA,KAAgB,MAAM,GAAG;AACnC;AAEgB,SAAA,IAA0B,QAAW,MAAsB;AACnE,QAAA,QAAQ,cAAc,IAAW;AACvC,QAAM,CAAC,OAAO,GAAG,IAAI,IAAI;AAErB,MAAA,UAAU,UAAa,CAAC,QAAQ;AAC3B,WAAA;AAAA,EACT;AAEA,MAAI,kBAAkB,KAAK;AACzB,WAAO,IAAI,OAAO,IAAI,KAAK,GAAG,IAAI;AAAA,EACpC;AAEA,MAAI,kBAAkB,KAAK;AAClB,WAAA,IAAI,MAAM,KAAK,MAAM,EAAE,OAAO,KAAK,CAAC,GAAG,IAAI;AAAA,EACpD;AAEI,MAAA,SAAS,MAAM,GAAG;AACpB,WAAO,IAAI,OAAO,KAAgB,GAAG,IAAW;AAAA,EAClD;AAEA,QAAM,IAAI,MAAM,iBAAiB,IAAI,OAAO,MAAM,EAAE;AACtD;AAEO,SAAS,IACd,QACA,MACA,OACA,WAAwC,MACrC;AACG,QAAA,QAAQ,cAAc,IAAW;AACvC,QAAM,CAAC,OAAO,GAAG,IAAI,IAAI;AAEzB,MAAI,UAAU,QAAW;AACvB,QAAI,iBAAiB,UAAU;AAC7B,aAAO,MAAM,MAAqB;AAAA,IACpC;AAEO,WAAA;AAAA,EACT;AAEA,MAAI,kBAAkB,KAAK;AACnB,UAAA,OAAO,UAAU,MAAM;AACvB,UAAA,QAAQ,KAAK,IAAI,KAAK;AAC5B,SAAK,IAAI,OAAO,IAAI,OAAO,MAAM,OAAO,QAAQ,CAAC;AAC1C,WAAA;AAAA,EACT;AAEA,MAAI,kBAAkB,KAAK;AACnB,UAAA,OAAO,CAAC,GAAG,MAAM;AACvB,UAAM,QAAQ,KAAK,OAAO,KAAK,CAAC;AAC3B,SAAA,OAAO,KAAK,CAAC,IAAI,IAAI,OAAO,MAAM,OAAO,QAAQ;AAC/C,WAAA,IAAI,IAAI,IAAI;AAAA,EACrB;AAEA,MAAI,SAAS,MAAM,KAAK,WAAW,QAAW;AAC5C,UAAM,OAAO,UAAU,UAAW,CAAQ,CAAA;AACrC,SAAA,KAAgB,IAAI,IAAI,KAAK,KAAgB,GAAG,MAAa,OAAO,QAAQ;AAC1E,WAAA;AAAA,EACT;AAEA,QAAM,IAAI,MAAM,iBAAiB,IAAI,OAAO,MAAM,EAAE;AACtD;AAEgB,SAAA,OAAmC,QAAW,MAAY;AAClE,QAAA,QAAQ,cAAc,IAAW;AAEnC,MAAA,MAAM,WAAW,GAAG;AACf,WAAA;AAAA,EACT;AAEA,QAAM,aAAa,MAAM,MAAM,GAAG,EAAE;AACpC,QAAM,MAAM,MAAM,MAAM,SAAS,CAAC;AAElC,QAAM,SAAS,UAAU,IAAI,QAAQ,UAAiB,CAAC;AAEvD,MAAI,kBAAkB,KAAK;AACzB,WAAO,OAAO,GAAG;AAAA,EAAA,WACR,kBAAkB,KAAK;AAChC,UAAM,QAAQ,MAAM,KAAK,MAAM,EAAE,OAAO,GAAG,CAAC;AAC5C,WAAO,OAAO,KAAK;AAAA,EAAA,OACd;AACL,WAAO,OAAO,GAA0B;AAAA,EAC1C;AAEO,SAAA,IAAI,QAAQ,YAAmB,MAAM;AAC9C;AAEgB,SAAA,KAAK,GAAW,GAAmB;AAC1C,SAAA,CAAC,GAAG,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACxC;"}
1
+ {"version":3,"file":"propAccess.mjs","sources":["../../src/lib/equals.ts","../../src/lib/helpers.ts","../../src/lib/clone.ts","../../src/lib/propAccess.ts"],"sourcesContent":["export function strictEqual(a: any, b: any): boolean {\n return a === b;\n}\n\nexport function shallowEqual(a: any, b: any): boolean {\n return internalEqual(strictEqual)(a, b);\n}\n\nexport function deepEqual(a: any, b: any): boolean {\n return internalEqual(deepEqual)(a, b);\n}\n\nconst internalEqual = (comp: (a: any, b: any) => boolean) => (a: any, b: any) => {\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 const entries1 = Object.entries(a);\n const entries2 = Object.entries(b);\n return (\n entries1.length === entries2.length && entries1.every(([key, value]) => 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 return a.size === b.size && [...a.entries()].every(([key, value]) => comp(value, b.get(key)));\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 { isObject } from '@lib/helpers';\nimport type { Update } from '../core/commonTypes';\nimport { flatClone } from './clone';\nimport type { GetKeys, KeyType, Path, PathAsArray, SettablePath, Value } from './path';\nimport type { IsAny, Object_, StringToArrayPath } from '@lib/typeHelpers';\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, P extends Path<T>>(object: T, path: P): 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, P extends SettablePath<T>>(\n object: T,\n path: P,\n value: Update<Value<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 if (value instanceof Function) {\n return value(object as Value<T, P>) as T;\n }\n\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, 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, 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, rootPath);\n return copy;\n }\n\n throw new Error(`Could not set ${path} of ${object}`);\n}\n\nexport function remove<T, P extends Path<T, true>>(object: T, path: P): 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 {\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"],"names":[],"mappings":"AAAgB,SAAA,WAAA,CAAY,GAAQ,CAAiB,EAAA;AACnD,EAAA,OAAO,CAAM,KAAA,CAAA,CAAA;AACf,CAAA;AAEgB,SAAA,YAAA,CAAa,GAAQ,CAAiB,EAAA;AACpD,EAAA,OAAO,aAAc,CAAA,WAAW,CAAE,CAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AACxC,CAAA;AAEgB,SAAA,SAAA,CAAU,GAAQ,CAAiB,EAAA;AACjD,EAAA,OAAO,aAAc,CAAA,SAAS,CAAE,CAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AACtC,CAAA;AAEA,MAAM,aAAgB,GAAA,CAAC,IAAsC,KAAA,CAAC,GAAQ,CAAW,KAAA;AAC/E,EAAA,IAAI,MAAM,CAAG,EAAA;AACX,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAI,IAAA,CAAA,KAAM,QAAQ,CAAM,KAAA,IAAA,IAAQ,OAAO,CAAM,KAAA,QAAA,IAAY,OAAO,CAAA,KAAM,QAAU,EAAA;AAE9E,IAAO,OAAA,CAAA,KAAM,KAAK,CAAM,KAAA,CAAA,CAAA;AAAA,GAC1B;AAEA,EAAI,IAAA,CAAA,CAAE,WAAgB,KAAA,CAAA,CAAE,WAAa,EAAA;AACnC,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAA,IAAI,EAAE,WAAgB,KAAA,MAAA,IAAU,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAG,EAAA;AAChD,IAAM,MAAA,QAAA,GAAW,MAAO,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAA;AACjC,IAAM,MAAA,QAAA,GAAW,MAAO,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAA;AACjC,IAAA,OACE,SAAS,MAAW,KAAA,QAAA,CAAS,MAAU,IAAA,QAAA,CAAS,MAAM,CAAC,CAAC,GAAK,EAAA,KAAK,MAAM,IAAK,CAAA,KAAA,EAAO,CAAE,CAAA,GAAG,CAAC,CAAC,CAAA,CAAA;AAAA,GAE/F;AAEA,EAAA,IAAI,aAAa,IAAM,EAAA;AACrB,IAAA,OAAO,CAAE,CAAA,OAAA,EAAc,KAAA,CAAA,CAAE,OAAQ,EAAA,CAAA;AAAA,GACnC;AAEA,EAAA,IAAI,aAAa,MAAQ,EAAA;AACvB,IAAA,OAAO,EAAE,MAAW,KAAA,CAAA,CAAE,MAAU,IAAA,CAAA,CAAE,UAAU,CAAE,CAAA,KAAA,CAAA;AAAA,GAChD;AAEA,EAAA,IAAI,aAAa,GAAK,EAAA;AACpB,IAAO,OAAA,CAAA,CAAE,SAAS,CAAE,CAAA,IAAA,IAAQ,CAAC,GAAG,CAAA,CAAE,OAAQ,EAAC,CAAE,CAAA,KAAA,CAAM,CAAC,CAAC,GAAA,EAAK,KAAK,CAAM,KAAA,IAAA,CAAK,OAAO,CAAE,CAAA,GAAA,CAAI,GAAG,CAAC,CAAC,CAAA,CAAA;AAAA,GAC9F;AAEA,EAAA,IAAI,aAAa,GAAK,EAAA;AACpB,IAAA,OAAO,EAAE,IAAS,KAAA,CAAA,CAAE,IAAQ,IAAA,CAAC,GAAG,CAAE,CAAA,MAAA,EAAQ,CAAA,CAAE,MAAM,CAAC,KAAA,KAAU,CAAE,CAAA,GAAA,CAAI,KAAK,CAAC,CAAA,CAAA;AAAA,GAC3E;AAEA,EAAA,IAAI,OAAO,WAAgB,KAAA,WAAA,IAAe,WAAY,CAAA,MAAA,CAAO,CAAC,CAAG,EAAA;AAC/D,IAAI,IAAA,CAAA,CAAE,UAAe,KAAA,CAAA,CAAE,UAAY,EAAA;AACjC,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAEA,IAAA,MAAM,EAAK,GAAA,IAAI,SAAU,CAAA,CAAA,CAAE,MAAM,CAAA,CAAA;AACjC,IAAA,MAAM,EAAK,GAAA,IAAI,SAAU,CAAA,CAAA,CAAE,MAAM,CAAA,CAAA;AACjC,IAAO,OAAA,EAAA,CAAG,MAAM,CAAC,KAAA,EAAO,MAAM,KAAU,KAAA,EAAA,CAAG,CAAC,CAAC,CAAA,CAAA;AAAA,GAC/C;AAEA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA;;AC7DO,SAAS,SAAS,KAAkD,EAAA;AACzE,EAAO,OAAA,OAAO,KAAU,KAAA,QAAA,IAAY,KAAU,KAAA,IAAA,CAAA;AAChD,CAAA;AAEO,SAAS,cAAc,KAAkD,EAAA;AAC9E,EAAA,IAAI,OAAO,KAAA,KAAU,QAAY,IAAA,KAAA,KAAU,IAAM,EAAA;AAC/C,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAM,MAAA,SAAA,GAAY,MAAO,CAAA,cAAA,CAAe,KAAK,CAAA,CAAA;AAC7C,EAAA,OAAA,CACG,cAAc,IACb,IAAA,SAAA,KAAc,MAAO,CAAA,SAAA,IACrB,OAAO,cAAe,CAAA,SAAS,CAAM,KAAA,IAAA,KACvC,EAAE,MAAO,CAAA,WAAA,IAAe,KACxB,CAAA,IAAA,EAAE,OAAO,QAAY,IAAA,KAAA,CAAA,CAAA;AAEzB;;ACfO,SAAS,UAAa,MAAc,EAAA;AACzC,EAAA,IAAI,kBAAkB,GAAK,EAAA;AACzB,IAAO,OAAA,IAAI,IAAI,MAAM,CAAA,CAAA;AAAA,GACvB;AAEA,EAAA,IAAI,kBAAkB,GAAK,EAAA;AACzB,IAAO,OAAA,IAAI,IAAI,MAAM,CAAA,CAAA;AAAA,GACvB;AAEA,EAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,MAAM,CAAG,EAAA;AACzB,IAAO,OAAA,CAAC,GAAG,MAAM,CAAA,CAAA;AAAA,GACnB;AAEA,EAAI,IAAA,QAAA,CAAS,MAAM,CAAG,EAAA;AACpB,IAAO,OAAA,EAAE,GAAG,MAAO,EAAA,CAAA;AAAA,GACrB;AAEA,EAAO,OAAA,MAAA,CAAA;AACT;;ACdO,SAAS,cAAc,IAAqC,EAAA;AACjE,EAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,IAAI,CAAG,EAAA;AACvB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,IAAI,SAAS,EAAI,EAAA;AACf,IAAA,OAAO,EAAC,CAAA;AAAA,GACV;AAEA,EAAQ,OAAA,IAAA,CAAgB,MAAM,GAAG,CAAA,CAAA;AACnC,CAAA;AAEgB,SAAA,GAAA,CAA0B,QAAW,IAAsB,EAAA;AACzE,EAAM,MAAA,KAAA,GAAQ,cAAc,IAAW,CAAA,CAAA;AACvC,EAAA,MAAM,CAAC,KAAA,EAAO,GAAG,IAAI,CAAI,GAAA,KAAA,CAAA;AAEzB,EAAI,IAAA,KAAA,KAAU,KAAa,CAAA,IAAA,CAAC,MAAQ,EAAA;AAClC,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AAEA,EAAA,IAAI,kBAAkB,GAAK,EAAA;AACzB,IAAA,OAAO,GAAI,CAAA,MAAA,CAAO,GAAI,CAAA,KAAK,GAAG,IAAI,CAAA,CAAA;AAAA,GACpC;AAEA,EAAA,IAAI,kBAAkB,GAAK,EAAA;AACzB,IAAO,OAAA,GAAA,CAAI,MAAM,IAAK,CAAA,MAAM,EAAE,MAAO,CAAA,KAAK,CAAC,CAAA,EAAG,IAAI,CAAA,CAAA;AAAA,GACpD;AAEA,EAAI,IAAA,QAAA,CAAS,MAAM,CAAG,EAAA;AACpB,IAAA,OAAO,GAAI,CAAA,MAAA,CAAO,KAAgB,CAAA,EAAG,IAAW,CAAA,CAAA;AAAA,GAClD;AAEA,EAAA,MAAM,IAAI,KAAM,CAAA,CAAA,cAAA,EAAiB,IAAI,CAAA,IAAA,EAAO,MAAM,CAAE,CAAA,CAAA,CAAA;AACtD,CAAA;AAEO,SAAS,GACd,CAAA,MAAA,EACA,IACA,EAAA,KAAA,EACA,WAAwC,IACrC,EAAA;AACH,EAAM,MAAA,KAAA,GAAQ,cAAc,IAAW,CAAA,CAAA;AACvC,EAAA,MAAM,CAAC,KAAA,EAAO,GAAG,IAAI,CAAI,GAAA,KAAA,CAAA;AAEzB,EAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,IAAA,IAAI,iBAAiB,QAAU,EAAA;AAC7B,MAAA,OAAO,MAAM,MAAqB,CAAA,CAAA;AAAA,KACpC;AAEA,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAA,IAAI,kBAAkB,GAAK,EAAA;AACzB,IAAM,MAAA,IAAA,GAAO,UAAU,MAAM,CAAA,CAAA;AAC7B,IAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AAC5B,IAAA,IAAA,CAAK,IAAI,KAAO,EAAA,GAAA,CAAI,OAAO,IAAM,EAAA,KAAA,EAAO,QAAQ,CAAC,CAAA,CAAA;AACjD,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,IAAI,kBAAkB,GAAK,EAAA;AACzB,IAAM,MAAA,IAAA,GAAO,CAAC,GAAG,MAAM,CAAA,CAAA;AACvB,IAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,MAAO,CAAA,KAAK,CAAC,CAAA,CAAA;AAChC,IAAK,IAAA,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA,GAAI,IAAI,KAAO,EAAA,IAAA,EAAM,OAAO,QAAQ,CAAA,CAAA;AACtD,IAAO,OAAA,IAAI,IAAI,IAAI,CAAA,CAAA;AAAA,GACrB;AAEA,EAAA,IAAI,QAAS,CAAA,MAAM,CAAK,IAAA,MAAA,KAAW,KAAW,CAAA,EAAA;AAC5C,IAAA,MAAM,IAAO,GAAA,SAAA,CAAU,MAAW,IAAA,EAAQ,CAAA,CAAA;AAC1C,IAAK,IAAA,CAAA,KAAgB,IAAI,GAAI,CAAA,IAAA,CAAK,KAAgB,CAAG,EAAA,IAAA,EAAa,OAAO,QAAQ,CAAA,CAAA;AACjF,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,IAAI,KAAM,CAAA,CAAA,cAAA,EAAiB,IAAI,CAAA,IAAA,EAAO,MAAM,CAAE,CAAA,CAAA,CAAA;AACtD,CAAA;AAEgB,SAAA,MAAA,CAAmC,QAAW,IAAY,EAAA;AACxE,EAAM,MAAA,KAAA,GAAQ,cAAc,IAAW,CAAA,CAAA;AAEvC,EAAI,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACtB,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,UAAa,GAAA,KAAA,CAAM,KAAM,CAAA,CAAA,EAAG,CAAE,CAAA,CAAA,CAAA;AACpC,EAAA,MAAM,GAAM,GAAA,KAAA,CAAM,KAAM,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AAElC,EAAA,MAAM,MAAS,GAAA,SAAA,CAAU,GAAI,CAAA,MAAA,EAAQ,UAAiB,CAAC,CAAA,CAAA;AAEvD,EAAA,IAAI,kBAAkB,GAAK,EAAA;AACzB,IAAA,MAAA,CAAO,OAAO,GAAG,CAAA,CAAA;AAAA,GACnB,MAAA,IAAW,kBAAkB,GAAK,EAAA;AAChC,IAAA,MAAM,QAAQ,KAAM,CAAA,IAAA,CAAK,MAAM,CAAE,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AAC5C,IAAA,MAAA,CAAO,OAAO,KAAK,CAAA,CAAA;AAAA,GACd,MAAA;AACL,IAAA,OAAO,OAAO,GAA0B,CAAA,CAAA;AAAA,GAC1C;AAEA,EAAO,OAAA,GAAA,CAAI,MAAQ,EAAA,UAAA,EAAmB,MAAM,CAAA,CAAA;AAC9C,CAAA;AAEgB,SAAA,IAAA,CAAK,GAAW,CAAmB,EAAA;AACjD,EAAO,OAAA,CAAC,GAAG,CAAC,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA,CAAA;AACxC;;;;"}
@@ -1,11 +1,12 @@
1
- import { u as useStore } from "../storeMethods.mjs";
2
- import { L, S, c, a, s, e, b, f, d } from "../storeMethods.mjs";
3
- import { useState, useEffect, createElement, useCallback, Fragment as Fragment$1, useRef, useMemo, createContext, useContext, startTransition } from "react";
4
- import { d as calcDuration, q as queue, g as debounce, a as autobind, c as createStore, t as throttle } from "../store.mjs";
5
- import { h as hash } from "../hash.mjs";
6
- import { jsxs, jsx, Fragment } from "react/jsx-runtime";
7
- import { c as connectUrl } from "../urlStore.mjs";
8
- import { c as castArrayPath, a as isObject, d as deepEqual, g as get, j as join } from "../propAccess.mjs";
1
+ import { u as useStore } from '../storeMethods.mjs';
2
+ export { L as LoadingBoundary, S as ScopeProvider, c as cacheMethods, a as scopeMethods, s as storeMethods, e as useCache, b as useLoadingBoundary, f as useProp, d as useScope } from '../storeMethods.mjs';
3
+ import { useState, useEffect, createElement, useCallback, Fragment as Fragment$1, useRef, useMemo, createContext, useContext, startTransition } from 'react';
4
+ import { d as calcDuration, q as queue, g as debounce, a as autobind, c as createStore, t as throttle } from '../store.mjs';
5
+ import { h as hash } from '../hash.mjs';
6
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
7
+ import { c as connectUrl } from '../urlStore.mjs';
8
+ import { c as castArrayPath, a as isObject, d as deepEqual, g as get, j as join } from '../propAccess.mjs';
9
+
9
10
  function CustomInput({ name, children, ...props }) {
10
11
  return /* @__PURE__ */ jsxs(
11
12
  "div",
@@ -36,6 +37,7 @@ function CustomInput({ name, children, ...props }) {
36
37
  }
37
38
  );
38
39
  }
40
+
39
41
  function getWildCardMatches(object, path) {
40
42
  const matches = {};
41
43
  const [first, second, ...rest] = castArrayPath(path);
@@ -59,6 +61,7 @@ function getWildCardMatches(object, path) {
59
61
  }
60
62
  return matches;
61
63
  }
64
+
62
65
  function FormField({
63
66
  // id,
64
67
  name = "",
@@ -112,14 +115,14 @@ function FormField({
112
115
  } else {
113
116
  setValue(value2);
114
117
  }
115
- onChange == null ? void 0 : onChange(event, ...moreArgs);
118
+ onChange?.(event, ...moreArgs);
116
119
  },
117
120
  onBlur(...args) {
118
121
  if (localValue !== void 0) {
119
122
  setValue(localValue);
120
123
  setLocalValue(void 0);
121
124
  }
122
- onBlur == null ? void 0 : onBlur(...args);
125
+ onBlur?.(...args);
123
126
  }
124
127
  };
125
128
  if (render) {
@@ -130,6 +133,7 @@ function FormField({
130
133
  }
131
134
  return null;
132
135
  }
136
+
133
137
  function FormForEach({ name, renderElement, children }) {
134
138
  const form = this.useForm();
135
139
  const names = this.useFormState(() => {
@@ -167,7 +171,7 @@ function FormForEach({ name, renderElement, children }) {
167
171
  remove: () => remove(index)
168
172
  }) }, key);
169
173
  }),
170
- children == null ? void 0 : children({
174
+ children?.({
171
175
  names,
172
176
  add,
173
177
  remove,
@@ -175,27 +179,25 @@ function FormForEach({ name, renderElement, children }) {
175
179
  })
176
180
  ] });
177
181
  }
182
+
178
183
  function useFormAutosave(form) {
179
- var _a;
180
184
  const { formState, options, getDraft } = form;
181
- const debounceTime = calcDuration(((_a = options.autoSave) == null ? void 0 : _a.debounce) ?? 2e3);
185
+ const debounceTime = calcDuration(options.autoSave?.debounce ?? 2e3);
182
186
  const latestRef = useRef({ options });
183
187
  const lastValue = useRef();
184
188
  const q = useMemo(() => queue(), []);
185
189
  const run = useMemo(
186
190
  () => debounce(async () => {
187
- var _a2;
188
191
  const { options: options2 } = latestRef.current;
189
- const save = (_a2 = options2.autoSave) == null ? void 0 : _a2.save;
192
+ const save = options2.autoSave?.save;
190
193
  const draft = getDraft();
191
194
  lastValue.current = draft;
192
195
  q.clear();
193
196
  q(async () => {
194
- var _a3;
195
197
  try {
196
198
  formState.set("saveInProgress", true);
197
- await (save == null ? void 0 : save(draft, form));
198
- if (q.size === 0 && ((_a3 = options2.autoSave) == null ? void 0 : _a3.resetAfterSave)) {
199
+ await save?.(draft, form);
200
+ if (q.size === 0 && options2.autoSave?.resetAfterSave) {
199
201
  form.reset();
200
202
  }
201
203
  } finally {
@@ -209,8 +211,7 @@ function useFormAutosave(form) {
209
211
  [formState, debounceTime]
210
212
  );
211
213
  useEffect(() => {
212
- var _a2;
213
- if (!((_a2 = options.autoSave) == null ? void 0 : _a2.save)) {
214
+ if (!options.autoSave?.save) {
214
215
  return;
215
216
  }
216
217
  return formState.map((state) => state.draft).subscribe(
@@ -228,6 +229,7 @@ function useFormAutosave(form) {
228
229
  latestRef.current = { options };
229
230
  });
230
231
  }
232
+
231
233
  function FormContainer({
232
234
  form,
233
235
  ...formProps
@@ -241,7 +243,6 @@ function FormContainer({
241
243
  ...formProps,
242
244
  className: [formProps.className, hasTriggeredValidations ? "validated" : void 0].filter(Boolean).join(" "),
243
245
  onSubmit: (event) => {
244
- var _a, _b;
245
246
  event.preventDefault();
246
247
  const formElement = event.currentTarget;
247
248
  const buttonElement = event.nativeEvent instanceof SubmitEvent && event.nativeEvent.submitter instanceof HTMLButtonElement ? event.nativeEvent.submitter : void 0;
@@ -249,16 +250,13 @@ function FormContainer({
249
250
  const errors = new Map(
250
251
  [...formInstance.getErrors().entries()].map(([field, errors2]) => [
251
252
  field,
252
- errors2.map((error) => {
253
- var _a2, _b2;
254
- return ((_b2 = (_a2 = formInstance.options).localizeError) == null ? void 0 : _b2.call(_a2, error, field)) ?? error;
255
- })
253
+ errors2.map((error) => formInstance.options.localizeError?.(error, field) ?? error)
256
254
  ])
257
255
  );
258
256
  for (const element of Array.from(formElement.elements)) {
259
257
  if ("name" in element && "setCustomValidity" in element) {
260
258
  element.setCustomValidity(
261
- ((_a = errors.get(element.name)) == null ? void 0 : _a.join("\n")) ?? ""
259
+ errors.get(element.name)?.join("\n") ?? ""
262
260
  );
263
261
  }
264
262
  }
@@ -280,7 +278,7 @@ function FormContainer({
280
278
  }
281
279
  formElement.addEventListener("input", reset);
282
280
  if (isValid) {
283
- (_b = formProps.onSubmit) == null ? void 0 : _b.call(formProps, event, {
281
+ formProps.onSubmit?.(event, {
284
282
  ...formInstance,
285
283
  ...formInstance.derivedState.get()
286
284
  });
@@ -372,10 +370,11 @@ function getErrors(draft, original, validations) {
372
370
  }
373
371
  return errors;
374
372
  }
375
- const _Form = class _Form {
373
+ class Form {
376
374
  constructor(options) {
377
375
  this.options = options;
378
376
  this.context = createContext(null);
377
+ autobind(Form);
379
378
  }
380
379
  useForm() {
381
380
  const context = useContext(this.context);
@@ -501,8 +500,7 @@ const _Form = class _Form {
501
500
  return void 0;
502
501
  }, [formState, hash(urlState)]);
503
502
  useEffect(() => {
504
- var _a;
505
- const handles = (_a = options.transform) == null ? void 0 : _a.map(({ trigger, update }) => {
503
+ const handles = options.transform?.map(({ trigger, update }) => {
506
504
  const draft = derivedState.map("draft");
507
505
  const triggerStore = trigger ? draft.map(trigger) : draft;
508
506
  return triggerStore.subscribe(() => {
@@ -514,7 +512,7 @@ const _Form = class _Form {
514
512
  });
515
513
  });
516
514
  return () => {
517
- handles == null ? void 0 : handles.forEach((handle) => handle());
515
+ handles?.forEach((handle) => handle());
518
516
  };
519
517
  }, [options.transform]);
520
518
  useFormAutosave(context);
@@ -539,12 +537,11 @@ const _Form = class _Form {
539
537
  return /* @__PURE__ */ jsx(Form2, { ...formProps, children: /* @__PURE__ */ jsx(Component, { ...props }) });
540
538
  };
541
539
  }
542
- };
543
- /* @__PURE__ */ autobind(_Form);
544
- let Form = _Form;
540
+ }
545
541
  function createForm(options) {
546
542
  return new Form(options);
547
543
  }
544
+
548
545
  function useDecoupledState(value, onChange, options = {}) {
549
546
  const [dirty, setDirty] = useState();
550
547
  const ref = useRef({ onChange, onCommit: options.onCommit });
@@ -556,7 +553,7 @@ function useDecoupledState(value, onChange, options = {}) {
556
553
  const update2 = (value2) => {
557
554
  onChange2(value2);
558
555
  setDirty(void 0);
559
- onCommit == null ? void 0 : onCommit(value2);
556
+ onCommit?.(value2);
560
557
  };
561
558
  let delayedUpdate;
562
559
  if (options.debounce) {
@@ -573,9 +570,11 @@ function useDecoupledState(value, onChange, options = {}) {
573
570
  }, [hash([options.debounce, options.throttle])]);
574
571
  return [dirty ? dirty.v : value, update];
575
572
  }
573
+
576
574
  function castArray(value) {
577
575
  return Array.isArray(value) ? value : [value];
578
576
  }
577
+
579
578
  function useUrlParamScope({
580
579
  key,
581
580
  type = "search"
@@ -593,21 +592,6 @@ function useUrlParamScope({
593
592
  [hash(key), type]
594
593
  );
595
594
  }
596
- export {
597
- CustomInput,
598
- Form,
599
- L as LoadingBoundary,
600
- S as ScopeProvider,
601
- c as cacheMethods,
602
- createForm,
603
- a as scopeMethods,
604
- s as storeMethods,
605
- e as useCache,
606
- useDecoupledState,
607
- b as useLoadingBoundary,
608
- f as useProp,
609
- d as useScope,
610
- useStore,
611
- useUrlParamScope
612
- };
595
+
596
+ export { CustomInput, Form, createForm, useDecoupledState, useStore, useUrlParamScope };
613
597
  //# sourceMappingURL=index.mjs.map