cross-state 0.52.0 → 0.52.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index2.cjs +8 -0
- package/dist/cjs/index2.cjs.map +1 -1
- package/dist/es/index2.mjs +8 -0
- package/dist/es/index2.mjs.map +1 -1
- package/package.json +1 -1
package/dist/cjs/index2.cjs
CHANGED
|
@@ -129,6 +129,11 @@ function toExtendedJson(value) {
|
|
|
129
129
|
__date: value.toISOString()
|
|
130
130
|
};
|
|
131
131
|
}
|
|
132
|
+
if (typeof value === "bigint") {
|
|
133
|
+
return {
|
|
134
|
+
__bigint: value.toString()
|
|
135
|
+
};
|
|
136
|
+
}
|
|
132
137
|
if (Array.isArray(value)) {
|
|
133
138
|
return value.map(toExtendedJson);
|
|
134
139
|
}
|
|
@@ -158,6 +163,9 @@ function fromExtendedJson(value) {
|
|
|
158
163
|
if ("__date" in value) {
|
|
159
164
|
return new Date(value.__date);
|
|
160
165
|
}
|
|
166
|
+
if ("__bigint" in value) {
|
|
167
|
+
return BigInt(value.__bigint);
|
|
168
|
+
}
|
|
161
169
|
if (Array.isArray(value)) {
|
|
162
170
|
return value.map(fromExtendedJson);
|
|
163
171
|
}
|
package/dist/cjs/index2.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index2.cjs","sources":["../../src/lib/applyPatches.ts","../../src/lib/diff.ts","../../src/lib/extendedJson.ts","../../src/lib/trie.ts","../../src/patches/patchMethods.ts"],"sourcesContent":["import type { Patch } from './diff';\nimport { remove, set } from './propAccess';\n\nfunction applySinglePatch<T>(target: T, patch: Patch): T {\n if (patch.op === 'remove') {\n return remove(target, patch.path as any);\n }\n\n return set(target, patch.path as any, patch.value);\n}\n\nexport function applyPatches<T>(target: T, ...patches: Patch[]): T {\n for (const patch of patches) {\n target = applySinglePatch(target, patch);\n }\n\n return target;\n}\n","import { isObject } from '@lib/helpers';\nimport { deepEqual } from './equals';\nimport type { KeyType } from './path';\n\nexport type Patch =\n | { op: 'add'; path: KeyType[]; value: any }\n | { op: 'remove'; path: KeyType[] }\n | { op: 'replace'; path: KeyType[]; value: any };\n\nexport interface DiffOptions {\n stopAt?: number | ((path: KeyType[]) => boolean);\n}\n\nexport function diff(\n a: any,\n b: any,\n options: DiffOptions = {},\n): [patches: Patch[], reversePatches: Patch[]] {\n const result = [..._diff(a, b, options)];\n const patches = result.map(([patch]) => patch);\n const reversePatches = result.map(([, reversePatch]) => reversePatch);\n\n return [patches, reversePatches];\n}\n\nfunction* _diff(\n a: any,\n b: any,\n options: DiffOptions,\n prefix: KeyType[] = [],\n): Iterable<[patch: Patch, reversePatch: Patch]> {\n if (a === b) {\n return;\n }\n\n if (\n (typeof options.stopAt === 'number' && prefix.length >= options.stopAt) ||\n (typeof options.stopAt === 'function' && options.stopAt(prefix))\n ) {\n if (deepEqual(a, b)) {\n return;\n }\n\n return yield [\n { op: 'replace', path: prefix, value: b },\n { op: 'replace', path: prefix, value: a },\n ];\n }\n\n if (a instanceof Date && b instanceof Date) {\n if (a.getTime() === b.getTime()) {\n return;\n }\n\n return yield [\n { op: 'replace', path: prefix, value: b },\n { op: 'replace', path: prefix, value: a },\n ];\n }\n\n if (a instanceof Map && b instanceof Map) {\n return yield* mapDiff(a, b, options, prefix);\n }\n\n if (a instanceof Set && b instanceof Set) {\n if (deepEqual(a, b)) {\n return;\n }\n\n return yield [\n { op: 'replace', path: prefix, value: b },\n { op: 'replace', path: prefix, value: a },\n ];\n }\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (deepEqual(a, b)) {\n return;\n }\n\n return yield [\n { op: 'replace', path: prefix, value: b },\n { op: 'replace', path: prefix, value: a },\n ];\n }\n\n if (isObject(a) && isObject(b) && !Array.isArray(a) && !Array.isArray(b)) {\n return yield* objectDiff(a, b, options, prefix);\n }\n\n yield [\n { op: 'replace', path: prefix, value: b },\n { op: 'replace', path: prefix, value: a },\n ];\n}\n\nfunction* mapDiff(\n a: Map<any, any>,\n b: Map<any, any>,\n options: { stopAt?: number | ((path: KeyType[]) => boolean) },\n prefix: KeyType[],\n): Iterable<[patch: Patch, reversePatch: Patch]> {\n for (const [key, value] of a) {\n if (!b.has(key)) {\n yield [\n { op: 'remove', path: [...prefix, key] },\n { op: 'add', path: [...prefix, key], value },\n ];\n } else {\n yield* _diff(value, b.get(key), options, [...prefix, key]);\n }\n }\n\n for (const [key, value] of b) {\n if (!a.has(key)) {\n yield [\n { op: 'add', path: [...prefix, key], value },\n { op: 'remove', path: [...prefix, key] },\n ];\n }\n }\n}\n\nfunction* objectDiff(\n a: any,\n b: any,\n options: { stopAt?: number | ((path: KeyType[]) => boolean) },\n prefix: KeyType[],\n): Iterable<[patch: Patch, reversePatch: Patch]> {\n for (const [key, value] of Object.entries(a)) {\n if (!(key in b)) {\n yield [\n { op: 'remove', path: [...prefix, key] },\n { op: 'add', path: [...prefix, key], value },\n ];\n } else {\n yield* _diff(value, b[key], options, [...prefix, key]);\n }\n }\n\n for (const [key, value] of Object.entries(b)) {\n if (!(key in a)) {\n yield [\n { op: 'add', path: [...prefix, key], value },\n { op: 'remove', path: [...prefix, key] },\n ];\n }\n }\n}\n","export function toExtendedJson(value: unknown): unknown {\n if (value instanceof Map) {\n return {\n __map: [...value].map(([k, v]) => [toExtendedJson(k), toExtendedJson(v)]),\n };\n }\n\n if (value instanceof Set) {\n return {\n __set: [...value].map(toExtendedJson),\n };\n }\n\n if (value instanceof Date) {\n return {\n __date: value.toISOString(),\n };\n }\n\n if (Array.isArray(value)) {\n return value.map(toExtendedJson);\n }\n\n if (typeof value === 'object' && value !== null) {\n return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, toExtendedJson(v)]));\n }\n\n return value;\n}\n\nexport function toExtendedJsonString(value: unknown): string {\n return JSON.stringify(toExtendedJson(value));\n}\n\nexport function fromExtendedJson(value: unknown): unknown {\n if (typeof value !== 'object' || value === null) {\n return value;\n }\n\n if ('__map' in value) {\n return new Map(\n (value.__map as [unknown, unknown][]).map(([k, v]) => [\n fromExtendedJson(k),\n fromExtendedJson(v),\n ]),\n );\n }\n\n if ('__set' in value) {\n return new Set((value.__set as unknown[]).map(fromExtendedJson));\n }\n\n if ('__date' in value) {\n return new Date(value.__date as string);\n }\n\n if (Array.isArray(value)) {\n return value.map(fromExtendedJson);\n }\n\n return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, fromExtendedJson(v)]));\n}\n\nexport function fromExtendedJsonString(value: string): unknown {\n return fromExtendedJson(JSON.parse(value));\n}\n","import type { KeyType } from '@lib/path';\n\nclass TrieNode {\n children: Map<KeyType, TrieNode> = new Map();\n isLeaf = false;\n}\n\nexport class Trie {\n root: TrieNode = new TrieNode();\n\n add(path: KeyType[]): void {\n let node = this.root;\n for (const key of path) {\n let next = node.children.get(key);\n if (!next) node.children.set(key, (next = new TrieNode()));\n node = next;\n }\n node.isLeaf = true;\n }\n\n hasSubPath(path: KeyType[]): boolean {\n let node = this.root;\n for (const key of path) {\n const next = node.children.get(key);\n if (!next) return false;\n node = next;\n }\n return node.isLeaf;\n }\n}\n","import type { Cancel, DisposableCancel, 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';\nimport { fromExtendedJson, toExtendedJson } from '@lib/extendedJson';\nimport { Trie } from '@lib/trie';\n\nexport interface SyncMessage {\n fromVersion?: string;\n toVersion: string;\n patches: Patch[];\n}\n\nexport interface HistoryEntry extends SyncMessage {\n reversePatches: Patch[];\n}\n\ndeclare module '@core' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface Store<T> {\n __patches?: {\n value: T;\n version: string;\n history: HistoryEntry[];\n };\n }\n}\n\nexport interface SubscribePatchOptions extends SubscribeOptions, DiffOptions {\n /** @default false */\n runNow?: boolean;\n /** try to start from a specific version and only receive patches after that.\n * If the id is not found, it will start from the beginning */\n startAt?: string;\n}\n\nexport type InteropPatch = Patch | { op: 'add' | 'replace' | 'remove'; value?: any };\n\nconst genId = () => Math.random().toString(36).slice(2);\n\nexport function subscribePatches<T>(\n this: Store<T>,\n listener: (\n this: { cancel: Cancel },\n patches: Patch[],\n reversePatches: Patch[],\n version: string,\n previousVersion: string | undefined,\n ) => void,\n options: SubscribePatchOptions = {},\n): DisposableCancel {\n const patches = (this.__patches ??= {\n value: this.get(),\n version: genId(),\n history: [],\n });\n\n options = { ...options };\n options.runNow ??= false;\n let cursor = options.startAt ?? (options.runNow ? undefined : this.__patches.version);\n\n return this.subscribe(function (value) {\n if (patches.value !== value) {\n const result = diff(patches.value, value, options);\n patches.value = value;\n\n if (result[0].length > 0) {\n const newVersion = genId();\n\n patches.history = patches.history\n .concat({\n fromVersion: patches.version,\n toVersion: newVersion,\n patches: result[0],\n reversePatches: result[1],\n })\n .slice(-1000);\n\n patches.version = newVersion;\n }\n }\n\n if (cursor === patches.version) return;\n const index = patches.history.findIndex((h) => h.fromVersion === cursor);\n let forward, backward, previousVersion;\n\n if (index === -1) {\n [forward, backward] = diff(undefined, value, options);\n previousVersion = undefined;\n } else {\n forward = patches.history.slice(index).flatMap((h) => h.patches);\n backward = patches.history.slice(index).flatMap((h) => h.reversePatches);\n previousVersion = cursor;\n }\n\n cursor = patches.version;\n listener.apply(this, [forward, backward, cursor, previousVersion]);\n }, options);\n}\n\nexport function applyPatches<T>(this: Store<T>, patches: InteropPatch[]): void;\nexport function applyPatches<T>(this: Store<T>, ...patches: InteropPatch[]): void;\nexport function applyPatches<T>(\n this: Store<T>,\n ...patches: (InteropPatch | InteropPatch[])[]\n): void {\n this.set((value) => _applyPatches(value, ...(patches.flat() as Patch[])));\n}\n\nexport function sync<T>(\n this: Store<T>,\n listener: (syncMessage: SyncMessage) => void,\n options?: Omit<SubscribePatchOptions, 'runNow'>,\n): DisposableCancel {\n const debounce =\n typeof options?.debounce === 'object' && 'wait' in options.debounce\n ? { ...options.debounce }\n : options?.debounce !== undefined\n ? { wait: options.debounce }\n : undefined;\n\n if (debounce) {\n debounce.waitOnRunNow ??= false;\n }\n\n return this.subscribePatches(\n (patches, _, version, previousVersion) => {\n const trie = new Trie();\n\n patches = [...patches]\n .reverse()\n .filter((patch) => {\n if (trie.hasSubPath(patch.path)) {\n return false;\n }\n\n trie.add(patch.path);\n return true;\n })\n .reverse();\n\n listener({\n fromVersion: previousVersion,\n toVersion: version,\n patches: toExtendedJson(patches) as Patch[],\n });\n },\n { ...options, debounce, runNow: true },\n );\n}\n\nexport function acceptSync<T>(this: Store<T>, message: SyncMessage): void {\n if (message.fromVersion && message.fromVersion !== this.version) {\n throw new Error(\n `version mismatch! version=${this.version}, fromVersion=${message.fromVersion}`,\n );\n }\n\n const patches = fromExtendedJson(message.patches) as Patch[];\n\n this.version = message.toVersion;\n this.applyPatches(...patches);\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":["remove","set","applyPatches","deepEqual","isObject","_applyPatches"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index2.cjs","sources":["../../src/lib/applyPatches.ts","../../src/lib/diff.ts","../../src/lib/extendedJson.ts","../../src/lib/trie.ts","../../src/patches/patchMethods.ts"],"sourcesContent":["import type { Patch } from './diff';\nimport { remove, set } from './propAccess';\n\nfunction applySinglePatch<T>(target: T, patch: Patch): T {\n if (patch.op === 'remove') {\n return remove(target, patch.path as any);\n }\n\n return set(target, patch.path as any, patch.value);\n}\n\nexport function applyPatches<T>(target: T, ...patches: Patch[]): T {\n for (const patch of patches) {\n target = applySinglePatch(target, patch);\n }\n\n return target;\n}\n","import { isObject } from '@lib/helpers';\nimport { deepEqual } from './equals';\nimport type { KeyType } from './path';\n\nexport type Patch =\n | { op: 'add'; path: KeyType[]; value: any }\n | { op: 'remove'; path: KeyType[] }\n | { op: 'replace'; path: KeyType[]; value: any };\n\nexport interface DiffOptions {\n stopAt?: number | ((path: KeyType[]) => boolean);\n}\n\nexport function diff(\n a: any,\n b: any,\n options: DiffOptions = {},\n): [patches: Patch[], reversePatches: Patch[]] {\n const result = [..._diff(a, b, options)];\n const patches = result.map(([patch]) => patch);\n const reversePatches = result.map(([, reversePatch]) => reversePatch);\n\n return [patches, reversePatches];\n}\n\nfunction* _diff(\n a: any,\n b: any,\n options: DiffOptions,\n prefix: KeyType[] = [],\n): Iterable<[patch: Patch, reversePatch: Patch]> {\n if (a === b) {\n return;\n }\n\n if (\n (typeof options.stopAt === 'number' && prefix.length >= options.stopAt) ||\n (typeof options.stopAt === 'function' && options.stopAt(prefix))\n ) {\n if (deepEqual(a, b)) {\n return;\n }\n\n return yield [\n { op: 'replace', path: prefix, value: b },\n { op: 'replace', path: prefix, value: a },\n ];\n }\n\n if (a instanceof Date && b instanceof Date) {\n if (a.getTime() === b.getTime()) {\n return;\n }\n\n return yield [\n { op: 'replace', path: prefix, value: b },\n { op: 'replace', path: prefix, value: a },\n ];\n }\n\n if (a instanceof Map && b instanceof Map) {\n return yield* mapDiff(a, b, options, prefix);\n }\n\n if (a instanceof Set && b instanceof Set) {\n if (deepEqual(a, b)) {\n return;\n }\n\n return yield [\n { op: 'replace', path: prefix, value: b },\n { op: 'replace', path: prefix, value: a },\n ];\n }\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (deepEqual(a, b)) {\n return;\n }\n\n return yield [\n { op: 'replace', path: prefix, value: b },\n { op: 'replace', path: prefix, value: a },\n ];\n }\n\n if (isObject(a) && isObject(b) && !Array.isArray(a) && !Array.isArray(b)) {\n return yield* objectDiff(a, b, options, prefix);\n }\n\n yield [\n { op: 'replace', path: prefix, value: b },\n { op: 'replace', path: prefix, value: a },\n ];\n}\n\nfunction* mapDiff(\n a: Map<any, any>,\n b: Map<any, any>,\n options: { stopAt?: number | ((path: KeyType[]) => boolean) },\n prefix: KeyType[],\n): Iterable<[patch: Patch, reversePatch: Patch]> {\n for (const [key, value] of a) {\n if (!b.has(key)) {\n yield [\n { op: 'remove', path: [...prefix, key] },\n { op: 'add', path: [...prefix, key], value },\n ];\n } else {\n yield* _diff(value, b.get(key), options, [...prefix, key]);\n }\n }\n\n for (const [key, value] of b) {\n if (!a.has(key)) {\n yield [\n { op: 'add', path: [...prefix, key], value },\n { op: 'remove', path: [...prefix, key] },\n ];\n }\n }\n}\n\nfunction* objectDiff(\n a: any,\n b: any,\n options: { stopAt?: number | ((path: KeyType[]) => boolean) },\n prefix: KeyType[],\n): Iterable<[patch: Patch, reversePatch: Patch]> {\n for (const [key, value] of Object.entries(a)) {\n if (!(key in b)) {\n yield [\n { op: 'remove', path: [...prefix, key] },\n { op: 'add', path: [...prefix, key], value },\n ];\n } else {\n yield* _diff(value, b[key], options, [...prefix, key]);\n }\n }\n\n for (const [key, value] of Object.entries(b)) {\n if (!(key in a)) {\n yield [\n { op: 'add', path: [...prefix, key], value },\n { op: 'remove', path: [...prefix, key] },\n ];\n }\n }\n}\n","export function toExtendedJson(value: unknown): unknown {\n if (value instanceof Map) {\n return {\n __map: [...value].map(([k, v]) => [toExtendedJson(k), toExtendedJson(v)]),\n };\n }\n\n if (value instanceof Set) {\n return {\n __set: [...value].map(toExtendedJson),\n };\n }\n\n if (value instanceof Date) {\n return {\n __date: value.toISOString(),\n };\n }\n\n if (typeof value === 'bigint') {\n return {\n __bigint: value.toString(),\n };\n }\n\n if (Array.isArray(value)) {\n return value.map(toExtendedJson);\n }\n\n if (typeof value === 'object' && value !== null) {\n return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, toExtendedJson(v)]));\n }\n\n return value;\n}\n\nexport function toExtendedJsonString(value: unknown): string {\n return JSON.stringify(toExtendedJson(value));\n}\n\nexport function fromExtendedJson(value: unknown): unknown {\n if (typeof value !== 'object' || value === null) {\n return value;\n }\n\n if ('__map' in value) {\n return new Map(\n (value.__map as [unknown, unknown][]).map(([k, v]) => [\n fromExtendedJson(k),\n fromExtendedJson(v),\n ]),\n );\n }\n\n if ('__set' in value) {\n return new Set((value.__set as unknown[]).map(fromExtendedJson));\n }\n\n if ('__date' in value) {\n return new Date(value.__date as string);\n }\n\n if ('__bigint' in value) {\n return BigInt(value.__bigint as string);\n }\n\n if (Array.isArray(value)) {\n return value.map(fromExtendedJson);\n }\n\n return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, fromExtendedJson(v)]));\n}\n\nexport function fromExtendedJsonString(value: string): unknown {\n return fromExtendedJson(JSON.parse(value));\n}\n","import type { KeyType } from '@lib/path';\n\nclass TrieNode {\n children: Map<KeyType, TrieNode> = new Map();\n isLeaf = false;\n}\n\nexport class Trie {\n root: TrieNode = new TrieNode();\n\n add(path: KeyType[]): void {\n let node = this.root;\n for (const key of path) {\n let next = node.children.get(key);\n if (!next) node.children.set(key, (next = new TrieNode()));\n node = next;\n }\n node.isLeaf = true;\n }\n\n hasSubPath(path: KeyType[]): boolean {\n let node = this.root;\n for (const key of path) {\n const next = node.children.get(key);\n if (!next) return false;\n node = next;\n }\n return node.isLeaf;\n }\n}\n","import type { Cancel, DisposableCancel, 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';\nimport { fromExtendedJson, toExtendedJson } from '@lib/extendedJson';\nimport { Trie } from '@lib/trie';\n\nexport interface SyncMessage {\n fromVersion?: string;\n toVersion: string;\n patches: Patch[];\n}\n\nexport interface HistoryEntry extends SyncMessage {\n reversePatches: Patch[];\n}\n\ndeclare module '@core' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface Store<T> {\n __patches?: {\n value: T;\n version: string;\n history: HistoryEntry[];\n };\n }\n}\n\nexport interface SubscribePatchOptions extends SubscribeOptions, DiffOptions {\n /** @default false */\n runNow?: boolean;\n /** try to start from a specific version and only receive patches after that.\n * If the id is not found, it will start from the beginning */\n startAt?: string;\n}\n\nexport type InteropPatch = Patch | { op: 'add' | 'replace' | 'remove'; value?: any };\n\nconst genId = () => Math.random().toString(36).slice(2);\n\nexport function subscribePatches<T>(\n this: Store<T>,\n listener: (\n this: { cancel: Cancel },\n patches: Patch[],\n reversePatches: Patch[],\n version: string,\n previousVersion: string | undefined,\n ) => void,\n options: SubscribePatchOptions = {},\n): DisposableCancel {\n const patches = (this.__patches ??= {\n value: this.get(),\n version: genId(),\n history: [],\n });\n\n options = { ...options };\n options.runNow ??= false;\n let cursor = options.startAt ?? (options.runNow ? undefined : this.__patches.version);\n\n return this.subscribe(function (value) {\n if (patches.value !== value) {\n const result = diff(patches.value, value, options);\n patches.value = value;\n\n if (result[0].length > 0) {\n const newVersion = genId();\n\n patches.history = patches.history\n .concat({\n fromVersion: patches.version,\n toVersion: newVersion,\n patches: result[0],\n reversePatches: result[1],\n })\n .slice(-1000);\n\n patches.version = newVersion;\n }\n }\n\n if (cursor === patches.version) return;\n const index = patches.history.findIndex((h) => h.fromVersion === cursor);\n let forward, backward, previousVersion;\n\n if (index === -1) {\n [forward, backward] = diff(undefined, value, options);\n previousVersion = undefined;\n } else {\n forward = patches.history.slice(index).flatMap((h) => h.patches);\n backward = patches.history.slice(index).flatMap((h) => h.reversePatches);\n previousVersion = cursor;\n }\n\n cursor = patches.version;\n listener.apply(this, [forward, backward, cursor, previousVersion]);\n }, options);\n}\n\nexport function applyPatches<T>(this: Store<T>, patches: InteropPatch[]): void;\nexport function applyPatches<T>(this: Store<T>, ...patches: InteropPatch[]): void;\nexport function applyPatches<T>(\n this: Store<T>,\n ...patches: (InteropPatch | InteropPatch[])[]\n): void {\n this.set((value) => _applyPatches(value, ...(patches.flat() as Patch[])));\n}\n\nexport function sync<T>(\n this: Store<T>,\n listener: (syncMessage: SyncMessage) => void,\n options?: Omit<SubscribePatchOptions, 'runNow'>,\n): DisposableCancel {\n const debounce =\n typeof options?.debounce === 'object' && 'wait' in options.debounce\n ? { ...options.debounce }\n : options?.debounce !== undefined\n ? { wait: options.debounce }\n : undefined;\n\n if (debounce) {\n debounce.waitOnRunNow ??= false;\n }\n\n return this.subscribePatches(\n (patches, _, version, previousVersion) => {\n const trie = new Trie();\n\n patches = [...patches]\n .reverse()\n .filter((patch) => {\n if (trie.hasSubPath(patch.path)) {\n return false;\n }\n\n trie.add(patch.path);\n return true;\n })\n .reverse();\n\n listener({\n fromVersion: previousVersion,\n toVersion: version,\n patches: toExtendedJson(patches) as Patch[],\n });\n },\n { ...options, debounce, runNow: true },\n );\n}\n\nexport function acceptSync<T>(this: Store<T>, message: SyncMessage): void {\n if (message.fromVersion && message.fromVersion !== this.version) {\n throw new Error(\n `version mismatch! version=${this.version}, fromVersion=${message.fromVersion}`,\n );\n }\n\n const patches = fromExtendedJson(message.patches) as Patch[];\n\n this.version = message.toVersion;\n this.applyPatches(...patches);\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":["remove","set","applyPatches","deepEqual","isObject","_applyPatches"],"mappings":"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"}
|
package/dist/es/index2.mjs
CHANGED
|
@@ -127,6 +127,11 @@ function toExtendedJson(value) {
|
|
|
127
127
|
__date: value.toISOString()
|
|
128
128
|
};
|
|
129
129
|
}
|
|
130
|
+
if (typeof value === "bigint") {
|
|
131
|
+
return {
|
|
132
|
+
__bigint: value.toString()
|
|
133
|
+
};
|
|
134
|
+
}
|
|
130
135
|
if (Array.isArray(value)) {
|
|
131
136
|
return value.map(toExtendedJson);
|
|
132
137
|
}
|
|
@@ -156,6 +161,9 @@ function fromExtendedJson(value) {
|
|
|
156
161
|
if ("__date" in value) {
|
|
157
162
|
return new Date(value.__date);
|
|
158
163
|
}
|
|
164
|
+
if ("__bigint" in value) {
|
|
165
|
+
return BigInt(value.__bigint);
|
|
166
|
+
}
|
|
159
167
|
if (Array.isArray(value)) {
|
|
160
168
|
return value.map(fromExtendedJson);
|
|
161
169
|
}
|
package/dist/es/index2.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index2.mjs","sources":["../../src/lib/applyPatches.ts","../../src/lib/diff.ts","../../src/lib/extendedJson.ts","../../src/lib/trie.ts","../../src/patches/patchMethods.ts"],"sourcesContent":["import type { Patch } from './diff';\nimport { remove, set } from './propAccess';\n\nfunction applySinglePatch<T>(target: T, patch: Patch): T {\n if (patch.op === 'remove') {\n return remove(target, patch.path as any);\n }\n\n return set(target, patch.path as any, patch.value);\n}\n\nexport function applyPatches<T>(target: T, ...patches: Patch[]): T {\n for (const patch of patches) {\n target = applySinglePatch(target, patch);\n }\n\n return target;\n}\n","import { isObject } from '@lib/helpers';\nimport { deepEqual } from './equals';\nimport type { KeyType } from './path';\n\nexport type Patch =\n | { op: 'add'; path: KeyType[]; value: any }\n | { op: 'remove'; path: KeyType[] }\n | { op: 'replace'; path: KeyType[]; value: any };\n\nexport interface DiffOptions {\n stopAt?: number | ((path: KeyType[]) => boolean);\n}\n\nexport function diff(\n a: any,\n b: any,\n options: DiffOptions = {},\n): [patches: Patch[], reversePatches: Patch[]] {\n const result = [..._diff(a, b, options)];\n const patches = result.map(([patch]) => patch);\n const reversePatches = result.map(([, reversePatch]) => reversePatch);\n\n return [patches, reversePatches];\n}\n\nfunction* _diff(\n a: any,\n b: any,\n options: DiffOptions,\n prefix: KeyType[] = [],\n): Iterable<[patch: Patch, reversePatch: Patch]> {\n if (a === b) {\n return;\n }\n\n if (\n (typeof options.stopAt === 'number' && prefix.length >= options.stopAt) ||\n (typeof options.stopAt === 'function' && options.stopAt(prefix))\n ) {\n if (deepEqual(a, b)) {\n return;\n }\n\n return yield [\n { op: 'replace', path: prefix, value: b },\n { op: 'replace', path: prefix, value: a },\n ];\n }\n\n if (a instanceof Date && b instanceof Date) {\n if (a.getTime() === b.getTime()) {\n return;\n }\n\n return yield [\n { op: 'replace', path: prefix, value: b },\n { op: 'replace', path: prefix, value: a },\n ];\n }\n\n if (a instanceof Map && b instanceof Map) {\n return yield* mapDiff(a, b, options, prefix);\n }\n\n if (a instanceof Set && b instanceof Set) {\n if (deepEqual(a, b)) {\n return;\n }\n\n return yield [\n { op: 'replace', path: prefix, value: b },\n { op: 'replace', path: prefix, value: a },\n ];\n }\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (deepEqual(a, b)) {\n return;\n }\n\n return yield [\n { op: 'replace', path: prefix, value: b },\n { op: 'replace', path: prefix, value: a },\n ];\n }\n\n if (isObject(a) && isObject(b) && !Array.isArray(a) && !Array.isArray(b)) {\n return yield* objectDiff(a, b, options, prefix);\n }\n\n yield [\n { op: 'replace', path: prefix, value: b },\n { op: 'replace', path: prefix, value: a },\n ];\n}\n\nfunction* mapDiff(\n a: Map<any, any>,\n b: Map<any, any>,\n options: { stopAt?: number | ((path: KeyType[]) => boolean) },\n prefix: KeyType[],\n): Iterable<[patch: Patch, reversePatch: Patch]> {\n for (const [key, value] of a) {\n if (!b.has(key)) {\n yield [\n { op: 'remove', path: [...prefix, key] },\n { op: 'add', path: [...prefix, key], value },\n ];\n } else {\n yield* _diff(value, b.get(key), options, [...prefix, key]);\n }\n }\n\n for (const [key, value] of b) {\n if (!a.has(key)) {\n yield [\n { op: 'add', path: [...prefix, key], value },\n { op: 'remove', path: [...prefix, key] },\n ];\n }\n }\n}\n\nfunction* objectDiff(\n a: any,\n b: any,\n options: { stopAt?: number | ((path: KeyType[]) => boolean) },\n prefix: KeyType[],\n): Iterable<[patch: Patch, reversePatch: Patch]> {\n for (const [key, value] of Object.entries(a)) {\n if (!(key in b)) {\n yield [\n { op: 'remove', path: [...prefix, key] },\n { op: 'add', path: [...prefix, key], value },\n ];\n } else {\n yield* _diff(value, b[key], options, [...prefix, key]);\n }\n }\n\n for (const [key, value] of Object.entries(b)) {\n if (!(key in a)) {\n yield [\n { op: 'add', path: [...prefix, key], value },\n { op: 'remove', path: [...prefix, key] },\n ];\n }\n }\n}\n","export function toExtendedJson(value: unknown): unknown {\n if (value instanceof Map) {\n return {\n __map: [...value].map(([k, v]) => [toExtendedJson(k), toExtendedJson(v)]),\n };\n }\n\n if (value instanceof Set) {\n return {\n __set: [...value].map(toExtendedJson),\n };\n }\n\n if (value instanceof Date) {\n return {\n __date: value.toISOString(),\n };\n }\n\n if (Array.isArray(value)) {\n return value.map(toExtendedJson);\n }\n\n if (typeof value === 'object' && value !== null) {\n return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, toExtendedJson(v)]));\n }\n\n return value;\n}\n\nexport function toExtendedJsonString(value: unknown): string {\n return JSON.stringify(toExtendedJson(value));\n}\n\nexport function fromExtendedJson(value: unknown): unknown {\n if (typeof value !== 'object' || value === null) {\n return value;\n }\n\n if ('__map' in value) {\n return new Map(\n (value.__map as [unknown, unknown][]).map(([k, v]) => [\n fromExtendedJson(k),\n fromExtendedJson(v),\n ]),\n );\n }\n\n if ('__set' in value) {\n return new Set((value.__set as unknown[]).map(fromExtendedJson));\n }\n\n if ('__date' in value) {\n return new Date(value.__date as string);\n }\n\n if (Array.isArray(value)) {\n return value.map(fromExtendedJson);\n }\n\n return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, fromExtendedJson(v)]));\n}\n\nexport function fromExtendedJsonString(value: string): unknown {\n return fromExtendedJson(JSON.parse(value));\n}\n","import type { KeyType } from '@lib/path';\n\nclass TrieNode {\n children: Map<KeyType, TrieNode> = new Map();\n isLeaf = false;\n}\n\nexport class Trie {\n root: TrieNode = new TrieNode();\n\n add(path: KeyType[]): void {\n let node = this.root;\n for (const key of path) {\n let next = node.children.get(key);\n if (!next) node.children.set(key, (next = new TrieNode()));\n node = next;\n }\n node.isLeaf = true;\n }\n\n hasSubPath(path: KeyType[]): boolean {\n let node = this.root;\n for (const key of path) {\n const next = node.children.get(key);\n if (!next) return false;\n node = next;\n }\n return node.isLeaf;\n }\n}\n","import type { Cancel, DisposableCancel, 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';\nimport { fromExtendedJson, toExtendedJson } from '@lib/extendedJson';\nimport { Trie } from '@lib/trie';\n\nexport interface SyncMessage {\n fromVersion?: string;\n toVersion: string;\n patches: Patch[];\n}\n\nexport interface HistoryEntry extends SyncMessage {\n reversePatches: Patch[];\n}\n\ndeclare module '@core' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface Store<T> {\n __patches?: {\n value: T;\n version: string;\n history: HistoryEntry[];\n };\n }\n}\n\nexport interface SubscribePatchOptions extends SubscribeOptions, DiffOptions {\n /** @default false */\n runNow?: boolean;\n /** try to start from a specific version and only receive patches after that.\n * If the id is not found, it will start from the beginning */\n startAt?: string;\n}\n\nexport type InteropPatch = Patch | { op: 'add' | 'replace' | 'remove'; value?: any };\n\nconst genId = () => Math.random().toString(36).slice(2);\n\nexport function subscribePatches<T>(\n this: Store<T>,\n listener: (\n this: { cancel: Cancel },\n patches: Patch[],\n reversePatches: Patch[],\n version: string,\n previousVersion: string | undefined,\n ) => void,\n options: SubscribePatchOptions = {},\n): DisposableCancel {\n const patches = (this.__patches ??= {\n value: this.get(),\n version: genId(),\n history: [],\n });\n\n options = { ...options };\n options.runNow ??= false;\n let cursor = options.startAt ?? (options.runNow ? undefined : this.__patches.version);\n\n return this.subscribe(function (value) {\n if (patches.value !== value) {\n const result = diff(patches.value, value, options);\n patches.value = value;\n\n if (result[0].length > 0) {\n const newVersion = genId();\n\n patches.history = patches.history\n .concat({\n fromVersion: patches.version,\n toVersion: newVersion,\n patches: result[0],\n reversePatches: result[1],\n })\n .slice(-1000);\n\n patches.version = newVersion;\n }\n }\n\n if (cursor === patches.version) return;\n const index = patches.history.findIndex((h) => h.fromVersion === cursor);\n let forward, backward, previousVersion;\n\n if (index === -1) {\n [forward, backward] = diff(undefined, value, options);\n previousVersion = undefined;\n } else {\n forward = patches.history.slice(index).flatMap((h) => h.patches);\n backward = patches.history.slice(index).flatMap((h) => h.reversePatches);\n previousVersion = cursor;\n }\n\n cursor = patches.version;\n listener.apply(this, [forward, backward, cursor, previousVersion]);\n }, options);\n}\n\nexport function applyPatches<T>(this: Store<T>, patches: InteropPatch[]): void;\nexport function applyPatches<T>(this: Store<T>, ...patches: InteropPatch[]): void;\nexport function applyPatches<T>(\n this: Store<T>,\n ...patches: (InteropPatch | InteropPatch[])[]\n): void {\n this.set((value) => _applyPatches(value, ...(patches.flat() as Patch[])));\n}\n\nexport function sync<T>(\n this: Store<T>,\n listener: (syncMessage: SyncMessage) => void,\n options?: Omit<SubscribePatchOptions, 'runNow'>,\n): DisposableCancel {\n const debounce =\n typeof options?.debounce === 'object' && 'wait' in options.debounce\n ? { ...options.debounce }\n : options?.debounce !== undefined\n ? { wait: options.debounce }\n : undefined;\n\n if (debounce) {\n debounce.waitOnRunNow ??= false;\n }\n\n return this.subscribePatches(\n (patches, _, version, previousVersion) => {\n const trie = new Trie();\n\n patches = [...patches]\n .reverse()\n .filter((patch) => {\n if (trie.hasSubPath(patch.path)) {\n return false;\n }\n\n trie.add(patch.path);\n return true;\n })\n .reverse();\n\n listener({\n fromVersion: previousVersion,\n toVersion: version,\n patches: toExtendedJson(patches) as Patch[],\n });\n },\n { ...options, debounce, runNow: true },\n );\n}\n\nexport function acceptSync<T>(this: Store<T>, message: SyncMessage): void {\n if (message.fromVersion && message.fromVersion !== this.version) {\n throw new Error(\n `version mismatch! version=${this.version}, fromVersion=${message.fromVersion}`,\n );\n }\n\n const patches = fromExtendedJson(message.patches) as Patch[];\n\n this.version = message.toVersion;\n this.applyPatches(...patches);\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","_applyPatches"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index2.mjs","sources":["../../src/lib/applyPatches.ts","../../src/lib/diff.ts","../../src/lib/extendedJson.ts","../../src/lib/trie.ts","../../src/patches/patchMethods.ts"],"sourcesContent":["import type { Patch } from './diff';\nimport { remove, set } from './propAccess';\n\nfunction applySinglePatch<T>(target: T, patch: Patch): T {\n if (patch.op === 'remove') {\n return remove(target, patch.path as any);\n }\n\n return set(target, patch.path as any, patch.value);\n}\n\nexport function applyPatches<T>(target: T, ...patches: Patch[]): T {\n for (const patch of patches) {\n target = applySinglePatch(target, patch);\n }\n\n return target;\n}\n","import { isObject } from '@lib/helpers';\nimport { deepEqual } from './equals';\nimport type { KeyType } from './path';\n\nexport type Patch =\n | { op: 'add'; path: KeyType[]; value: any }\n | { op: 'remove'; path: KeyType[] }\n | { op: 'replace'; path: KeyType[]; value: any };\n\nexport interface DiffOptions {\n stopAt?: number | ((path: KeyType[]) => boolean);\n}\n\nexport function diff(\n a: any,\n b: any,\n options: DiffOptions = {},\n): [patches: Patch[], reversePatches: Patch[]] {\n const result = [..._diff(a, b, options)];\n const patches = result.map(([patch]) => patch);\n const reversePatches = result.map(([, reversePatch]) => reversePatch);\n\n return [patches, reversePatches];\n}\n\nfunction* _diff(\n a: any,\n b: any,\n options: DiffOptions,\n prefix: KeyType[] = [],\n): Iterable<[patch: Patch, reversePatch: Patch]> {\n if (a === b) {\n return;\n }\n\n if (\n (typeof options.stopAt === 'number' && prefix.length >= options.stopAt) ||\n (typeof options.stopAt === 'function' && options.stopAt(prefix))\n ) {\n if (deepEqual(a, b)) {\n return;\n }\n\n return yield [\n { op: 'replace', path: prefix, value: b },\n { op: 'replace', path: prefix, value: a },\n ];\n }\n\n if (a instanceof Date && b instanceof Date) {\n if (a.getTime() === b.getTime()) {\n return;\n }\n\n return yield [\n { op: 'replace', path: prefix, value: b },\n { op: 'replace', path: prefix, value: a },\n ];\n }\n\n if (a instanceof Map && b instanceof Map) {\n return yield* mapDiff(a, b, options, prefix);\n }\n\n if (a instanceof Set && b instanceof Set) {\n if (deepEqual(a, b)) {\n return;\n }\n\n return yield [\n { op: 'replace', path: prefix, value: b },\n { op: 'replace', path: prefix, value: a },\n ];\n }\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (deepEqual(a, b)) {\n return;\n }\n\n return yield [\n { op: 'replace', path: prefix, value: b },\n { op: 'replace', path: prefix, value: a },\n ];\n }\n\n if (isObject(a) && isObject(b) && !Array.isArray(a) && !Array.isArray(b)) {\n return yield* objectDiff(a, b, options, prefix);\n }\n\n yield [\n { op: 'replace', path: prefix, value: b },\n { op: 'replace', path: prefix, value: a },\n ];\n}\n\nfunction* mapDiff(\n a: Map<any, any>,\n b: Map<any, any>,\n options: { stopAt?: number | ((path: KeyType[]) => boolean) },\n prefix: KeyType[],\n): Iterable<[patch: Patch, reversePatch: Patch]> {\n for (const [key, value] of a) {\n if (!b.has(key)) {\n yield [\n { op: 'remove', path: [...prefix, key] },\n { op: 'add', path: [...prefix, key], value },\n ];\n } else {\n yield* _diff(value, b.get(key), options, [...prefix, key]);\n }\n }\n\n for (const [key, value] of b) {\n if (!a.has(key)) {\n yield [\n { op: 'add', path: [...prefix, key], value },\n { op: 'remove', path: [...prefix, key] },\n ];\n }\n }\n}\n\nfunction* objectDiff(\n a: any,\n b: any,\n options: { stopAt?: number | ((path: KeyType[]) => boolean) },\n prefix: KeyType[],\n): Iterable<[patch: Patch, reversePatch: Patch]> {\n for (const [key, value] of Object.entries(a)) {\n if (!(key in b)) {\n yield [\n { op: 'remove', path: [...prefix, key] },\n { op: 'add', path: [...prefix, key], value },\n ];\n } else {\n yield* _diff(value, b[key], options, [...prefix, key]);\n }\n }\n\n for (const [key, value] of Object.entries(b)) {\n if (!(key in a)) {\n yield [\n { op: 'add', path: [...prefix, key], value },\n { op: 'remove', path: [...prefix, key] },\n ];\n }\n }\n}\n","export function toExtendedJson(value: unknown): unknown {\n if (value instanceof Map) {\n return {\n __map: [...value].map(([k, v]) => [toExtendedJson(k), toExtendedJson(v)]),\n };\n }\n\n if (value instanceof Set) {\n return {\n __set: [...value].map(toExtendedJson),\n };\n }\n\n if (value instanceof Date) {\n return {\n __date: value.toISOString(),\n };\n }\n\n if (typeof value === 'bigint') {\n return {\n __bigint: value.toString(),\n };\n }\n\n if (Array.isArray(value)) {\n return value.map(toExtendedJson);\n }\n\n if (typeof value === 'object' && value !== null) {\n return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, toExtendedJson(v)]));\n }\n\n return value;\n}\n\nexport function toExtendedJsonString(value: unknown): string {\n return JSON.stringify(toExtendedJson(value));\n}\n\nexport function fromExtendedJson(value: unknown): unknown {\n if (typeof value !== 'object' || value === null) {\n return value;\n }\n\n if ('__map' in value) {\n return new Map(\n (value.__map as [unknown, unknown][]).map(([k, v]) => [\n fromExtendedJson(k),\n fromExtendedJson(v),\n ]),\n );\n }\n\n if ('__set' in value) {\n return new Set((value.__set as unknown[]).map(fromExtendedJson));\n }\n\n if ('__date' in value) {\n return new Date(value.__date as string);\n }\n\n if ('__bigint' in value) {\n return BigInt(value.__bigint as string);\n }\n\n if (Array.isArray(value)) {\n return value.map(fromExtendedJson);\n }\n\n return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, fromExtendedJson(v)]));\n}\n\nexport function fromExtendedJsonString(value: string): unknown {\n return fromExtendedJson(JSON.parse(value));\n}\n","import type { KeyType } from '@lib/path';\n\nclass TrieNode {\n children: Map<KeyType, TrieNode> = new Map();\n isLeaf = false;\n}\n\nexport class Trie {\n root: TrieNode = new TrieNode();\n\n add(path: KeyType[]): void {\n let node = this.root;\n for (const key of path) {\n let next = node.children.get(key);\n if (!next) node.children.set(key, (next = new TrieNode()));\n node = next;\n }\n node.isLeaf = true;\n }\n\n hasSubPath(path: KeyType[]): boolean {\n let node = this.root;\n for (const key of path) {\n const next = node.children.get(key);\n if (!next) return false;\n node = next;\n }\n return node.isLeaf;\n }\n}\n","import type { Cancel, DisposableCancel, 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';\nimport { fromExtendedJson, toExtendedJson } from '@lib/extendedJson';\nimport { Trie } from '@lib/trie';\n\nexport interface SyncMessage {\n fromVersion?: string;\n toVersion: string;\n patches: Patch[];\n}\n\nexport interface HistoryEntry extends SyncMessage {\n reversePatches: Patch[];\n}\n\ndeclare module '@core' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface Store<T> {\n __patches?: {\n value: T;\n version: string;\n history: HistoryEntry[];\n };\n }\n}\n\nexport interface SubscribePatchOptions extends SubscribeOptions, DiffOptions {\n /** @default false */\n runNow?: boolean;\n /** try to start from a specific version and only receive patches after that.\n * If the id is not found, it will start from the beginning */\n startAt?: string;\n}\n\nexport type InteropPatch = Patch | { op: 'add' | 'replace' | 'remove'; value?: any };\n\nconst genId = () => Math.random().toString(36).slice(2);\n\nexport function subscribePatches<T>(\n this: Store<T>,\n listener: (\n this: { cancel: Cancel },\n patches: Patch[],\n reversePatches: Patch[],\n version: string,\n previousVersion: string | undefined,\n ) => void,\n options: SubscribePatchOptions = {},\n): DisposableCancel {\n const patches = (this.__patches ??= {\n value: this.get(),\n version: genId(),\n history: [],\n });\n\n options = { ...options };\n options.runNow ??= false;\n let cursor = options.startAt ?? (options.runNow ? undefined : this.__patches.version);\n\n return this.subscribe(function (value) {\n if (patches.value !== value) {\n const result = diff(patches.value, value, options);\n patches.value = value;\n\n if (result[0].length > 0) {\n const newVersion = genId();\n\n patches.history = patches.history\n .concat({\n fromVersion: patches.version,\n toVersion: newVersion,\n patches: result[0],\n reversePatches: result[1],\n })\n .slice(-1000);\n\n patches.version = newVersion;\n }\n }\n\n if (cursor === patches.version) return;\n const index = patches.history.findIndex((h) => h.fromVersion === cursor);\n let forward, backward, previousVersion;\n\n if (index === -1) {\n [forward, backward] = diff(undefined, value, options);\n previousVersion = undefined;\n } else {\n forward = patches.history.slice(index).flatMap((h) => h.patches);\n backward = patches.history.slice(index).flatMap((h) => h.reversePatches);\n previousVersion = cursor;\n }\n\n cursor = patches.version;\n listener.apply(this, [forward, backward, cursor, previousVersion]);\n }, options);\n}\n\nexport function applyPatches<T>(this: Store<T>, patches: InteropPatch[]): void;\nexport function applyPatches<T>(this: Store<T>, ...patches: InteropPatch[]): void;\nexport function applyPatches<T>(\n this: Store<T>,\n ...patches: (InteropPatch | InteropPatch[])[]\n): void {\n this.set((value) => _applyPatches(value, ...(patches.flat() as Patch[])));\n}\n\nexport function sync<T>(\n this: Store<T>,\n listener: (syncMessage: SyncMessage) => void,\n options?: Omit<SubscribePatchOptions, 'runNow'>,\n): DisposableCancel {\n const debounce =\n typeof options?.debounce === 'object' && 'wait' in options.debounce\n ? { ...options.debounce }\n : options?.debounce !== undefined\n ? { wait: options.debounce }\n : undefined;\n\n if (debounce) {\n debounce.waitOnRunNow ??= false;\n }\n\n return this.subscribePatches(\n (patches, _, version, previousVersion) => {\n const trie = new Trie();\n\n patches = [...patches]\n .reverse()\n .filter((patch) => {\n if (trie.hasSubPath(patch.path)) {\n return false;\n }\n\n trie.add(patch.path);\n return true;\n })\n .reverse();\n\n listener({\n fromVersion: previousVersion,\n toVersion: version,\n patches: toExtendedJson(patches) as Patch[],\n });\n },\n { ...options, debounce, runNow: true },\n );\n}\n\nexport function acceptSync<T>(this: Store<T>, message: SyncMessage): void {\n if (message.fromVersion && message.fromVersion !== this.version) {\n throw new Error(\n `version mismatch! version=${this.version}, fromVersion=${message.fromVersion}`,\n );\n }\n\n const patches = fromExtendedJson(message.patches) as Patch[];\n\n this.version = message.toVersion;\n this.applyPatches(...patches);\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","_applyPatches"],"mappings":"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"}
|