@signalium/query 0.0.1 → 0.1.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.
Files changed (44) hide show
  1. package/.turbo/turbo-build.log +3 -3
  2. package/CHANGELOG.md +14 -0
  3. package/dist/cjs/QueryClient.js +254 -66
  4. package/dist/cjs/QueryClient.js.map +1 -1
  5. package/dist/cjs/QueryStore.js +8 -5
  6. package/dist/cjs/QueryStore.js.map +1 -1
  7. package/dist/cjs/query.js +1 -1
  8. package/dist/cjs/query.js.map +1 -1
  9. package/dist/cjs/types.js +10 -1
  10. package/dist/cjs/types.js.map +1 -1
  11. package/dist/esm/QueryClient.d.ts +58 -17
  12. package/dist/esm/QueryClient.d.ts.map +1 -1
  13. package/dist/esm/QueryClient.js +255 -67
  14. package/dist/esm/QueryClient.js.map +1 -1
  15. package/dist/esm/QueryStore.d.ts +6 -2
  16. package/dist/esm/QueryStore.d.ts.map +1 -1
  17. package/dist/esm/QueryStore.js +8 -5
  18. package/dist/esm/QueryStore.js.map +1 -1
  19. package/dist/esm/query.d.ts +1 -0
  20. package/dist/esm/query.d.ts.map +1 -1
  21. package/dist/esm/query.js +1 -1
  22. package/dist/esm/query.js.map +1 -1
  23. package/dist/esm/types.d.ts +10 -0
  24. package/dist/esm/types.d.ts.map +1 -1
  25. package/dist/esm/types.js +9 -0
  26. package/dist/esm/types.js.map +1 -1
  27. package/package.json +3 -6
  28. package/src/QueryClient.ts +321 -105
  29. package/src/QueryStore.ts +15 -7
  30. package/src/__tests__/caching-persistence.test.ts +31 -2
  31. package/src/__tests__/entity-system.test.ts +5 -1
  32. package/src/__tests__/gc-time.test.ts +327 -0
  33. package/src/__tests__/mock-fetch.test.ts +8 -4
  34. package/src/__tests__/parse-entities.test.ts +5 -1
  35. package/src/__tests__/reactivity.test.ts +5 -1
  36. package/src/__tests__/refetch-interval.test.ts +262 -0
  37. package/src/__tests__/rest-query-api.test.ts +5 -1
  38. package/src/__tests__/stale-time.test.ts +357 -0
  39. package/src/__tests__/utils.ts +28 -12
  40. package/src/__tests__/validation-edge-cases.test.ts +1 -0
  41. package/src/query.ts +2 -1
  42. package/src/react/__tests__/basic.test.tsx +9 -4
  43. package/src/react/__tests__/component.test.tsx +10 -3
  44. package/src/types.ts +11 -0
@@ -10,38 +10,66 @@
10
10
  * - Signalium-based reactivity for entity updates
11
11
  * - Self-contained validator (no external dependencies except Signalium)
12
12
  */
13
- import { DiscriminatedReactivePromise, type Context, Notifier } from 'signalium';
14
- import { DiscriminatedQueryResult, EntityDef, QueryResult, ObjectFieldTypeDef } from './types.js';
13
+ import { type Context, Signal } from 'signalium';
14
+ import { DiscriminatedQueryResult, EntityDef, QueryResult, ObjectFieldTypeDef, RefetchInterval } from './types.js';
15
15
  import { EntityRecord } from './EntityMap.js';
16
16
  import { QueryStore } from './QueryStore.js';
17
17
  export interface QueryContext {
18
18
  fetch: typeof fetch;
19
+ evictionMultiplier?: number;
20
+ refetchMultiplier?: number;
19
21
  }
20
22
  export interface QueryCacheOptions {
21
23
  maxCount?: number;
22
- maxAge?: number;
24
+ gcTime?: number;
25
+ staleTime?: number;
26
+ refetchInterval?: RefetchInterval;
23
27
  }
24
28
  export interface QueryDefinition<Params, Result> {
25
29
  id: string;
26
30
  shape: ObjectFieldTypeDef;
27
31
  fetchFn: (context: QueryContext, params: Params) => Promise<Result>;
28
- staleTime?: number;
29
- refetchInterval?: number;
30
32
  cache?: QueryCacheOptions;
31
33
  }
