@signalium/query 1.0.10 → 1.0.12

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 (72) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/cjs/EntityMap.js +45 -7
  3. package/dist/cjs/EntityMap.js.map +1 -1
  4. package/dist/cjs/QueryClient.js +48 -4
  5. package/dist/cjs/QueryClient.js.map +1 -1
  6. package/dist/cjs/QueryResult.js +132 -80
  7. package/dist/cjs/QueryResult.js.map +1 -1
  8. package/dist/cjs/errors.js +17 -0
  9. package/dist/cjs/errors.js.map +1 -1
  10. package/dist/cjs/proxy.js +54 -14
  11. package/dist/cjs/proxy.js.map +1 -1
  12. package/dist/cjs/query.js +2 -1
  13. package/dist/cjs/query.js.map +1 -1
  14. package/dist/cjs/stores/async.js +56 -6
  15. package/dist/cjs/stores/async.js.map +1 -1
  16. package/dist/cjs/stores/shared.js +5 -1
  17. package/dist/cjs/stores/shared.js.map +1 -1
  18. package/dist/cjs/stores/sync.js +49 -13
  19. package/dist/cjs/stores/sync.js.map +1 -1
  20. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  21. package/dist/cjs/typeDefs.js +141 -8
  22. package/dist/cjs/typeDefs.js.map +1 -1
  23. package/dist/esm/EntityMap.d.ts +9 -3
  24. package/dist/esm/EntityMap.d.ts.map +1 -1
  25. package/dist/esm/EntityMap.js +46 -8
  26. package/dist/esm/EntityMap.js.map +1 -1
  27. package/dist/esm/QueryClient.d.ts +31 -2
  28. package/dist/esm/QueryClient.d.ts.map +1 -1
  29. package/dist/esm/QueryClient.js +47 -4
  30. package/dist/esm/QueryClient.js.map +1 -1
  31. package/dist/esm/QueryResult.d.ts +9 -3
  32. package/dist/esm/QueryResult.d.ts.map +1 -1
  33. package/dist/esm/QueryResult.js +132 -80
  34. package/dist/esm/QueryResult.js.map +1 -1
  35. package/dist/esm/errors.d.ts.map +1 -1
  36. package/dist/esm/errors.js +18 -1
  37. package/dist/esm/errors.js.map +1 -1
  38. package/dist/esm/proxy.d.ts +1 -1
  39. package/dist/esm/proxy.d.ts.map +1 -1
  40. package/dist/esm/proxy.js +54 -14
  41. package/dist/esm/proxy.js.map +1 -1
  42. package/dist/esm/query.d.ts +2 -0
  43. package/dist/esm/query.d.ts.map +1 -1
  44. package/dist/esm/query.js +2 -1
  45. package/dist/esm/query.js.map +1 -1
  46. package/dist/esm/stores/async.d.ts +8 -3
  47. package/dist/esm/stores/async.d.ts.map +1 -1
  48. package/dist/esm/stores/async.js +57 -7
  49. package/dist/esm/stores/async.js.map +1 -1
  50. package/dist/esm/stores/shared.d.ts +2 -0
  51. package/dist/esm/stores/shared.d.ts.map +1 -1
  52. package/dist/esm/stores/shared.js +2 -0
  53. package/dist/esm/stores/shared.js.map +1 -1
  54. package/dist/esm/stores/sync.d.ts +4 -3
  55. package/dist/esm/stores/sync.d.ts.map +1 -1
  56. package/dist/esm/stores/sync.js +43 -8
  57. package/dist/esm/stores/sync.js.map +1 -1
  58. package/dist/esm/type-utils.d.ts +4 -0
  59. package/dist/esm/type-utils.d.ts.map +1 -1
  60. package/dist/esm/typeDefs.d.ts +53 -5
  61. package/dist/esm/typeDefs.d.ts.map +1 -1
  62. package/dist/esm/typeDefs.js +139 -8
  63. package/dist/esm/typeDefs.js.map +1 -1
  64. package/dist/esm/types.d.ts +38 -12
  65. package/dist/esm/types.d.ts.map +1 -1
  66. package/package.json +3 -3
  67. package/dist/cjs/QueryStore.js +0 -583
  68. package/dist/cjs/QueryStore.js.map +0 -1
  69. package/dist/esm/QueryStore.d.ts +0 -147
  70. package/dist/esm/QueryStore.d.ts.map +0 -1
  71. package/dist/esm/QueryStore.js +0 -570
  72. package/dist/esm/QueryStore.js.map +0 -1
