cross-state 0.8.6 → 0.9.2

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 (59) hide show
  1. package/dist/cjs/cache.cjs +386 -0
  2. package/dist/cjs/cache.cjs.map +1 -0
  3. package/dist/cjs/immer/index.cjs +21 -3
  4. package/dist/cjs/immer/index.cjs.map +1 -1
  5. package/dist/cjs/immer/register.cjs +2 -2
  6. package/dist/cjs/immer/register.cjs.map +1 -1
  7. package/dist/cjs/index.cjs +21 -16
  8. package/dist/cjs/index.cjs.map +1 -1
  9. package/dist/cjs/react/index.cjs +268 -11
  10. package/dist/cjs/react/index.cjs.map +1 -1
  11. package/dist/cjs/react/register.cjs +12 -12
  12. package/dist/cjs/react/register.cjs.map +1 -1
  13. package/dist/cjs/scope.cjs +11 -379
  14. package/dist/cjs/scope.cjs.map +1 -1
  15. package/dist/cjs/store.cjs.map +1 -1
  16. package/dist/cjs/{scope2.cjs → useCache.cjs} +69 -74
  17. package/dist/cjs/useCache.cjs.map +1 -0
  18. package/dist/es/cache.mjs +387 -0
  19. package/dist/es/cache.mjs.map +1 -0
  20. package/dist/es/immer/index.mjs +21 -3
  21. package/dist/es/immer/index.mjs.map +1 -1
  22. package/dist/es/immer/register.mjs +1 -1
  23. package/dist/es/index.mjs +22 -17
  24. package/dist/es/index.mjs.map +1 -1
  25. package/dist/es/react/index.mjs +267 -10
  26. package/dist/es/react/index.mjs.map +1 -1
  27. package/dist/es/react/register.mjs +4 -4
  28. package/dist/es/scope.mjs +12 -380
  29. package/dist/es/scope.mjs.map +1 -1
  30. package/dist/es/store.mjs +7 -7
  31. package/dist/es/store.mjs.map +1 -1
  32. package/dist/es/{scope2.mjs → useCache.mjs} +73 -78
  33. package/dist/es/useCache.mjs.map +1 -0
  34. package/dist/types/lib/castArray.d.ts +1 -0
  35. package/dist/types/lib/path.d.ts +5 -7
  36. package/dist/types/lib/propAccess.d.ts +1 -1
  37. package/dist/types/lib/typeHelpers.d.ts +2 -1
  38. package/dist/types/lib/wildcardMatch.d.ts +3 -0
  39. package/dist/types/persist/persist.d.ts +6 -4
  40. package/dist/types/react/form/form.d.ts +50 -0
  41. package/dist/types/react/form/formError.d.ts +6 -0
  42. package/dist/types/react/form/formInput.d.ts +48 -0
  43. package/dist/types/react/form/index.d.ts +3 -0
  44. package/dist/types/react/index.d.ts +1 -0
  45. package/dist/types/react/register.d.ts +1 -1
  46. package/dist/types/react/scope.d.ts +1 -1
  47. package/dist/types/react/useProp.d.ts +5 -1
  48. package/dist/types/react/useStore.d.ts +5 -2
  49. package/package.json +34 -19
  50. package/dist/cjs/hash.cjs +0 -18
  51. package/dist/cjs/hash.cjs.map +0 -1
  52. package/dist/cjs/immerMethods.cjs +0 -23
  53. package/dist/cjs/immerMethods.cjs.map +0 -1
  54. package/dist/cjs/scope2.cjs.map +0 -1
  55. package/dist/es/hash.mjs +0 -19
  56. package/dist/es/hash.mjs.map +0 -1
  57. package/dist/es/immerMethods.mjs +0 -24
  58. package/dist/es/immerMethods.mjs.map +0 -1
  59. package/dist/es/scope2.mjs.map +0 -1
