@signalium/query 1.0.4 → 1.0.5

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 (89) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/cjs/MemoryEvictionManager.js +43 -0
  3. package/dist/cjs/MemoryEvictionManager.js.map +1 -0
  4. package/dist/cjs/QueryClient.js +10 -599
  5. package/dist/cjs/QueryClient.js.map +1 -1
  6. package/dist/cjs/QueryResult.js +491 -0
  7. package/dist/cjs/QueryResult.js.map +1 -0
  8. package/dist/cjs/QueryStore.js +2 -6
  9. package/dist/cjs/QueryStore.js.map +1 -1
  10. package/dist/cjs/RefetchManager.js +75 -0
  11. package/dist/cjs/RefetchManager.js.map +1 -0
  12. package/dist/cjs/errors.js +13 -12
  13. package/dist/cjs/errors.js.map +1 -1
  14. package/dist/cjs/index.js +1 -11
  15. package/dist/cjs/index.js.map +1 -1
  16. package/dist/cjs/parseEntities.js +1 -1
  17. package/dist/cjs/parseEntities.js.map +1 -1
  18. package/dist/cjs/proxy.js +2 -2
  19. package/dist/cjs/proxy.js.map +1 -1
  20. package/dist/cjs/query.js +60 -19
  21. package/dist/cjs/query.js.map +1 -1
  22. package/dist/cjs/stores/async.js +290 -2
  23. package/dist/cjs/stores/async.js.map +1 -1
  24. package/dist/cjs/stores/shared.js +19 -0
  25. package/dist/cjs/stores/shared.js.map +1 -0
  26. package/dist/cjs/stores/sync.js +201 -4
  27. package/dist/cjs/stores/sync.js.map +1 -1
  28. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  29. package/dist/cjs/typeDefs.js +221 -116
  30. package/dist/cjs/typeDefs.js.map +1 -1
  31. package/dist/cjs/utils.js +0 -42
  32. package/dist/cjs/utils.js.map +1 -1
  33. package/dist/esm/MemoryEvictionManager.d.ts +14 -0
  34. package/dist/esm/MemoryEvictionManager.d.ts.map +1 -0
  35. package/dist/esm/MemoryEvictionManager.js +39 -0
  36. package/dist/esm/MemoryEvictionManager.js.map +1 -0
  37. package/dist/esm/QueryClient.d.ts +32 -85
  38. package/dist/esm/QueryClient.d.ts.map +1 -1
  39. package/dist/esm/QueryClient.js +7 -596
  40. package/dist/esm/QueryClient.js.map +1 -1
  41. package/dist/esm/QueryResult.d.ts +66 -0
  42. package/dist/esm/QueryResult.d.ts.map +1 -0
  43. package/dist/esm/QueryResult.js +487 -0
  44. package/dist/esm/QueryResult.js.map +1 -0
  45. package/dist/esm/QueryStore.d.ts.map +1 -1
  46. package/dist/esm/QueryStore.js +2 -6
  47. package/dist/esm/QueryStore.js.map +1 -1
  48. package/dist/esm/RefetchManager.d.ts +13 -0
  49. package/dist/esm/RefetchManager.d.ts.map +1 -0
  50. package/dist/esm/RefetchManager.js +71 -0
  51. package/dist/esm/RefetchManager.js.map +1 -0
  52. package/dist/esm/errors.d.ts.map +1 -1
  53. package/dist/esm/errors.js +13 -12
  54. package/dist/esm/errors.js.map +1 -1
  55. package/dist/esm/index.d.ts +1 -4
  56. package/dist/esm/index.d.ts.map +1 -1
  57. package/dist/esm/index.js +1 -2
  58. package/dist/esm/index.js.map +1 -1
  59. package/dist/esm/parseEntities.js +2 -2
  60. package/dist/esm/parseEntities.js.map +1 -1
  61. package/dist/esm/proxy.js +3 -3
  62. package/dist/esm/proxy.js.map +1 -1
  63. package/dist/esm/query.d.ts +2 -0
  64. package/dist/esm/query.d.ts.map +1 -1
  65. package/dist/esm/query.js +59 -20
  66. package/dist/esm/query.js.map +1 -1
  67. package/dist/esm/stores/async.d.ts +63 -1
  68. package/dist/esm/stores/async.d.ts.map +1 -1
  69. package/dist/esm/stores/async.js +289 -1
  70. package/dist/esm/stores/async.js.map +1 -1
  71. package/dist/esm/stores/shared.d.ts +8 -0
  72. package/dist/esm/stores/shared.d.ts.map +1 -0
  73. package/dist/esm/stores/shared.js +11 -0
  74. package/dist/esm/stores/shared.js.map +1 -0
  75. package/dist/esm/stores/sync.d.ts +37 -1
  76. package/dist/esm/stores/sync.d.ts.map +1 -1
  77. package/dist/esm/stores/sync.js +198 -1
  78. package/dist/esm/stores/sync.js.map +1 -1
  79. package/dist/esm/typeDefs.d.ts +25 -8
  80. package/dist/esm/typeDefs.d.ts.map +1 -1
  81. package/dist/esm/typeDefs.js +220 -116
  82. package/dist/esm/typeDefs.js.map +1 -1
  83. package/dist/esm/types.d.ts +2 -1
  84. package/dist/esm/types.d.ts.map +1 -1
  85. package/dist/esm/utils.d.ts +1 -4
  86. package/dist/esm/utils.d.ts.map +1 -1
  87. package/dist/esm/utils.js +0 -40
  88. package/dist/esm/utils.js.map +1 -1
  89. package/package.json +3 -3
