cross-state 0.39.1 → 0.40.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.
@@ -4,6 +4,19 @@ const store = require('./store.cjs');
4
4
  const propAccess = require('./propAccess.cjs');
5
5
  const patches_index = require('./index2.cjs');
6
6
 
7
+ function promiseChain(value) {
8
+ if (value instanceof Function) {
9
+ value = value();
10
+ }
11
+ return {
12
+ value,
13
+ then(fn) {
14
+ const next = store.isPromise(value) ? value.then((value2) => fn(value2)) : fn(value);
15
+ return promiseChain(next);
16
+ }
17
+ };
18
+ }
19
+
7
20
  const isAncestor = (ancestor, path) => {
8
21
  return ancestor.length <= path.length && ancestor.every((v, i) => v === "*" || path[i] === "*" || v === path[i]);
9
22
  };
@@ -35,20 +48,31 @@ function normalizeStorage(storage) {
35
48
  getItem: storage.getItem.bind(storage),
36
49
  setItem: storage.setItem.bind(storage),
37
50
  removeItem: storage.removeItem.bind(storage),
38
- keys() {
39
- if ("keys" in storage) {
40
- return storage.keys();
41
- }
42
- const loadKey = (index) => storage.key(index);
43
- const length = storage.length instanceof Function ? storage.length() : storage.length;
44
- return store.isPromise(length) ? length.then(continueWithLength) : continueWithLength(length);
45
- function continueWithLength(length2) {
46
- const keys = Array.from({ length: length2 }, (_, index) => loadKey(index));
47
- return keys.some(store.isPromise) ? Promise.all(keys).then(continueWithKeys) : continueWithKeys(keys);
48
- }
49
- function continueWithKeys(keys) {
50
- return keys.filter((key) => typeof key === "string");
51
+ listItems() {
52
+ if ("listItems" in storage) {
53
+ return storage.listItems();
51
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(store.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(store.isPromise) ? Promise.all(results) : results;
73
+ }).then((results) => {
74
+ return new Map(results.filter(([, value]) => value !== null));
75
+ }).value;
52
76
  }
53
77
  };
54
78
  }
@@ -139,18 +163,20 @@ class Persist {
139
163
  this.handles.add(cancel);
140
164
  }
141
165
  async watchStorage() {
142
- let keys = this.storage.keys();
143
- if (store.isPromise(keys)) {
144
- keys = await keys;
166
+ let items = this.storage.listItems();
167
+ if (store.isPromise(items)) {
168
+ items = await items;
145
169
  }
146
170
  if (this.stopped) {
147
171
  return;
148
172
  }
149
- const sortedKeys = keys.sort((a, b) => b.length - a.length).map((key) => this.parseKey(key)).filter(Boolean);
150
- this.queue(() => this.load(...sortedKeys));
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));
151
177
  this.queue(() => this.resolveInitialized?.());
152
178
  const listener = (event) => {
153
- this.queue(() => this.load({ type: "data", path: event.data }));
179
+ this.queue(() => this.load([{ type: "data", path: event.data }]));
154
180
  };
155
181
  this.channel.addEventListener("message", listener);
156
182
  this.handles.add(() => this.channel.removeEventListener("message", listener));
@@ -168,70 +194,75 @@ class Persist {
168
194
  }
169
195
  return { type: "data", path: JSON.parse(key) };
170
196
  }
