@nahisaho/yata-scale 1.8.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 (158) hide show
  1. package/README.md +66 -0
  2. package/dist/CacheManager.d.ts +107 -0
  3. package/dist/CacheManager.d.ts.map +1 -0
  4. package/dist/CacheManager.js +343 -0
  5. package/dist/CacheManager.js.map +1 -0
  6. package/dist/IndexManager.d.ts +103 -0
  7. package/dist/IndexManager.d.ts.map +1 -0
  8. package/dist/IndexManager.js +385 -0
  9. package/dist/IndexManager.js.map +1 -0
  10. package/dist/MigrationHelper.d.ts +91 -0
  11. package/dist/MigrationHelper.d.ts.map +1 -0
  12. package/dist/MigrationHelper.js +220 -0
  13. package/dist/MigrationHelper.js.map +1 -0
  14. package/dist/QueryCoordinator.d.ts +76 -0
  15. package/dist/QueryCoordinator.d.ts.map +1 -0
  16. package/dist/QueryCoordinator.js +298 -0
  17. package/dist/QueryCoordinator.js.map +1 -0
  18. package/dist/ShardManager.d.ts +48 -0
  19. package/dist/ShardManager.d.ts.map +1 -0
  20. package/dist/ShardManager.js +193 -0
  21. package/dist/ShardManager.js.map +1 -0
  22. package/dist/SyncController.d.ts +102 -0
  23. package/dist/SyncController.d.ts.map +1 -0
  24. package/dist/SyncController.js +286 -0
  25. package/dist/SyncController.js.map +1 -0
  26. package/dist/YataScaleManager.d.ts +75 -0
  27. package/dist/YataScaleManager.d.ts.map +1 -0
  28. package/dist/YataScaleManager.js +265 -0
  29. package/dist/YataScaleManager.js.map +1 -0
  30. package/dist/cache/CacheManager.d.ts +116 -0
  31. package/dist/cache/CacheManager.d.ts.map +1 -0
  32. package/dist/cache/CacheManager.js +286 -0
  33. package/dist/cache/CacheManager.js.map +1 -0
  34. package/dist/cache/InvalidationManager.d.ts +91 -0
  35. package/dist/cache/InvalidationManager.d.ts.map +1 -0
  36. package/dist/cache/InvalidationManager.js +155 -0
  37. package/dist/cache/InvalidationManager.js.map +1 -0
  38. package/dist/cache/L1Cache.d.ts +97 -0
  39. package/dist/cache/L1Cache.d.ts.map +1 -0
  40. package/dist/cache/L1Cache.js +225 -0
  41. package/dist/cache/L1Cache.js.map +1 -0
  42. package/dist/cache/L2Cache.d.ts +93 -0
  43. package/dist/cache/L2Cache.d.ts.map +1 -0
  44. package/dist/cache/L2Cache.js +248 -0
  45. package/dist/cache/L2Cache.js.map +1 -0
  46. package/dist/cache/L3Cache.d.ts +101 -0
  47. package/dist/cache/L3Cache.d.ts.map +1 -0
  48. package/dist/cache/L3Cache.js +229 -0
  49. package/dist/cache/L3Cache.js.map +1 -0
  50. package/dist/cache/index.d.ts +12 -0
  51. package/dist/cache/index.d.ts.map +1 -0
  52. package/dist/cache/index.js +11 -0
  53. package/dist/cache/index.js.map +1 -0
  54. package/dist/errors.d.ts +255 -0
  55. package/dist/errors.d.ts.map +1 -0
  56. package/dist/errors.js +515 -0
  57. package/dist/errors.js.map +1 -0
  58. package/dist/index/BPlusTreeIndex.d.ts +101 -0
  59. package/dist/index/BPlusTreeIndex.d.ts.map +1 -0
  60. package/dist/index/BPlusTreeIndex.js +310 -0
  61. package/dist/index/BPlusTreeIndex.js.map +1 -0
  62. package/dist/index/BloomFilter.d.ts +85 -0
  63. package/dist/index/BloomFilter.d.ts.map +1 -0
  64. package/dist/index/BloomFilter.js +215 -0
  65. package/dist/index/BloomFilter.js.map +1 -0
  66. package/dist/index/FullTextIndex.d.ts +87 -0
  67. package/dist/index/FullTextIndex.d.ts.map +1 -0
  68. package/dist/index/FullTextIndex.js +213 -0
  69. package/dist/index/FullTextIndex.js.map +1 -0
  70. package/dist/index/GraphIndex.d.ts +116 -0
  71. package/dist/index/GraphIndex.d.ts.map +1 -0
  72. package/dist/index/GraphIndex.js +308 -0
  73. package/dist/index/GraphIndex.js.map +1 -0
  74. package/dist/index/IndexManager.d.ts +105 -0
  75. package/dist/index/IndexManager.d.ts.map +1 -0
  76. package/dist/index/IndexManager.js +287 -0
  77. package/dist/index/IndexManager.js.map +1 -0
  78. package/dist/index/index.d.ts +12 -0
  79. package/dist/index/index.d.ts.map +1 -0
  80. package/dist/index/index.js +11 -0
  81. package/dist/index/index.js.map +1 -0
  82. package/dist/index.d.ts +12 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +12 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/query/DistributedExecutor.d.ts +78 -0
  87. package/dist/query/DistributedExecutor.d.ts.map +1 -0
  88. package/dist/query/DistributedExecutor.js +232 -0
  89. package/dist/query/DistributedExecutor.js.map +1 -0
  90. package/dist/query/QueryCoordinator.d.ts +98 -0
  91. package/dist/query/QueryCoordinator.d.ts.map +1 -0
  92. package/dist/query/QueryCoordinator.js +246 -0
  93. package/dist/query/QueryCoordinator.js.map +1 -0
  94. package/dist/query/QueryPlanner.d.ts +88 -0
  95. package/dist/query/QueryPlanner.d.ts.map +1 -0
  96. package/dist/query/QueryPlanner.js +235 -0
  97. package/dist/query/QueryPlanner.js.map +1 -0
  98. package/dist/query/WorkerPool.d.ts +108 -0
  99. package/dist/query/WorkerPool.d.ts.map +1 -0
  100. package/dist/query/WorkerPool.js +195 -0
  101. package/dist/query/WorkerPool.js.map +1 -0
  102. package/dist/query/index.d.ts +11 -0
  103. package/dist/query/index.d.ts.map +1 -0
  104. package/dist/query/index.js +10 -0
  105. package/dist/query/index.js.map +1 -0
  106. package/dist/shard/GraphPartitionStrategy.d.ts +65 -0
  107. package/dist/shard/GraphPartitionStrategy.d.ts.map +1 -0
  108. package/dist/shard/GraphPartitionStrategy.js +208 -0
  109. package/dist/shard/GraphPartitionStrategy.js.map +1 -0
  110. package/dist/shard/HashPartitionStrategy.d.ts +56 -0
  111. package/dist/shard/HashPartitionStrategy.d.ts.map +1 -0
  112. package/dist/shard/HashPartitionStrategy.js +169 -0
  113. package/dist/shard/HashPartitionStrategy.js.map +1 -0
  114. package/dist/shard/RangePartitionStrategy.d.ts +63 -0
  115. package/dist/shard/RangePartitionStrategy.d.ts.map +1 -0
  116. package/dist/shard/RangePartitionStrategy.js +157 -0
  117. package/dist/shard/RangePartitionStrategy.js.map +1 -0
  118. package/dist/shard/Rebalancer.d.ts +70 -0
  119. package/dist/shard/Rebalancer.d.ts.map +1 -0
  120. package/dist/shard/Rebalancer.js +184 -0
  121. package/dist/shard/Rebalancer.js.map +1 -0
  122. package/dist/shard/ShardManager.d.ts +123 -0
  123. package/dist/shard/ShardManager.d.ts.map +1 -0
  124. package/dist/shard/ShardManager.js +353 -0
  125. package/dist/shard/ShardManager.js.map +1 -0
  126. package/dist/shard/ShardRouter.d.ts +102 -0
  127. package/dist/shard/ShardRouter.d.ts.map +1 -0
  128. package/dist/shard/ShardRouter.js +181 -0
  129. package/dist/shard/ShardRouter.js.map +1 -0
  130. package/dist/shard/index.d.ts +13 -0
  131. package/dist/shard/index.d.ts.map +1 -0
  132. package/dist/shard/index.js +12 -0
  133. package/dist/shard/index.js.map +1 -0
  134. package/dist/sync/ConflictResolver.d.ts +71 -0
  135. package/dist/sync/ConflictResolver.d.ts.map +1 -0
  136. package/dist/sync/ConflictResolver.js +214 -0
  137. package/dist/sync/ConflictResolver.js.map +1 -0
  138. package/dist/sync/SyncController.d.ts +150 -0
  139. package/dist/sync/SyncController.d.ts.map +1 -0
  140. package/dist/sync/SyncController.js +304 -0
  141. package/dist/sync/SyncController.js.map +1 -0
  142. package/dist/sync/VectorClock.d.ts +102 -0
  143. package/dist/sync/VectorClock.d.ts.map +1 -0
  144. package/dist/sync/VectorClock.js +189 -0
  145. package/dist/sync/VectorClock.js.map +1 -0
  146. package/dist/sync/WALManager.d.ts +120 -0
  147. package/dist/sync/WALManager.d.ts.map +1 -0
  148. package/dist/sync/WALManager.js +240 -0
  149. package/dist/sync/WALManager.js.map +1 -0
  150. package/dist/sync/index.d.ts +11 -0
  151. package/dist/sync/index.d.ts.map +1 -0
  152. package/dist/sync/index.js +10 -0
  153. package/dist/sync/index.js.map +1 -0
  154. package/dist/types.d.ts +323 -0
  155. package/dist/types.d.ts.map +1 -0
  156. package/dist/types.js +7 -0
  157. package/dist/types.js.map +1 -0
  158. package/package.json +86 -0
