cross-state 0.33.10 → 0.33.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/cjs/hash.cjs +18 -0
  2. package/dist/cjs/hash.cjs.map +1 -0
  3. package/dist/cjs/immer/index.cjs +0 -1
  4. package/dist/cjs/immer/index.cjs.map +1 -1
  5. package/dist/cjs/immer/register.cjs +0 -1
  6. package/dist/cjs/immer/register.cjs.map +1 -1
  7. package/dist/cjs/index.cjs +6 -7
  8. package/dist/cjs/index.cjs.map +1 -1
  9. package/dist/cjs/react/index.cjs +4 -4
  10. package/dist/cjs/react/index.cjs.map +1 -1
  11. package/dist/cjs/react/register.cjs +1 -4
  12. package/dist/cjs/react/register.cjs.map +1 -1
  13. package/dist/cjs/scope.cjs +350 -11
  14. package/dist/cjs/scope.cjs.map +1 -1
  15. package/dist/cjs/store.cjs +8 -7
  16. package/dist/cjs/store.cjs.map +1 -1
  17. package/dist/cjs/useCache.cjs +41 -41
  18. package/dist/cjs/useCache.cjs.map +1 -1
  19. package/dist/es/hash.mjs +19 -0
  20. package/dist/es/hash.mjs.map +1 -0
  21. package/dist/es/immer/index.mjs +0 -1
  22. package/dist/es/immer/index.mjs.map +1 -1
  23. package/dist/es/immer/register.mjs +0 -1
  24. package/dist/es/immer/register.mjs.map +1 -1
  25. package/dist/es/index.mjs +7 -8
  26. package/dist/es/index.mjs.map +1 -1
  27. package/dist/es/react/index.mjs +1 -1
  28. package/dist/es/react/register.mjs +1 -4
  29. package/dist/es/react/register.mjs.map +1 -1
  30. package/dist/es/scope.mjs +352 -13
  31. package/dist/es/scope.mjs.map +1 -1
  32. package/dist/es/store.mjs +8 -7
  33. package/dist/es/store.mjs.map +1 -1
  34. package/dist/es/useCache.mjs +40 -40
  35. package/dist/es/useCache.mjs.map +1 -1
  36. package/dist/types/react/loadingBoundary.d.ts +0 -1
  37. package/package.json +14 -14
  38. package/dist/cjs/cache.cjs +0 -358
  39. package/dist/cjs/cache.cjs.map +0 -1
  40. package/dist/es/cache.mjs +0 -359
  41. package/dist/es/cache.mjs.map +0 -1
@@ -1,20 +1,354 @@
1
1
  "use strict";
2
2
  const store = require("./store.cjs");