@@ -1,583 +0,0 @@
1
- "use strict";
2
- /**
3
- * QueryStore - Minimal interface for query persistence
4
- *
5
- * Provides a clean abstraction over document storage, reference counting,
6
- * and LRU cache management. Supports both synchronous (in-memory) and
7
- * asynchronous (writer-backed) implementations.
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.AsyncQueryStore = exports.SyncQueryStore = exports.queueKeyFor = exports.optimisticInsertRefsKeyFor = exports.streamOrphanRefsKeyFor = exports.updatedAtKeyFor = exports.refIdsKeyFor = exports.refCountKeyFor = exports.valueKeyFor = exports.MemoryPersistentStore = void 0;
11
- const DEFAULT_MAX_COUNT = 50;
12
- const DEFAULT_GC_TIME = 1000 * 60 * 60 * 24; // 24 hours
13
- class MemoryPersistentStore {
14
- kv = Object.create(null);
15
- has(key) {
16
- return key in this.kv;
17
- }
18
- getString(key) {
19
- return this.kv[key];
20
- }
21
- setString(key, value) {
22
- this.kv[key] = value;
23
- }
24
- getNumber(key) {
25
- return this.kv[key];
26
- }
27
- setNumber(key, value) {
28
- this.kv[key] = value;
29
- }
30
- getBuffer(key) {
31
- return this.kv[key];
32
- }
33
- setBuffer(key, value) {
34
- this.kv[key] = value;
35
- }
36
- delete(key) {
37
- delete this.kv[key];
38
- }
39
- }
40
- exports.MemoryPersistentStore = MemoryPersistentStore;
41
- // Query Instance keys
42
- const valueKeyFor = (id) => `sq:doc:value:${id}`;
43
- exports.valueKeyFor = valueKeyFor;
44
- const refCountKeyFor = (id) => `sq:doc:refCount:${id}`;
45
- exports.refCountKeyFor = refCountKeyFor;
46
- const refIdsKeyFor = (id) => `sq:doc:refIds:${id}`;
47
- exports.refIdsKeyFor = refIdsKeyFor;
48
- const updatedAtKeyFor = (id) => `sq:doc:updatedAt:${id}`;
49
- exports.updatedAtKeyFor = updatedAtKeyFor;
50
- const streamOrphanRefsKeyFor = (id) => `sq:doc:streamOrphanRefs:${id}`;
51
- exports.streamOrphanRefsKeyFor = streamOrphanRefsKeyFor;
52
- const optimisticInsertRefsKeyFor = (id) => `sq:doc:optimisticInsertRefs:${id}`;
53
- exports.optimisticInsertRefsKeyFor = optimisticInsertRefsKeyFor;
54
- // Query Type keys
55
- const queueKeyFor = (queryDefId) => `sq:doc:queue:${queryDefId}`;
56
- exports.queueKeyFor = queueKeyFor;
57
- class SyncQueryStore {
58
- kv;
59
- queues = new Map();
60
- constructor(kv) {
61
- this.kv = kv;
62
- }
63
- loadQuery(queryDef, queryKey, entityMap) {
64
- const updatedAt = this.kv.getNumber((0, exports.updatedAtKeyFor)(queryKey));
65
- if (updatedAt === undefined || updatedAt < Date.now() - (queryDef.cache?.gcTime ?? DEFAULT_GC_TIME)) {
66
- return;
67
- }
68
- const valueStr = this.kv.getString((0, exports.valueKeyFor)(queryKey));
69
- if (valueStr === undefined) {
70
- return;
71
- }
72
- const entityIds = this.kv.getBuffer((0, exports.refIdsKeyFor)(queryKey));
73
- if (entityIds !== undefined) {
74
- this.preloadEntities(entityIds, entityMap);
75
- }
76
- // Load extra data (stream orphans and optimistic inserts)
77
- const streamOrphanRefs = this.kv.getBuffer((0, exports.streamOrphanRefsKeyFor)(queryKey));
78
- const optimisticInsertRefs = this.kv.getBuffer((0, exports.optimisticInsertRefsKeyFor)(queryKey));
79
- // Preload entities for extra data
80
- if (streamOrphanRefs !== undefined) {
81
- this.preloadEntities(streamOrphanRefs, entityMap);
82
- }
83
- if (optimisticInsertRefs !== undefined) {
84
- this.preloadEntities(optimisticInsertRefs, entityMap);
85
- }
86
- let extra;
87
- if (streamOrphanRefs !== undefined || optimisticInsertRefs !== undefined) {
88
- extra = {};
89
- if (streamOrphanRefs !== undefined) {
90
- extra.streamOrphanRefs = Array.from(streamOrphanRefs);
91
- }
92
- if (optimisticInsertRefs !== undefined) {
93
- extra.optimisticInsertRefs = Array.from(optimisticInsertRefs);
94
- }
95
- }
96
- this.activateQuery(queryDef, queryKey);
97
- return {
98
- value: JSON.parse(valueStr),
99
- refIds: entityIds === undefined ? undefined : new Set(entityIds ?? []),
100
- updatedAt,
101
- extra,
102
- };
103
- }
104
- preloadEntities(entityIds, entityMap) {
105
- for (const entityId of entityIds) {
106
- const entityValue = this.kv.getString((0, exports.valueKeyFor)(entityId));
107
- if (entityValue === undefined) {
108
- continue;
109
- }
110
- const entity = JSON.parse(entityValue);
111
- entityMap.setPreloadedEntity(entityId, entity);
112
- const childIds = this.kv.getBuffer((0, exports.refIdsKeyFor)(entityId));
113
- if (childIds === undefined) {
114
- continue;
115
- }
116
- this.preloadEntities(childIds, entityMap);
117
- }
118
- }
119
- saveQuery(queryDef, queryKey, value, updatedAt, refIds, extra) {
120
- this.setValue(queryKey, value, refIds);
121
- this.kv.setNumber((0, exports.updatedAtKeyFor)(queryKey), updatedAt);
122
- // Save extra data
123
- if (extra?.streamOrphanRefs !== undefined && extra.streamOrphanRefs.length > 0) {
124
- this.kv.setBuffer((0, exports.streamOrphanRefsKeyFor)(queryKey), new Uint32Array(extra.streamOrphanRefs));
125
- }
126
- else {
127
- this.kv.delete((0, exports.streamOrphanRefsKeyFor)(queryKey));
128
- }
129
- if (extra?.optimisticInsertRefs !== undefined && extra.optimisticInsertRefs.length > 0) {
130
- this.kv.setBuffer((0, exports.optimisticInsertRefsKeyFor)(queryKey), new Uint32Array(extra.optimisticInsertRefs));
131
- }
132
- else {
133
- this.kv.delete((0, exports.optimisticInsertRefsKeyFor)(queryKey));
134
- }
135
- this.activateQuery(queryDef, queryKey);
136
- }
137
- saveEntity(entityKey, value, refIds) {
138
- this.setValue(entityKey, value, refIds);
139
- }
140
- activateQuery(queryDef, queryKey) {
141
- if (!this.kv.has((0, exports.valueKeyFor)(queryKey))) {
142
- // Query not in store, nothing to do. This can happen if the query has
143
- // been evicted from the cache, but is still active in memory.
144
- return;
145
- }
146
- let queue = this.queues.get(queryDef.id);
147
- if (queue === undefined) {
148
- const maxCount = queryDef.cache?.maxCount ?? DEFAULT_MAX_COUNT;
149
- queue = this.kv.getBuffer((0, exports.queueKeyFor)(queryDef.id));
150
- if (queue === undefined) {
151
- queue = new Uint32Array(maxCount);
152
- this.kv.setBuffer((0, exports.queueKeyFor)(queryDef.id), queue);
153
- }
154
- else if (queue.length !== maxCount) {
155
- queue = new Uint32Array(queue.buffer, 0, maxCount);
156
- this.kv.setBuffer((0, exports.queueKeyFor)(queryDef.id), queue);
157
- }
158
- this.queues.set(queryDef.id, queue);
159
- }
160
- const indexOfKey = queue.indexOf(queryKey);
161
- // Item already in queue, move to front
162
- if (indexOfKey >= 0) {
163
- if (indexOfKey === 0) {
164
- // Already at front, nothing to do
165
- return;
166
- }
167
- // Shift items right to make space at front
168
- queue.copyWithin(1, 0, indexOfKey);
169
- queue[0] = queryKey;
170
- return;
171
- }
172
- // Item not in queue, add to front and evict tail
173
- const evicted = queue[queue.length - 1];
174
- queue.copyWithin(1, 0, queue.length - 1);
175
- queue[0] = queryKey;
176
- if (evicted !== 0) {
177
- this.deleteValue(evicted);
178
- this.kv.delete((0, exports.updatedAtKeyFor)(evicted));
179
- }
180
- }
181
- setValue(id, value, refIds) {
182
- const kv = this.kv;
183
- kv.setString((0, exports.valueKeyFor)(id), JSON.stringify(value));
184
- const refIdsKey = (0, exports.refIdsKeyFor)(id);
185
- const prevRefIds = kv.getBuffer(refIdsKey);
186
- if (refIds === undefined || refIds.size === 0) {
187
- kv.delete(refIdsKey);
188
- // Decrement all previous refs
189
- if (prevRefIds !== undefined) {
190
- for (let i = 0; i < prevRefIds.length; i++) {
191
- const refId = prevRefIds[i];
192
- this.decrementRefCount(refId);
193
- }
194
- }
195
- }
196
- else {
197
- // Convert the set to a Uint32Array and capture all the refIds before we
198
- // delete previous ones from the set
199
- const newRefIds = new Uint32Array(refIds);
200
- if (prevRefIds !== undefined) {
201
- // Process new refs: increment if not in old
202
- for (let i = 0; i < prevRefIds.length; i++) {
203
- const refId = prevRefIds[i];
204
- if (refIds.has(refId)) {
205
- refIds.delete(refId);
206
- }
207
- else {
208
- this.decrementRefCount(refId);
209
- }
210
- }
211
- }
212
- // No previous refs, increment all unique new refs
213
- for (const refId of refIds) {
214
- this.incrementRefCount(refId);
215
- }
216
- kv.setBuffer(refIdsKey, newRefIds);
217
- }
218
- }
219
- deleteValue(id) {
220
- const kv = this.kv;
221
- kv.delete((0, exports.valueKeyFor)(id));
222
- kv.delete((0, exports.refCountKeyFor)(id));
223
- const refIds = kv.getBuffer((0, exports.refIdsKeyFor)(id));
224
- kv.delete((0, exports.refIdsKeyFor)(id)); // Clean up the refIds key
225
- if (refIds === undefined) {
226
- return;
227
- }
228
- // Decrement ref counts for all referenced entities
229
- for (const refId of refIds) {
230
- if (refId !== 0) {
231
- this.decrementRefCount(refId);
232
- }
233
- }
234
- }
235
- incrementRefCount(refId) {
236
- const refCountKey = (0, exports.refCountKeyFor)(refId);
237
- const currentCount = this.kv.getNumber(refCountKey) ?? 0;
238
- const newCount = currentCount + 1;
239
- this.kv.setNumber(refCountKey, newCount);
240
- }
241
- decrementRefCount(refId) {
242
- const refCountKey = (0, exports.refCountKeyFor)(refId);
243
- const currentCount = this.kv.getNumber(refCountKey);
244
- if (currentCount === undefined) {
245
- // Already deleted or never existed
246
- return;
247
- }
248
- const newCount = currentCount - 1;
249
- if (newCount === 0) {
250
- // Entity exists, cascade delete it
251
- this.deleteValue(refId);
252
- }
253
- else {
254
- this.kv.setNumber(refCountKey, newCount);
255
- }
256
- }
257
- }
258
- exports.SyncQueryStore = SyncQueryStore;
259
- // -----------------------------------------------------------------------------
260
- // Async QueryStore Implementation
261
- // -----------------------------------------------------------------------------
262
- class AsyncQueryStore {
263
- isWriter;
264
- delegate;
265
- sendMessage;
266
- messageQueue = [];
267
- queues = new Map();
268
- queueProcessorPromise;
269
- resolveQueueWait;
270
- constructor(config) {
271
- this.isWriter = config.isWriter;
272
- this.delegate = config.delegate;
273
- // Connect and get sendMessage function
274
- const { sendMessage } = config.connect(this.handleMessage.bind(this));
275
- this.sendMessage = sendMessage;
276
- // Start queue processor if this is a writer
277
- if (this.isWriter) {
278
- if (!this.delegate) {
279
- throw new Error('Writer must have a delegate');
280
- }
281
- this.startQueueProcessor();
282
- }
283
- }
284
- handleMessage(msg) {
285
- if (this.isWriter) {
286
- // Enqueue the message for serial processing
287
- this.enqueueMessage(msg);
288
- }
289
- // Readers don't handle incoming messages
290
- }
291
- enqueueMessage(msg) {
292
- this.messageQueue.push(msg);
293
- // Wake up the queue processor if it's waiting
294
- if (this.resolveQueueWait) {
295
- this.resolveQueueWait();
296
- this.resolveQueueWait = undefined;
297
- }
298
- }
299
- startQueueProcessor() {
300
- this.queueProcessorPromise = this.processQueue();
301
- }
302
- async processQueue() {
303
- while (true) {
304
- // Wait for messages if queue is empty
305
- while (this.messageQueue.length === 0) {
306
- await new Promise(resolve => {
307
- this.resolveQueueWait = resolve;
308
- });
309
- }
310
- // Process one message at a time
311
- const msg = this.messageQueue.shift();
312
- try {
313
- await this.processMessage(msg);
314
- }
315
- catch (error) {
316
- console.error('Error processing message:', error);
317
- }
318
- }
319
- }
320
- async processMessage(msg) {
321
- switch (msg.type) {
322
- case 'saveQuery':
323
- await this.writerSaveQuery(msg.queryDefId, msg.queryKey, msg.value, msg.updatedAt, msg.refIds, msg.extra);
324
- break;
325
- case 'saveEntity':
326
- await this.writerSaveEntity(msg.entityKey, msg.value, msg.refIds);
327
- break;
328
- case 'activateQuery':
329
- await this.writerActivateQuery(msg.queryDefId, msg.queryKey);
330
- break;
331
- }
332
- }
333
- async loadQuery(queryDef, queryKey, entityMap) {
334
- if (!this.delegate) {
335
- return undefined;
336
- }
337
- const updatedAt = await this.delegate.getNumber((0, exports.updatedAtKeyFor)(queryKey));
338
- if (updatedAt === undefined || updatedAt < Date.now() - (queryDef.cache?.gcTime ?? DEFAULT_GC_TIME)) {
339
- return undefined;
340
- }
341
- const valueStr = await this.delegate.getString((0, exports.valueKeyFor)(queryKey));
342
- if (valueStr === undefined) {
343
- return undefined;
344
- }
345
- const entityIds = await this.delegate.getBuffer((0, exports.refIdsKeyFor)(queryKey));
346
- if (entityIds !== undefined) {
347
- await this.preloadEntities(entityIds, entityMap);
348
- }
349
- // Load extra data (stream orphans and optimistic inserts)
350
- const streamOrphanRefs = await this.delegate.getBuffer((0, exports.streamOrphanRefsKeyFor)(queryKey));
351
- const optimisticInsertRefs = await this.delegate.getBuffer((0, exports.optimisticInsertRefsKeyFor)(queryKey));
352
- // Preload entities for extra data
353
- if (streamOrphanRefs !== undefined) {
354
- await this.preloadEntities(streamOrphanRefs, entityMap);
355
- }
356
- if (optimisticInsertRefs !== undefined) {
357
- await this.preloadEntities(optimisticInsertRefs, entityMap);
358
- }
359
- let extra;
360
- if (streamOrphanRefs !== undefined || optimisticInsertRefs !== undefined) {
361
- extra = {};
362
- if (streamOrphanRefs !== undefined) {
363
- extra.streamOrphanRefs = Array.from(streamOrphanRefs);
364
- }
365
- if (optimisticInsertRefs !== undefined) {
366
- extra.optimisticInsertRefs = Array.from(optimisticInsertRefs);
367
- }
368
- }
369
- this.activateQuery(queryDef, queryKey);
370
- return {
371
- value: JSON.parse(valueStr),
372
- refIds: entityIds === undefined ? undefined : new Set(entityIds ?? []),
373
- updatedAt,
374
- extra,
375
- };
376
- }
377
- async preloadEntities(entityIds, entityMap) {
378
- if (!this.delegate) {
379
- return;
380
- }
381
- for (const entityId of entityIds) {
382
- const entityValue = await this.delegate.getString((0, exports.valueKeyFor)(entityId));
383
- if (entityValue === undefined) {
384
- continue;
385
- }
386
- const entity = JSON.parse(entityValue);
387
- entityMap.setPreloadedEntity(entityId, entity);
388
- const childIds = await this.delegate.getBuffer((0, exports.refIdsKeyFor)(entityId));
389
- if (childIds === undefined) {
390
- continue;
391
- }
392
- await this.preloadEntities(childIds, entityMap);
393
- }
394
- }
395
- saveQuery(queryDef, queryKey, value, updatedAt, refIds, extra) {
396
- const message = {
397
- type: 'saveQuery',
398
- queryDefId: queryDef.id,
399
- queryKey,
400
- value,
401
- updatedAt,
402
- refIds: refIds ? Array.from(refIds) : undefined,
403
- extra,
404
- };
405
- if (this.isWriter) {
406
- this.enqueueMessage(message);
407
- }
408
- else {
409
- this.sendMessage(message);
410
- }
411
- }
412
- saveEntity(entityKey, value, refIds) {
413
- const message = {
414
- type: 'saveEntity',
415
- entityKey,
416
- value,
417
- refIds: refIds ? Array.from(refIds) : undefined,
418
- };
419
- if (this.isWriter) {
420
- this.enqueueMessage(message);
421
- }
422
- else {
423
- this.sendMessage(message);
424
- }
425
- }
426
- activateQuery(queryDef, queryKey) {
427
- const message = {
428
- type: 'activateQuery',
429
- queryDefId: queryDef.id,
430
- queryKey,
431
- };
432
- if (this.isWriter) {
433
- this.enqueueMessage(message);
434
- }
435
- else {
436
- this.sendMessage(message);
437
- }
438
- }
439
- // Writer-specific methods below
440
- async writerSaveQuery(queryDefId, queryKey, value, updatedAt, refIds, extra) {
441
- await this.setValue(queryKey, value, refIds ? new Set(refIds) : undefined);
442
- await this.delegate.setNumber((0, exports.updatedAtKeyFor)(queryKey), updatedAt);
443
- // Save extra data
444
- if (extra?.streamOrphanRefs !== undefined && extra.streamOrphanRefs.length > 0) {
445
- await this.delegate.setBuffer((0, exports.streamOrphanRefsKeyFor)(queryKey), new Uint32Array(extra.streamOrphanRefs));
446
- }
447
- else {
448
- await this.delegate.delete((0, exports.streamOrphanRefsKeyFor)(queryKey));
449
- }
450
- if (extra?.optimisticInsertRefs !== undefined && extra.optimisticInsertRefs.length > 0) {
451
- await this.delegate.setBuffer((0, exports.optimisticInsertRefsKeyFor)(queryKey), new Uint32Array(extra.optimisticInsertRefs));
452
- }
453
- else {
454
- await this.delegate.delete((0, exports.optimisticInsertRefsKeyFor)(queryKey));
455
- }
456
- await this.writerActivateQuery(queryDefId, queryKey);
457
- }
458
- async writerSaveEntity(entityKey, value, refIds) {
459
- await this.setValue(entityKey, value, refIds ? new Set(refIds) : undefined);
460
- }
461
- async writerActivateQuery(queryDefId, queryKey) {
462
- if (!(await this.delegate.has((0, exports.valueKeyFor)(queryKey)))) {
463
- // Query not in store, nothing to do
464
- return;
465
- }
466
- let queue = this.queues.get(queryDefId);
467
- if (queue === undefined) {
468
- // For now, use default max count. In a real implementation,
469
- // we'd need to pass queryDef or maxCount through the message
470
- const maxCount = DEFAULT_MAX_COUNT;
471
- queue = await this.delegate.getBuffer((0, exports.queueKeyFor)(queryDefId));
472
- if (queue === undefined) {
473
- queue = new Uint32Array(maxCount);
474
- await this.delegate.setBuffer((0, exports.queueKeyFor)(queryDefId), queue);
475
- }
476
- else if (queue.length !== maxCount) {
477
- queue = new Uint32Array(queue.buffer, 0, maxCount);
478
- await this.delegate.setBuffer((0, exports.queueKeyFor)(queryDefId), queue);
479
- }
480
- this.queues.set(queryDefId, queue);
481
- }
482
- const indexOfKey = queue.indexOf(queryKey);
483
- // Item already in queue, move to front
484
- if (indexOfKey >= 0) {
485
- if (indexOfKey === 0) {
486
- // Already at front, nothing to do
487
- return;
488
- }
489
- // Shift items right to make space at front
490
- queue.copyWithin(1, 0, indexOfKey);
491
- queue[0] = queryKey;
492
- return;
493
- }
494
- // Item not in queue, add to front and evict tail
495
- const evicted = queue[queue.length - 1];
496
- queue.copyWithin(1, 0, queue.length - 1);
497
- queue[0] = queryKey;
498
- if (evicted !== 0) {
499
- await this.deleteValue(evicted);
500
- await this.delegate.delete((0, exports.updatedAtKeyFor)(evicted));
501
- }
502
- }
503
- async setValue(id, value, refIds) {
504
- const delegate = this.delegate;
505
- await delegate.setString((0, exports.valueKeyFor)(id), JSON.stringify(value));
506
- const refIdsKey = (0, exports.refIdsKeyFor)(id);
507
- const prevRefIds = await delegate.getBuffer(refIdsKey);
508
- if (refIds === undefined || refIds.size === 0) {
509
- await delegate.delete(refIdsKey);
510
- // Decrement all previous refs
511
- if (prevRefIds !== undefined) {
512
- for (let i = 0; i < prevRefIds.length; i++) {
513
- const refId = prevRefIds[i];
514
- await this.decrementRefCount(refId);
515
- }
516
- }
517
- }
518
- else {
519
- // Convert the set to a Uint32Array and capture all the refIds before we
520
- // delete previous ones from the set
521
- const newRefIds = new Uint32Array(refIds);
522
- if (prevRefIds !== undefined) {
523
- // Process new refs: increment if not in old
524
- for (let i = 0; i < prevRefIds.length; i++) {
525
- const refId = prevRefIds[i];
526
- if (refIds.has(refId)) {
527
- refIds.delete(refId);
528
- }
529
- else {
530
- await this.decrementRefCount(refId);
531
- }
532
- }
533
- }
534
- // No previous refs, increment all unique new refs
535
- for (const refId of refIds) {
536
- await this.incrementRefCount(refId);
537
- }
538
- await delegate.setBuffer(refIdsKey, newRefIds);
539
- }
540
- }
541
- async deleteValue(id) {
542
- const delegate = this.delegate;
543
- await delegate.delete((0, exports.valueKeyFor)(id));
544
- await delegate.delete((0, exports.refCountKeyFor)(id));
545
- const refIds = await delegate.getBuffer((0, exports.refIdsKeyFor)(id));
546
- await delegate.delete((0, exports.refIdsKeyFor)(id)); // Clean up the refIds key
547
- if (refIds === undefined) {
548
- return;
549
- }
550
- // Decrement ref counts for all referenced entities
551
- for (const refId of refIds) {
552
- if (refId !== 0) {
553
- await this.decrementRefCount(refId);
554
- }
555
- }
556
- }
557
- async incrementRefCount(refId) {
558
- const delegate = this.delegate;
559
- const refCountKey = (0, exports.refCountKeyFor)(refId);
560
- const currentCount = (await delegate.getNumber(refCountKey)) ?? 0;
561
- const newCount = currentCount + 1;
562
- await delegate.setNumber(refCountKey, newCount);
563
- }
564
- async decrementRefCount(refId) {
565
- const delegate = this.delegate;
566
- const refCountKey = (0, exports.refCountKeyFor)(refId);
567
- const currentCount = await delegate.getNumber(refCountKey);
568
- if (currentCount === undefined) {
569
- // Already deleted or never existed
570
- return;
571
- }
572
- const newCount = currentCount - 1;
573
- if (newCount === 0) {
574
- // Entity exists, cascade delete it
575
- await this.deleteValue(refId);
576
- }
577
- else {
578
- await delegate.setNumber(refCountKey, newCount);
579
- }
580
- }
581
- }
582
- exports.AsyncQueryStore = AsyncQueryStore;
583
- //# sourceMappingURL=QueryStore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"QueryStore.js","sourceRoot":"","sources":["../../src/QueryStore.ts"],"names":[],"mappings":"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"}