32
- interface QueryInstance<T> {
33
- relay: QueryResultImpl<T>;
34
- initialized: boolean;
35
- notifier: Notifier;
34
+ declare class RefetchManager {
35
+ private multiplier;
36
+ private intervalId;
37
+ private clock;
38
+ private buckets;
39
+ constructor(multiplier?: number);
40
+ addQuery(instance: QueryResultImpl<any>): void;
41
+ removeQuery(query: QueryResultImpl<any>): void;
42
+ private tick;
43
+ destroy(): void;
44
+ }
45
+ declare class MemoryEvictionManager {
46
+ private queryClient;
47
+ private multiplier;
48
+ private intervalId;
49
+ private currentFlush;
50
+ private nextFlush;
51
+ constructor(queryClient: QueryClient, multiplier?: number);
52
+ scheduleEviction(queryKey: number): void;
53
+ cancelEviction(queryKey: number): void;
54
+ private tick;
55
+ destroy(): void;
36
56
  }
37
57
  /**
38
58
  * QueryResult wraps a DiscriminatedReactivePromise and adds additional functionality
39
59
  * like refetch, while forwarding all the base relay properties.
60
+ * This class combines the old QueryInstance and QueryResultImpl into a single entity.
40
61
  */
41
62
  export declare class QueryResultImpl<T> implements QueryResult<T> {
63
+ def: QueryDefinition<any, any>;
64
+ initialized: boolean;
65
+ isRefetchingSignal: Signal<boolean>;
66
+ updatedAt: number | undefined;
67
+ private queryClient;
68
+ queryKey: number;
69
+ private params;
42
70
  private relay;
43
- private instance;
44
- constructor(relay: DiscriminatedReactivePromise<T>, instance: QueryInstance<T>);
71
+ private relayState;
72
+ constructor(def: QueryDefinition<any, any>, queryClient: QueryClient, queryKey: number, params: any);
45
73
  get value(): T | undefined;
46
74
  get error(): unknown;
47
75
  get isPending(): boolean;
@@ -49,6 +77,8 @@ export declare class QueryResultImpl<T> implements QueryResult<T> {
49
77
  get isResolved(): boolean;
50
78
  get isSettled(): boolean;
51
79
  get isReady(): boolean;
80
+ get isRefetching(): boolean;
81
+ get isFetching(): boolean;
52
82
  private get _version();
53
83
  private get _signal();
54
84
  private get _flags();
@@ -56,26 +86,37 @@ export declare class QueryResultImpl<T> implements QueryResult<T> {
56
86
  catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null | undefined): Promise<T | TResult>;
57
87
  finally(onfinally?: (() => void) | null | undefined): Promise<T>;
58
88
  refetch(): Promise<T>;
89
+ /**
90
+ * Fetches fresh data, updates the cache, and updates updatedAt timestamp
91
+ */
92
+ runQuery(): Promise<T>;
93
+ isStale(): boolean;
94
+ /**
95
+ * Initialize the query by loading from cache and fetching if stale
96
+ */
97
+ private initialize;
59
98
  get [Symbol.toStringTag](): string;
60
99
  }
61
100
  export declare class QueryClient {
62
101
  private store;
63
102
  private context;
64
103
  private entityMap;
65
- private queryInstances;
104
+ queryInstances: Map<number, QueryResultImpl<unknown>>;
105
+ memoryEvictionManager: MemoryEvictionManager;
106
+ refetchManager: RefetchManager;
66
107
  constructor(store: QueryStore, context?: QueryContext);
108
+ getContext(): QueryContext;
109
+ saveQueryData(queryDef: QueryDefinition<any, any>, queryKey: number, data: unknown, entityRefs: Set<number>): void;
110
+ activateQuery(queryInstance: QueryResultImpl<unknown>): void;
111
+ loadCachedQuery(queryDef: QueryDefinition<any, any>, queryKey: number): import("./QueryStore.js").MaybePromise<import("./QueryStore.js").CachedQuery | undefined>;
67
112
  /**
68
113
  * Loads a query from the document store and returns a QueryResult
69
114
  * that triggers fetches and prepopulates with cached data
70
115
  */
71
116
  getQuery<Params, Result>(queryDef: QueryDefinition<Params, Result>, params: Params): DiscriminatedQueryResult<Result>;
72
- private initializeQuery;
73
- /**
74
- * Fetches fresh data and updates the cache
75
- */
76
- private runQuery;
77
117
  hydrateEntity(key: number, shape: EntityDef): EntityRecord;
78
118
  saveEntity(key: number, obj: Record<string, unknown>, shape: EntityDef, entityRefs?: Set<number>): EntityRecord;
119
+ destroy(): void;
79
120
  }
80
121
  export declare const QueryClientContext: Context<QueryClient | undefined>;
81
122
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"QueryClient.d.ts","sourceRoot":"","sources":["../../src/QueryClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QueryClient.d.ts","sourceRoot":"","sources":["../../src/QueryClient.ts"],"names":[],"mappings":"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"}
@@ -10,28 +10,173 @@
10
10
  * - Signalium-based reactivity for entity updates
11
11
  * - Self-contained validator (no external dependencies except Signalium)
12
12
  */
13
- import { relay, context, notifier, } from 'signalium';
13
+ import { relay, context, signal } from 'signalium';
14
14
  import { hashValue, setReactivePromise } from 'signalium/utils';
15
15
  import { parseValue } from './proxy.js';
16
16
  import { parseEntities } from './parseEntities.js';
17
17
  import { EntityStore } from './EntityMap.js';
18
18
  import { ValidatorDef } from './typeDefs.js';
19
+ // QueryInstance is now merged into QueryResultImpl below
19
20
  const queryKeyFor = (queryDef, params) => {
20
21
  return hashValue([queryDef.id, params]);
21
22
  };
23
+ const BASE_TICK_INTERVAL = 1000; // 1 second
24
+ // Refetch interval manager - uses a fixed 1-second tick
25
+ class RefetchManager {
26
+ multiplier;
27
+ intervalId;
28
+ clock = 0; // Increments by 1000ms on each tick
29
+ // Buckets: Map of actual interval -> Set of query instances
30
+ buckets = new Map();
31
+ constructor(multiplier = 1) {
32
+ this.multiplier = multiplier;
33
+ // Start the timer immediately and keep it running
34
+ const tickInterval = BASE_TICK_INTERVAL * this.multiplier;
35
+ this.intervalId = setTimeout(() => this.tick(), tickInterval);
36
+ }
37
+ addQuery(instance) {
38
+ const interval = instance.def.cache?.refetchInterval;
39
+ if (!interval) {
40
+ return;
41
+ }
42
+ const actualInterval = interval * this.multiplier;
43
+ // Add to bucket by actual interval
44
+ let bucket = this.buckets.get(actualInterval);
45
+ if (!bucket) {
46
+ bucket = new Set();
47
+ this.buckets.set(actualInterval, bucket);
48
+ }
49
+ bucket.add(instance);
50
+ }
51
+ removeQuery(query) {
52
+ const interval = query.def.cache?.refetchInterval;
53
+ if (!interval) {
54
+ return;
55
+ }
56
+ const actualInterval = interval * this.multiplier;
57
+ // Remove from bucket
58
+ const bucket = this.buckets.get(actualInterval);
59
+ if (bucket) {
60
+ bucket.delete(query);
61
+ if (bucket.size === 0) {
62
+ this.buckets.delete(actualInterval);
63
+ }
64
+ }
65
+ }
66
+ tick() {
67
+ this.clock += BASE_TICK_INTERVAL * this.multiplier;
68
+ // Only process buckets where clock is aligned with the interval
69
+ for (const [interval, bucket] of this.buckets.entries()) {
70
+ if (this.clock % interval === 0) {
71
+ // Process all queries in this bucket
72
+ for (const query of bucket) {
73
+ // Skip if already fetching - let the current fetch complete
74
+ if (query && !query.isFetching) {
75
+ query.refetch();
76
+ }
77
+ }
78
+ }
79
+ }
80
+ const tickInterval = BASE_TICK_INTERVAL * this.multiplier;
81
+ this.intervalId = setTimeout(() => this.tick(), tickInterval);
82
+ }
83
+ destroy() {
84
+ clearTimeout(this.intervalId);
85
+ }
86
+ }
87
+ const EVICTION_INTERVAL = 60 * 1000; // 1 minute
88
+ // Memory eviction manager - uses a single interval with rotating sets to avoid timeout overhead
89
+ class MemoryEvictionManager {
90
+ queryClient;
91
+ multiplier;
92
+ intervalId;
93
+ currentFlush = new Set(); // Queries to evict on next tick
94
+ nextFlush = new Set(); // Queries to evict on tick after next
95
+ constructor(queryClient, multiplier = 1) {
96
+ this.queryClient = queryClient;
97
+ this.multiplier = multiplier;
98
+ this.intervalId = setInterval(this.tick, EVICTION_INTERVAL * this.multiplier);
99
+ }
100
+ scheduleEviction(queryKey) {
101
+ // Add to nextFlush so it waits at least one full interval
102
+ // This prevents immediate eviction if scheduled right before a tick
103
+ this.nextFlush.add(queryKey);
104
+ }
105
+ cancelEviction(queryKey) {
106
+ // Remove from both sets to handle reactivation
107
+ this.currentFlush.delete(queryKey);
108
+ this.nextFlush.delete(queryKey);
109
+ }
110
+ tick = () => {
111
+ if (!this.queryClient)
112
+ return;
113
+ // Evict all queries in currentFlush
114
+ for (const queryKey of this.currentFlush) {
115
+ this.queryClient.queryInstances.delete(queryKey);
116
+ }
117
+ // Rotate: currentFlush becomes nextFlush, nextFlush becomes empty
118
+ this.currentFlush = this.nextFlush;
119
+ this.nextFlush = new Set();
120
+ };
121
+ destroy() {
122
+ clearInterval(this.intervalId);
123
+ }
124
+ }
22
125
  /**
23
126
  * QueryResult wraps a DiscriminatedReactivePromise and adds additional functionality
24
127
  * like refetch, while forwarding all the base relay properties.
128
+ * This class combines the old QueryInstance and QueryResultImpl into a single entity.
25
129
  */
26
130
  export class QueryResultImpl {
131
+ // Fields from old QueryInstance
132
+ def;
133
+ initialized = false;
134
+ isRefetchingSignal;
135
+ updatedAt = undefined;
136
+ // References for refetch functionality
137
+ queryClient;
138
+ queryKey;
139
+ params;
27
140
  relay;
28
- instance;
29
- constructor(relay, instance) {
30
- this.relay = relay;
31
- this.instance = instance;
141
+ relayState = undefined;
142
+ constructor(def, queryClient, queryKey, params) {
32
143
  setReactivePromise(this);
144
+ this.def = def;
145
+ this.queryClient = queryClient;
146
+ this.queryKey = queryKey;
147
+ this.params = params;
148
+ this.isRefetchingSignal = signal(false);
149
+ // Create the relay and handle activation/deactivation
150
+ this.relay = relay(state => {
151
+ this.relayState = state;
152
+ // Load from cache first, then fetch fresh data
153
+ this.queryClient.activateQuery(this);
154
+ if (this.initialized) {
155
+ if (this.isStale()) {
156
+ this.refetch();
157
+ }
158
+ }
159
+ else {
160
+ this.initialize(state);
161
+ }
162
+ // Return deactivation callback
163
+ return {
164
+ update: () => {
165
+ state.setPromise(this.runQuery());
166
+ },
167
+ deactivate: () => {
168
+ // Last subscriber left, deactivate refetch and schedule memory eviction
169
+ if (this.def.cache?.refetchInterval) {
170
+ this.queryClient.refetchManager.removeQuery(this);
171
+ }
172
+ // Schedule removal from memory using the global eviction manager
173
+ // This allows quick reactivation from memory if needed again soon
174
+ // Disk cache (if configured) will still be available after eviction
175
+ this.queryClient.memoryEvictionManager.scheduleEviction(this.queryKey);
176
+ },
177
+ };
178
+ });
33
179
  }
34
- // Forward all ReactivePromise properties through getters
35
180
  get value() {
36
181
  return this.relay.value;
37
182
  }
@@ -53,6 +198,12 @@ export class QueryResultImpl {
53
198
  get isReady() {
54
199
  return this.relay.isReady;
55
200
  }
201
+ get isRefetching() {
202
+ return this.isRefetchingSignal.value;
203
+ }
204
+ get isFetching() {
205
+ return this.relay.isPending || this.isRefetching;
206
+ }
56
207
  // TODO: Intimate APIs needed for `useReactive`, this is a code smell and
57
208
  // we should find a better way to entangle these more generically
58
209
  get _version() {
@@ -75,12 +226,77 @@ export class QueryResultImpl {
75
226
  return this.relay.finally(onfinally);
76
227
  }
77
228
  // Additional methods
78
- refetch() {
79
- this.instance.notifier.notify();
80
- // pull the value to make sure the relay is activated
81
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions
82
- this.instance.relay.value;
83
- return this.relay;
229
+ async refetch() {
230
+ this.isRefetchingSignal.value = true;
231
+ try {
232
+ const result = await this.runQuery();
233
+ if (this.relayState) {
234
+ this.relayState.value = result;
235
+ // Update the version to trigger a re-render for direct React consumers
236
+ // e.g. `useReactive(query, params)`
237
+ this._version.update(v => v + 1);
238
+ }
239
+ return result;
240
+ }
241
+ finally {
242
+ this.isRefetchingSignal.value = false;
243
+ }
244
+ }
245
+ /**
246
+ * Fetches fresh data, updates the cache, and updates updatedAt timestamp
247
+ */
248
+ async runQuery() {
249
+ const freshData = await this.def.fetchFn(this.queryClient.getContext(), this.params);
250
+ // Parse and cache the fresh data
251
+ const entityRefs = new Set();
252
+ const shape = this.def.shape;
253
+ const parsedData = shape instanceof ValidatorDef
254
+ ? parseEntities(freshData, shape, this.queryClient, entityRefs)
255
+ : parseValue(freshData, shape, this.def.id);
256
+ // Cache the data (synchronous, fire-and-forget)
257
+ this.queryClient.saveQueryData(this.def, this.queryKey, freshData, entityRefs);
258
+ // Update the timestamp
259
+ this.updatedAt = Date.now();
260
+ return parsedData;
261
+ }
262
+ isStale() {
263
+ if (this.updatedAt === undefined) {
264
+ return true; // No data yet, needs fetch
265
+ }
266
+ const staleTime = this.def.cache?.staleTime ?? 0;
267
+ return Date.now() - this.updatedAt >= staleTime;
268
+ }
269
+ /**
270
+ * Initialize the query by loading from cache and fetching if stale
271
+ */
272
+ async initialize(state) {
273
+ try {
274
+ this.initialized = true;
275
+ // Load from cache first
276
+ const cached = await this.queryClient.loadCachedQuery(this.def, this.queryKey);
277
+ if (cached !== undefined) {
278
+ const shape = this.def.shape;
279
+ state.value =
280
+ shape instanceof ValidatorDef
281
+ ? parseEntities(cached.value, shape, this.queryClient, new Set())
282
+ : parseValue(cached.value, shape, this.def.id);
283
+ // Set the cached timestamp
284
+ this.updatedAt = cached.updatedAt;
285
+ // Check if data is stale
286
+ if (this.isStale()) {
287
+ // Data is stale, trigger background refetch
288
+ this.refetch();
289
+ }
290
+ }
291
+ else {
292
+ // No cached data, fetch fresh
293
+ state.setPromise(this.runQuery());
294
+ }
295
+ }
296
+ catch (error) {
297
+ // Relay will handle the error state automatically
298
+ state.setError(error);
299
+ }
84
300
  }
85
301
  // Make it work with Symbol.toStringTag for Promise detection
86
302
  get [Symbol.toStringTag]() {
@@ -92,9 +308,28 @@ export class QueryClient {
92
308
  context;
93
309
  entityMap = new EntityStore();
94
310
  queryInstances = new Map();
311
+ memoryEvictionManager;
312
+ refetchManager;
95
313
  constructor(store, context = { fetch }) {
96
314
  this.store = store;
97
315
  this.context = context;
316
+ this.memoryEvictionManager = new MemoryEvictionManager(this, this.context.evictionMultiplier);
317
+ this.refetchManager = new RefetchManager(this.context.refetchMultiplier);
318
+ }
319
+ getContext() {
320
+ return this.context;
321
+ }
322
+ saveQueryData(queryDef, queryKey, data, entityRefs) {
323
+ this.store.saveQuery(queryDef, queryKey, data, entityRefs);
324
+ }
325
+ activateQuery(queryInstance) {
326
+ const { def, queryKey } = queryInstance;
327
+ this.store.activateQuery(def, queryKey);
328
+ this.refetchManager.addQuery(queryInstance);
329
+ this.memoryEvictionManager.cancelEviction(queryKey);
330
+ }
331
+ loadCachedQuery(queryDef, queryKey) {
332
+ return this.store.loadQuery(queryDef, queryKey, this.entityMap);
98
333
  }
99
334
  /**
100
335
  * Loads a query from the document store and returns a QueryResult
@@ -103,64 +338,13 @@ export class QueryClient {
103
338
  getQuery(queryDef, params) {
104
339
  const queryKey = queryKeyFor(queryDef, params);
105
340
  let queryInstance = this.queryInstances.get(queryKey);
106
- // Create a new relay if it doesn't exist
341
+ // Create a new instance if it doesn't exist
107
342
  if (queryInstance === undefined) {
108
- queryInstance = {
109
- relay: undefined,
110
- initialized: false,
111
- notifier: notifier(),
112
- };
113
- const queryRelay = relay(state => {
114
- // Load from cache first, then fetch fresh data
115
- queryInstance.notifier.consume();
116
- this.store.activateQuery(queryDef, queryKey);
117
- if (queryInstance.initialized) {
118
- state.setPromise(this.runQuery(queryDef, queryKey, params));
119
- }
120
- else {
121
- this.initializeQuery(queryDef, params, state, queryInstance);
122
- }
123
- });
124
- queryInstance.relay = new QueryResultImpl(queryRelay, queryInstance);
125
- // Store the relay for future use
343
+ queryInstance = new QueryResultImpl(queryDef, this, queryKey, params);
344
+ // Store for future use
126
345
  this.queryInstances.set(queryKey, queryInstance);
127
346
  }
128
- return queryInstance.relay;
129
- }
130
- async initializeQuery(queryDef, params, state, instance) {
131
- try {
132
- instance.initialized = true;
133
- const queryKey = queryKeyFor(queryDef, params);
134
- // Load from cache first
135
- const query = this.store.loadQuery(queryDef, queryKey, this.entityMap);
136
- if (query !== undefined) {
137
- const shape = queryDef.shape;
138
- state.value =
139
- shape instanceof ValidatorDef
140
- ? parseEntities(query, shape, this, new Set())
141
- : parseValue(query, shape, queryDef.id);
142
- }
143
- state.setPromise(this.runQuery(queryDef, queryKey, params));
144
- }
145
- catch (error) {
146
- // Relay will handle the error state automatically
147
- state.setError(error);
148
- }
149
- }
150
- /**
151
- * Fetches fresh data and updates the cache
152
- */
153
- async runQuery(queryDef, queryKey, params) {
154
- const freshData = await queryDef.fetchFn(this.context, params);
155
- // Parse and cache the fresh data
156
- const entityRefs = new Set();
157
- const shape = queryDef.shape;
158
- const parsedData = shape instanceof ValidatorDef
159
- ? parseEntities(freshData, shape, this, entityRefs)
160
- : parseValue(freshData, shape, queryDef.id);
161
- // Cache the data (synchronous, fire-and-forget)
162
- this.store.saveQuery(queryDef, queryKey, freshData, entityRefs);
163
- return parsedData;
347
+ return queryInstance;
164
348
  }
165
349
  hydrateEntity(key, shape) {
166
350
  return this.entityMap.hydratePreloadedEntity(key, shape);
@@ -170,6 +354,10 @@ export class QueryClient {
170
354
  this.store.saveEntity(key, obj, entityRefs);
171
355
  return record;
172
356
  }
357
+ destroy() {
358
+ this.refetchManager.destroy();
359
+ this.memoryEvictionManager.destroy();
360
+ }
173
361
  }
174
362
  export const QueryClientContext = context(undefined);
175
363
  //# sourceMappingURL=QueryClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"QueryClient.js","sourceRoot":"","sources":["../../src/QueryClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QueryClient.js","sourceRoot":"","sources":["../../src/QueryClient.ts"],"names":[],"mappings":"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"}
@@ -7,12 +7,16 @@
7
7
  */
8
8
  import { EntityStore } from './EntityMap.js';
9
9
  import { QueryDefinition } from './QueryClient.js';
10
+ export interface CachedQuery {
11
+ value: unknown;
12
+ updatedAt: number;
13
+ }
10
14
  export interface QueryStore {
11
15
  /**
12
16
  * Asynchronously retrieves a document by key.
13
17
  * May return undefined if the document is not in the store.
14
18
  */
15
- loadQuery(queryDef: QueryDefinition<any, any>, queryKey: number, entityMap: EntityStore): MaybePromise<unknown | undefined>;
19
+ loadQuery(queryDef: QueryDefinition<any, any>, queryKey: number, entityMap: EntityStore): MaybePromise<CachedQuery | undefined>;
16
20
  /**
17
21
  * Synchronously stores a document with optional reference IDs.
18
22
  * This is fire-and-forget for async implementations.
@@ -60,7 +64,7 @@ export declare class SyncQueryStore implements QueryStore {
60
64
  private readonly kv;
61
65
  queues: Map<string, Uint32Array>;
62
66
  constructor(kv: SyncPersistentStore);
63
- loadQuery(queryDef: QueryDefinition<any, any>, queryKey: number, entityMap: EntityStore): unknown | undefined;
67
+ loadQuery(queryDef: QueryDefinition<any, any>, queryKey: number, entityMap: EntityStore): CachedQuery | undefined;
64
68
  private preloadEntities;
65
69
  saveQuery(queryDef: QueryDefinition<any, any>, queryKey: number, value: unknown, refIds?: Set<number>): void;
66
70
  saveEntity(entityKey: number, value: unknown, refIds?: Set<number>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"QueryStore.d.ts","sourceRoot":"","sources":["../../src/QueryStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QueryStore.d.ts","sourceRoot":"","sources":["../../src/QueryStore.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@
6
6
  * asynchronous (writer-backed) implementations.
7
7
  */
8
8
  const DEFAULT_MAX_COUNT = 50;
9
- const DEFAULT_MAX_AGE = 1000 * 60 * 60 * 24; // 24 hours
9
+ const DEFAULT_GC_TIME = 1000 * 60 * 60 * 24; // 24 hours
10
10
  export class MemoryPersistentStore {
11
11
  kv = Object.create(null);
12
12
  has(key) {
@@ -49,11 +49,11 @@ export class SyncQueryStore {
49
49
  }
50
50
  loadQuery(queryDef, queryKey, entityMap) {
51
51
  const updatedAt = this.kv.getNumber(updatedAtKeyFor(queryKey));
52
- if (updatedAt === undefined || updatedAt < Date.now() - (queryDef.cache?.maxAge ?? DEFAULT_MAX_AGE)) {
52
+ if (updatedAt === undefined || updatedAt < Date.now() - (queryDef.cache?.gcTime ?? DEFAULT_GC_TIME)) {
53
53
  return;
54
54
  }
55
- const value = this.kv.getString(valueKeyFor(queryKey));
56
- if (value === undefined) {
55
+ const valueStr = this.kv.getString(valueKeyFor(queryKey));
56
+ if (valueStr === undefined) {
57
57
  return;
58
58
  }
59
59
  const entityIds = this.kv.getBuffer(refIdsKeyFor(queryKey));
@@ -61,7 +61,10 @@ export class SyncQueryStore {
61
61
  this.preloadEntities(entityIds, entityMap);
62
62
  }
63
63
  this.activateQuery(queryDef, queryKey);
64
- return JSON.parse(value);
64
+ return {
65
+ value: JSON.parse(valueStr),
66
+ updatedAt,
67
+ };
65
68
  }
66
69
  preloadEntities(entityIds, entityMap) {
67
70
  for (const entityId of entityIds) {