@@ -0,0 +1,286 @@
1
+ /**
2
+ * @nahisaho/yata-scale - Cache Manager
3
+ *
4
+ * Coordinates multi-tier caching (L1/L2/L3)
5
+ */
6
+ import { ok, err } from 'neverthrow';
7
+ import { CacheMissError } from '../errors.js';
8
+ import { L1Cache } from './L1Cache.js';
9
+ import { L2Cache } from './L2Cache.js';
10
+ import { L3Cache } from './L3Cache.js';
11
+ import { InvalidationManager } from './InvalidationManager.js';
12
+ /**
13
+ * Cache manager for multi-tier caching
14
+ */
15
+ export class CacheManager {
16
+ l1;
17
+ l2;
18
+ l3;
19
+ invalidation;
20
+ config;
21
+ constructor(config) {
22
+ this.config = config;
23
+ // Initialize tiers
24
+ this.l1 = new L1Cache(config.l1MaxEntries);
25
+ this.l2 = new L2Cache(config.l2MaxSize);
26
+ this.l3 = new L3Cache(config.l3MaxEntries);
27
+ // Setup invalidation
28
+ this.invalidation = new InvalidationManager(100, 10);
29
+ this.invalidation.addListener((event) => this.handleInvalidation(event));
30
+ }
31
+ /**
32
+ * Get entity with cache hierarchy
33
+ */
34
+ async getEntity(id) {
35
+ // Try L1 (hot)
36
+ const l1Result = this.l1.getEntity(id);
37
+ if (l1Result) {
38
+ return ok(l1Result);
39
+ }
40
+ // Try L2 (warm)
41
+ const l2Result = this.l2.getEntity(id);
42
+ if (l2Result) {
43
+ // Promote to L1
44
+ this.l1.setEntity(l2Result);
45
+ return ok(l2Result);
46
+ }
47
+ // Try L3 (cold)
48
+ const l3Result = await this.l3.getEntity(id);
49
+ if (l3Result) {
50
+ // Promote to L2 and L1
51
+ this.l2.setEntity(l3Result);
52
+ this.l1.setEntity(l3Result);
53
+ return ok(l3Result);
54
+ }
55
+ return err(new CacheMissError(id));
56
+ }
57
+ /**
58
+ * Set entity in cache
59
+ */
60
+ async setEntity(entity) {
61
+ // Always add to L1 (hot tier)
62
+ this.l1.setEntity(entity);
63
+ // Also add to L3 for persistence
64
+ await this.l3.setEntity(entity);
65
+ }
66
+ /**
67
+ * Delete entity from all tiers
68
+ */
69
+ async deleteEntity(id) {
70
+ this.l1.deleteEntity(id);
71
+ this.l2.deleteEntity(id);
72
+ await this.l3.deleteEntity(id);
73
+ this.invalidation.invalidateEntity(id, 'delete');
74
+ }
75
+ /**
76
+ * Get relationship with cache hierarchy
77
+ */
78
+ async getRelationship(id) {
79
+ // Try L1
80
+ const l1Result = this.l1.getRelationship(id);
81
+ if (l1Result) {
82
+ return ok(l1Result);
83
+ }
84
+ // Try L2
85
+ const l2Result = this.l2.getRelationship(id);
86
+ if (l2Result) {
87
+ this.l1.setRelationship(l2Result);
88
+ return ok(l2Result);
89
+ }
90
+ // Try L3
91
+ const l3Result = await this.l3.getRelationship(id);
92
+ if (l3Result) {
93
+ this.l2.setRelationship(l3Result);
94
+ this.l1.setRelationship(l3Result);
95
+ return ok(l3Result);
96
+ }
97
+ return err(new CacheMissError(id));
98
+ }
99
+ /**
100
+ * Set relationship in cache
101
+ */
102
+ async setRelationship(relationship) {
103
+ this.l1.setRelationship(relationship);
104
+ await this.l3.setRelationship(relationship);
105
+ }
106
+ /**
107
+ * Delete relationship from all tiers
108
+ */
109
+ async deleteRelationship(id) {
110
+ this.l1.deleteRelationship(id);
111
+ this.l2.deleteRelationship(id);
112
+ await this.l3.deleteRelationship(id);
113
+ this.invalidation.invalidateRelationship(id, 'delete');
114
+ }
115
+ /**
116
+ * Get multiple entities
117
+ */
118
+ async getEntities(ids) {
119
+ const result = new Map();
120
+ const missingIds = [];
121
+ // Check L1 first
122
+ for (const id of ids) {
123
+ const entity = this.l1.getEntity(id);
124
+ if (entity) {
125
+ result.set(id, entity);
126
+ }
127
+ else {
128
+ missingIds.push(id);
129
+ }
130
+ }
131
+ if (missingIds.length === 0) {
132
+ return result;
133
+ }
134
+ // Check L2 for missing
135
+ const stillMissing = [];
136
+ for (const id of missingIds) {
137
+ const entity = this.l2.getEntity(id);
138
+ if (entity) {
139
+ result.set(id, entity);
140
+ this.l1.setEntity(entity); // Promote
141
+ }
142
+ else {
143
+ stillMissing.push(id);
144
+ }
145
+ }
146
+ if (stillMissing.length === 0) {
147
+ return result;
148
+ }
149
+ // Check L3 for still missing
150
+ const l3Results = await this.l3.getEntities(stillMissing);
151
+ for (const [id, entity] of l3Results) {
152
+ result.set(id, entity);
153
+ this.l2.setEntity(entity);
154
+ this.l1.setEntity(entity);
155
+ }
156
+ return result;
157
+ }
158
+ /**
159
+ * Set multiple entities
160
+ */
161
+ async setEntities(entities) {
162
+ this.l1.setEntities(entities);
163
+ await this.l3.setEntities(entities);
164
+ }
165
+ /**
166
+ * Handle invalidation event
167
+ */
168
+ handleInvalidation(event) {
169
+ if (event.type === 'entity') {
170
+ this.l1.deleteEntity(event.id);
171
+ this.l2.deleteEntity(event.id);
172
+ // Don't delete from L3 on update, only on explicit delete
173
+ }
174
+ else {
175
+ this.l1.deleteRelationship(event.id);
176
+ this.l2.deleteRelationship(event.id);
177
+ }
178
+ }
179
+ /**
180
+ * Invalidate entity across all tiers
181
+ */
182
+ invalidateEntity(id) {
183
+ this.invalidation.invalidateEntity(id);
184
+ }
185
+ /**
186
+ * Invalidate multiple entities
187
+ */
188
+ invalidateEntities(ids) {
189
+ this.invalidation.invalidateEntities(ids);
190
+ }
191
+ /**
192
+ * Flush invalidations
193
+ */
194
+ flushInvalidations() {
195
+ this.invalidation.flushNow();
196
+ }
197
+ /**
198
+ * Prewarm cache with entities
199
+ */
200
+ async prewarm(entities) {
201
+ // Add to all tiers
202
+ await this.setEntities(entities);
203
+ }
204
+ /**
205
+ * Clear all caches
206
+ */
207
+ async clear() {
208
+ this.l1.clear();
209
+ this.l2.clear();
210
+ await this.l3.clear();
211
+ }
212
+ /**
213
+ * Perform tier demotion (move cold data down)
214
+ */
215
+ async performDemotion() {
216
+ // Get hot keys from L1
217
+ const hotKeys = new Set(this.l1.getHotKeys(100));
218
+ let demoted = 0;
219
+ // Demote cold entities from L1 to L2
220
+ // Note: This is a simplified implementation
221
+ // In production, would track access patterns more precisely
222
+ return demoted;
223
+ }
224
+ /**
225
+ * Get statistics for all tiers
226
+ */
227
+ getAllStats() {
228
+ return {
229
+ l1: this.l1.getStats(),
230
+ l2: this.l2.getStats(),
231
+ l3: this.l3.getStats(),
232
+ };
233
+ }
234
+ /**
235
+ * Get combined statistics
236
+ */
237
+ getCombinedStats() {
238
+ const l1Stats = this.l1.getStats();
239
+ const l2Stats = this.l2.getStats();
240
+ const l3Stats = this.l3.getStats();
241
+ const totalHits = l1Stats.hitCount + l2Stats.hitCount + l3Stats.hitCount;
242
+ const totalMisses = l1Stats.missCount + l2Stats.missCount + l3Stats.missCount;
243
+ const total = totalHits + totalMisses;
244
+ return {
245
+ tier: 'all',
246
+ hitCount: totalHits,
247
+ missCount: totalMisses,
248
+ hitRate: total > 0 ? totalHits / total : 0,
249
+ entryCount: l1Stats.entryCount + l2Stats.entryCount + l3Stats.entryCount,
250
+ sizeBytes: l1Stats.sizeBytes + l2Stats.sizeBytes + l3Stats.sizeBytes,
251
+ evictionCount: l1Stats.evictionCount + l2Stats.evictionCount + l3Stats.evictionCount,
252
+ };
253
+ }
254
+ /**
255
+ * Get L1 cache
256
+ */
257
+ getL1() {
258
+ return this.l1;
259
+ }
260
+ /**
261
+ * Get L2 cache
262
+ */
263
+ getL2() {
264
+ return this.l2;
265
+ }
266
+ /**
267
+ * Get L3 cache
268
+ */
269
+ getL3() {
270
+ return this.l3;
271
+ }
272
+ /**
273
+ * Get invalidation manager
274
+ */
275
+ getInvalidationManager() {
276
+ return this.invalidation;
277
+ }
278
+ /**
279
+ * Close the cache manager
280
+ */
281
+ async close() {
282
+ this.invalidation.close();
283
+ await this.l3.close();
284
+ }
285
+ }
286
+ //# sourceMappingURL=CacheManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CacheManager.js","sourceRoot":"","sources":["../../src/cache/CacheManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * @nahisaho/yata-scale - Cache Invalidation Manager
3
+ *
4
+ * Manages cache invalidation across tiers
5
+ */
6
+ import type { Entity } from '../types.js';
7
+ /**
8
+ * Invalidation event
9
+ */
10
+ export interface InvalidationEvent {
11
+ readonly type: 'entity' | 'relationship';
12
+ readonly id: string;
13
+ readonly operation: 'update' | 'delete';
14
+ readonly timestamp: Date;
15
+ }
16
+ /**
17
+ * Invalidation listener
18
+ */
19
+ export type InvalidationListener = (event: InvalidationEvent) => void;
20
+ /**
21
+ * Invalidation pattern for bulk invalidation
22
+ */
23
+ export interface InvalidationPattern {
24
+ readonly type?: string;
25
+ readonly namespace?: string;
26
+ readonly idPrefix?: string;
27
+ }
28
+ /**
29
+ * Cache invalidation manager
30
+ */
31
+ export declare class InvalidationManager {
32
+ private listeners;
33
+ private pendingInvalidations;
34
+ private batchTimeout;
35
+ private readonly batchSize;
36
+ private readonly batchDelayMs;
37
+ constructor(batchSize?: number, batchDelayMs?: number);
38
+ /**
39
+ * Invalidate an entity
40
+ */
41
+ invalidateEntity(id: string, operation?: 'update' | 'delete'): void;
42
+ /**
43
+ * Invalidate a relationship
44
+ */
45
+ invalidateRelationship(id: string, operation?: 'update' | 'delete'): void;
46
+ /**
47
+ * Invalidate multiple entities
48
+ */
49
+ invalidateEntities(ids: string[], operation?: 'update' | 'delete'): void;
50
+ /**
51
+ * Invalidate by pattern
52
+ */
53
+ invalidateByPattern(pattern: InvalidationPattern, entities: Entity[]): void;
54
+ /**
55
+ * Queue an invalidation event
56
+ */
57
+ private queueInvalidation;
58
+ /**
59
+ * Flush pending invalidations immediately
60
+ */
61
+ flushNow(): void;
62
+ /**
63
+ * Notify all listeners
64
+ */
65
+ private notifyListeners;
66
+ /**
67
+ * Add invalidation listener
68
+ */
69
+ addListener(listener: InvalidationListener): void;
70
+ /**
71
+ * Remove invalidation listener
72
+ */
73
+ removeListener(listener: InvalidationListener): void;
74
+ /**
75
+ * Clear all listeners
76
+ */
77
+ clearListeners(): void;
78
+ /**
79
+ * Get pending invalidation count
80
+ */
81
+ get pendingCount(): number;
82
+ /**
83
+ * Get listener count
84
+ */
85
+ get listenerCount(): number;
86
+ /**
87
+ * Close the manager
88
+ */
89
+ close(): void;
90
+ }
91
+ //# sourceMappingURL=InvalidationManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InvalidationManager.d.ts","sourceRoot":"","sources":["../../src/cache/InvalidationManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAgB,MAAM,aAAa,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,cAAc,CAAC;IACzC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,oBAAoB,CAA2B;IACvD,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,SAAS,GAAE,MAAY,EAAE,YAAY,GAAE,MAAW;IAK9D;;OAEG;IACH,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,GAAE,QAAQ,GAAG,QAAmB,GAAG,IAAI;IAS7E;;OAEG;IACH,sBAAsB,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,GAAE,QAAQ,GAAG,QAAmB,GAAG,IAAI;IASnF;;OAEG;IACH,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,SAAS,GAAE,QAAQ,GAAG,QAAmB,GAAG,IAAI;IAMlF;;OAEG;IACH,mBAAmB,CACjB,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,MAAM,EAAE,GACjB,IAAI;IAsBP;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAyBhB;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAIjD;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAIpD;;OAEG;IACH,cAAc,IAAI,IAAI;IAItB;;OAEG;IACH,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED;;OAEG;IACH,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * @nahisaho/yata-scale - Cache Invalidation Manager
3
+ *
4
+ * Manages cache invalidation across tiers
5
+ */
6
+ /**
7
+ * Cache invalidation manager
8
+ */
9
+ export class InvalidationManager {
10
+ listeners = new Set();
11
+ pendingInvalidations = [];
12
+ batchTimeout = null;
13
+ batchSize;
14
+ batchDelayMs;
15
+ constructor(batchSize = 100, batchDelayMs = 10) {
16
+ this.batchSize = batchSize;
17
+ this.batchDelayMs = batchDelayMs;
18
+ }
19
+ /**
20
+ * Invalidate an entity
21
+ */
22
+ invalidateEntity(id, operation = 'update') {
23
+ this.queueInvalidation({
24
+ type: 'entity',
25
+ id,
26
+ operation,
27
+ timestamp: new Date(),
28
+ });
29
+ }
30
+ /**
31
+ * Invalidate a relationship
32
+ */
33
+ invalidateRelationship(id, operation = 'update') {
34
+ this.queueInvalidation({
35
+ type: 'relationship',
36
+ id,
37
+ operation,
38
+ timestamp: new Date(),
39
+ });
40
+ }
41
+ /**
42
+ * Invalidate multiple entities
43
+ */
44
+ invalidateEntities(ids, operation = 'update') {
45
+ for (const id of ids) {
46
+ this.invalidateEntity(id, operation);
47
+ }
48
+ }
49
+ /**
50
+ * Invalidate by pattern
51
+ */
52
+ invalidateByPattern(pattern, entities) {
53
+ for (const entity of entities) {
54
+ let matches = true;
55
+ if (pattern.type && entity.type !== pattern.type) {
56
+ matches = false;
57
+ }
58
+ if (pattern.namespace && entity.namespace !== pattern.namespace) {
59
+ matches = false;
60
+ }
61
+ if (pattern.idPrefix && !entity.id.startsWith(pattern.idPrefix)) {
62
+ matches = false;
63
+ }
64
+ if (matches) {
65
+ this.invalidateEntity(entity.id);
66
+ }
67
+ }
68
+ }
69
+ /**
70
+ * Queue an invalidation event
71
+ */
72
+ queueInvalidation(event) {
73
+ this.pendingInvalidations.push(event);
74
+ if (this.pendingInvalidations.length >= this.batchSize) {
75
+ this.flushNow();
76
+ }
77
+ else if (!this.batchTimeout) {
78
+ this.batchTimeout = setTimeout(() => this.flushNow(), this.batchDelayMs);
79
+ }
80
+ }
81
+ /**
82
+ * Flush pending invalidations immediately
83
+ */
84
+ flushNow() {
85
+ if (this.batchTimeout) {
86
+ clearTimeout(this.batchTimeout);
87
+ this.batchTimeout = null;
88
+ }
89
+ if (this.pendingInvalidations.length === 0) {
90
+ return;
91
+ }
92
+ const events = this.pendingInvalidations;
93
+ this.pendingInvalidations = [];
94
+ // Deduplicate by id (keep latest)
95
+ const deduped = new Map();
96
+ for (const event of events) {
97
+ deduped.set(event.id, event);
98
+ }
99
+ // Notify listeners
100
+ for (const event of deduped.values()) {
101
+ this.notifyListeners(event);
102
+ }
103
+ }
104
+ /**
105
+ * Notify all listeners
106
+ */
107
+ notifyListeners(event) {
108
+ for (const listener of this.listeners) {
109
+ try {
110
+ listener(event);
111
+ }
112
+ catch (error) {
113
+ console.error('Invalidation listener error:', error);
114
+ }
115
+ }
116
+ }
117
+ /**
118
+ * Add invalidation listener
119
+ */
120
+ addListener(listener) {
121
+ this.listeners.add(listener);
122
+ }
123
+ /**
124
+ * Remove invalidation listener
125
+ */
126
+ removeListener(listener) {
127
+ this.listeners.delete(listener);
128
+ }
129
+ /**
130
+ * Clear all listeners
131
+ */
132
+ clearListeners() {
133
+ this.listeners.clear();
134
+ }
135
+ /**
136
+ * Get pending invalidation count
137
+ */
138
+ get pendingCount() {
139
+ return this.pendingInvalidations.length;
140
+ }
141
+ /**
142
+ * Get listener count
143
+ */
144
+ get listenerCount() {
145
+ return this.listeners.size;
146
+ }
147
+ /**
148
+ * Close the manager
149
+ */
150
+ close() {
151
+ this.flushNow();
152
+ this.clearListeners();
153
+ }
154
+ }
155
+ //# sourceMappingURL=InvalidationManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InvalidationManager.js","sourceRoot":"","sources":["../../src/cache/InvalidationManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * @nahisaho/yata-scale - L1 Cache (Hot)
3
+ *
4
+ * In-memory LRU cache for frequently accessed data
5
+ */
6
+ import type { CacheStats, Entity, Relationship } from '../types.js';
7
+ /**
8
+ * L1 Cache - Hot tier, in-memory LRU
9
+ */
10
+ export declare class L1Cache {
11
+ private readonly entityCache;
12
+ private readonly relationshipCache;
13
+ private hits;
14
+ private misses;
15
+ constructor(maxEntries?: number);
16
+ /**
17
+ * Get entity from cache
18
+ */
19
+ getEntity(id: string): Entity | undefined;
20
+ /**
21
+ * Set entity in cache
22
+ */
23
+ setEntity(entity: Entity): void;
24
+ /**
25
+ * Delete entity from cache
26
+ */
27
+ deleteEntity(id: string): boolean;
28
+ /**
29
+ * Get relationship from cache
30
+ */
31
+ getRelationship(id: string): Relationship | undefined;
32
+ /**
33
+ * Set relationship in cache
34
+ */
35
+ setRelationship(relationship: Relationship): void;
36
+ /**
37
+ * Delete relationship from cache
38
+ */
39
+ deleteRelationship(id: string): boolean;
40
+ /**
41
+ * Check if entity exists in cache
42
+ */
43
+ hasEntity(id: string): boolean;
44
+ /**
45
+ * Check if relationship exists in cache
46
+ */
47
+ hasRelationship(id: string): boolean;
48
+ /**
49
+ * Get multiple entities
50
+ */
51
+ getEntities(ids: string[]): Map<string, Entity>;
52
+ /**
53
+ * Set multiple entities
54
+ */
55
+ setEntities(entities: Entity[]): void;
56
+ /**
57
+ * Clear all caches
58
+ */
59
+ clear(): void;
60
+ /**
61
+ * Get hot keys (most accessed)
62
+ */
63
+ getHotKeys(limit?: number): string[];
64
+ /**
65
+ * Prewarm cache with entities
66
+ */
67
+ prewarm(entities: Entity[]): void;
68
+ /**
69
+ * Get cache statistics
70
+ */
71
+ getStats(): CacheStats;
72
+ /**
73
+ * Estimate memory size
74
+ */
75
+ private estimateSize;
76
+ /**
77
+ * Estimate entity size in bytes
78
+ */
79
+ private estimateEntitySize;
80
+ /**
81
+ * Estimate relationship size in bytes
82
+ */
83
+ private estimateRelationshipSize;
84
+ /**
85
+ * Get entity count
86
+ */
87
+ get entityCount(): number;
88
+ /**
89
+ * Get relationship count
90
+ */
91
+ get relationshipCount(): number;
92
+ /**
93
+ * Get total entry count
94
+ */
95
+ get size(): number;
96
+ }
97
+ //# sourceMappingURL=L1Cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"L1Cache.d.ts","sourceRoot":"","sources":["../../src/cache/L1Cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAWpE;;GAEG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IACnE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA6C;IAC/E,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAa;gBAEf,UAAU,GAAE,MAAc;IAWtC;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAYzC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ/B;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIjC;;OAEG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAYrD;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAQjD;;OAEG;IACH,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIvC;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI9B;;OAEG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIpC;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAW/C;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAMrC;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,UAAU,CAAC,KAAK,GAAE,MAAW,GAAG,MAAM,EAAE;IAiBxC;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAMjC;;OAEG;IACH,QAAQ,IAAI,UAAU;IAatB;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAShC;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}