@@ -0,0 +1,386 @@
1
+ "use strict";
2
+ const store = require("./store.cjs");
3
+ const scope = require("./scope.cjs");
4
+ class ResourceGroup {
5
+ constructor(name) {
6
+ this.name = name;
7
+ this.refMap = /* @__PURE__ */ new WeakMap();
8
+ this.refSet = /* @__PURE__ */ new Set();
9
+ this.add = this.add.bind(this);
10
+ this.delete = this.delete.bind(this);
11
+ this.invalidateAll = this.invalidateAll.bind(this);
12
+ this.clearAll = this.clearAll.bind(this);
13
+ }
14
+ add(resource) {
15
+ const ref = new WeakRef(resource);
16
+ this.refMap.set(resource, ref);
17
+ this.refSet.add(ref);
18
+ }
19
+ delete(resource) {
20
+ const ref = this.refMap.get(resource);
21
+ if (ref) {
22
+ this.refMap.delete(resource);
23
+ this.refSet.delete(ref);
24
+ }
25
+ }
26
+ invalidateAll() {
27
+ for (const ref of this.refSet) {
28
+ const resource = ref.deref();
29
+ if (resource) {
30
+ resource.invalidateAll();
31
+ } else {
32
+ this.refSet.delete(ref);
33
+ }
34
+ }
35
+ }
36
+ clearAll() {
37
+ for (const ref of this.refSet) {
38
+ const resource = ref.deref();
39
+ if (resource) {
40
+ resource.clearAll();
41
+ } else {
42
+ this.refSet.delete(ref);
43
+ }
44
+ }
45
+ }
46
+ }
47
+ const allResources = /* @__PURE__ */ new ResourceGroup();
48
+ function createResourceGroup(name) {
49
+ return new ResourceGroup(name);
50
+ }
51
+ class InstanceCache {
52
+ constructor(factory, cacheTime) {
53
+ this.factory = factory;
54
+ this.cacheTime = cacheTime;
55
+ this.cache = /* @__PURE__ */ new Map();
56
+ this.interval = this.cacheTime ? setInterval(() => this.cleanup(), Math.max(this.cacheTime / 10, 1)) : void 0;
57
+ }
58
+ cleanup() {
59
+ var _a;
60
+ const cutoff = this.now() - (this.cacheTime ?? 0);
61
+ for (const [key, entry] of this.cache.entries()) {
62
+ if (entry.ref && entry.t <= cutoff) {
63
+ delete entry.ref;
64
+ }
65
+ if (!entry.ref && !((_a = entry.weakRef) == null ? void 0 : _a.deref())) {
66
+ this.cache.delete(key);
67
+ }
68
+ }
69
+ }
70
+ get(...args) {
71
+ var _a;
72
+ const key = scope.hash(args);
73
+ let entry = this.cache.get(key);
74
+ let value = (entry == null ? void 0 : entry.ref) ?? ((_a = entry == null ? void 0 : entry.weakRef) == null ? void 0 : _a.deref());
75
+ if (!entry || !value) {
76
+ value = this.factory(...args);
77
+ entry = {
78
+ t: this.now(),
79
+ ref: value,
80
+ weakRef: new WeakRef(value)
81
+ };
82
+ this.cache.set(key, entry);
83
+ } else {
84
+ entry.t = this.now();
85
+ entry.ref ?? (entry.ref = value);
86
+ }
87
+ return value;
88
+ }
89
+ values() {
90
+ return [...this.cache.values()].map((entry) => {
91
+ var _a;
92
+ return entry.ref ?? ((_a = entry.weakRef) == null ? void 0 : _a.deref());
93
+ }).filter((value) => !!value);
94
+ }
95
+ stop() {
96
+ if (this.interval) {
97
+ clearInterval(this.interval);
98
+ }
99
+ }
100
+ stats() {
101
+ return {
102
+ count: this.cache.size,
103
+ withRef: [...this.cache.values()].filter((x) => !!x.ref).length,
104
+ withWeakRef: [...this.cache.values()].filter((x) => {
105
+ var _a;
106
+ return !!((_a = x.weakRef) == null ? void 0 : _a.deref());
107
+ }).length
108
+ };
109
+ }
110
+ now() {
111
+ return performance.now();
112
+ }
113
+ }
114
+ class PromiseWithState extends Promise {
115
+ constructor(value, state = { status: "pending" }) {
116
+ super((resolve) => resolve(value));
117
+ this.state = state;
118
+ value.then((value2) => {
119
+ this.state = { status: "value", value: value2 };
120
+ }).catch((error) => {
121
+ this.state = { status: "error", error };
122
+ });
123
+ }
124
+ static resolve(value) {
125
+ return new PromiseWithState(Promise.resolve(value), {
126
+ status: "value",
127
+ value
128
+ });
129
+ }
130
+ static reject(error) {
131
+ return new PromiseWithState(Promise.reject(error), { status: "error", error });
132
+ }
133
+ }
134
+ class Cache extends store.Store {
135
+ constructor(getter, options = {}, derivedFromCache, _call) {
136
+ super(
137
+ function() {
138
+ let result = getter.apply(this);
139
+ if (result instanceof Function) {
140
+ result = result(this);
141
+ }
142
+ return result;
143
+ },
144
+ options,
145
+ void 0,
146
+ _call
147
+ );
148
+ this.options = options;
149
+ this.derivedFromCache = derivedFromCache;
150
+ this.state = store.createStore({
151
+ status: "pending",
152
+ isStale: true,
153
+ isUpdating: false
154
+ });
155
+ this.invalidate = this.invalidate.bind(this);
156
+ this.clear = this.clear.bind(this);
157
+ this.mapValue = this.mapValue.bind(this);
158
+ this.calculationHelper.options.onInvalidate = () => this.invalidate({ invalidateDependencies: false });
159
+ this.watchPromise();
160
+ this.watchFocus();
161
+ }
162
+ get({ update = "whenStale", backgroundUpdate = false } = {}) {
163
+ var _a;
164
+ const promise = (_a = this._value) == null ? void 0 : _a.v;
165
+ const stalePromise = this.stalePromise;
166
+ if (update === "whenMissing" && !promise && !stalePromise || update === "whenStale" && !promise || update === "force") {
167
+ this.calculationHelper.execute();
168
+ if (!promise && !stalePromise || !backgroundUpdate) {
169
+ return super.get();
170
+ }
171
+ }
172
+ if (!promise || stalePromise && backgroundUpdate) {
173
+ return stalePromise;
174
+ }
175
+ return promise;
176
+ }
177
+ updateValue(value) {
178
+ this.set(PromiseWithState.resolve(value));
179
+ }
180
+ updateError(error) {
181
+ this.set(PromiseWithState.reject(error));
182
+ }
183
+ invalidate({ invalidateDependencies = true } = {}) {
184
+ var _a;
185
+ const { clearOnInvalidate = createCache.defaultOptions.clearOnInvalidate } = this.options;
186
+ if (clearOnInvalidate) {
187
+ return this.clear({ invalidateDependencies });
188
+ }
189
+ if (invalidateDependencies) {
190
+ this.calculationHelper.invalidateDependencies();
191
+ }
192
+ const { status, isStale, isUpdating } = this.state.get();
193
+ if (status !== "pending" && !isStale && !isUpdating) {
194
+ this.stalePromise = (_a = this._value) == null ? void 0 : _a.v;
195
+ }
196
+ this.state.set((state) => ({
197
+ ...state,
198
+ isStale: true,
199
+ isUpdating: false
200
+ }));
201
+ this.calculationHelper.stop();
202
+ super.reset();
203
+ }
204
+ clear({ invalidateDependencies = true } = {}) {
205
+ if (invalidateDependencies) {
206
+ this.calculationHelper.invalidateDependencies();
207
+ }
208
+ this.state.set({
209
+ status: "pending",
210
+ isStale: true,
211
+ isUpdating: false
212
+ });
213
+ delete this.stalePromise;
214
+ this.calculationHelper.stop();
215
+ super.reset();
216
+ }
217
+ mapValue(_selector) {
218
+ const selector = store.makeSelector(_selector);
219
+ const derivedFromCache = {
220
+ cache: this.derivedFromCache ? this.derivedFromCache.cache : this,
221
+ selectors: this.derivedFromCache ? [...this.derivedFromCache.selectors, _selector] : [_selector]
222
+ };
223
+ const that = this;
224
+ return new Cache(
225
+ async function() {
226
+ const value = await this.use(that);
227
+ return selector(value);
228
+ },
229
+ {},
230
+ derivedFromCache
231
+ );
232
+ }
233
+ watchPromise() {
234
+ this.subscribe(
235
+ async (promise) => {
236
+ var _a, _b;
237
+ if (promise instanceof PromiseWithState) {
238
+ this.state.set({
239
+ ...promise.state,
240
+ isStale: false,
241
+ isUpdating: false
242
+ });
243
+ delete this.stalePromise;
244
+ this.setTimers();
245
+ return;
246
+ }
247
+ this.state.set((state) => ({
248
+ ...state,
249
+ isUpdating: true
250
+ }));
251
+ this.setTimers();
252
+ try {
253
+ const value = await promise;
254
+ if (promise !== ((_a = this._value) == null ? void 0 : _a.v)) {
255
+ return;
256
+ }
257
+ this.state.set({
258
+ status: "value",
259
+ value,
260
+ isStale: false,
261
+ isUpdating: false
262
+ });
263
+ delete this.stalePromise;
264
+ this.setTimers();
265
+ } catch (error) {
266
+ if (promise !== ((_b = this._value) == null ? void 0 : _b.v)) {
267
+ return;
268
+ }
269
+ this.state.set({
270
+ status: "error",
271
+ error,
272
+ isStale: false,
273
+ isUpdating: false
274
+ });
275
+ delete this.stalePromise;
276
+ this.setTimers();
277
+ }
278
+ },
279
+ { passive: true }
280
+ );
281
+ }
282
+ setTimers() {
283
+ if (this.invalidationTimer) {
284
+ clearTimeout(this.invalidationTimer);
285
+ }
286
+ this.invalidationTimer = void 0;
287
+ const state = this.state.get();
288
+ let { invalidateAfter = createCache.defaultOptions.invalidateAfter } = this.options;
289
+ const ref = new WeakRef(this);
290
+ if (state.status === "pending") {
291
+ return;
292
+ }
293
+ if (invalidateAfter instanceof Function) {
294
+ invalidateAfter = invalidateAfter(state);
295
+ }
296
+ if (invalidateAfter !== null && invalidateAfter !== void 0) {
297
+ this.invalidationTimer = setTimeout(
298
+ () => {
299
+ var _a;
300
+ return (_a = ref == null ? void 0 : ref.deref()) == null ? void 0 : _a.invalidate();
301
+ },
302
+ store.calcDuration(invalidateAfter)
303
+ );
304
+ }
305
+ }
306
+ watchFocus() {
307
+ const { invalidateOnWindowFocus = createCache.defaultOptions.invalidateOnWindowFocus } = this.options;
308
+ if (!invalidateOnWindowFocus || typeof document === "undefined" || typeof document.addEventListener === "undefined") {
309
+ return;
310
+ }
311
+ const ref = new WeakRef(this);
312
+ const onFocus = () => {
313
+ const that = ref == null ? void 0 : ref.deref();
314
+ if (!that) {
315
+ document.removeEventListener("visibilitychange", onFocus);
316
+ return;
317
+ }
318
+ if (!document.hidden) {
319
+ that.invalidate();
320
+ }
321
+ };
322
+ document.addEventListener("visibilitychange", onFocus);
323
+ }
324
+ }
325
+ function create(cacheFunction, options) {
326
+ const { clearUnusedAfter = createCache.defaultOptions.clearUnusedAfter, resourceGroup } = options ?? {};
327
+ let baseInstance;
328
+ const instanceCache = new InstanceCache(
329
+ (...args) => {
330
+ if (args.length === 0 && baseInstance) {
331
+ return baseInstance;
332
+ }
333
+ return new Cache(function() {
334
+ return cacheFunction.apply(this, args);
335
+ }, options);
336
+ },
337
+ clearUnusedAfter ? store.calcDuration(clearUnusedAfter) : void 0
338
+ );
339
+ const get = (...args) => {
340
+ return instanceCache.get(...args);
341
+ };
342
+ const invalidateAll = () => {
343
+ for (const instance of instanceCache.values()) {
344
+ instance.invalidate();
345
+ }
346
+ };
347
+ const clearAll = () => {
348
+ for (const instance of instanceCache.values()) {
349
+ instance.clear();
350
+ }
351
+ };
352
+ baseInstance = Object.assign(
353
+ new Cache(
354
+ function() {
355
+ return cacheFunction.apply(this);
356
+ },
357
+ options,
358
+ void 0,
359
+ get
360
+ ),
361
+ {
362
+ invalidateAll,
363
+ clearAll
364
+ }
365
+ );
366
+ const groups = Array.isArray(resourceGroup) ? resourceGroup : resourceGroup ? [resourceGroup] : [];
367
+ for (const group of groups.concat(allResources)) {
368
+ group.add(baseInstance);
369
+ }
370
+ get(...[]);
371
+ return baseInstance;
372
+ }
373
+ const createCache = /* @__PURE__ */ Object.assign(create, {
374
+ defaultOptions: {
375
+ invalidateOnWindowFocus: true,
376
+ invalidateOnActivation: true,
377
+ clearUnusedAfter: { days: 1 }
378
+ }
379
+ });
380
+ exports.Cache = Cache;
381
+ exports.InstanceCache = InstanceCache;
382
+ exports.ResourceGroup = ResourceGroup;
383
+ exports.allResources = allResources;
384
+ exports.createCache = createCache;
385
+ exports.createResourceGroup = createResourceGroup;
386
+ //# sourceMappingURL=cache.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.cjs","sources":["../../src/core/resourceGroup.ts","../../src/lib/instanceCache.ts","../../src/lib/promiseWithState.ts","../../src/core/cache.ts"],"sourcesContent":["export 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 this.add = this.add.bind(this);\n this.delete = this.delete.bind(this);\n this.invalidateAll = this.invalidateAll.bind(this);\n this.clearAll = this.clearAll.bind(this);\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 { 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 { type ErrorState, type PendingState, type ValueState } from './cacheState';\nimport { type MaybePromise } from './maybePromise';\n\nexport class PromiseWithState<T> extends Promise<T> {\n static override resolve(): PromiseWithState<void>;\n\n static override resolve<T>(value: MaybePromise<T>): PromiseWithState<T>;\n\n static override resolve<T>(value?: MaybePromise<T>) {\n return new PromiseWithState<T>(Promise.resolve(value as MaybePromise<T>), {\n status: 'value',\n value: value as T,\n });\n }\n\n static override reject<T = never>(error: unknown) {\n // eslint-disable-next-line promise/no-promise-in-callback\n return new PromiseWithState<T>(Promise.reject(error), { status: 'error', error });\n }\n\n constructor(\n value: Promise<T>,\n public state: ValueState<T> | ErrorState | PendingState = { status: 'pending' },\n ) {\n super((resolve) => resolve(value));\n\n value\n .then((value) => {\n this.state = { status: 'value', value };\n })\n .catch((error) => {\n this.state = { status: 'error', error };\n });\n }\n}\n","import type { Duration, Selector, Use } from './commonTypes';\nimport { allResources, type ResourceGroup } from './resourceGroup';\nimport { Store, createStore } from './store';\nimport type { CacheState, ErrorState, ValueState } from '@lib/cacheState';\nimport { calcDuration } from '@lib/calcDuration';\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';\n\nexport interface CacheGetOptions {\n update?: 'whenMissing' | 'whenStale' | 'force';\n backgroundUpdate?: boolean;\n}\n\nexport interface CacheFunction<T, Args extends any[] = []> {\n (this: { use: Use }, ...args: Args): Promise<T> | ((cache: { use: Use }) => Promise<T>);\n}\n\nexport interface CacheOptions<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 retain?: number;\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 });\n\n protected stalePromise?: Promise<T>;\n\n protected invalidationTimer?: ReturnType<typeof setTimeout>;\n\n constructor(\n getter: CacheFunction<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(\n function () {\n let result = getter.apply(this);\n\n if (result instanceof Function) {\n result = result(this);\n }\n\n return result;\n },\n options,\n undefined,\n _call,\n );\n this.invalidate = this.invalidate.bind(this);\n this.clear = this.clear.bind(this);\n this.mapValue = this.mapValue.bind(this);\n\n this.calculationHelper.options.onInvalidate = () =>\n this.invalidate({ invalidateDependencies: false });\n this.watchPromise();\n this.watchFocus();\n }\n\n get({ update = 'whenStale', backgroundUpdate = false }: CacheGetOptions = {}) {\n const promise = this._value?.v;\n const stalePromise = this.stalePromise;\n\n if (\n (update === 'whenMissing' && !promise && !stalePromise) ||\n (update === 'whenStale' && !promise) ||\n update === 'force'\n ) {\n this.calculationHelper.execute();\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({ invalidateDependencies = true }: { invalidateDependencies?: boolean } = {}) {\n const { clearOnInvalidate = createCache.defaultOptions.clearOnInvalidate } = this.options;\n\n if (clearOnInvalidate) {\n return this.clear({ invalidateDependencies });\n }\n\n if (invalidateDependencies) {\n this.calculationHelper.invalidateDependencies();\n }\n\n const { status, isStale, isUpdating } = this.state.get();\n if (status !== 'pending' && !isStale && !isUpdating) {\n this.stalePromise = this._value?.v;\n }\n\n this.state.set((state) => ({\n ...state,\n isStale: true,\n isUpdating: false,\n }));\n\n this.calculationHelper.stop();\n super.reset();\n }\n\n clear({ invalidateDependencies = true }: { invalidateDependencies?: boolean } = {}): void {\n if (invalidateDependencies) {\n this.calculationHelper.invalidateDependencies();\n }\n\n this.state.set({\n status: 'pending',\n isStale: true,\n isUpdating: false,\n });\n delete this.stalePromise;\n\n this.calculationHelper.stop();\n super.reset();\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 const that = this;\n\n return new Cache(\n async function () {\n const value = await this.use(that);\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({\n ...promise.state,\n isStale: false,\n isUpdating: false,\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._value?.v) {\n return;\n }\n\n this.state.set({\n status: 'value',\n value,\n isStale: false,\n isUpdating: false,\n });\n delete this.stalePromise;\n this.setTimers();\n } catch (error) {\n if (promise !== this._value?.v) {\n return;\n }\n\n this.state.set({\n status: 'error',\n error,\n isStale: false,\n isUpdating: false,\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 = createCache.defaultOptions.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 = createCache.defaultOptions.invalidateOnWindowFocus } =\n 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) {\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 const { clearUnusedAfter = createCache.defaultOptions.clearUnusedAfter, resourceGroup } =\n 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(function () {\n return cacheFunction.apply(this, args);\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 function () {\n return cacheFunction.apply(this);\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 } as CacheOptions<unknown>,\n});\n"],"names":["hash","value","Store","createStore","makeSelector","calcDuration"],"mappings":"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"}
@@ -1,6 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const immerMethods = require("../immerMethods.cjs");
4
- require("immer");
5
- exports.immerMethods = immerMethods.immerMethods;
3
+ const immer = require("immer");
4
+ function update(...args) {
5
+ if (args.length === 1) {
6
+ this.set(
7
+ (value) => immer.produce(value, (draft) => {
8
+ args[0](draft);
9
+ })
10
+ );
11
+ } else {
12
+ this.set(
13
+ args[0],
14
+ (value) => immer.produce(value, (draft) => {
15
+ args[1](draft);
16
+ })
17
+ );
18
+ }
19
+ }
20
+ const immerMethods = {
21
+ update
22
+ };
23
+ exports.immerMethods = immerMethods;
6
24
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/immer/immerMethods.ts"],"sourcesContent":["import type { Draft } from 'immer';\nimport { produce } from 'immer';\nimport type { Store } from '@core/store';\nimport { type Path, type Value } from '@lib/path';\n\ntype Recipe<T> = (draft: Draft<T>) => void;\n\nfunction update<T>(this: Store<T>, recipe: Recipe<T>): void;\n\nfunction update<T, P extends Path<T>>(this: Store<T>, path: P, recipe: Recipe<Value<T, P>>): void;\n\nfunction update<T, P extends Path<T>>(\n this: Store<T>,\n ...args: [recipe: Recipe<T>] | [P: P, recipe: Recipe<Value<T, P>>]\n) {\n if (args.length === 1) {\n this.set((value) =>\n produce(value, (draft) => {\n args[0](draft);\n }),\n );\n } else {\n this.set(args[0], (value) =>\n produce(value, (draft) => {\n args[1](draft);\n }),\n );\n }\n}\n\nexport const immerMethods = {\n update,\n};\n"],"names":["produce"],"mappings":";;;AAWA,SAAS,UAEJ,MACH;AACI,MAAA,KAAK,WAAW,GAAG;AAChB,SAAA;AAAA,MAAI,CAAC,UACRA,MAAAA,QAAQ,OAAO,CAAC,UAAU;AACnB,aAAA,CAAC,EAAE,KAAK;AAAA,MAAA,CACd;AAAA,IAAA;AAAA,EACH,OACK;AACA,SAAA;AAAA,MAAI,KAAK,CAAC;AAAA,MAAG,CAAC,UACjBA,MAAAA,QAAQ,OAAO,CAAC,UAAU;AACnB,aAAA,CAAC,EAAE,KAAK;AAAA,MAAA,CACd;AAAA,IAAA;AAAA,EAEL;AACF;AAEO,MAAM,eAAe;AAAA,EAC1B;AACF;;"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
- const immerMethods = require("../immerMethods.cjs");
2
+ const immer_index = require("./index.cjs");
3
3
  const store = require("../store.cjs");