171
- load(...keys) {
172
- const results = keys.map(({ type, path }) => {
173
- if (type === "internal") {
174
- switch (path) {
175
- case "version":
176
- return this.storage.getItem(this.buildKey({ type: "internal", path: "version" }));
177
- }
178
- return;
179
- }
180
- const matchingPath = this.paths.find(
181
- (p) => p.path.length === path.length && isAncestor(p.path, path)
182
- );
183
- if (!matchingPath) {
184
- return;
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(store.isPromise) ? Promise.all(entries) : entries;
207
+ }).then((entries) => {
208
+ return entries.filter((entry) => entry !== null);
209
+ }).value;
210
+ } else {
211
+ return [...items.entries()];
185
212
  }
186
- const key = this.buildKey({ type: "data", path });
187
- return this.storage.getItem(key);
188
- });
189
- return chain(
190
- results.some(store.isPromise) ? Promise.all(results) : results
191
- ).then((results2) => {
213
+ }).then((entries) => {
192
214
  if (this.stopped) {
193
215
  return;
194
216
  }
195
- const toWrite = keys.map((key, i) => ({ key, value: results2[i] })).filter(({ key, value }) => {
217
+ const toWrite = entries.filter(([key, value]) => {
196
218
  if (key.type !== "data" || !value) {
197
219
  return;
198
220
  }
221
+ if (!this.paths.find(
222
+ (p) => p.path.length === key.path.length && isAncestor(p.path, key.path)
223
+ )) {
224
+ return null;
225
+ }
199
226
  const inSaveQueue = this.queue.getRefs().find((ref) => isAncestor(ref, key.path) || isAncestor(key.path, ref));
200
227
  return !inSaveQueue;
201
- }).map(({ key, value }) => ({
202
- path: key.path,
203
- value: !value || value === "undefined" ? void 0 : patches_index.fromExtendedJsonString(value)
204
- }));
205
- if (toWrite.length === 0) {
206
- return;
207
- }
208
- for (const { path, value } of toWrite) {
209
- this.updateInProgress.set(JSON.stringify(path), value);
210
- }
211
- this.store.set((state) => {
228
+ }).map(([key, value]) => {
229
+ try {
230
+ return {
231
+ path: key.path,
232
+ value: !value || value === "undefined" ? void 0 : patches_index.fromExtendedJsonString(value)
233
+ };
234
+ } catch {
235
+ return void 0;
236
+ }
237
+ }).filter(Boolean);
238
+ if (toWrite.length > 0) {
212
239
  for (const { path, value } of toWrite) {
213
- if (value === void 0) {
214
- state = propAccess.remove(state, path);
215
- } else {
216
- state = propAccess.set(state, path, value);
217
- }
240
+ this.updateInProgress.set(JSON.stringify(path), value);
218
241
  }
219
- return state;
220
- });
221
- this.updateInProgress.clear();
222
- const versionIndex = keys.findIndex(
223
- ({ type, path }) => type === "internal" && path === "version"
242
+ this.store.set((state) => {
243
+ for (const { path, value } of toWrite) {
244
+ if (value === void 0) {
245
+ state = propAccess.remove(state, path);
246
+ } else {
247
+ state = propAccess.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"
224
256
  );
225
- const version = results2[versionIndex];
226
- if (version) {
227
- this.store.version = version;
257
+ if (versionEntry) {
258
+ this.store.version = versionEntry[1];
228
259
  }
229
260
  }).value;
230
261
  }
231
262
  save(path) {
232
263
  const key = this.buildKey({ type: "data", path });
233
264
  const value = propAccess.get(this.store.get(), path);
234
- return chain(value).then((value2) => {
265
+ return promiseChain(value).then((value2) => {
235
266
  if (value2 === void 0) {
236
267
  return this.storage.removeItem(key);
237
268
  } else {
@@ -264,15 +295,6 @@ function persist(store, options) {
264
295
  function isPlainPath(p) {
265
296
  return typeof p === "string" || Array.isArray(p);
266
297
  }
267
- function chain(value) {
268
- return {
269
- value,
270
- then(fn) {
271
- const next = store.isPromise(value) ? value.then((value2) => fn(value2)) : fn(value);
272
- return chain(next);
273
- }
274
- };
275
- }
276
298
 
277
299
  exports.persist = persist;
278
300
  //# sourceMappingURL=persist.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"persist.cjs","sources":["../../src/persist/persistPathHelpers.ts","../../src/persist/persistStorage.ts","../../src/persist/persist.ts"],"sourcesContent":["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 {\n entries = new Map(Object.entries(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';\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 type PersistStorage = PersistStorageBase &\n (PersistStorageWithKeys | PersistStorageWithLength);\n\nexport function normalizeStorage(storage: PersistStorage): PersistStorageWithKeys {\n return {\n getItem: storage.getItem.bind(storage),\n setItem: storage.setItem.bind(storage),\n removeItem: storage.removeItem.bind(storage),\n\n keys(): string[] | Promise<string[]> {\n if ('keys' in storage) {\n return storage.keys();\n }\n\n const loadKey = (index: number) => storage.key(index);\n\n const length = storage.length instanceof Function ? storage.length() : storage.length;\n return isPromise(length) ? length.then(continueWithLength) : continueWithLength(length);\n\n function continueWithLength(length: number) {\n const keys = Array.from({ length }, (_, index) => loadKey(index));\n return keys.some(isPromise)\n ? Promise.all(keys).then(continueWithKeys)\n : continueWithKeys(keys as (string | null)[]);\n }\n\n function continueWithKeys(keys: (string | null)[]) {\n return keys.filter((key): key is string => typeof key === 'string');\n }\n },\n };\n}\n","import { type Cancel, type Duration, type Store } from '@core';\nimport { calcDuration } from '@lib/calcDuration';\nimport { shallowEqual } from '@lib/equals';\nimport isPromise from '@lib/isPromise';\nimport type { KeyType, WildcardPath } from '@lib/path';\nimport { castArrayPath, get, remove, set } from '@lib/propAccess';\nimport { queue } from '@lib/queue';\nimport { patchMethods } from '@patches';\nimport { isAncestor, split } from './persistPathHelpers';\nimport {\n normalizeStorage,\n type PersistStorage,\n type PersistStorageWithKeys,\n} from './persistStorage';\nimport { fromExtendedJsonString, toExtendedJsonString } from '@lib/extendedJson';\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: PersistStorageWithKeys;\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 = patchMethods.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 keys = this.storage.keys();\n if (isPromise(keys)) {\n keys = await keys;\n }\n\n if (this.stopped) {\n return;\n }\n\n const sortedKeys = keys\n .sort((a, b) => b.length - a.length)\n .map((key) => this.parseKey(key))\n .filter(Boolean) as Key[];\n\n this.queue(() => this.load(...sortedKeys));\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(...keys: Key[]): void | Promise<void> {\n const results = keys.map(({ type, path }) => {\n if (type === 'internal') {\n switch (path) {\n case 'version':\n return this.storage.getItem(this.buildKey({ type: 'internal', path: 'version' }));\n }\n\n return;\n }\n\n const matchingPath = this.paths.find(\n (p) => p.path.length === path.length && isAncestor(p.path, path),\n );\n if (!matchingPath) {\n return;\n }\n\n const key = this.buildKey({ type: 'data', path });\n return this.storage.getItem(key);\n });\n\n return chain(\n results.some(isPromise) ? Promise.all(results) : (results as (string | null | undefined)[]),\n ).then((results) => {\n if (this.stopped) {\n return;\n }\n\n const toWrite = keys\n .map((key, i) => ({ key, value: results[i] }))\n .filter(({ key, value }) => {\n if (key.type !== 'data' || !value) {\n return;\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 path: key.path,\n value: !value || value === 'undefined' ? undefined : fromExtendedJsonString(value),\n }));\n\n if (toWrite.length === 0) {\n return;\n }\n\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 const versionIndex = keys.findIndex(\n ({ type, path }) => type === 'internal' && path === 'version',\n );\n const version = results[versionIndex];\n if (version) {\n this.store.version = version;\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 chain(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\ninterface Chain<T> {\n value: T;\n then<S>(fn: (value: Awaited<T>) => S): T extends Promise<any> ? Chain<Promise<S>> : Chain<S>;\n}\n\nfunction chain<T>(value: T): Chain<T> {\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 chain(next) as any;\n },\n };\n}\n"],"names":["path","value","isPromise","length","store","queue","castArrayPath","calcDuration","patchMethods","shallowEqual","results","fromExtendedJsonString","remove","set","get","toExtendedJsonString"],"mappings":"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"}
1
+ {"version":3,"file":"persist.cjs","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 {\n entries = new Map(Object.entries(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 { patchMethods } from '@patches';\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 = patchMethods.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) => 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":["isPromise","value","path","store","queue","castArrayPath","calcDuration","patchMethods","shallowEqual","fromExtendedJsonString","remove","set","get","toExtendedJsonString"],"mappings":"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"}
@@ -119,7 +119,6 @@ class Cache extends store.Store {
119
119
  store.autobind(Cache);
120
120
  this.watchPromise();
121
121
  this.watchFocus();
122
- this.state.addEffect(() => this.subscribe(() => void 0));
123
122
  }
124
123
  get({ update = "whenStale", backgroundUpdate = false } = {}) {
125
124
  const promise = this.calculatedValue?.value;
@@ -1 +1 @@
1
- {"version":3,"file":"scope.cjs","sources":["../../src/lib/instanceCache.ts","../../src/core/resourceGroup.ts","../../src/core/cache.ts","../../src/core/scope.ts"],"sourcesContent":["import { hash } from './hash';\n\nexport class InstanceCache<Args extends any[], T extends object> {\n private cache = new Map<string, { t: number; ref?: T; weakRef: WeakRef<T> }>();\n\n private interval = this.cacheTime\n ? setInterval(() => this.cleanup(), Math.max(this.cacheTime / 10, 1))\n : undefined;\n\n constructor(\n public readonly factory: (...args: Args) => T,\n public readonly cacheTime?: number,\n ) {}\n\n cleanup(): void {\n const cutoff = this.now() - (this.cacheTime ?? 0);\n\n for (const [key, entry] of this.cache.entries()) {\n if (entry.ref && entry.t <= cutoff) {\n delete entry.ref;\n }\n\n if (!entry.ref && !entry.weakRef?.deref()) {\n this.cache.delete(key);\n }\n }\n }\n\n get(...args: Args): T {\n const key = hash(args);\n let entry = this.cache.get(key);\n let value = entry?.ref ?? entry?.weakRef?.deref();\n\n if (!entry || !value) {\n value = this.factory(...args);\n entry = {\n t: this.now(),\n ref: value,\n weakRef: new WeakRef(value),\n };\n\n this.cache.set(key, entry);\n } else {\n entry.t = this.now();\n entry.ref ??= value;\n }\n\n return value;\n }\n\n values(): T[] {\n return [...this.cache.values()]\n .map((entry) => entry.ref ?? entry.weakRef?.deref())\n .filter((value): value is T => !!value);\n }\n\n stop(): void {\n if (this.interval) {\n clearInterval(this.interval);\n }\n }\n\n stats(): { count: number; withRef: number; withWeakRef: number } {\n return {\n count: this.cache.size,\n withRef: [...this.cache.values()].filter((x) => !!x.ref).length,\n withWeakRef: [...this.cache.values()].filter((x) => !!x.weakRef?.deref()).length,\n };\n }\n\n private now() {\n return performance.now();\n }\n}\n","import { autobind } from '@lib/autobind';\n\nexport interface Resource {\n invalidateAll(): void;\n clearAll(): void;\n}\n\nexport class ResourceGroup {\n private refMap = new WeakMap<Resource, WeakRef<Resource>>();\n\n private refSet = new Set<WeakRef<Resource>>();\n\n constructor(public readonly name?: string) {\n autobind(ResourceGroup);\n }\n\n add(resource: Resource): void {\n const ref = new WeakRef(resource);\n this.refMap.set(resource, ref);\n this.refSet.add(ref);\n }\n\n delete(resource: Resource): void {\n const ref = this.refMap.get(resource);\n if (ref) {\n this.refMap.delete(resource);\n this.refSet.delete(ref);\n }\n }\n\n invalidateAll(): void {\n for (const ref of this.refSet) {\n const resource = ref.deref();\n if (resource) {\n resource.invalidateAll();\n } else {\n this.refSet.delete(ref);\n }\n }\n }\n\n clearAll(): void {\n for (const ref of this.refSet) {\n const resource = ref.deref();\n if (resource) {\n resource.clearAll();\n } else {\n this.refSet.delete(ref);\n }\n }\n }\n}\n\nexport const allResources: ResourceGroup = /* @__PURE__ */ new ResourceGroup();\n\nexport function createResourceGroup(name?: string): ResourceGroup {\n return new ResourceGroup(name);\n}\n","import { autobind } from '@lib/autobind';\nimport type { CacheState, ErrorState, ValueState } from '@lib/cacheState';\nimport { calcDuration } from '@lib/calcDuration';\nimport { calculatedValue } from '@lib/calculatedValue';\nimport { InstanceCache } from '@lib/instanceCache';\nimport { makeSelector } from '@lib/makeSelector';\nimport { type MaybePromise } from '@lib/maybePromise';\nimport type { Path, Value } from '@lib/path';\nimport { PromiseWithState } from '@lib/promiseWithState';\nimport type { Duration, Selector } from './commonTypes';\nimport { allResources, type ResourceGroup } from './resourceGroup';\nimport { Store, createStore, type Calculate, type StoreOptions } from './store';\nimport { deepEqual } from '@lib/equals';\n\nexport interface CacheGetOptions {\n update?: 'whenMissing' | 'whenStale' | 'force';\n backgroundUpdate?: boolean;\n}\n\nexport interface CacheFunction<T, Args extends any[] = []> {\n (...args: Args): Promise<T> | Calculate<Promise<T>>;\n}\n\nexport interface CacheOptions<T> extends StoreOptions<Promise<T>> {\n invalidateAfter?: Duration | ((state: ValueState<T> | ErrorState) => Duration | null) | null;\n invalidateOnWindowFocus?: boolean;\n invalidateOnActivation?: boolean;\n clearOnInvalidate?: boolean;\n clearUnusedAfter?: Duration | null;\n resourceGroup?: ResourceGroup | ResourceGroup[];\n}\n\nexport class Cache<T> extends Store<Promise<T>> {\n readonly state: Store<CacheState<T>> = createStore<CacheState<T>>({\n status: 'pending',\n isStale: true,\n isUpdating: false,\n isConnected: false,\n });\n\n protected stalePromise?: Promise<T>;\n\n protected invalidationTimer?: ReturnType<typeof setTimeout>;\n\n constructor(\n getter: Calculate<Promise<T>>,\n public readonly options: CacheOptions<T> = {},\n public readonly derivedFromCache?: {\n cache: Cache<any>;\n selectors: (Selector<any, any> | Path<any>)[];\n },\n _call?: (...args: any[]) => any,\n ) {\n super(getter, options, undefined, _call);\n autobind(Cache);\n\n this.watchPromise();\n this.watchFocus();\n\n this.state.addEffect(() => this.subscribe(() => undefined));\n }\n\n get({ update = 'whenStale', backgroundUpdate = false }: CacheGetOptions = {}): Promise<T> {\n const promise = this.calculatedValue?.value;\n const stalePromise = this.stalePromise;\n\n if (\n (update === 'whenMissing' && !promise && !stalePromise) ||\n (update === 'whenStale' && !promise) ||\n update === 'force'\n ) {\n this.calculatedValue?.stop();\n this.calculatedValue = calculatedValue(this, this.notify);\n this.notify();\n\n if ((!promise && !stalePromise) || !backgroundUpdate) {\n return super.get();\n }\n }\n\n if (!promise || (stalePromise && backgroundUpdate)) {\n return stalePromise!;\n }\n\n return promise;\n }\n\n updateValue(value: MaybePromise<T> | ((value: T | undefined) => T)): void {\n if (value instanceof Function) {\n value = value(this.state.get().value);\n }\n this.set(PromiseWithState.resolve(value));\n }\n\n updateError(error: unknown): void {\n this.set(PromiseWithState.reject(error));\n }\n\n invalidate(recursive?: boolean): void {\n const { clearOnInvalidate } = this.options;\n\n if (clearOnInvalidate) {\n return this.clear(recursive);\n }\n\n const { status, isStale, isUpdating } = this.state.get();\n if (status !== 'pending' && !isStale && !isUpdating) {\n this.stalePromise = this.calculatedValue?.value;\n }\n\n this.state.set((state) => ({\n ...state,\n isStale: true,\n isUpdating: false,\n }));\n\n super.invalidate(recursive);\n }\n\n clear(recursive?: boolean): void {\n this.state.set({\n status: 'pending',\n isStale: true,\n isUpdating: false,\n isConnected: false,\n });\n delete this.stalePromise;\n\n super.invalidate(recursive);\n }\n\n mapValue<S>(selector: Selector<T, S>): Cache<S>;\n\n mapValue<P extends Path<T>>(selector: P): Cache<Value<T, P>>;\n\n mapValue<S>(_selector: Selector<T, S> | Path<any>): Cache<S> {\n const selector = makeSelector(_selector);\n const derivedFromCache = {\n cache: this.derivedFromCache ? this.derivedFromCache.cache : this,\n selectors: this.derivedFromCache\n ? [...this.derivedFromCache.selectors, _selector]\n : [_selector],\n };\n\n return new Cache(\n async ({ use }) => {\n const value = await use(this);\n return selector(value);\n },\n {\n equals: this.options.equals,\n },\n derivedFromCache,\n );\n }\n\n protected watchPromise(): void {\n this.subscribe(\n async (promise) => {\n if (promise instanceof PromiseWithState && promise.state.status !== 'pending') {\n this.state.set((state) => ({\n ...promise.state,\n isStale: false,\n isUpdating: false,\n isConnected: state.isConnected,\n }));\n\n delete this.stalePromise;\n this.setTimers();\n return;\n }\n\n this.state.set((state) => ({\n ...state,\n isUpdating: true,\n }));\n\n this.setTimers();\n\n try {\n const value = await promise;\n\n if (promise !== this.calculatedValue?.value) {\n return;\n }\n\n this.state.set((state) => ({\n status: 'value',\n value,\n isStale: false,\n isUpdating: false,\n isConnected: state.isConnected,\n }));\n delete this.stalePromise;\n this.setTimers();\n } catch (error) {\n if (promise !== this.calculatedValue?.value) {\n return;\n }\n\n this.state.set((state) => ({\n status: 'error',\n error,\n isStale: false,\n isUpdating: false,\n isConnected: state.isConnected,\n }));\n delete this.stalePromise;\n this.setTimers();\n }\n },\n { passive: true },\n );\n }\n\n protected setTimers(): void {\n if (this.invalidationTimer) {\n clearTimeout(this.invalidationTimer);\n }\n this.invalidationTimer = undefined;\n\n const state = this.state.get();\n let { invalidateAfter } = this.options;\n const ref = new WeakRef(this);\n\n if (state.status === 'pending') {\n return;\n }\n\n if (invalidateAfter instanceof Function) {\n invalidateAfter = invalidateAfter(state);\n }\n\n if (invalidateAfter !== null && invalidateAfter !== undefined) {\n this.invalidationTimer = setTimeout(\n () => ref?.deref()?.invalidate(),\n calcDuration(invalidateAfter),\n );\n }\n }\n\n protected watchFocus(): void {\n const { invalidateOnWindowFocus } = this.options;\n\n if (\n !invalidateOnWindowFocus ||\n typeof document === 'undefined' ||\n typeof document.addEventListener === 'undefined'\n ) {\n return;\n }\n\n const ref = new WeakRef(this);\n\n const onFocus = () => {\n const that = ref?.deref();\n if (!that) {\n document.removeEventListener('visibilitychange', onFocus);\n return;\n }\n\n if (!document.hidden && !that.state.get().isConnected) {\n that.invalidate();\n }\n };\n\n document.addEventListener('visibilitychange', onFocus);\n }\n}\n\ntype CreateReturnType<T, Args extends any[]> = {\n (...args: Args): Cache<T>;\n invalidateAll: () => void;\n clearAll: () => void;\n} & ([] extends Args ? Cache<T> : {});\n\nfunction create<T, Args extends any[] = []>(\n cacheFunction: CacheFunction<T, Args>,\n options?: CacheOptions<T>,\n): CreateReturnType<T, Args> {\n options = { ...createCache.defaultOptions, ...options };\n const { clearUnusedAfter, resourceGroup } = options ?? {};\n\n let baseInstance: CreateReturnType<T, Args> & Cache<T>;\n\n const instanceCache = new InstanceCache<Args, Cache<T>>(\n (...args: Args): Cache<T> => {\n if (args.length === 0 && baseInstance) {\n return baseInstance;\n }\n\n return new Cache((helpers) => {\n const result = cacheFunction.apply(helpers, args);\n\n if (result instanceof Function) {\n return result(helpers);\n }\n\n return result;\n }, options);\n },\n clearUnusedAfter ? calcDuration(clearUnusedAfter) : undefined,\n );\n\n const get = (...args: Args) => {\n return instanceCache.get(...args);\n };\n\n const invalidateAll = () => {\n for (const instance of instanceCache.values()) {\n instance.invalidate();\n }\n };\n\n const clearAll = () => {\n for (const instance of instanceCache.values()) {\n instance.clear();\n }\n };\n\n baseInstance = Object.assign(\n new Cache(\n (helpers) => {\n const result = cacheFunction.apply(helpers);\n\n if (result instanceof Function) {\n return result(helpers);\n }\n\n return result;\n },\n options,\n undefined,\n get,\n ),\n {\n invalidateAll,\n clearAll,\n },\n ) as CreateReturnType<T, Args> & Cache<T>;\n\n const groups = Array.isArray(resourceGroup)\n ? resourceGroup\n : resourceGroup\n ? [resourceGroup]\n : [];\n for (const group of groups.concat(allResources)) {\n group.add(baseInstance);\n }\n\n get(...([] as any));\n\n return baseInstance;\n}\n\nexport const createCache: typeof create & { defaultOptions: CacheOptions<any> } =\n /* @__PURE__ */ Object.assign(create, {\n defaultOptions: {\n invalidateOnWindowFocus: true,\n invalidateOnActivation: true,\n clearUnusedAfter: { days: 1 },\n retain: { milliseconds: 1 },\n equals: deepEqual,\n } as CacheOptions<any>,\n });\n","import { autobind } from '@lib/autobind';\n\nexport class Scope<T> {\n constructor(public readonly defaultValue: T) {\n autobind(Scope);\n }\n}\n\nexport function createScope<T>(defaultValue: T): Scope<T> {\n return new Scope(defaultValue);\n}\n"],"names":["hash","autobind","Store","createStore","calculatedValue","PromiseWithState","makeSelector","calcDuration","deepEqual"],"mappings":"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"}
1
+ {"version":3,"file":"scope.cjs","sources":["../../src/lib/instanceCache.ts","../../src/core/resourceGroup.ts","../../src/core/cache.ts","../../src/core/scope.ts"],"sourcesContent":["import { hash } from './hash';\n\nexport class InstanceCache<Args extends any[], T extends object> {\n private cache = new Map<string, { t: number; ref?: T; weakRef: WeakRef<T> }>();\n\n private interval = this.cacheTime\n ? setInterval(() => this.cleanup(), Math.max(this.cacheTime / 10, 1))\n : undefined;\n\n constructor(\n public readonly factory: (...args: Args) => T,\n public readonly cacheTime?: number,\n ) {}\n\n cleanup(): void {\n const cutoff = this.now() - (this.cacheTime ?? 0);\n\n for (const [key, entry] of this.cache.entries()) {\n if (entry.ref && entry.t <= cutoff) {\n delete entry.ref;\n }\n\n if (!entry.ref && !entry.weakRef?.deref()) {\n this.cache.delete(key);\n }\n }\n }\n\n get(...args: Args): T {\n const key = hash(args);\n let entry = this.cache.get(key);\n let value = entry?.ref ?? entry?.weakRef?.deref();\n\n if (!entry || !value) {\n value = this.factory(...args);\n entry = {\n t: this.now(),\n ref: value,\n weakRef: new WeakRef(value),\n };\n\n this.cache.set(key, entry);\n } else {\n entry.t = this.now();\n entry.ref ??= value;\n }\n\n return value;\n }\n\n values(): T[] {\n return [...this.cache.values()]\n .map((entry) => entry.ref ?? entry.weakRef?.deref())\n .filter((value): value is T => !!value);\n }\n\n stop(): void {\n if (this.interval) {\n clearInterval(this.interval);\n }\n }\n\n stats(): { count: number; withRef: number; withWeakRef: number } {\n return {\n count: this.cache.size,\n withRef: [...this.cache.values()].filter((x) => !!x.ref).length,\n withWeakRef: [...this.cache.values()].filter((x) => !!x.weakRef?.deref()).length,\n };\n }\n\n private now() {\n return performance.now();\n }\n}\n","import { autobind } from '@lib/autobind';\n\nexport interface Resource {\n invalidateAll(): void;\n clearAll(): void;\n}\n\nexport class ResourceGroup {\n private refMap = new WeakMap<Resource, WeakRef<Resource>>();\n\n private refSet = new Set<WeakRef<Resource>>();\n\n constructor(public readonly name?: string) {\n autobind(ResourceGroup);\n }\n\n add(resource: Resource): void {\n const ref = new WeakRef(resource);\n this.refMap.set(resource, ref);\n this.refSet.add(ref);\n }\n\n delete(resource: Resource): void {\n const ref = this.refMap.get(resource);\n if (ref) {\n this.refMap.delete(resource);\n this.refSet.delete(ref);\n }\n }\n\n invalidateAll(): void {\n for (const ref of this.refSet) {\n const resource = ref.deref();\n if (resource) {\n resource.invalidateAll();\n } else {\n this.refSet.delete(ref);\n }\n }\n }\n\n clearAll(): void {\n for (const ref of this.refSet) {\n const resource = ref.deref();\n if (resource) {\n resource.clearAll();\n } else {\n this.refSet.delete(ref);\n }\n }\n }\n}\n\nexport const allResources: ResourceGroup = /* @__PURE__ */ new ResourceGroup();\n\nexport function createResourceGroup(name?: string): ResourceGroup {\n return new ResourceGroup(name);\n}\n","import { autobind } from '@lib/autobind';\nimport type { CacheState, ErrorState, ValueState } from '@lib/cacheState';\nimport { calcDuration } from '@lib/calcDuration';\nimport { calculatedValue } from '@lib/calculatedValue';\nimport { InstanceCache } from '@lib/instanceCache';\nimport { makeSelector } from '@lib/makeSelector';\nimport { type MaybePromise } from '@lib/maybePromise';\nimport type { Path, Value } from '@lib/path';\nimport { PromiseWithState } from '@lib/promiseWithState';\nimport type { Duration, Selector } from './commonTypes';\nimport { allResources, type ResourceGroup } from './resourceGroup';\nimport { Store, createStore, type Calculate, type StoreOptions } from './store';\nimport { deepEqual } from '@lib/equals';\n\nexport interface CacheGetOptions {\n update?: 'whenMissing' | 'whenStale' | 'force';\n backgroundUpdate?: boolean;\n}\n\nexport interface CacheFunction<T, Args extends any[] = []> {\n (...args: Args): Promise<T> | Calculate<Promise<T>>;\n}\n\nexport interface CacheOptions<T> extends StoreOptions<Promise<T>> {\n invalidateAfter?: Duration | ((state: ValueState<T> | ErrorState) => Duration | null) | null;\n invalidateOnWindowFocus?: boolean;\n invalidateOnActivation?: boolean;\n clearOnInvalidate?: boolean;\n clearUnusedAfter?: Duration | null;\n resourceGroup?: ResourceGroup | ResourceGroup[];\n}\n\nexport class Cache<T> extends Store<Promise<T>> {\n readonly state: Store<CacheState<T>> = createStore<CacheState<T>>({\n status: 'pending',\n isStale: true,\n isUpdating: false,\n isConnected: false,\n });\n\n protected stalePromise?: Promise<T>;\n\n protected invalidationTimer?: ReturnType<typeof setTimeout>;\n\n constructor(\n getter: Calculate<Promise<T>>,\n public readonly options: CacheOptions<T> = {},\n public readonly derivedFromCache?: {\n cache: Cache<any>;\n selectors: (Selector<any, any> | Path<any>)[];\n },\n _call?: (...args: any[]) => any,\n ) {\n super(getter, options, undefined, _call);\n autobind(Cache);\n\n this.watchPromise();\n this.watchFocus();\n }\n\n get({ update = 'whenStale', backgroundUpdate = false }: CacheGetOptions = {}): Promise<T> {\n const promise = this.calculatedValue?.value;\n const stalePromise = this.stalePromise;\n\n if (\n (update === 'whenMissing' && !promise && !stalePromise) ||\n (update === 'whenStale' && !promise) ||\n update === 'force'\n ) {\n this.calculatedValue?.stop();\n this.calculatedValue = calculatedValue(this, this.notify);\n this.notify();\n\n if ((!promise && !stalePromise) || !backgroundUpdate) {\n return super.get();\n }\n }\n\n if (!promise || (stalePromise && backgroundUpdate)) {\n return stalePromise!;\n }\n\n return promise;\n }\n\n updateValue(value: MaybePromise<T> | ((value: T | undefined) => T)): void {\n if (value instanceof Function) {\n value = value(this.state.get().value);\n }\n this.set(PromiseWithState.resolve(value));\n }\n\n updateError(error: unknown): void {\n this.set(PromiseWithState.reject(error));\n }\n\n invalidate(recursive?: boolean): void {\n const { clearOnInvalidate } = this.options;\n\n if (clearOnInvalidate) {\n return this.clear(recursive);\n }\n\n const { status, isStale, isUpdating } = this.state.get();\n if (status !== 'pending' && !isStale && !isUpdating) {\n this.stalePromise = this.calculatedValue?.value;\n }\n\n this.state.set((state) => ({\n ...state,\n isStale: true,\n isUpdating: false,\n }));\n\n super.invalidate(recursive);\n }\n\n clear(recursive?: boolean): void {\n this.state.set({\n status: 'pending',\n isStale: true,\n isUpdating: false,\n isConnected: false,\n });\n delete this.stalePromise;\n\n super.invalidate(recursive);\n }\n\n mapValue<S>(selector: Selector<T, S>): Cache<S>;\n\n mapValue<P extends Path<T>>(selector: P): Cache<Value<T, P>>;\n\n mapValue<S>(_selector: Selector<T, S> | Path<any>): Cache<S> {\n const selector = makeSelector(_selector);\n const derivedFromCache = {\n cache: this.derivedFromCache ? this.derivedFromCache.cache : this,\n selectors: this.derivedFromCache\n ? [...this.derivedFromCache.selectors, _selector]\n : [_selector],\n };\n\n return new Cache(\n async ({ use }) => {\n const value = await use(this);\n return selector(value);\n },\n {\n equals: this.options.equals,\n },\n derivedFromCache,\n );\n }\n\n protected watchPromise(): void {\n this.subscribe(\n async (promise) => {\n if (promise instanceof PromiseWithState && promise.state.status !== 'pending') {\n this.state.set((state) => ({\n ...promise.state,\n isStale: false,\n isUpdating: false,\n isConnected: state.isConnected,\n }));\n\n delete this.stalePromise;\n this.setTimers();\n return;\n }\n\n this.state.set((state) => ({\n ...state,\n isUpdating: true,\n }));\n\n this.setTimers();\n\n try {\n const value = await promise;\n\n if (promise !== this.calculatedValue?.value) {\n return;\n }\n\n this.state.set((state) => ({\n status: 'value',\n value,\n isStale: false,\n isUpdating: false,\n isConnected: state.isConnected,\n }));\n delete this.stalePromise;\n this.setTimers();\n } catch (error) {\n if (promise !== this.calculatedValue?.value) {\n return;\n }\n\n this.state.set((state) => ({\n status: 'error',\n error,\n isStale: false,\n isUpdating: false,\n isConnected: state.isConnected,\n }));\n delete this.stalePromise;\n this.setTimers();\n }\n },\n { passive: true },\n );\n }\n\n protected setTimers(): void {\n if (this.invalidationTimer) {\n clearTimeout(this.invalidationTimer);\n }\n this.invalidationTimer = undefined;\n\n const state = this.state.get();\n let { invalidateAfter } = this.options;\n const ref = new WeakRef(this);\n\n if (state.status === 'pending') {\n return;\n }\n\n if (invalidateAfter instanceof Function) {\n invalidateAfter = invalidateAfter(state);\n }\n\n if (invalidateAfter !== null && invalidateAfter !== undefined) {\n this.invalidationTimer = setTimeout(\n () => ref?.deref()?.invalidate(),\n calcDuration(invalidateAfter),\n );\n }\n }\n\n protected watchFocus(): void {\n const { invalidateOnWindowFocus } = this.options;\n\n if (\n !invalidateOnWindowFocus ||\n typeof document === 'undefined' ||\n typeof document.addEventListener === 'undefined'\n ) {\n return;\n }\n\n const ref = new WeakRef(this);\n\n const onFocus = () => {\n const that = ref?.deref();\n if (!that) {\n document.removeEventListener('visibilitychange', onFocus);\n return;\n }\n\n if (!document.hidden && !that.state.get().isConnected) {\n that.invalidate();\n }\n };\n\n document.addEventListener('visibilitychange', onFocus);\n }\n}\n\ntype CreateReturnType<T, Args extends any[]> = {\n (...args: Args): Cache<T>;\n invalidateAll: () => void;\n clearAll: () => void;\n} & ([] extends Args ? Cache<T> : {});\n\nfunction create<T, Args extends any[] = []>(\n cacheFunction: CacheFunction<T, Args>,\n options?: CacheOptions<T>,\n): CreateReturnType<T, Args> {\n options = { ...createCache.defaultOptions, ...options };\n const { clearUnusedAfter, resourceGroup } = options ?? {};\n\n let baseInstance: CreateReturnType<T, Args> & Cache<T>;\n\n const instanceCache = new InstanceCache<Args, Cache<T>>(\n (...args: Args): Cache<T> => {\n if (args.length === 0 && baseInstance) {\n return baseInstance;\n }\n\n return new Cache((helpers) => {\n const result = cacheFunction.apply(helpers, args);\n\n if (result instanceof Function) {\n return result(helpers);\n }\n\n return result;\n }, options);\n },\n clearUnusedAfter ? calcDuration(clearUnusedAfter) : undefined,\n );\n\n const get = (...args: Args) => {\n return instanceCache.get(...args);\n };\n\n const invalidateAll = () => {\n for (const instance of instanceCache.values()) {\n instance.invalidate();\n }\n };\n\n const clearAll = () => {\n for (const instance of instanceCache.values()) {\n instance.clear();\n }\n };\n\n baseInstance = Object.assign(\n new Cache(\n (helpers) => {\n const result = cacheFunction.apply(helpers);\n\n if (result instanceof Function) {\n return result(helpers);\n }\n\n return result;\n },\n options,\n undefined,\n get,\n ),\n {\n invalidateAll,\n clearAll,\n },\n ) as CreateReturnType<T, Args> & Cache<T>;\n\n const groups = Array.isArray(resourceGroup)\n ? resourceGroup\n : resourceGroup\n ? [resourceGroup]\n : [];\n for (const group of groups.concat(allResources)) {\n group.add(baseInstance);\n }\n\n get(...([] as any));\n\n return baseInstance;\n}\n\nexport const createCache: typeof create & { defaultOptions: CacheOptions<any> } =\n /* @__PURE__ */ Object.assign(create, {\n defaultOptions: {\n invalidateOnWindowFocus: true,\n invalidateOnActivation: true,\n clearUnusedAfter: { days: 1 },\n retain: { milliseconds: 1 },\n equals: deepEqual,\n } as CacheOptions<any>,\n });\n","import { autobind } from '@lib/autobind';\n\nexport class Scope<T> {\n constructor(public readonly defaultValue: T) {\n autobind(Scope);\n }\n}\n\nexport function createScope<T>(defaultValue: T): Scope<T> {\n return new Scope(defaultValue);\n}\n"],"names":["hash","autobind","Store","createStore","calculatedValue","PromiseWithState","makeSelector","calcDuration","deepEqual"],"mappings":"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"}
@@ -740,6 +740,10 @@ function useCache(cache, {
740
740
  },
741
741
  { ...options, withViewTransition, passive: passive || disabled }
742
742
  );
743
+ require$$0.useEffect(
744
+ () => rootCache.subscribe(() => void 0, { passive: passive || disabled }),
745
+ [passive || disabled]
746
+ );
743
747
  useLoadingBoundary(loadingBoundary && !disabled && result.status === "pending");
744
748
  if (suspense && result.status === "pending") {
745
749
  throw rootCache.get();