@@ -1,6 +1,294 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AsyncQueryStore = void 0;
4
- var QueryStore_js_1 = require("../QueryStore.js");
5
- Object.defineProperty(exports, "AsyncQueryStore", { enumerable: true, get: function () { return QueryStore_js_1.AsyncQueryStore; } });
4
+ const shared_js_1 = require("./shared.js");
5
+ // -----------------------------------------------------------------------------
6
+ // Async QueryStore Implementation
7
+ // -----------------------------------------------------------------------------
8
+ class AsyncQueryStore {
9
+ isWriter;
10
+ delegate;
11
+ sendMessage;
12
+ messageQueue = [];
13
+ queues = new Map();
14
+ queueProcessorPromise;
15
+ resolveQueueWait;
16
+ constructor(config) {
17
+ this.isWriter = config.isWriter;
18
+ this.delegate = config.delegate;
19
+ // Connect and get sendMessage function
20
+ const { sendMessage } = config.connect(this.handleMessage.bind(this));
21
+ this.sendMessage = sendMessage;
22
+ // Start queue processor if this is a writer
23
+ if (this.isWriter) {
24
+ if (!this.delegate) {
25
+ throw new Error('Writer must have a delegate');
26
+ }
27
+ this.startQueueProcessor();
28
+ }
29
+ }
30
+ handleMessage(msg) {
31
+ if (this.isWriter) {
32
+ // Enqueue the message for serial processing
33
+ this.enqueueMessage(msg);
34
+ }
35
+ // Readers don't handle incoming messages
36
+ }
37
+ enqueueMessage(msg) {
38
+ this.messageQueue.push(msg);
39
+ // Wake up the queue processor if it's waiting
40
+ if (this.resolveQueueWait) {
41
+ this.resolveQueueWait();
42
+ this.resolveQueueWait = undefined;
43
+ }
44
+ }
45
+ startQueueProcessor() {
46
+ this.queueProcessorPromise = this.processQueue();
47
+ }
48
+ async processQueue() {
49
+ while (true) {
50
+ // Wait for messages if queue is empty
51
+ while (this.messageQueue.length === 0) {
52
+ await new Promise(resolve => {
53
+ this.resolveQueueWait = resolve;
54
+ });
55
+ }
56
+ // Process one message at a time
57
+ const msg = this.messageQueue.shift();
58
+ try {
59
+ await this.processMessage(msg);
60
+ }
61
+ catch (error) {
62
+ console.error('Error processing message:', error);
63
+ }
64
+ }
65
+ }
66
+ async processMessage(msg) {
67
+ switch (msg.type) {
68
+ case 'saveQuery':
69
+ await this.writerSaveQuery(msg.queryDefId, msg.queryKey, msg.value, msg.updatedAt, msg.refIds);
70
+ break;
71
+ case 'saveEntity':
72
+ await this.writerSaveEntity(msg.entityKey, msg.value, msg.refIds);
73
+ break;
74
+ case 'activateQuery':
75
+ await this.writerActivateQuery(msg.queryDefId, msg.queryKey);
76
+ break;
77
+ }
78
+ }
79
+ async loadQuery(queryDef, queryKey, entityMap) {
80
+ if (!this.delegate) {
81
+ return undefined;
82
+ }
83
+ const updatedAt = await this.delegate.getNumber((0, shared_js_1.updatedAtKeyFor)(queryKey));
84
+ if (updatedAt === undefined || updatedAt < Date.now() - (queryDef.cache?.gcTime ?? shared_js_1.DEFAULT_GC_TIME)) {
85
+ return undefined;
86
+ }
87
+ const valueStr = await this.delegate.getString((0, shared_js_1.valueKeyFor)(queryKey));
88
+ if (valueStr === undefined) {
89
+ return undefined;
90
+ }
91
+ const entityIds = await this.delegate.getBuffer((0, shared_js_1.refIdsKeyFor)(queryKey));
92
+ if (entityIds !== undefined) {
93
+ await this.preloadEntities(entityIds, entityMap);
94
+ }
95
+ this.activateQuery(queryDef, queryKey);
96
+ return {
97
+ value: JSON.parse(valueStr),
98
+ refIds: entityIds === undefined ? undefined : new Set(entityIds ?? []),
99
+ updatedAt,
100
+ };
101
+ }
102
+ async preloadEntities(entityIds, entityMap) {
103
+ if (!this.delegate) {
104
+ return;
105
+ }
106
+ for (const entityId of entityIds) {
107
+ const entityValue = await this.delegate.getString((0, shared_js_1.valueKeyFor)(entityId));
108
+ if (entityValue === undefined) {
109
+ continue;
110
+ }
111
+ const entity = JSON.parse(entityValue);
112
+ entityMap.setPreloadedEntity(entityId, entity);
113
+ const childIds = await this.delegate.getBuffer((0, shared_js_1.refIdsKeyFor)(entityId));
114
+ if (childIds === undefined) {
115
+ continue;
116
+ }
117
+ await this.preloadEntities(childIds, entityMap);
118
+ }
119
+ }
120
+ saveQuery(queryDef, queryKey, value, updatedAt, refIds) {
121
+ const message = {
122
+ type: 'saveQuery',
123
+ queryDefId: queryDef.id,
124
+ queryKey,
125
+ value,
126
+ updatedAt,
127
+ refIds: refIds ? Array.from(refIds) : undefined,
128
+ };
129
+ if (this.isWriter) {
130
+ this.enqueueMessage(message);
131
+ }
132
+ else {
133
+ this.sendMessage(message);
134
+ }
135
+ }
136
+ saveEntity(entityKey, value, refIds) {
137
+ const message = {
138
+ type: 'saveEntity',
139
+ entityKey,
140
+ value,
141
+ refIds: refIds ? Array.from(refIds) : undefined,
142
+ };
143
+ if (this.isWriter) {
144
+ this.enqueueMessage(message);
145
+ }
146
+ else {
147
+ this.sendMessage(message);
148
+ }
149
+ }
150
+ activateQuery(queryDef, queryKey) {
151
+ const message = {
152
+ type: 'activateQuery',
153
+ queryDefId: queryDef.id,
154
+ queryKey,
155
+ };
156
+ if (this.isWriter) {
157
+ this.enqueueMessage(message);
158
+ }
159
+ else {
160
+ this.sendMessage(message);
161
+ }
162
+ }
163
+ // Writer-specific methods below
164
+ async writerSaveQuery(queryDefId, queryKey, value, updatedAt, refIds) {
165
+ await this.setValue(queryKey, value, refIds ? new Set(refIds) : undefined);
166
+ await this.delegate.setNumber((0, shared_js_1.updatedAtKeyFor)(queryKey), updatedAt);
167
+ await this.writerActivateQuery(queryDefId, queryKey);
168
+ }
169
+ async writerSaveEntity(entityKey, value, refIds) {
170
+ await this.setValue(entityKey, value, refIds ? new Set(refIds) : undefined);
171
+ }
172
+ async writerActivateQuery(queryDefId, queryKey) {
173
+ if (!(await this.delegate.has((0, shared_js_1.valueKeyFor)(queryKey)))) {
174
+ // Query not in store, nothing to do
175
+ return;
176
+ }
177
+ let queue = this.queues.get(queryDefId);
178
+ if (queue === undefined) {
179
+ // For now, use default max count. In a real implementation,
180
+ // we'd need to pass queryDef or maxCount through the message
181
+ const maxCount = shared_js_1.DEFAULT_MAX_COUNT;
182
+ queue = await this.delegate.getBuffer((0, shared_js_1.queueKeyFor)(queryDefId));
183
+ if (queue === undefined) {
184
+ queue = new Uint32Array(maxCount);
185
+ await this.delegate.setBuffer((0, shared_js_1.queueKeyFor)(queryDefId), queue);
186
+ }
187
+ else if (queue.length !== maxCount) {
188
+ queue = new Uint32Array(queue.buffer, 0, maxCount);
189
+ await this.delegate.setBuffer((0, shared_js_1.queueKeyFor)(queryDefId), queue);
190
+ }
191
+ this.queues.set(queryDefId, queue);
192
+ }
193
+ const indexOfKey = queue.indexOf(queryKey);
194
+ // Item already in queue, move to front
195
+ if (indexOfKey >= 0) {
196
+ if (indexOfKey === 0) {
197
+ // Already at front, nothing to do
198
+ return;
199
+ }
200
+ // Shift items right to make space at front
201
+ queue.copyWithin(1, 0, indexOfKey);
202
+ queue[0] = queryKey;
203
+ return;
204
+ }
205
+ // Item not in queue, add to front and evict tail
206
+ const evicted = queue[queue.length - 1];
207
+ queue.copyWithin(1, 0, queue.length - 1);
208
+ queue[0] = queryKey;
209
+ if (evicted !== 0) {
210
+ await this.deleteValue(evicted);
211
+ await this.delegate.delete((0, shared_js_1.updatedAtKeyFor)(evicted));
212
+ }
213
+ }
214
+ async setValue(id, value, refIds) {
215
+ const delegate = this.delegate;
216
+ await delegate.setString((0, shared_js_1.valueKeyFor)(id), JSON.stringify(value));
217
+ const refIdsKey = (0, shared_js_1.refIdsKeyFor)(id);
218
+ const prevRefIds = await delegate.getBuffer(refIdsKey);
219
+ if (refIds === undefined || refIds.size === 0) {
220
+ await delegate.delete(refIdsKey);
221
+ // Decrement all previous refs
222
+ if (prevRefIds !== undefined) {
223
+ for (let i = 0; i < prevRefIds.length; i++) {
224
+ const refId = prevRefIds[i];
225
+ await this.decrementRefCount(refId);
226
+ }
227
+ }
228
+ }
229
+ else {
230
+ // Convert the set to a Uint32Array and capture all the refIds before we
231
+ // delete previous ones from the set
232
+ const newRefIds = new Uint32Array(refIds);
233
+ if (prevRefIds !== undefined) {
234
+ // Process new refs: increment if not in old
235
+ for (let i = 0; i < prevRefIds.length; i++) {
236
+ const refId = prevRefIds[i];
237
+ if (refIds.has(refId)) {
238
+ refIds.delete(refId);
239
+ }
240
+ else {
241
+ await this.decrementRefCount(refId);
242
+ }
243
+ }
244
+ }
245
+ // No previous refs, increment all unique new refs
246
+ for (const refId of refIds) {
247
+ await this.incrementRefCount(refId);
248
+ }
249
+ await delegate.setBuffer(refIdsKey, newRefIds);
250
+ }
251
+ }
252
+ async deleteValue(id) {
253
+ const delegate = this.delegate;
254
+ await delegate.delete((0, shared_js_1.valueKeyFor)(id));
255
+ await delegate.delete((0, shared_js_1.refCountKeyFor)(id));
256
+ const refIds = await delegate.getBuffer((0, shared_js_1.refIdsKeyFor)(id));
257
+ await delegate.delete((0, shared_js_1.refIdsKeyFor)(id)); // Clean up the refIds key
258
+ if (refIds === undefined) {
259
+ return;
260
+ }
261
+ // Decrement ref counts for all referenced entities
262
+ for (const refId of refIds) {
263
+ if (refId !== 0) {
264
+ await this.decrementRefCount(refId);
265
+ }
266
+ }
267
+ }
268
+ async incrementRefCount(refId) {
269
+ const delegate = this.delegate;
270
+ const refCountKey = (0, shared_js_1.refCountKeyFor)(refId);
271
+ const currentCount = (await delegate.getNumber(refCountKey)) ?? 0;
272
+ const newCount = currentCount + 1;
273
+ await delegate.setNumber(refCountKey, newCount);
274
+ }
275
+ async decrementRefCount(refId) {
276
+ const delegate = this.delegate;
277
+ const refCountKey = (0, shared_js_1.refCountKeyFor)(refId);
278
+ const currentCount = await delegate.getNumber(refCountKey);
279
+ if (currentCount === undefined) {
280
+ // Already deleted or never existed
281
+ return;
282
+ }
283
+ const newCount = currentCount - 1;
284
+ if (newCount === 0) {
285
+ // Entity exists, cascade delete it
286
+ await this.deleteValue(refId);
287
+ }
288
+ else {
289
+ await delegate.setNumber(refCountKey, newCount);
290
+ }
291
+ }
292
+ }
293
+ exports.AsyncQueryStore = AsyncQueryStore;
6
294
  //# sourceMappingURL=async.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"async.js","sourceRoot":"","sources":["../../../src/stores/async.ts"],"names":[],"mappings":";;;AAAA,kDAAiG;AAAxF,gHAAA,eAAe,OAAA"}