3
- function hash(value) {
4
- if (value instanceof Set) {
5
- return `s[${[...value].map(hash).sort().join(",")}]`;
3
+ const hash = require("./hash.cjs");
4
+ class InstanceCache {
5
+ constructor(factory, cacheTime) {
6
+ this.factory = factory;
7
+ this.cacheTime = cacheTime;
8
+ this.cache = /* @__PURE__ */ new Map();
9
+ this.interval = this.cacheTime ? setInterval(() => this.cleanup(), Math.max(this.cacheTime / 10, 1)) : void 0;
6
10
  }
7
- if (value instanceof Map) {
8
- return `m[${[...value.entries()].map(hash).sort().join(",")}]`;
11
+ cleanup() {
12
+ var _a;
13
+ const cutoff = this.now() - (this.cacheTime ?? 0);
14
+ for (const [key, entry] of this.cache.entries()) {
15
+ if (entry.ref && entry.t <= cutoff) {
16
+ delete entry.ref;
17
+ }
18
+ if (!entry.ref && !((_a = entry.weakRef) == null ? void 0 : _a.deref())) {
19
+ this.cache.delete(key);
20
+ }
21
+ }
9
22
  }
10
- if (Array.isArray(value)) {
11
- return `[${value.map(hash).join(",")}]`;
23
+ get(...args) {
24
+ var _a;
25
+ const key = hash.hash(args);
26
+ let entry = this.cache.get(key);
27
+ let value = (entry == null ? void 0 : entry.ref) ?? ((_a = entry == null ? void 0 : entry.weakRef) == null ? void 0 : _a.deref());
28
+ if (!entry || !value) {
29
+ value = this.factory(...args);
30
+ entry = {
31
+ t: this.now(),
32
+ ref: value,
33
+ weakRef: new WeakRef(value)
34
+ };
35
+ this.cache.set(key, entry);
36
+ } else {
37
+ entry.t = this.now();
38
+ entry.ref ?? (entry.ref = value);
39
+ }
40
+ return value;
12
41
  }
13
- if (value instanceof Object) {
14
- return `o[${Object.entries(value).map(hash).sort().join(",")}]`;
42
+ values() {
43
+ return [...this.cache.values()].map((entry) => {
44
+ var _a;
45
+ return entry.ref ?? ((_a = entry.weakRef) == null ? void 0 : _a.deref());
46
+ }).filter((value) => !!value);
47
+ }
48
+ stop() {
49
+ if (this.interval) {
50
+ clearInterval(this.interval);
51
+ }
52
+ }
53
+ stats() {
54
+ return {
55
+ count: this.cache.size,
56
+ withRef: [...this.cache.values()].filter((x) => !!x.ref).length,
57
+ withWeakRef: [...this.cache.values()].filter((x) => {
58
+ var _a;
59
+ return !!((_a = x.weakRef) == null ? void 0 : _a.deref());
60
+ }).length
61
+ };
62
+ }
63
+ now() {
64
+ return performance.now();
65
+ }
66
+ }
67
+ class ResourceGroup {
68
+ constructor(name) {
69
+ this.name = name;
70
+ this.refMap = /* @__PURE__ */ new WeakMap();
71
+ this.refSet = /* @__PURE__ */ new Set();
72
+ store.autobind(ResourceGroup);
73
+ }
74
+ add(resource) {
75
+ const ref = new WeakRef(resource);
76
+ this.refMap.set(resource, ref);
77
+ this.refSet.add(ref);
78
+ }
79
+ delete(resource) {
80
+ const ref = this.refMap.get(resource);
81
+ if (ref) {
82
+ this.refMap.delete(resource);
83
+ this.refSet.delete(ref);
84
+ }
85
+ }
86
+ invalidateAll() {
87
+ for (const ref of this.refSet) {
88
+ const resource = ref.deref();
89
+ if (resource) {
90
+ resource.invalidateAll();
91
+ } else {
92
+ this.refSet.delete(ref);
93
+ }
94
+ }
95
+ }
96
+ clearAll() {
97
+ for (const ref of this.refSet) {
98
+ const resource = ref.deref();
99
+ if (resource) {
100
+ resource.clearAll();
101
+ } else {
102
+ this.refSet.delete(ref);
103
+ }
104
+ }
105
+ }
106
+ }
107
+ const allResources = /* @__PURE__ */ new ResourceGroup();
108
+ function createResourceGroup(name) {
109
+ return new ResourceGroup(name);
110
+ }
111
+ class Cache extends store.Store {
112
+ constructor(getter, options = {}, derivedFromCache, _call) {
113
+ super(getter, options, void 0, _call);
114
+ this.options = options;
115
+ this.derivedFromCache = derivedFromCache;
116
+ this.state = store.createStore({
117
+ status: "pending",
118
+ isStale: true,
119
+ isUpdating: false,
120
+ isConnected: false
121
+ });
122
+ store.autobind(Cache);
123
+ this.watchPromise();
124
+ this.watchFocus();
125
+ this.state.addEffect(() => this.subscribe(() => void 0));
126
+ }
127
+ get({ update = "whenStale", backgroundUpdate = false } = {}) {
128
+ var _a, _b;
129
+ const promise = (_a = this.calculatedValue) == null ? void 0 : _a.value;
130
+ const stalePromise = this.stalePromise;
131
+ if (update === "whenMissing" && !promise && !stalePromise || update === "whenStale" && !promise || update === "force") {
132
+ (_b = this.calculatedValue) == null ? void 0 : _b.stop();
133
+ this.calculatedValue = store.calculatedValue(this, this.notify);
134
+ this.notify();
135
+ if (!promise && !stalePromise || !backgroundUpdate) {
136
+ return super.get();
137
+ }
138
+ }
139
+ if (!promise || stalePromise && backgroundUpdate) {
140
+ return stalePromise;
141
+ }
142
+ return promise;
143
+ }
144
+ updateValue(value) {
145
+ this.set(store.PromiseWithState.resolve(value));
146
+ }
147
+ updateError(error) {
148
+ this.set(store.PromiseWithState.reject(error));
149
+ }
150
+ invalidate(recursive) {
151
+ var _a;
152
+ const { clearOnInvalidate } = this.options;
153
+ if (clearOnInvalidate) {
154
+ return this.clear(recursive);
155
+ }
156
+ const { status, isStale, isUpdating } = this.state.get();
157
+ if (status !== "pending" && !isStale && !isUpdating) {
158
+ this.stalePromise = (_a = this.calculatedValue) == null ? void 0 : _a.value;
159
+ }
160
+ this.state.set((state) => ({
161
+ ...state,
162
+ isStale: true,
163
+ isUpdating: false
164
+ }));
165
+ super.invalidate(recursive);
166
+ }
167
+ clear(recursive) {
168
+ this.state.set({
169
+ status: "pending",
170
+ isStale: true,
171
+ isUpdating: false,
172
+ isConnected: false
173
+ });
174
+ delete this.stalePromise;
175
+ super.invalidate(recursive);
176
+ }
177
+ mapValue(_selector) {
178
+ const selector = store.makeSelector(_selector);
179
+ const derivedFromCache = {
180
+ cache: this.derivedFromCache ? this.derivedFromCache.cache : this,
181
+ selectors: this.derivedFromCache ? [...this.derivedFromCache.selectors, _selector] : [_selector]
182
+ };
183
+ return new Cache(
184
+ async ({ use }) => {
185
+ const value = await use(this);
186
+ return selector(value);
187
+ },
188
+ {},
189
+ derivedFromCache
190
+ );
191
+ }
192
+ watchPromise() {
193
+ this.subscribe(
194
+ async (promise) => {
195
+ var _a, _b;
196
+ if (promise instanceof store.PromiseWithState) {
197
+ this.state.set((state) => ({
198
+ ...promise.state,
199
+ isStale: false,
200
+ isUpdating: false,
201
+ isConnected: state.isConnected
202
+ }));
203
+ delete this.stalePromise;
204
+ this.setTimers();
205
+ return;
206
+ }
207
+ this.state.set((state) => ({
208
+ ...state,
209
+ isUpdating: true
210
+ }));
211
+ this.setTimers();
212
+ try {
213
+ const value = await promise;
214
+ if (promise !== ((_a = this.calculatedValue) == null ? void 0 : _a.value)) {
215
+ return;
216
+ }
217
+ this.state.set((state) => ({
218
+ status: "value",
219
+ value,
220
+ isStale: false,
221
+ isUpdating: false,
222
+ isConnected: state.isConnected
223
+ }));
224
+ delete this.stalePromise;
225
+ this.setTimers();
226
+ } catch (error) {
227
+ if (promise !== ((_b = this.calculatedValue) == null ? void 0 : _b.value)) {
228
+ return;
229
+ }
230
+ this.state.set((state) => ({
231
+ status: "error",
232
+ error,
233
+ isStale: false,
234
+ isUpdating: false,
235
+ isConnected: state.isConnected
236
+ }));
237
+ delete this.stalePromise;
238
+ this.setTimers();
239
+ }
240
+ },
241
+ { passive: true }
242
+ );
243
+ }
244
+ setTimers() {
245
+ if (this.invalidationTimer) {
246
+ clearTimeout(this.invalidationTimer);
247
+ }
248
+ this.invalidationTimer = void 0;
249
+ const state = this.state.get();
250
+ let { invalidateAfter } = this.options;
251
+ const ref = new WeakRef(this);
252
+ if (state.status === "pending") {
253
+ return;
254
+ }
255
+ if (invalidateAfter instanceof Function) {
256
+ invalidateAfter = invalidateAfter(state);
257
+ }
258
+ if (invalidateAfter !== null && invalidateAfter !== void 0) {
259
+ this.invalidationTimer = setTimeout(
260
+ () => {
261
+ var _a;
262
+ return (_a = ref == null ? void 0 : ref.deref()) == null ? void 0 : _a.invalidate();
263
+ },
264
+ store.calcDuration(invalidateAfter)
265
+ );
266
+ }
267
+ }
268
+ watchFocus() {
269
+ const { invalidateOnWindowFocus } = this.options;
270
+ if (!invalidateOnWindowFocus || typeof document === "undefined" || typeof document.addEventListener === "undefined") {
271
+ return;
272
+ }
273
+ const ref = new WeakRef(this);
274
+ const onFocus = () => {
275
+ const that = ref == null ? void 0 : ref.deref();
276
+ if (!that) {
277
+ document.removeEventListener("visibilitychange", onFocus);
278
+ return;
279
+ }
280
+ if (!document.hidden && !that.state.get().isConnected) {
281
+ that.invalidate();
282
+ }
283
+ };
284
+ document.addEventListener("visibilitychange", onFocus);
15
285
  }
16
- return JSON.stringify(value);
17
286
  }
287
+ function create(cacheFunction, options) {
288
+ options = { ...createCache.defaultOptions, ...options };
289
+ const { clearUnusedAfter, resourceGroup } = options ?? {};
290
+ let baseInstance;
291
+ const instanceCache = new InstanceCache(
292
+ (...args) => {
293
+ if (args.length === 0 && baseInstance) {
294
+ return baseInstance;
295
+ }
296
+ return new Cache((helpers) => {
297
+ const result = cacheFunction.apply(helpers, args);
298
+ if (result instanceof Function) {
299
+ return result(helpers);
300
+ }
301
+ return result;
302
+ }, options);
303
+ },
304
+ clearUnusedAfter ? store.calcDuration(clearUnusedAfter) : void 0
305
+ );
306
+ const get = (...args) => {
307
+ return instanceCache.get(...args);
308
+ };
309
+ const invalidateAll = () => {
310
+ for (const instance of instanceCache.values()) {
311
+ instance.invalidate();
312
+ }
313
+ };
314
+ const clearAll = () => {
315
+ for (const instance of instanceCache.values()) {
316
+ instance.clear();
317
+ }
318
+ };
319
+ baseInstance = Object.assign(
320
+ new Cache(
321
+ (helpers) => {
322
+ const result = cacheFunction.apply(helpers);
323
+ if (result instanceof Function) {
324
+ return result(helpers);
325
+ }
326
+ return result;
327
+ },
328
+ options,
329
+ void 0,
330
+ get
331
+ ),
332
+ {
333
+ invalidateAll,
334
+ clearAll
335
+ }
336
+ );
337
+ const groups = Array.isArray(resourceGroup) ? resourceGroup : resourceGroup ? [resourceGroup] : [];
338
+ for (const group of groups.concat(allResources)) {
339
+ group.add(baseInstance);
340
+ }
341
+ get(...[]);
342
+ return baseInstance;
343
+ }
344
+ const createCache = /* @__PURE__ */ Object.assign(create, {
345
+ defaultOptions: {
346
+ invalidateOnWindowFocus: true,
347
+ invalidateOnActivation: true,
348
+ clearUnusedAfter: { days: 1 },
349
+ retain: { milliseconds: 1 }
350
+ }
351
+ });
18
352
  class Scope {
19
353
  constructor(defaultValue) {
20
354
  this.defaultValue = defaultValue;
@@ -24,7 +358,12 @@ class Scope {
24
358
  function createScope(defaultValue) {
25
359
  return new Scope(defaultValue);
26
360
  }
361
+ exports.Cache = Cache;
362
+ exports.InstanceCache = InstanceCache;
363
+ exports.ResourceGroup = ResourceGroup;
27
364
  exports.Scope = Scope;
365
+ exports.allResources = allResources;
366
+ exports.createCache = createCache;
367
+ exports.createResourceGroup = createResourceGroup;
28
368
  exports.createScope = createScope;
29
- exports.hash = hash;
30
369
  //# sourceMappingURL=scope.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"scope.cjs","sources":["../../src/lib/hash.ts","../../src/core/scope.ts"],"sourcesContent":["export function hash(value: unknown): string {\n if (value instanceof Set) {\n return `s[${[...value].map(hash).sort().join(',')}]`;\n }\n\n if (value instanceof Map) {\n return `m[${[...value.entries()].map(hash).sort().join(',')}]`;\n }\n\n if (Array.isArray(value)) {\n return `[${value.map(hash).join(',')}]`;\n }\n\n if (value instanceof Object) {\n return `o[${Object.entries(value).map(hash).sort().join(',')}]`;\n }\n\n return JSON.stringify(value);\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":["autobind"],"mappings":";;AAAO,SAAS,KAAK,OAAwB;AAC3C,MAAI,iBAAiB,KAAK;AACxB,WAAO,KAAK,CAAC,GAAG,KAAK,EAAE,IAAI,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC;AAAA,EACnD;AAEA,MAAI,iBAAiB,KAAK;AACxB,WAAO,KAAK,CAAC,GAAG,MAAM,QAAS,CAAA,EAAE,IAAI,IAAI,EAAE,KAAA,EAAO,KAAK,GAAG,CAAC;AAAA,EAC7D;AAEI,MAAA,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,GAAG,CAAC;AAAA,EACtC;AAEA,MAAI,iBAAiB,QAAQ;AAC3B,WAAO,KAAK,OAAO,QAAQ,KAAK,EAAE,IAAI,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC;AAAA,EAC9D;AAEO,SAAA,KAAK,UAAU,KAAK;AAC7B;AChBO,MAAM,MAAS;AAAA,EACpB,YAA4B,cAAiB;AAAjB,SAAA,eAAA;AAC1BA,UAAA,SAAS,KAAK;AAAA,EAChB;AACF;AAEO,SAAS,YAAe,cAA2B;AACjD,SAAA,IAAI,MAAM,YAAY;AAC/B;;;;"}
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(public readonly factory: (...args: Args) => T, public readonly cacheTime?: number) {}\n\n cleanup() {\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) {\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() {\n return [...this.cache.values()]\n .map((entry) => entry.ref ?? entry.weakRef?.deref())\n .filter((value): value is T => !!value);\n }\n\n stop() {\n if (this.interval) {\n clearInterval(this.interval);\n }\n }\n\n stats() {\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) {\n const ref = new WeakRef(resource);\n this.refMap.set(resource, ref);\n this.refSet.add(ref);\n }\n\n delete(resource: Resource) {\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() {\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() {\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 = /* @__PURE__ */ new ResourceGroup();\n\nexport function createResourceGroup(name?: string) {\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';\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 {\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 = 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 = {}) {\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>) {\n this.set(PromiseWithState.resolve(value));\n }\n\n updateError(error: unknown) {\n this.set(PromiseWithState.reject(error));\n }\n\n invalidate(recursive?: boolean) {\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 derivedFromCache,\n );\n }\n\n protected watchPromise() {\n this.subscribe(\n async (promise) => {\n if (promise instanceof PromiseWithState) {\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() {\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() {\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 = /* @__PURE__ */ Object.assign(create, {\n defaultOptions: {\n invalidateOnWindowFocus: true,\n invalidateOnActivation: true,\n clearUnusedAfter: { days: 1 },\n retain: { milliseconds: 1 },\n } as CacheOptions<unknown>,\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"],"mappings":"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"}
@@ -240,12 +240,14 @@ function calculatedValue(store, notify) {
240
240
  }
241
241
  async function connect(createConnection) {
242
242
  if (!active) {
243
+ connection = { active: false };
243
244
  return;
244
245
  }
245
246
  const actions = {
246
- set(value2) {
247
+ set(_value) {
247
248
  (connection == null ? void 0 : connection.active) && q(() => {
248
- store.set(value2);
249
+ value = _value;
250
+ notify();
249
251
  });
250
252
  },
251
253
  updateValue(update) {
@@ -295,6 +297,8 @@ function calculatedValue(store, notify) {
295
297
  value = store.getter instanceof Function ? store.getter({ use, connect }) : store.getter;
296
298
  if (value instanceof Promise) {
297
299
  value.finally(() => whenExecuted.resolve()).catch(() => void 0);
300
+ } else {
301
+ whenExecuted.resolve();
298
302
  }
299
303
  function check() {
300
304
  if (active) {
@@ -310,15 +314,12 @@ function calculatedValue(store, notify) {
310
314
  function stop() {
311
315
  var _a;
312
316
  cancelEffect();
317
+ whenExecuted.resolve();
318
+ whenConnected.resolve();
313
319
  if (connection) {
314
320
  connection.active = false;
315
321
  (_a = connection.cancel) == null ? void 0 : _a.call(connection);
316
322
  q.clear();
317
- whenConnected.reject();
318
- whenExecuted.reject();
319
- } else {
320
- whenConnected.resolve();
321
- whenExecuted.resolve();
322
323
  }
323
324
  }
324
325
  function invalidateDependencies(recursive) {