cross-state 0.53.3 → 0.54.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-CUT6urMc.cjs +30 -0
- package/dist/diff-BQ8bB3Wk.d.cts +22 -0
- package/dist/diff-gZezL04N.d.ts +22 -0
- package/dist/extendedJson-BZkQBXEv.js +29 -0
- package/dist/extendedJson-BZkQBXEv.js.map +1 -0
- package/dist/extendedJson-Dn2F7Edo.cjs +53 -0
- package/dist/extendedJson-Dn2F7Edo.cjs.map +1 -0
- package/dist/hash-BV06P7va.js +19 -0
- package/dist/hash-BV06P7va.js.map +1 -0
- package/dist/hash-CJPl7SRj.cjs +30 -0
- package/dist/hash-CJPl7SRj.cjs.map +1 -0
- package/dist/index.cjs +49 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +59 -0
- package/dist/index.d.ts +59 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/mutative/index.cjs +3 -0
- package/dist/mutative/index.d.cts +3 -0
- package/dist/mutative/index.d.ts +3 -0
- package/dist/mutative/index.js +3 -0
- package/dist/mutative/register.cjs +10 -0
- package/dist/mutative/register.cjs.map +1 -0
- package/dist/mutative/register.d.cts +11 -0
- package/dist/mutative/register.d.ts +9 -0
- package/dist/mutative/register.js +10 -0
- package/dist/mutative/register.js.map +1 -0
- package/dist/mutativeMethods-6QzygG3W.d.cts +13 -0
- package/dist/mutativeMethods-Br3xN2Iq.d.ts +13 -0
- package/dist/mutativeMethods-CZKeRIDL.js +27 -0
- package/dist/mutativeMethods-CZKeRIDL.js.map +1 -0
- package/dist/mutativeMethods-CgXk_bMt.cjs +33 -0
- package/dist/mutativeMethods-CgXk_bMt.cjs.map +1 -0
- package/dist/patchMethods-C3L7Kh8T.d.cts +48 -0
- package/dist/patchMethods-D5YJwcpn.cjs +264 -0
- package/dist/patchMethods-D5YJwcpn.cjs.map +1 -0
- package/dist/patchMethods-DRPfkhAe.js +241 -0
- package/dist/patchMethods-DRPfkhAe.js.map +1 -0
- package/dist/patchMethods-Dxad6HF6.d.ts +48 -0
- package/dist/patches/index.cjs +5 -0
- package/dist/patches/index.d.cts +4 -0
- package/dist/patches/index.d.ts +4 -0
- package/dist/patches/index.js +5 -0
- package/dist/patches/register.cjs +11 -0
- package/dist/patches/register.cjs.map +1 -0
- package/dist/patches/register.d.cts +12 -0
- package/dist/patches/register.d.ts +10 -0
- package/dist/patches/register.js +11 -0
- package/dist/patches/register.js.map +1 -0
- package/dist/persist/register.cjs +13 -0
- package/dist/persist/register.cjs.map +1 -0
- package/dist/persist/register.d.cts +15 -0
- package/dist/persist/register.d.ts +13 -0
- package/dist/persist/register.js +13 -0
- package/dist/persist/register.js.map +1 -0
- package/dist/persist-BluRVcW6.js +258 -0
- package/dist/persist-BluRVcW6.js.map +1 -0
- package/dist/persist-CPjpg6D0.d.ts +61 -0
- package/dist/persist-CztClydq.cjs +263 -0
- package/dist/persist-CztClydq.cjs.map +1 -0
- package/dist/persist-D7MAsyyW.d.cts +61 -0
- package/dist/propAccess-ByqBjC19.cjs +173 -0
- package/dist/propAccess-ByqBjC19.cjs.map +1 -0
- package/dist/propAccess-DGchzVfy.js +113 -0
- package/dist/propAccess-DGchzVfy.js.map +1 -0
- package/dist/react/index.cjs +610 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.cts +305 -0
- package/dist/react/index.d.ts +305 -0
- package/dist/react/index.js +590 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/register.cjs +16 -0
- package/dist/react/register.cjs.map +1 -0
- package/dist/react/register.d.cts +16 -0
- package/dist/react/register.d.ts +14 -0
- package/dist/react/register.js +16 -0
- package/dist/react/register.js.map +1 -0
- package/dist/scope-DI1OFHcr.d.ts +167 -0
- package/dist/scope-DO5vpLPV.d.cts +167 -0
- package/dist/scope-DU5dFP1T.js +322 -0
- package/dist/scope-DU5dFP1T.js.map +1 -0
- package/dist/scope-DvqvkIHB.cjs +369 -0
- package/dist/scope-DvqvkIHB.cjs.map +1 -0
- package/dist/store-BEsiS8y7.d.cts +242 -0
- package/dist/store-BWMWEUpu.cjs +819 -0
- package/dist/store-BWMWEUpu.cjs.map +1 -0
- package/dist/store-DKaeE840.d.ts +242 -0
- package/dist/store-Dr8gM3lq.js +730 -0
- package/dist/store-Dr8gM3lq.js.map +1 -0
- package/dist/storeMethods-AIJSwxHz.js +315 -0
- package/dist/storeMethods-AIJSwxHz.js.map +1 -0
- package/dist/storeMethods-BQwU2Uia.d.cts +107 -0
- package/dist/storeMethods-C4luym7C.d.ts +107 -0
- package/dist/storeMethods-DVVsmUg1.cjs +375 -0
- package/dist/storeMethods-DVVsmUg1.cjs.map +1 -0
- package/package.json +92 -135
- package/dist/cjs/hash.cjs +0 -30
- package/dist/cjs/hash.cjs.map +0 -1
- package/dist/cjs/index.cjs +0 -56
- package/dist/cjs/index.cjs.map +0 -1
- package/dist/cjs/index2.cjs +0 -300
- package/dist/cjs/index2.cjs.map +0 -1
- package/dist/cjs/mutative/index.cjs +0 -10
- package/dist/cjs/mutative/index.cjs.map +0 -1
- package/dist/cjs/mutative/register.cjs +0 -8
- package/dist/cjs/mutative/register.cjs.map +0 -1
- package/dist/cjs/mutativeMethods.cjs +0 -29
- package/dist/cjs/mutativeMethods.cjs.map +0 -1
- package/dist/cjs/patches/index.cjs +0 -10
- package/dist/cjs/patches/index.cjs.map +0 -1
- package/dist/cjs/patches/register.cjs +0 -8
- package/dist/cjs/patches/register.cjs.map +0 -1
- package/dist/cjs/persist/register.cjs +0 -11
- package/dist/cjs/persist/register.cjs.map +0 -1
- package/dist/cjs/persist.cjs +0 -302
- package/dist/cjs/persist.cjs.map +0 -1
- package/dist/cjs/propAccess.cjs +0 -162
- package/dist/cjs/propAccess.cjs.map +0 -1
- package/dist/cjs/react/index.cjs +0 -628
- package/dist/cjs/react/index.cjs.map +0 -1
- package/dist/cjs/react/register.cjs +0 -13
- package/dist/cjs/react/register.cjs.map +0 -1
- package/dist/cjs/scope.cjs +0 -400
- package/dist/cjs/scope.cjs.map +0 -1
- package/dist/cjs/store.cjs +0 -829
- package/dist/cjs/store.cjs.map +0 -1
- package/dist/cjs/storeMethods.cjs +0 -856
- package/dist/cjs/storeMethods.cjs.map +0 -1
- package/dist/cjs/urlStore.cjs +0 -120
- package/dist/cjs/urlStore.cjs.map +0 -1
- package/dist/es/hash.mjs +0 -27
- package/dist/es/hash.mjs.map +0 -1
- package/dist/es/index.mjs +0 -20
- package/dist/es/index.mjs.map +0 -1
- package/dist/es/index2.mjs +0 -291
- package/dist/es/index2.mjs.map +0 -1
- package/dist/es/mutative/index.mjs +0 -2
- package/dist/es/mutative/index.mjs.map +0 -1
- package/dist/es/mutative/register.mjs +0 -6
- package/dist/es/mutative/register.mjs.map +0 -1
- package/dist/es/mutativeMethods.mjs +0 -27
- package/dist/es/mutativeMethods.mjs.map +0 -1
- package/dist/es/patches/index.mjs +0 -2
- package/dist/es/patches/index.mjs.map +0 -1
- package/dist/es/patches/register.mjs +0 -6
- package/dist/es/patches/register.mjs.map +0 -1
- package/dist/es/persist/register.mjs +0 -9
- package/dist/es/persist/register.mjs.map +0 -1
- package/dist/es/persist.mjs +0 -300
- package/dist/es/persist.mjs.map +0 -1
- package/dist/es/propAccess.mjs +0 -151
- package/dist/es/propAccess.mjs.map +0 -1
- package/dist/es/react/index.mjs +0 -611
- package/dist/es/react/index.mjs.map +0 -1
- package/dist/es/react/register.mjs +0 -11
- package/dist/es/react/register.mjs.map +0 -1
- package/dist/es/scope.mjs +0 -391
- package/dist/es/scope.mjs.map +0 -1
- package/dist/es/store.mjs +0 -812
- package/dist/es/store.mjs.map +0 -1
- package/dist/es/storeMethods.mjs +0 -845
- package/dist/es/storeMethods.mjs.map +0 -1
- package/dist/es/urlStore.mjs +0 -116
- package/dist/es/urlStore.mjs.map +0 -1
- package/dist/types/core/cache.d.ts +0 -119
- package/dist/types/core/commonTypes.d.ts +0 -76
- package/dist/types/core/index.d.ts +0 -6
- package/dist/types/core/resourceGroup.d.ts +0 -16
- package/dist/types/core/scope.d.ts +0 -5
- package/dist/types/core/store.d.ts +0 -86
- package/dist/types/core/urlStore.d.ts +0 -21
- package/dist/types/index.d.ts +0 -14
- package/dist/types/lib/applyPatches.d.ts +0 -2
- package/dist/types/lib/autobind.d.ts +0 -1
- package/dist/types/lib/cacheState.d.ts +0 -20
- package/dist/types/lib/calcDuration.d.ts +0 -2
- package/dist/types/lib/calculatedValue.d.ts +0 -9
- package/dist/types/lib/castArray.d.ts +0 -1
- package/dist/types/lib/clone.d.ts +0 -1
- package/dist/types/lib/constrain.d.ts +0 -1
- package/dist/types/lib/debounce.d.ts +0 -12
- package/dist/types/lib/deferred.d.ts +0 -5
- package/dist/types/lib/diff.d.ts +0 -17
- package/dist/types/lib/disposable.d.ts +0 -3
- package/dist/types/lib/equals.d.ts +0 -3
- package/dist/types/lib/extendedJson.d.ts +0 -5
- package/dist/types/lib/forwardError.d.ts +0 -1
- package/dist/types/lib/hash.d.ts +0 -5
- package/dist/types/lib/helpers.d.ts +0 -2
- package/dist/types/lib/instanceCache.d.ts +0 -18
- package/dist/types/lib/isPromise.d.ts +0 -1
- package/dist/types/lib/makeSelector.d.ts +0 -2
- package/dist/types/lib/maybePromise.d.ts +0 -1
- package/dist/types/lib/path.d.ts +0 -41
- package/dist/types/lib/promiseChain.d.ts +0 -5
- package/dist/types/lib/promiseWithCancel.d.ts +0 -8
- package/dist/types/lib/promiseWithState.d.ts +0 -9
- package/dist/types/lib/propAccess.d.ts +0 -7
- package/dist/types/lib/queue.d.ts +0 -11
- package/dist/types/lib/standardMethods.d.ts +0 -20
- package/dist/types/lib/throttle.d.ts +0 -2
- package/dist/types/lib/trackingProxy.d.ts +0 -2
- package/dist/types/lib/trie.d.ts +0 -11
- package/dist/types/lib/typeHelpers.d.ts +0 -12
- package/dist/types/lib/unwrapPromise.d.ts +0 -1
- package/dist/types/lib/updateHelpers.d.ts +0 -1
- package/dist/types/lib/wildcardMatch.d.ts +0 -3
- package/dist/types/mutative/index.d.ts +0 -1
- package/dist/types/mutative/mutativeMethods.d.ts +0 -11
- package/dist/types/mutative/register.d.ts +0 -7
- package/dist/types/patches/index.d.ts +0 -1
- package/dist/types/patches/patchMethods.d.ts +0 -44
- package/dist/types/patches/register.d.ts +0 -7
- package/dist/types/persist/index.d.ts +0 -3
- package/dist/types/persist/persist.d.ts +0 -40
- package/dist/types/persist/persistPathHelpers.d.ts +0 -6
- package/dist/types/persist/persistStorage.d.ts +0 -17
- package/dist/types/persist/register.d.ts +0 -9
- package/dist/types/react/cacheMethods.d.ts +0 -5
- package/dist/types/react/form/customInput.d.ts +0 -6
- package/dist/types/react/form/form.d.ts +0 -98
- package/dist/types/react/form/formField.d.ts +0 -68
- package/dist/types/react/form/formForEach.d.ts +0 -19
- package/dist/types/react/form/index.d.ts +0 -3
- package/dist/types/react/form/useFormAutosave.d.ts +0 -9
- package/dist/types/react/index.d.ts +0 -11
- package/dist/types/react/loadingBoundary.d.ts +0 -21
- package/dist/types/react/register.d.ts +0 -15
- package/dist/types/react/scope.d.ts +0 -24
- package/dist/types/react/scopeMethods.d.ts +0 -20
- package/dist/types/react/storeMethods.d.ts +0 -15
- package/dist/types/react/useCache.d.ts +0 -34
- package/dist/types/react/useDecoupledState.d.ts +0 -7
- package/dist/types/react/useProp.d.ts +0 -8
- package/dist/types/react/useStore.d.ts +0 -16
- package/dist/types/react/useUrlParamScope.d.ts +0 -4
package/dist/es/index2.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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(\n value: any,\n replacer?: (this: any, key: string, value: any) => any,\n space?: string | number,\n): string;\nexport function toExtendedJsonString(\n value: any,\n replacer?: (number | string)[] | null,\n space?: string | number,\n): string;\nexport function toExtendedJsonString(value: unknown, ...args: any[]): string {\n return JSON.stringify(toExtendedJson(value), ...args);\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(\n value: string,\n reviver?: (this: any, key: string, value: any) => any,\n): unknown {\n return fromExtendedJson(JSON.parse(value, reviver));\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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
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;AAC9C,QAAA,CAAS,KAAK,CAAA"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { create } from 'mutative';
|
|
2
|
-
|
|
3
|
-
function update(...args) {
|
|
4
|
-
if (args.length === 1) {
|
|
5
|
-
const [mutation] = args;
|
|
6
|
-
this.set((value) => {
|
|
7
|
-
const result = create(value, (draft) => {
|
|
8
|
-
mutation(draft);
|
|
9
|
-
});
|
|
10
|
-
return result;
|
|
11
|
-
});
|
|
12
|
-
} else {
|
|
13
|
-
const [path, mutation] = args;
|
|
14
|
-
this.set(path, (value) => {
|
|
15
|
-
const result = create(value, (draft) => {
|
|
16
|
-
mutation(draft);
|
|
17
|
-
});
|
|
18
|
-
return result;
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
const mutativeMethods = {
|
|
23
|
-
update
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export { mutativeMethods as m };
|
|
27
|
-
//# sourceMappingURL=mutativeMethods.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mutativeMethods.mjs","sources":["../../src/mutative/mutativeMethods.ts"],"sourcesContent":["import type { Store } from '@core/store';\nimport type { Constrain } from '@lib/constrain';\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>(\n this: Store<T>,\n path: Constrain<P, Path<T>>,\n mutation: Mutation<Value<T, P>>,\n): void;\n\nfunction update<T, const TPath>(\n this: Store<T>,\n ...args:\n | [recipe: Mutation<T>]\n | [path: Constrain<TPath, Path<T>>, 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":";;AAeA,SAAS,UAEJ,IAGH,EAAA;AACA,EAAI,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AACrB,IAAM,MAAA,CAAC,QAAQ,CAAI,GAAA,IAAA;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;AAAA,OACf,CAAA;AACD,MAAO,OAAA,MAAA;AAAA,KACR,CAAA;AAAA,GACI,MAAA;AACL,IAAM,MAAA,CAAC,IAAM,EAAA,QAAQ,CAAI,GAAA,IAAA;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;AAAA,OACf,CAAA;AACD,MAAO,OAAA,MAAA;AAAA,KACR,CAAA;AAAA;AAEL;AAEO,MAAM,eAET,GAAA;AAAA,EACF;AACF;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
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;AAC3C,QAAA,CAAS,KAAK,CAAA"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { S as Store } from '../store.mjs';
|
|
2
|
-
import { p as persist } from '../persist.mjs';
|
|
3
|
-
|
|
4
|
-
Store.addHook((store) => {
|
|
5
|
-
if (store.options.persist) {
|
|
6
|
-
store.persistance = persist(store, store.options.persist);
|
|
7
|
-
}
|
|
8
|
-
});
|
|
9
|
-
//# sourceMappingURL=register.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"register.mjs","sources":["../../../src/persist/register.ts"],"sourcesContent":["import { Store } from '@core';\nimport { persist, type Persist, type PersistOptions } from '@persist/persist';\n\ndeclare module '@core' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface StoreOptions<T> {\n persist?: PersistOptions<T>;\n }\n\n interface Store<T> {\n persistance?: Persist<T>;\n }\n}\n\nStore.addHook((store) => {\n if (store.options.persist) {\n store.persistance = persist(store, store.options.persist);\n }\n});\n"],"names":[],"mappings":";;;AAcA,KAAM,CAAA,OAAA,CAAQ,CAAC,KAAU,KAAA;AACvB,EAAI,IAAA,KAAA,CAAM,QAAQ,OAAS,EAAA;AACzB,IAAA,KAAA,CAAM,WAAc,GAAA,OAAA,CAAQ,KAAO,EAAA,KAAA,CAAM,QAAQ,OAAO,CAAA;AAAA;AAE5D,CAAC,CAAA"}
|
package/dist/es/persist.mjs
DELETED
|
@@ -1,300 +0,0 @@
|
|
|
1
|
-
import { i as isPromise, q as queue, c as calcDuration } from './store.mjs';
|
|
2
|
-
import { c as castArrayPath, s as shallowEqual, r as remove, b as set, g as get } from './propAccess.mjs';
|
|
3
|
-
import { s as subscribePatches, b as fromExtendedJsonString, c as toExtendedJsonString } from './index2.mjs';
|
|
4
|
-
|
|
5
|
-
function promiseChain(value) {
|
|
6
|
-
if (value instanceof Function) {
|
|
7
|
-
value = value();
|
|
8
|
-
}
|
|
9
|
-
return {
|
|
10
|
-
value,
|
|
11
|
-
then(fn) {
|
|
12
|
-
const next = isPromise(value) ? value.then((value2) => fn(value2)) : fn(value);
|
|
13
|
-
return promiseChain(next);
|
|
14
|
-
}
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const isAncestor = (ancestor, path) => {
|
|
19
|
-
return ancestor.length <= path.length && ancestor.every((v, i) => v === "*" || path[i] === "*" || v === path[i]);
|
|
20
|
-
};
|
|
21
|
-
const split = (value, path) => {
|
|
22
|
-
const [first, ...rest] = path;
|
|
23
|
-
if (first === undefined) return [{ path: [], value }];
|
|
24
|
-
let entries;
|
|
25
|
-
if (value instanceof Map) {
|
|
26
|
-
entries = value;
|
|
27
|
-
} else if (value instanceof Set) {
|
|
28
|
-
entries = new Map([...value].map((v, i) => [i, v]));
|
|
29
|
-
} else if (Array.isArray(value)) {
|
|
30
|
-
entries = new Map(value.map((v, i) => [i, v]));
|
|
31
|
-
} else if (typeof value === "object" && value !== null) {
|
|
32
|
-
entries = new Map(Object.entries(value));
|
|
33
|
-
} else {
|
|
34
|
-
return [{ path: [], value }];
|
|
35
|
-
}
|
|
36
|
-
if (first === "*") {
|
|
37
|
-
return [...entries].flatMap(
|
|
38
|
-
([k, v]) => split(v, rest).map(({ path: path2, value: value2 }) => ({ path: [k, ...path2], value: value2 }))
|
|
39
|
-
);
|
|
40
|
-
}
|
|
41
|
-
const subValue = entries.get(first);
|
|
42
|
-
if (subValue === undefined) return [{ path: [], value }];
|
|
43
|
-
return split(subValue, rest).map(({ path: path2, value: value2 }) => ({ path: [first, ...path2], value: value2 }));
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
function normalizeStorage(storage) {
|
|
47
|
-
return {
|
|
48
|
-
getItem: storage.getItem.bind(storage),
|
|
49
|
-
setItem: storage.setItem.bind(storage),
|
|
50
|
-
removeItem: storage.removeItem.bind(storage),
|
|
51
|
-
listItems() {
|
|
52
|
-
if ("listItems" in storage) {
|
|
53
|
-
return storage.listItems();
|
|
54
|
-
}
|
|
55
|
-
return promiseChain(() => {
|
|
56
|
-
if ("keys" in storage) {
|
|
57
|
-
return storage.keys();
|
|
58
|
-
} else {
|
|
59
|
-
return promiseChain(
|
|
60
|
-
storage.length instanceof Function ? storage.length() : storage.length
|
|
61
|
-
).then((length) => {
|
|
62
|
-
const keys = Array.from({ length }, (_, index) => storage.key(index));
|
|
63
|
-
return keys.some(isPromise) ? Promise.all(keys) : keys;
|
|
64
|
-
}).then((keys) => {
|
|
65
|
-
return keys.filter((key) => typeof key === "string");
|
|
66
|
-
}).value;
|
|
67
|
-
}
|
|
68
|
-
}).then((keys) => {
|
|
69
|
-
const results = keys.map(
|
|
70
|
-
(key) => promiseChain(storage.getItem(key)).then((value) => [key, value]).value
|
|
71
|
-
);
|
|
72
|
-
return results.some(isPromise) ? Promise.all(results) : results;
|
|
73
|
-
}).then((results) => {
|
|
74
|
-
return new Map(results.filter(([, value]) => value !== null));
|
|
75
|
-
}).value;
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
class Persist {
|
|
81
|
-
constructor(store, options) {
|
|
82
|
-
this.store = store;
|
|
83
|
-
this.options = options;
|
|
84
|
-
this.queue = queue();
|
|
85
|
-
this.handles = /* @__PURE__ */ new Set();
|
|
86
|
-
this.stopped = false;
|
|
87
|
-
this.updateInProgress = /* @__PURE__ */ new Map();
|
|
88
|
-
this.storage = normalizeStorage(options.storage);
|
|
89
|
-
this.channel = new BroadcastChannel(`cross-state-persist_${options.id}`);
|
|
90
|
-
this.prefix = `${options.id}:`;
|
|
91
|
-
if (Symbol.dispose) {
|
|
92
|
-
this[Symbol.dispose] = () => this.stop();
|
|
93
|
-
}
|
|
94
|
-
this.paths = (options.paths ?? []).map((p) => {
|
|
95
|
-
if (isPlainPath(p)) {
|
|
96
|
-
return {
|
|
97
|
-
path: castArrayPath(p),
|
|
98
|
-
throttle: options.throttle && calcDuration(options.throttle)
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
const _p = p;
|
|
102
|
-
return {
|
|
103
|
-
path: castArrayPath(_p.path),
|
|
104
|
-
throttle: (_p.throttle && calcDuration(_p.throttle)) ?? (options.throttle && calcDuration(options.throttle))
|
|
105
|
-
};
|
|
106
|
-
}).sort((a, b) => b.path.length - a.path.length);
|
|
107
|
-
if (this.paths.length === 0) {
|
|
108
|
-
this.paths.push({
|
|
109
|
-
path: ["*"],
|
|
110
|
-
throttle: options.throttle && calcDuration(options.throttle)
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
this.initialized = new Promise((resolve) => {
|
|
114
|
-
this.resolveInitialized = resolve;
|
|
115
|
-
});
|
|
116
|
-
this.watchStore();
|
|
117
|
-
this.watchStorage();
|
|
118
|
-
}
|
|
119
|
-
watchStore() {
|
|
120
|
-
const throttle = Math.min(...this.paths.map((p) => p.throttle ?? 0)) || undefined;
|
|
121
|
-
const cancel = subscribePatches.apply(this.store, [
|
|
122
|
-
(patches, reversePatches) => {
|
|
123
|
-
let i = 0;
|
|
124
|
-
for (const patch of patches) {
|
|
125
|
-
const reversePatch = reversePatches[i++];
|
|
126
|
-
const stringPath = JSON.stringify(patch.path);
|
|
127
|
-
if (this.updateInProgress.has(stringPath) && this.updateInProgress.get(stringPath) === (patch.op === "remove" ? undefined : patch.value)) {
|
|
128
|
-
continue;
|
|
129
|
-
}
|
|
130
|
-
const matchingPaths = this.paths.filter(
|
|
131
|
-
(p) => isAncestor(p.path, patch.path) || isAncestor(patch.path, p.path)
|
|
132
|
-
);
|
|
133
|
-
for (const { path } of matchingPaths) {
|
|
134
|
-
if (path.length <= patch.path.length) {
|
|
135
|
-
const pathToSave = patch.path.slice(0, path.length);
|
|
136
|
-
this.queue(() => this.save(pathToSave), pathToSave);
|
|
137
|
-
} else if (patch.op === "remove") {
|
|
138
|
-
const subValues = split(
|
|
139
|
-
reversePatch?.op === "add" ? reversePatch.value : {},
|
|
140
|
-
path.slice(patch.path.length)
|
|
141
|
-
);
|
|
142
|
-
for (const { path: path2 } of subValues) {
|
|
143
|
-
this.queue(() => this.save([...patch.path, ...path2]), [...patch.path, ...path2]);
|
|
144
|
-
}
|
|
145
|
-
} else {
|
|
146
|
-
const updatedValues = split(patch.value, path.slice(patch.path.length));
|
|
147
|
-
const removedValues = split(
|
|
148
|
-
reversePatch?.op !== "remove" ? reversePatch?.value : {},
|
|
149
|
-
path.slice(patch.path.length)
|
|
150
|
-
).filter((v) => !updatedValues.some((u) => shallowEqual(u.path, v.path)));
|
|
151
|
-
for (const { path: path2 } of updatedValues) {
|
|
152
|
-
this.queue(() => this.save([...patch.path, ...path2]), [...patch.path, ...path2]);
|
|
153
|
-
}
|
|
154
|
-
for (const { path: path2 } of removedValues) {
|
|
155
|
-
this.queue(() => this.save([...patch.path, ...path2]), [...patch.path, ...path2]);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
},
|
|
161
|
-
{ runNow: false, passive: true, throttle }
|
|
162
|
-
]);
|
|
163
|
-
this.handles.add(cancel);
|
|
164
|
-
}
|
|
165
|
-
async watchStorage() {
|
|
166
|
-
let items = this.storage.listItems();
|
|
167
|
-
if (isPromise(items)) {
|
|
168
|
-
items = await items;
|
|
169
|
-
}
|
|
170
|
-
if (this.stopped) {
|
|
171
|
-
return;
|
|
172
|
-
}
|
|
173
|
-
const toLoad = new Map(
|
|
174
|
-
[...items.entries()].sort((a, b) => b[1].length - a[1].length).map(([key, value]) => [this.parseKey(key), value]).filter(([key]) => key)
|
|
175
|
-
);
|
|
176
|
-
this.queue(() => this.load(toLoad));
|
|
177
|
-
this.queue(() => this.resolveInitialized?.());
|
|
178
|
-
const listener = (event) => {
|
|
179
|
-
this.queue(() => this.load([{ type: "data", path: event.data }]));
|
|
180
|
-
};
|
|
181
|
-
this.channel.addEventListener("message", listener);
|
|
182
|
-
this.handles.add(() => this.channel.removeEventListener("message", listener));
|
|
183
|
-
}
|
|
184
|
-
buildKey({ type, path }) {
|
|
185
|
-
return `${this.prefix}${type === "internal" ? path : JSON.stringify(path)}`;
|
|
186
|
-
}
|
|
187
|
-
parseKey(key) {
|
|
188
|
-
if (!key.startsWith(this.prefix)) {
|
|
189
|
-
return;
|
|
190
|
-
}
|
|
191
|
-
key = key.slice(this.prefix.length);
|
|
192
|
-
if (!key.startsWith("[")) {
|
|
193
|
-
return { type: "internal", path: key };
|
|
194
|
-
}
|
|
195
|
-
return { type: "data", path: JSON.parse(key) };
|
|
196
|
-
}
|
|
197
|
-
load(items) {
|
|
198
|
-
return promiseChain(() => {
|
|
199
|
-
if (Array.isArray(items)) {
|
|
200
|
-
return promiseChain(() => {
|
|
201
|
-
const entries = items.map(
|
|
202
|
-
(key) => promiseChain(() => {
|
|
203
|
-
return this.storage.getItem(this.buildKey(key));
|
|
204
|
-
}).then((value) => [key, value]).value
|
|
205
|
-
);
|
|
206
|
-
return entries.some(isPromise) ? Promise.all(entries) : entries;
|
|
207
|
-
}).then((entries) => {
|
|
208
|
-
return entries.filter((entry) => entry !== null);
|
|
209
|
-
}).value;
|
|
210
|
-
} else {
|
|
211
|
-
return [...items.entries()];
|
|
212
|
-
}
|
|
213
|
-
}).then((entries) => {
|
|
214
|
-
if (this.stopped) {
|
|
215
|
-
return;
|
|
216
|
-
}
|
|
217
|
-
const toWrite = entries.filter(([key, value]) => {
|
|
218
|
-
if (key.type !== "data" || !value) {
|
|
219
|
-
return;
|
|
220
|
-
}
|
|
221
|
-
if (!this.paths.find(
|
|
222
|
-
(p) => p.path.length === 1 && p.path[0] === "*" && key.path.length === 0 || p.path.length === key.path.length && isAncestor(p.path, key.path)
|
|
223
|
-
)) {
|
|
224
|
-
return null;
|
|
225
|
-
}
|
|
226
|
-
const inSaveQueue = this.queue.getRefs().find((ref) => isAncestor(ref, key.path) || isAncestor(key.path, ref));
|
|
227
|
-
return !inSaveQueue;
|
|
228
|
-
}).map(([key, value]) => {
|
|
229
|
-
try {
|
|
230
|
-
return {
|
|
231
|
-
path: key.path,
|
|
232
|
-
value: !value || value === "undefined" ? void 0 : fromExtendedJsonString(value)
|
|
233
|
-
};
|
|
234
|
-
} catch {
|
|
235
|
-
return undefined;
|
|
236
|
-
}
|
|
237
|
-
}).filter(Boolean);
|
|
238
|
-
if (toWrite.length > 0) {
|
|
239
|
-
for (const { path, value } of toWrite) {
|
|
240
|
-
this.updateInProgress.set(JSON.stringify(path), value);
|
|
241
|
-
}
|
|
242
|
-
this.store.set((state) => {
|
|
243
|
-
for (const { path, value } of toWrite) {
|
|
244
|
-
if (value === undefined) {
|
|
245
|
-
state = remove(state, path);
|
|
246
|
-
} else {
|
|
247
|
-
state = set(state, path, value);
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
return state;
|
|
251
|
-
});
|
|
252
|
-
this.updateInProgress.clear();
|
|
253
|
-
}
|
|
254
|
-
const versionEntry = entries.find(
|
|
255
|
-
([key]) => key.type === "internal" && key.path === "version"
|
|
256
|
-
);
|
|
257
|
-
if (versionEntry) {
|
|
258
|
-
this.store.version = versionEntry[1];
|
|
259
|
-
}
|
|
260
|
-
}).value;
|
|
261
|
-
}
|
|
262
|
-
save(path) {
|
|
263
|
-
const key = this.buildKey({ type: "data", path });
|
|
264
|
-
const value = get(this.store.get(), path);
|
|
265
|
-
return promiseChain(value).then((value2) => {
|
|
266
|
-
if (value2 === undefined) {
|
|
267
|
-
return this.storage.removeItem(key);
|
|
268
|
-
} else {
|
|
269
|
-
return this.storage.setItem(key, toExtendedJsonString(value2));
|
|
270
|
-
}
|
|
271
|
-
}).then(() => {
|
|
272
|
-
this.channel.postMessage(path);
|
|
273
|
-
if (this.store.version) {
|
|
274
|
-
return this.storage.setItem(
|
|
275
|
-
this.buildKey({ type: "internal", path: "version" }),
|
|
276
|
-
this.store.version
|
|
277
|
-
);
|
|
278
|
-
} else {
|
|
279
|
-
return this.storage.removeItem(this.buildKey({ type: "internal", path: "version" }));
|
|
280
|
-
}
|
|
281
|
-
}).value;
|
|
282
|
-
}
|
|
283
|
-
async stop() {
|
|
284
|
-
this.stopped = true;
|
|
285
|
-
for (const handle of this.handles) {
|
|
286
|
-
handle();
|
|
287
|
-
}
|
|
288
|
-
await this.queue.whenDone();
|
|
289
|
-
this.channel.close();
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
function persist(store, options) {
|
|
293
|
-
return new Persist(store, options);
|
|
294
|
-
}
|
|
295
|
-
function isPlainPath(p) {
|
|
296
|
-
return typeof p === "string" || Array.isArray(p);
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
export { persist as p };
|
|
300
|
-
//# sourceMappingURL=persist.mjs.map
|
package/dist/es/persist.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"persist.mjs","sources":["../../src/lib/promiseChain.ts","../../src/persist/persistPathHelpers.ts","../../src/persist/persistStorage.ts","../../src/persist/persist.ts"],"sourcesContent":["import isPromise from '@lib/isPromise';\n\nexport interface Chain<T> {\n value: T;\n then<S>(fn: (value: Awaited<T>) => S): T extends Promise<any> ? Chain<Promise<S>> : Chain<S>;\n}\n\nexport default function promiseChain<T>(value: T | (() => T)): Chain<T> {\n if (value instanceof Function) {\n value = value();\n }\n\n return {\n value,\n then(fn) {\n const next = isPromise(value)\n ? value.then((value) => fn(value as Awaited<T>))\n : fn(value as Awaited<T>);\n\n return promiseChain(next) as any;\n },\n };\n}\n","import type { KeyType } from '@lib/path';\n\nexport const isAncestor = (ancestor: KeyType[], path: KeyType[]): boolean => {\n return (\n ancestor.length <= path.length &&\n ancestor.every((v, i) => v === '*' || path[i] === '*' || v === path[i])\n );\n};\n\nexport const split = (value: any, path: KeyType[]): { path: KeyType[]; value: unknown }[] => {\n const [first, ...rest] = path;\n if (first === undefined) return [{ path: [], value }];\n\n let entries: Map<KeyType, unknown>;\n if (value instanceof Map) {\n entries = value;\n } else if (value instanceof Set) {\n entries = new Map([...value].map((v, i) => [i, v]));\n } else if (Array.isArray(value)) {\n entries = new Map(value.map((v, i) => [i, v]));\n } else if (typeof value === 'object' && value !== null) {\n entries = new Map(Object.entries(value));\n } else {\n return [{ path: [], value }];\n }\n\n if (first === '*') {\n return [...entries].flatMap(([k, v]) =>\n split(v, rest).map(({ path, value }) => ({ path: [k, ...path], value })),\n );\n }\n\n const subValue = entries.get(first);\n if (subValue === undefined) return [{ path: [], value }];\n\n return split(subValue, rest).map(({ path, value }) => ({ path: [first, ...path], value }));\n};\n","import isPromise from '@lib/isPromise';\nimport promiseChain from '@lib/promiseChain';\n\nexport interface PersistStorageBase {\n getItem: (key: string) => string | null | Promise<string | null>;\n setItem: (key: string, value: string) => void | Promise<unknown>;\n removeItem: (key: string) => void | Promise<unknown>;\n}\n\nexport interface PersistStorageWithKeys extends PersistStorageBase {\n keys: () => string[] | Promise<string[]>;\n}\n\nexport interface PersistStorageWithLength extends PersistStorageBase {\n length: number | (() => number | Promise<number>);\n key: (keyIndex: number) => string | null | Promise<string | null>;\n}\n\nexport interface PersistStorageWithListItems extends PersistStorageBase {\n listItems: () => Map<string, string> | Promise<Map<string, string>>;\n}\n\nexport type PersistStorage =\n | PersistStorageWithKeys\n | PersistStorageWithLength\n | PersistStorageWithListItems;\n\nexport function normalizeStorage(storage: PersistStorage): PersistStorageWithListItems {\n return {\n getItem: storage.getItem.bind(storage),\n setItem: storage.setItem.bind(storage),\n removeItem: storage.removeItem.bind(storage),\n\n listItems() {\n if ('listItems' in storage) {\n return storage.listItems();\n }\n\n return promiseChain(() => {\n if ('keys' in storage) {\n return storage.keys();\n } else {\n return promiseChain(\n storage.length instanceof Function ? storage.length() : storage.length,\n )\n .then((length) => {\n const keys = Array.from({ length }, (_, index) => storage.key(index));\n return keys.some(isPromise) ? Promise.all(keys) : (keys as (string | null)[]);\n })\n .then((keys) => {\n return keys.filter((key): key is string => typeof key === 'string');\n }).value;\n }\n })\n .then((keys) => {\n const results = keys.map(\n (key) =>\n promiseChain(storage.getItem(key)).then((value) => [key, value] as const).value,\n );\n\n return results.some(isPromise)\n ? Promise.all(results)\n : (results as [string, string | null][]);\n })\n .then((results) => {\n return new Map(results.filter(([, value]) => value !== null) as [string, string][]);\n }).value;\n },\n };\n}\n","import { type Cancel, type Duration, type Store } from '@core';\nimport { calcDuration } from '@lib/calcDuration';\nimport { shallowEqual } from '@lib/equals';\nimport { fromExtendedJsonString, toExtendedJsonString } from '@lib/extendedJson';\nimport isPromise from '@lib/isPromise';\nimport type { KeyType, WildcardPath } from '@lib/path';\nimport promiseChain from '@lib/promiseChain';\nimport { castArrayPath, get, remove, set } from '@lib/propAccess';\nimport { queue } from '@lib/queue';\nimport { subscribePatches } from '@patches/patchMethods';\nimport { isAncestor, split } from './persistPathHelpers';\nimport {\n normalizeStorage,\n type PersistStorage,\n type PersistStorageWithListItems,\n} from './persistStorage';\n\ntype PathOption<T> =\n | WildcardPath<T>\n | {\n path: WildcardPath<T>;\n // throttle?: Duration;\n };\n\ntype Key = { type: 'internal'; path: string } | { type: 'data'; path: KeyType[] };\n\nexport interface PersistOptions<T> {\n id: string;\n storage: PersistStorage;\n paths?: PathOption<T>[];\n throttle?: Duration;\n}\n\nexport class Persist<T> {\n readonly storage: PersistStorageWithListItems;\n readonly [Symbol.dispose]!: Cancel;\n\n readonly paths: {\n path: KeyType[];\n throttle?: number;\n }[];\n\n readonly initialized: Promise<void>;\n\n private resolveInitialized?: () => void;\n\n private channel: BroadcastChannel;\n\n private queue = queue();\n\n private handles = new Set<Cancel>();\n\n private stopped = false;\n\n private updateInProgress = new Map<string, unknown>();\n\n private prefix;\n\n constructor(\n public readonly store: Store<T>,\n public readonly options: PersistOptions<T>,\n ) {\n this.storage = normalizeStorage(options.storage);\n this.channel = new BroadcastChannel(`cross-state-persist_${options.id}`);\n this.prefix = `${options.id}:`;\n\n if (Symbol.dispose) {\n this[Symbol.dispose] = () => this.stop();\n }\n\n this.paths = (options.paths ?? [])\n .map<{\n path: KeyType[];\n throttle?: number;\n }>((p) => {\n if (isPlainPath(p)) {\n return {\n path: castArrayPath(p),\n throttle: options.throttle && calcDuration(options.throttle),\n };\n }\n\n const _p = p as { path: KeyType[]; throttle?: Duration };\n\n return {\n path: castArrayPath(_p.path),\n throttle:\n (_p.throttle && calcDuration(_p.throttle)) ??\n (options.throttle && calcDuration(options.throttle)),\n };\n })\n .sort((a, b) => b.path.length - a.path.length);\n\n if (this.paths.length === 0) {\n this.paths.push({\n path: ['*'],\n throttle: options.throttle && calcDuration(options.throttle),\n });\n }\n\n this.initialized = new Promise((resolve) => {\n this.resolveInitialized = resolve;\n });\n\n this.watchStore();\n this.watchStorage();\n }\n\n private watchStore() {\n const throttle = Math.min(...this.paths.map((p) => p.throttle ?? 0)) || undefined;\n\n const cancel = subscribePatches.apply(this.store as Store<unknown>, [\n (patches, reversePatches) => {\n let i = 0;\n for (const patch of patches) {\n const reversePatch = reversePatches[i++];\n\n const stringPath = JSON.stringify(patch.path);\n if (\n this.updateInProgress.has(stringPath) &&\n this.updateInProgress.get(stringPath) ===\n (patch.op === 'remove' ? undefined : patch.value)\n ) {\n continue;\n }\n\n const matchingPaths = this.paths.filter(\n (p) => isAncestor(p.path, patch.path) || isAncestor(patch.path, p.path),\n );\n\n for (const { path } of matchingPaths) {\n if (path.length <= patch.path.length) {\n const pathToSave = patch.path.slice(0, path.length);\n this.queue(() => this.save(pathToSave), pathToSave);\n } else if (patch.op === 'remove') {\n const subValues = split(\n reversePatch?.op === 'add' ? reversePatch.value : {},\n path.slice(patch.path.length),\n );\n\n for (const { path } of subValues) {\n this.queue(() => this.save([...patch.path, ...path]), [...patch.path, ...path]);\n }\n } else {\n const updatedValues = split(patch.value, path.slice(patch.path.length));\n const removedValues = split(\n reversePatch?.op !== 'remove' ? reversePatch?.value : {},\n path.slice(patch.path.length),\n ).filter((v) => !updatedValues.some((u) => shallowEqual(u.path, v.path)));\n\n for (const { path } of updatedValues) {\n this.queue(() => this.save([...patch.path, ...path]), [...patch.path, ...path]);\n }\n for (const { path } of removedValues) {\n this.queue(() => this.save([...patch.path, ...path]), [...patch.path, ...path]);\n }\n }\n }\n }\n },\n { runNow: false, passive: true, throttle },\n ]);\n\n this.handles.add(cancel);\n }\n\n private async watchStorage() {\n let items = this.storage.listItems();\n if (isPromise(items)) {\n items = await items;\n }\n\n if (this.stopped) {\n return;\n }\n\n const toLoad = new Map(\n [...items.entries()]\n .sort((a, b) => b[1].length - a[1].length)\n .map(([key, value]) => [this.parseKey(key), value])\n .filter(([key]) => key) as [Key, string][],\n );\n\n this.queue(() => this.load(toLoad));\n this.queue(() => this.resolveInitialized?.());\n\n const listener = (event: MessageEvent) => {\n this.queue(() => this.load([{ type: 'data', path: event.data }]));\n };\n\n this.channel.addEventListener('message', listener);\n this.handles.add(() => this.channel.removeEventListener('message', listener));\n }\n\n private buildKey({ type, path }: Key) {\n return `${this.prefix}${type === 'internal' ? path : JSON.stringify(path)}`;\n }\n\n private parseKey(key: string): Key | undefined {\n if (!key.startsWith(this.prefix)) {\n return;\n }\n\n key = key.slice(this.prefix.length);\n\n if (!key.startsWith('[')) {\n return { type: 'internal', path: key };\n }\n\n return { type: 'data', path: JSON.parse(key) as KeyType[] };\n }\n\n private load(items: Key[] | Map<Key, string>): void | Promise<void> {\n return promiseChain(() => {\n if (Array.isArray(items)) {\n return promiseChain(() => {\n const entries = items.map(\n (key) =>\n promiseChain(() => {\n return this.storage.getItem(this.buildKey(key));\n }).then((value) => [key, value] as const).value,\n );\n\n return entries.some(isPromise)\n ? Promise.all(entries)\n : (entries as [Key, string | null][]);\n }).then((entries) => {\n return entries.filter((entry) => entry !== null) as [Key, string][];\n }).value;\n } else {\n return [...items.entries()];\n }\n }).then((entries) => {\n if (this.stopped) {\n return;\n }\n\n const toWrite = entries\n .filter(([key, value]) => {\n if (key.type !== 'data' || !value) {\n return;\n }\n\n if (\n !this.paths.find(\n (p) =>\n (p.path.length === 1 && p.path[0] === '*' && key.path.length === 0) ||\n (p.path.length === key.path.length && isAncestor(p.path, key.path)),\n )\n ) {\n return null;\n }\n\n const inSaveQueue = this.queue\n .getRefs()\n .find((ref) => isAncestor(ref, key.path) || isAncestor(key.path, ref));\n return !inSaveQueue;\n })\n .map(([key, value]) => {\n try {\n return {\n path: key.path,\n value: !value || value === 'undefined' ? undefined : fromExtendedJsonString(value),\n };\n } catch {\n return undefined;\n }\n })\n .filter(Boolean) as { path: KeyType[]; value: unknown }[];\n\n if (toWrite.length > 0) {\n for (const { path, value } of toWrite) {\n this.updateInProgress.set(JSON.stringify(path), value);\n }\n\n this.store.set((state) => {\n for (const { path, value } of toWrite) {\n if (value === undefined) {\n state = remove(state, path as any);\n } else {\n state = set(state, path as any, value);\n }\n }\n\n return state;\n });\n\n this.updateInProgress.clear();\n }\n\n const versionEntry = entries.find(\n ([key]) => key.type === 'internal' && key.path === 'version',\n );\n if (versionEntry) {\n this.store.version = versionEntry[1];\n }\n }).value;\n }\n\n private save(path: KeyType[]): void | Promise<unknown> {\n const key = this.buildKey({ type: 'data', path });\n const value = get(this.store.get() as any, path);\n\n return promiseChain(value)\n .then((value) => {\n if (value === undefined) {\n return this.storage.removeItem(key);\n } else {\n return this.storage.setItem(key, toExtendedJsonString(value));\n }\n })\n .then(() => {\n this.channel.postMessage(path);\n\n if (this.store.version) {\n return this.storage.setItem(\n this.buildKey({ type: 'internal', path: 'version' }),\n this.store.version,\n );\n } else {\n return this.storage.removeItem(this.buildKey({ type: 'internal', path: 'version' }));\n }\n }).value;\n }\n\n async stop(): Promise<void> {\n this.stopped = true;\n\n for (const handle of this.handles) {\n handle();\n }\n\n await this.queue.whenDone();\n this.channel.close();\n }\n}\n\nexport function persist<T>(store: Store<T>, options: PersistOptions<T>): Persist<T> {\n return new Persist<T>(store, options);\n}\n\nfunction isPlainPath<T>(p: PathOption<T>): p is WildcardPath<T> & (KeyType[] | string) {\n return typeof p === 'string' || Array.isArray(p);\n}\n"],"names":["value","path"],"mappings":"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"}
|
package/dist/es/propAccess.mjs
DELETED
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
function strictEqual(a, b) {
|
|
2
|
-
return a === b;
|
|
3
|
-
}
|
|
4
|
-
function shallowEqual(a, b) {
|
|
5
|
-
return internalEqual(strictEqual)(a, b);
|
|
6
|
-
}
|
|
7
|
-
function deepEqual(a, b) {
|
|
8
|
-
return internalEqual(deepEqual)(a, b);
|
|
9
|
-
}
|
|
10
|
-
const internalEqual = (comp) => (a, b) => {
|
|
11
|
-
if (a === b) {
|
|
12
|
-
return true;
|
|
13
|
-
}
|
|
14
|
-
if (a === null || b === null || typeof a !== "object" || typeof b !== "object") {
|
|
15
|
-
return a !== a && b !== b;
|
|
16
|
-
}
|
|
17
|
-
if (a.constructor !== b.constructor) {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
if (a.constructor === Object || Array.isArray(a)) {
|
|
21
|
-
const entries1 = Object.entries(a);
|
|
22
|
-
const entries2 = Object.entries(b);
|
|
23
|
-
return entries1.length === entries2.length && entries1.every(([key, value]) => key in b && comp(value, b[key]));
|
|
24
|
-
}
|
|
25
|
-
if (a instanceof Date) {
|
|
26
|
-
return a.getTime() === b.getTime();
|
|
27
|
-
}
|
|
28
|
-
if (a instanceof RegExp) {
|
|
29
|
-
return a.source === b.source && a.flags === b.flags;
|
|
30
|
-
}
|
|
31
|
-
if (a instanceof Map) {
|
|
32
|
-
return a.size === b.size && [...a.entries()].every(([key, value]) => b.has(key) && comp(value, b.get(key)));
|
|
33
|
-
}
|
|
34
|
-
if (a instanceof Set) {
|
|
35
|
-
return a.size === b.size && [...a.values()].every((value) => b.has(value));
|
|
36
|
-
}
|
|
37
|
-
if (typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView(a)) {
|
|
38
|
-
if (a.byteLength !== b.byteLength) {
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
41
|
-
const a_ = new Int8Array(a.buffer);
|
|
42
|
-
const b_ = new Int8Array(b.buffer);
|
|
43
|
-
return a_.every((value, i) => value === b_[i]);
|
|
44
|
-
}
|
|
45
|
-
return false;
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
function isObject(value) {
|
|
49
|
-
return typeof value === "object" && value !== null;
|
|
50
|
-
}
|
|
51
|
-
function isPlainObject(value) {
|
|
52
|
-
if (typeof value !== "object" || value === null) {
|
|
53
|
-
return false;
|
|
54
|
-
}
|
|
55
|
-
const prototype = Object.getPrototypeOf(value);
|
|
56
|
-
return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
function flatClone(object) {
|
|
60
|
-
if (object instanceof Map) {
|
|
61
|
-
return new Map(object);
|
|
62
|
-
}
|
|
63
|
-
if (object instanceof Set) {
|
|
64
|
-
return new Set(object);
|
|
65
|
-
}
|
|
66
|
-
if (Array.isArray(object)) {
|
|
67
|
-
return [...object];
|
|
68
|
-
}
|
|
69
|
-
if (isObject(object)) {
|
|
70
|
-
return { ...object };
|
|
71
|
-
}
|
|
72
|
-
return object;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
function castArrayPath(path) {
|
|
76
|
-
if (Array.isArray(path)) {
|
|
77
|
-
return path;
|
|
78
|
-
}
|
|
79
|
-
if (path === "") {
|
|
80
|
-
return [];
|
|
81
|
-
}
|
|
82
|
-
return path.split(".");
|
|
83
|
-
}
|
|
84
|
-
function get(object, path) {
|
|
85
|
-
const _path = castArrayPath(path);
|
|
86
|
-
const [first, ...rest] = _path;
|
|
87
|
-
if (first === undefined || !object) {
|
|
88
|
-
return object;
|
|
89
|
-
}
|
|
90
|
-
if (object instanceof Map) {
|
|
91
|
-
return get(object.get(first), rest);
|
|
92
|
-
}
|
|
93
|
-
if (object instanceof Set) {
|
|
94
|
-
return get(Array.from(object)[Number(first)], rest);
|
|
95
|
-
}
|
|
96
|
-
if (isObject(object)) {
|
|
97
|
-
return get(object[first], rest);
|
|
98
|
-
}
|
|
99
|
-
throw new Error(`Could not get ${path} of ${object}`);
|
|
100
|
-
}
|
|
101
|
-
function set(object, path, value, rootPath = path) {
|
|
102
|
-
const _path = castArrayPath(path);
|
|
103
|
-
const [first, ...rest] = _path;
|
|
104
|
-
if (first === undefined) {
|
|
105
|
-
return value;
|
|
106
|
-
}
|
|
107
|
-
if (object instanceof Map) {
|
|
108
|
-
const copy = flatClone(object);
|
|
109
|
-
const child = copy.get(first);
|
|
110
|
-
copy.set(first, set(child, rest, value, rootPath));
|
|
111
|
-
return copy;
|
|
112
|
-
}
|
|
113
|
-
if (object instanceof Set) {
|
|
114
|
-
const copy = [...object];
|
|
115
|
-
const child = copy[Number(first)];
|
|
116
|
-
copy[Number(first)] = set(child, rest, value, rootPath);
|
|
117
|
-
return new Set(copy);
|
|
118
|
-
}
|
|
119
|
-
if (isObject(object) || object === undefined) {
|
|
120
|
-
const copy = flatClone(object ?? {});
|
|
121
|
-
copy[first] = set(copy[first], rest, value, rootPath);
|
|
122
|
-
return copy;
|
|
123
|
-
}
|
|
124
|
-
throw new Error(`Could not set ${path} of ${object}`);
|
|
125
|
-
}
|
|
126
|
-
function remove(object, path) {
|
|
127
|
-
const _path = castArrayPath(path);
|
|
128
|
-
if (_path.length === 0) {
|
|
129
|
-
return undefined;
|
|
130
|
-
}
|
|
131
|
-
const parentPath = _path.slice(0, -1);
|
|
132
|
-
const key = _path[_path.length - 1];
|
|
133
|
-
const parent = flatClone(get(object, parentPath));
|
|
134
|
-
if (parent instanceof Map) {
|
|
135
|
-
parent.delete(key);
|
|
136
|
-
} else if (parent instanceof Set) {
|
|
137
|
-
const value = Array.from(parent)[Number(key)];
|
|
138
|
-
parent.delete(value);
|
|
139
|
-
} else if (Array.isArray(parent)) {
|
|
140
|
-
parent.splice(Number(key), 1);
|
|
141
|
-
} else {
|
|
142
|
-
delete parent[key];
|
|
143
|
-
}
|
|
144
|
-
return set(object, parentPath, parent);
|
|
145
|
-
}
|
|
146
|
-
function join(a, b) {
|
|
147
|
-
return [a, b].filter(Boolean).join(".");
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
export { strictEqual as a, set as b, castArrayPath as c, deepEqual as d, isObject as e, get as g, isPlainObject as i, join as j, remove as r, shallowEqual as s };
|
|
151
|
-
//# sourceMappingURL=propAccess.mjs.map
|