4
4
  require("immer");
5
- Object.assign(store.Store.prototype, immerMethods.immerMethods);
5
+ Object.assign(store.Store.prototype, immer_index.immerMethods);
6
6
  //# sourceMappingURL=register.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"register.cjs","sources":["../../../src/immer/register.ts"],"sourcesContent":["import { immerMethods } from './immerMethods';\nimport { Store } from '@core';\n\ntype ImmerMethods = typeof immerMethods;\n\ndeclare module '@core' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface Store<T> extends ImmerMethods {}\n}\n\nObject.assign(Store.prototype, immerMethods);\n"],"names":["Store","immerMethods"],"mappings":";;;;AAUA,OAAO,OAAOA,MAAAA,MAAM,WAAWC,yBAAY;"}
1
+ {"version":3,"file":"register.cjs","sources":["../../../src/immer/register.ts"],"sourcesContent":["import { immerMethods } from './immerMethods';\nimport { Store } from '@core';\n\ntype ImmerMethods = typeof immerMethods;\n\ndeclare module '@core' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface Store<T> extends ImmerMethods {}\n}\n\nObject.assign(Store.prototype, immerMethods);\n"],"names":["Store","immerMethods"],"mappings":";;;;AAUA,OAAO,OAAOA,MAAAA,MAAM,WAAWC,wBAAY;"}
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const store = require("./store.cjs");
4
+ const cache = require("./cache.cjs");
4
5
  const scope = require("./scope.cjs");