1
+ {"version":3,"file":"async.js","sourceRoot":"","sources":["../../../src/stores/async.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_GC_TIME = exports.DEFAULT_MAX_COUNT = exports.queueKeyFor = exports.updatedAtKeyFor = exports.refIdsKeyFor = exports.refCountKeyFor = exports.valueKeyFor = void 0;
4
+ // Query Instance keys
5
+ const valueKeyFor = (id) => `sq:doc:value:${id}`;
6
+ exports.valueKeyFor = valueKeyFor;
7
+ const refCountKeyFor = (id) => `sq:doc:refCount:${id}`;
8
+ exports.refCountKeyFor = refCountKeyFor;
9
+ const refIdsKeyFor = (id) => `sq:doc:refIds:${id}`;
10
+ exports.refIdsKeyFor = refIdsKeyFor;
11
+ const updatedAtKeyFor = (id) => `sq:doc:updatedAt:${id}`;
12
+ exports.updatedAtKeyFor = updatedAtKeyFor;
13
+ // Query Type keys
14
+ const queueKeyFor = (queryDefId) => `sq:doc:queue:${queryDefId}`;
15
+ exports.queueKeyFor = queueKeyFor;
16
+ // Default values
17
+ exports.DEFAULT_MAX_COUNT = 50;
18
+ exports.DEFAULT_GC_TIME = 1000 * 60 * 60 * 24; // 24 hours
19
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/stores/shared.ts"],"names":[],"mappings":";;;AAAA,sBAAsB;AACf,MAAM,WAAW,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC;AAAnD,QAAA,WAAW,eAAwC;AACzD,MAAM,cAAc,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,mBAAmB,EAAE,EAAE,CAAC;AAAzD,QAAA,cAAc,kBAA2C;AAC/D,MAAM,YAAY,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,CAAC;AAArD,QAAA,YAAY,gBAAyC;AAC3D,MAAM,eAAe,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,oBAAoB,EAAE,EAAE,CAAC;AAA3D,QAAA,eAAe,mBAA4C;AAExE,kBAAkB;AACX,MAAM,WAAW,GAAG,CAAC,UAAkB,EAAE,EAAE,CAAC,gBAAgB,UAAU,EAAE,CAAC;AAAnE,QAAA,WAAW,eAAwD;AAEhF,iBAAiB;AACJ,QAAA,iBAAiB,GAAG,EAAE,CAAC;AACvB,QAAA,eAAe,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW"}
@@ -1,7 +1,204 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MemoryPersistentStore = exports.SyncQueryStore = void 0;
4
- var QueryStore_js_1 = require("../QueryStore.js");
5
- Object.defineProperty(exports, "SyncQueryStore", { enumerable: true, get: function () { return QueryStore_js_1.SyncQueryStore; } });
6
- Object.defineProperty(exports, "MemoryPersistentStore", { enumerable: true, get: function () { return QueryStore_js_1.MemoryPersistentStore; } });
3
+ exports.SyncQueryStore = exports.MemoryPersistentStore = void 0;
4
+ const shared_js_1 = require("./shared.js");
5
+ // -----------------------------------------------------------------------------
6
+ // Sync QueryStore Implementation
7
+ // -----------------------------------------------------------------------------
8
+ class MemoryPersistentStore {
9
+ kv = Object.create(null);
10
+ has(key) {
11
+ return key in this.kv;
12
+ }
13
+ getString(key) {
14
+ return this.kv[key];
15
+ }
16
+ setString(key, value) {
17
+ this.kv[key] = value;
18
+ }
19
+ getNumber(key) {
20
+ return this.kv[key];
21
+ }
22
+ setNumber(key, value) {
23
+ this.kv[key] = value;
24
+ }
25
+ getBuffer(key) {
26
+ return this.kv[key];
27
+ }
28
+ setBuffer(key, value) {
29
+ this.kv[key] = value;
30
+ }
31
+ delete(key) {
32
+ delete this.kv[key];
33
+ }
34
+ }
35
+ exports.MemoryPersistentStore = MemoryPersistentStore;
36
+ class SyncQueryStore {
37
+ kv;
38
+ queues = new Map();
39
+ constructor(kv) {
40
+ this.kv = kv;
41
+ }
42
+ loadQuery(queryDef, queryKey, entityMap) {
43
+ const updatedAt = this.kv.getNumber((0, shared_js_1.updatedAtKeyFor)(queryKey));
44
+ if (updatedAt === undefined || updatedAt < Date.now() - (queryDef.cache?.gcTime ?? shared_js_1.DEFAULT_GC_TIME)) {
45
+ return;
46
+ }
47
+ const valueStr = this.kv.getString((0, shared_js_1.valueKeyFor)(queryKey));
48
+ if (valueStr === undefined) {
49
+ return;
50
+ }
51
+ const entityIds = this.kv.getBuffer((0, shared_js_1.refIdsKeyFor)(queryKey));
52
+ if (entityIds !== undefined) {
53
+ this.preloadEntities(entityIds, entityMap);
54
+ }
55
+ this.activateQuery(queryDef, queryKey);
56
+ return {
57
+ value: JSON.parse(valueStr),
58
+ refIds: entityIds === undefined ? undefined : new Set(entityIds ?? []),
59
+ updatedAt,
60
+ };
61
+ }
62
+ preloadEntities(entityIds, entityMap) {
63
+ for (const entityId of entityIds) {
64
+ const entityValue = this.kv.getString((0, shared_js_1.valueKeyFor)(entityId));
65
+ if (entityValue === undefined) {
66
+ continue;
67
+ }
68
+ const entity = JSON.parse(entityValue);
69
+ entityMap.setPreloadedEntity(entityId, entity);
70
+ const childIds = this.kv.getBuffer((0, shared_js_1.refIdsKeyFor)(entityId));
71
+ if (childIds === undefined) {
72
+ continue;
73
+ }
74
+ this.preloadEntities(childIds, entityMap);
75
+ }
76
+ }
77
+ saveQuery(queryDef, queryKey, value, updatedAt, refIds) {
78
+ this.setValue(queryKey, value, refIds);
79
+ this.kv.setNumber((0, shared_js_1.updatedAtKeyFor)(queryKey), updatedAt);
80
+ this.activateQuery(queryDef, queryKey);
81
+ }
82
+ saveEntity(entityKey, value, refIds) {
83
+ this.setValue(entityKey, value, refIds);
84
+ }
85
+ activateQuery(queryDef, queryKey) {
86
+ if (!this.kv.has((0, shared_js_1.valueKeyFor)(queryKey))) {
87
+ // Query not in store, nothing to do. This can happen if the query has
88
+ // been evicted from the cache, but is still active in memory.
89
+ return;
90
+ }
91
+ let queue = this.queues.get(queryDef.id);
92
+ if (queue === undefined) {
93
+ const maxCount = queryDef.cache?.maxCount ?? shared_js_1.DEFAULT_MAX_COUNT;
94
+ queue = this.kv.getBuffer((0, shared_js_1.queueKeyFor)(queryDef.id));
95
+ if (queue === undefined) {
96
+ queue = new Uint32Array(maxCount);
97
+ this.kv.setBuffer((0, shared_js_1.queueKeyFor)(queryDef.id), queue);
98
+ }
99
+ else if (queue.length !== maxCount) {
100
+ queue = new Uint32Array(queue.buffer, 0, maxCount);
101
+ this.kv.setBuffer((0, shared_js_1.queueKeyFor)(queryDef.id), queue);
102
+ }
103
+ this.queues.set(queryDef.id, queue);
104
+ }
105
+ const indexOfKey = queue.indexOf(queryKey);
106
+ // Item already in queue, move to front
107
+ if (indexOfKey >= 0) {
108
+ if (indexOfKey === 0) {
109
+ // Already at front, nothing to do
110
+ return;
111
+ }
112
+ // Shift items right to make space at front
113
+ queue.copyWithin(1, 0, indexOfKey);
114
+ queue[0] = queryKey;
115
+ return;
116
+ }
117
+ // Item not in queue, add to front and evict tail
118
+ const evicted = queue[queue.length - 1];
119
+ queue.copyWithin(1, 0, queue.length - 1);
120
+ queue[0] = queryKey;
121
+ if (evicted !== 0) {
122
+ this.deleteValue(evicted);
123
+ this.kv.delete((0, shared_js_1.updatedAtKeyFor)(evicted));
124
+ }
125
+ }
126
+ setValue(id, value, refIds) {
127
+ const kv = this.kv;
128
+ kv.setString((0, shared_js_1.valueKeyFor)(id), JSON.stringify(value));
129
+ const refIdsKey = (0, shared_js_1.refIdsKeyFor)(id);
130
+ const prevRefIds = kv.getBuffer(refIdsKey);
131
+ if (refIds === undefined || refIds.size === 0) {
132
+ kv.delete(refIdsKey);
133
+ // Decrement all previous refs
134
+ if (prevRefIds !== undefined) {
135
+ for (let i = 0; i < prevRefIds.length; i++) {
136
+ const refId = prevRefIds[i];
137
+ this.decrementRefCount(refId);
138
+ }
139
+ }
140
+ }
141
+ else {
142
+ // Convert the set to a Uint32Array and capture all the refIds before we
143
+ // delete previous ones from the set
144
+ const newRefIds = new Uint32Array(refIds);
145
+ if (prevRefIds !== undefined) {
146
+ // Process new refs: increment if not in old
147
+ for (let i = 0; i < prevRefIds.length; i++) {
148
+ const refId = prevRefIds[i];
149
+ if (refIds.has(refId)) {
150
+ refIds.delete(refId);
151
+ }
152
+ else {
153
+ this.decrementRefCount(refId);
154
+ }
155
+ }
156
+ }
157
+ // No previous refs, increment all unique new refs
158
+ for (const refId of refIds) {
159
+ this.incrementRefCount(refId);
160
+ }
161
+ kv.setBuffer(refIdsKey, newRefIds);
162
+ }
163
+ }
164
+ deleteValue(id) {
165
+ const kv = this.kv;
166
+ kv.delete((0, shared_js_1.valueKeyFor)(id));
167
+ kv.delete((0, shared_js_1.refCountKeyFor)(id));
168
+ const refIds = kv.getBuffer((0, shared_js_1.refIdsKeyFor)(id));
169
+ kv.delete((0, shared_js_1.refIdsKeyFor)(id)); // Clean up the refIds key
170
+ if (refIds === undefined) {
171
+ return;
172
+ }
173
+ // Decrement ref counts for all referenced entities
174
+ for (const refId of refIds) {
175
+ if (refId !== 0) {
176
+ this.decrementRefCount(refId);
177
+ }
178
+ }
179
+ }
180
+ incrementRefCount(refId) {
181
+ const refCountKey = (0, shared_js_1.refCountKeyFor)(refId);
182
+ const currentCount = this.kv.getNumber(refCountKey) ?? 0;
183
+ const newCount = currentCount + 1;
184
+ this.kv.setNumber(refCountKey, newCount);
185
+ }
186
+ decrementRefCount(refId) {
187
+ const refCountKey = (0, shared_js_1.refCountKeyFor)(refId);
188
+ const currentCount = this.kv.getNumber(refCountKey);
189
+ if (currentCount === undefined) {
190
+ // Already deleted or never existed
191
+ return;
192
+ }
193
+ const newCount = currentCount - 1;
194
+ if (newCount === 0) {
195
+ // Entity exists, cascade delete it
196
+ this.deleteValue(refId);
197
+ }
198
+ else {
199
+ this.kv.setNumber(refCountKey, newCount);
200
+ }
201
+ }
202
+ }
203
+ exports.SyncQueryStore = SyncQueryStore;
7
204
  //# sourceMappingURL=sync.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/stores/sync.ts"],"names":[],"mappings":";;;AAAA,kDAAmG;AAA1F,+GAAA,cAAc,OAAA;AAA4B,sHAAA,qBAAqB,OAAA"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/stores/sync.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"root":["../../src/EntityMap.ts","../../src/NetworkManager.ts","../../src/QueryClient.ts","../../src/QueryStore.ts","../../src/errors.ts","../../src/index.ts","../../src/parseEntities.ts","../../src/pathInterpolator.ts","../../src/proxy.ts","../../src/query.ts","../../src/type-utils.ts","../../src/typeDefs.ts","../../src/types.ts","../../src/utils.ts","../../src/stores/async.ts","../../src/stores/sync.ts"],"version":"5.7.3"}
1
+ {"root":["../../src/EntityMap.ts","../../src/MemoryEvictionManager.ts","../../src/NetworkManager.ts","../../src/QueryClient.ts","../../src/QueryResult.ts","../../src/QueryStore.ts","../../src/RefetchManager.ts","../../src/errors.ts","../../src/index.ts","../../src/parseEntities.ts","../../src/pathInterpolator.ts","../../src/proxy.ts","../../src/query.ts","../../src/type-utils.ts","../../src/typeDefs.ts","../../src/types.ts","../../src/utils.ts","../../src/stores/async.ts","../../src/stores/shared.ts","../../src/stores/sync.ts"],"version":"5.7.3"}