5
- require("./hash.cjs");
6
6
  class SubstriptionCache extends store.Store {
7
7
  constructor(connectFunction, options = {}, derivedFromSubscriptionCache, _call) {
8
8
  super(void 0, options, void 0, _call);
@@ -66,7 +66,7 @@ const defaultOptions = {
66
66
  function create(cacheFunction, options) {
67
67
  const { clearUnusedAfter = defaultOptions.clearUnusedAfter, resourceGroup } = options ?? {};
68
68
  let baseInstance;
69
- const instanceCache = new scope.InstanceCache(
69
+ const instanceCache = new cache.InstanceCache(
70
70
  (...args) => {
71
71
  if (args.length === 0 && baseInstance) {
72
72
  return baseInstance;
@@ -105,7 +105,7 @@ function create(cacheFunction, options) {
105
105
  }
106
106
  );
107
107
  const groups = Array.isArray(resourceGroup) ? resourceGroup : resourceGroup ? [resourceGroup] : [];
108
- for (const group of groups.concat(scope.allResources)) {
108
+ for (const group of groups.concat(cache.allResources)) {
109
109
  group.add(baseInstance);
110
110
  }
111
111
  get(...[]);
@@ -329,14 +329,16 @@ class Persist {
329
329
  this.stopped = false;
330
330
  this.storage = normalizeStorage(options.storage);
331
331
  this.channel = new BroadcastChannel(`cross-state-persist_${options.id}`);
332
- this.paths = (options.paths ?? []).map(
333
- (p) => typeof p === "string" || Array.isArray(p) ? {
334
- path: store.castArrayPath(p)
335
- } : {
336
- path: store.castArrayPath(p.path),
337
- throttleMs: p.throttleMs
332
+ this.paths = (options.paths ?? []).map((p) => {
333
+ if (isPlainPath(p)) {
334
+ return { path: store.castArrayPath(p) };
338
335
  }
339
- ).sort((a, b) => b.path.length - a.path.length);
336
+ const _p = p;
337
+ return {
338
+ path: store.castArrayPath(_p.path),
339
+ throttleMs: _p.throttleMs
340
+ };
341
+ }).sort((a, b) => b.path.length - a.path.length);
340
342
  if (this.paths.length === 0) {
341
343
  this.paths.push({ path: ["*"] });
342
344
  }
@@ -432,6 +434,9 @@ class Persist {
432
434
  function persist(store2, options) {
433
435
  return new Persist(store2, options);
434
436
  }
437
+ function isPlainPath(p) {
438
+ return typeof p === "string" || Array.isArray(p);
439
+ }
435
440
  exports.Store = store.Store;
436
441
  exports.arrayMethods = store.arrayMethods;
437
442
  exports.calcDuration = store.calcDuration;
@@ -441,13 +446,13 @@ exports.mapMethods = store.mapMethods;
441
446
  exports.recordMethods = store.recordMethods;
442
447
  exports.set = store.set;
443
448
  exports.setMethods = store.setMethods;
444
- exports.Cache = scope.Cache;
445
- exports.InstanceCache = scope.InstanceCache;
446
- exports.ResourceGroup = scope.ResourceGroup;
449
+ exports.Cache = cache.Cache;
450
+ exports.InstanceCache = cache.InstanceCache;
451
+ exports.ResourceGroup = cache.ResourceGroup;
452
+ exports.allResources = cache.allResources;
453
+ exports.createCache = cache.createCache;
454
+ exports.createResourceGroup = cache.createResourceGroup;
447
455
  exports.Scope = scope.Scope;
448
- exports.allResources = scope.allResources;
449
- exports.createCache = scope.createCache;
450
- exports.createResourceGroup = scope.createResourceGroup;
451
456
  exports.createScope = scope.createScope;
452
457
  exports.SubstriptionCache = SubstriptionCache;
453
458
  exports.createSubscriptionCache = createSubscriptionCache;