@danielsimonjr/memoryjs 1.0.0 → 1.2.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 (300) hide show
  1. package/README.md +385 -113
  2. package/README.md.backup-1768084780988 +266 -0
  3. package/dist/index.cjs +24156 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +16967 -0
  6. package/dist/index.d.ts +16963 -11
  7. package/dist/index.js +23887 -19
  8. package/dist/index.js.map +1 -1
  9. package/dist/workers/levenshteinWorker.cjs +102 -0
  10. package/dist/workers/levenshteinWorker.cjs.map +1 -0
  11. package/dist/workers/levenshteinWorker.js +57 -91
  12. package/dist/workers/levenshteinWorker.js.map +1 -1
  13. package/package.json +75 -69
  14. package/dist/core/EntityManager.d.ts +0 -268
  15. package/dist/core/EntityManager.d.ts.map +0 -1
  16. package/dist/core/EntityManager.js +0 -512
  17. package/dist/core/EntityManager.js.map +0 -1
  18. package/dist/core/GraphEventEmitter.d.ts +0 -202
  19. package/dist/core/GraphEventEmitter.d.ts.map +0 -1
  20. package/dist/core/GraphEventEmitter.js +0 -347
  21. package/dist/core/GraphEventEmitter.js.map +0 -1
  22. package/dist/core/GraphStorage.d.ts +0 -395
  23. package/dist/core/GraphStorage.d.ts.map +0 -1
  24. package/dist/core/GraphStorage.js +0 -786
  25. package/dist/core/GraphStorage.js.map +0 -1
  26. package/dist/core/GraphTraversal.d.ts +0 -141
  27. package/dist/core/GraphTraversal.d.ts.map +0 -1
  28. package/dist/core/GraphTraversal.js +0 -574
  29. package/dist/core/GraphTraversal.js.map +0 -1
  30. package/dist/core/HierarchyManager.d.ts +0 -111
  31. package/dist/core/HierarchyManager.d.ts.map +0 -1
  32. package/dist/core/HierarchyManager.js +0 -225
  33. package/dist/core/HierarchyManager.js.map +0 -1
  34. package/dist/core/ManagerContext.d.ts +0 -76
  35. package/dist/core/ManagerContext.d.ts.map +0 -1
  36. package/dist/core/ManagerContext.js +0 -129
  37. package/dist/core/ManagerContext.js.map +0 -1
  38. package/dist/core/ObservationManager.d.ts +0 -85
  39. package/dist/core/ObservationManager.d.ts.map +0 -1
  40. package/dist/core/ObservationManager.js +0 -124
  41. package/dist/core/ObservationManager.js.map +0 -1
  42. package/dist/core/RelationManager.d.ts +0 -131
  43. package/dist/core/RelationManager.d.ts.map +0 -1
  44. package/dist/core/RelationManager.js +0 -212
  45. package/dist/core/RelationManager.js.map +0 -1
  46. package/dist/core/SQLiteStorage.d.ts +0 -354
  47. package/dist/core/SQLiteStorage.d.ts.map +0 -1
  48. package/dist/core/SQLiteStorage.js +0 -919
  49. package/dist/core/SQLiteStorage.js.map +0 -1
  50. package/dist/core/StorageFactory.d.ts +0 -45
  51. package/dist/core/StorageFactory.d.ts.map +0 -1
  52. package/dist/core/StorageFactory.js +0 -65
  53. package/dist/core/StorageFactory.js.map +0 -1
  54. package/dist/core/TransactionManager.d.ts +0 -464
  55. package/dist/core/TransactionManager.d.ts.map +0 -1
  56. package/dist/core/TransactionManager.js +0 -869
  57. package/dist/core/TransactionManager.js.map +0 -1
  58. package/dist/core/index.d.ts +0 -17
  59. package/dist/core/index.d.ts.map +0 -1
  60. package/dist/core/index.js +0 -20
  61. package/dist/core/index.js.map +0 -1
  62. package/dist/features/AnalyticsManager.d.ts +0 -44
  63. package/dist/features/AnalyticsManager.d.ts.map +0 -1
  64. package/dist/features/AnalyticsManager.js +0 -224
  65. package/dist/features/AnalyticsManager.js.map +0 -1
  66. package/dist/features/ArchiveManager.d.ts +0 -133
  67. package/dist/features/ArchiveManager.d.ts.map +0 -1
  68. package/dist/features/ArchiveManager.js +0 -282
  69. package/dist/features/ArchiveManager.js.map +0 -1
  70. package/dist/features/CompressionManager.d.ts +0 -119
  71. package/dist/features/CompressionManager.d.ts.map +0 -1
  72. package/dist/features/CompressionManager.js +0 -470
  73. package/dist/features/CompressionManager.js.map +0 -1
  74. package/dist/features/IOManager.d.ts +0 -225
  75. package/dist/features/IOManager.d.ts.map +0 -1
  76. package/dist/features/IOManager.js +0 -1093
  77. package/dist/features/IOManager.js.map +0 -1
  78. package/dist/features/KeywordExtractor.d.ts +0 -61
  79. package/dist/features/KeywordExtractor.d.ts.map +0 -1
  80. package/dist/features/KeywordExtractor.js +0 -127
  81. package/dist/features/KeywordExtractor.js.map +0 -1
  82. package/dist/features/ObservationNormalizer.d.ts +0 -90
  83. package/dist/features/ObservationNormalizer.d.ts.map +0 -1
  84. package/dist/features/ObservationNormalizer.js +0 -194
  85. package/dist/features/ObservationNormalizer.js.map +0 -1
  86. package/dist/features/StreamingExporter.d.ts +0 -128
  87. package/dist/features/StreamingExporter.d.ts.map +0 -1
  88. package/dist/features/StreamingExporter.js +0 -212
  89. package/dist/features/StreamingExporter.js.map +0 -1
  90. package/dist/features/TagManager.d.ts +0 -147
  91. package/dist/features/TagManager.d.ts.map +0 -1
  92. package/dist/features/TagManager.js +0 -211
  93. package/dist/features/TagManager.js.map +0 -1
  94. package/dist/features/index.d.ts +0 -14
  95. package/dist/features/index.d.ts.map +0 -1
  96. package/dist/features/index.js +0 -15
  97. package/dist/features/index.js.map +0 -1
  98. package/dist/index.d.ts.map +0 -1
  99. package/dist/search/BM25Search.d.ts +0 -148
  100. package/dist/search/BM25Search.d.ts.map +0 -1
  101. package/dist/search/BM25Search.js +0 -340
  102. package/dist/search/BM25Search.js.map +0 -1
  103. package/dist/search/BasicSearch.d.ts +0 -51
  104. package/dist/search/BasicSearch.d.ts.map +0 -1
  105. package/dist/search/BasicSearch.js +0 -138
  106. package/dist/search/BasicSearch.js.map +0 -1
  107. package/dist/search/BooleanSearch.d.ts +0 -98
  108. package/dist/search/BooleanSearch.d.ts.map +0 -1
  109. package/dist/search/BooleanSearch.js +0 -431
  110. package/dist/search/BooleanSearch.js.map +0 -1
  111. package/dist/search/EarlyTerminationManager.d.ts +0 -140
  112. package/dist/search/EarlyTerminationManager.d.ts.map +0 -1
  113. package/dist/search/EarlyTerminationManager.js +0 -280
  114. package/dist/search/EarlyTerminationManager.js.map +0 -1
  115. package/dist/search/EmbeddingCache.d.ts +0 -175
  116. package/dist/search/EmbeddingCache.d.ts.map +0 -1
  117. package/dist/search/EmbeddingCache.js +0 -247
  118. package/dist/search/EmbeddingCache.js.map +0 -1
  119. package/dist/search/EmbeddingService.d.ts +0 -277
  120. package/dist/search/EmbeddingService.d.ts.map +0 -1
  121. package/dist/search/EmbeddingService.js +0 -531
  122. package/dist/search/EmbeddingService.js.map +0 -1
  123. package/dist/search/FuzzySearch.d.ts +0 -118
  124. package/dist/search/FuzzySearch.d.ts.map +0 -1
  125. package/dist/search/FuzzySearch.js +0 -313
  126. package/dist/search/FuzzySearch.js.map +0 -1
  127. package/dist/search/HybridScorer.d.ts +0 -181
  128. package/dist/search/HybridScorer.d.ts.map +0 -1
  129. package/dist/search/HybridScorer.js +0 -258
  130. package/dist/search/HybridScorer.js.map +0 -1
  131. package/dist/search/HybridSearchManager.d.ts +0 -80
  132. package/dist/search/HybridSearchManager.d.ts.map +0 -1
  133. package/dist/search/HybridSearchManager.js +0 -188
  134. package/dist/search/HybridSearchManager.js.map +0 -1
  135. package/dist/search/IncrementalIndexer.d.ts +0 -201
  136. package/dist/search/IncrementalIndexer.d.ts.map +0 -1
  137. package/dist/search/IncrementalIndexer.js +0 -343
  138. package/dist/search/IncrementalIndexer.js.map +0 -1
  139. package/dist/search/OptimizedInvertedIndex.d.ts +0 -163
  140. package/dist/search/OptimizedInvertedIndex.d.ts.map +0 -1
  141. package/dist/search/OptimizedInvertedIndex.js +0 -359
  142. package/dist/search/OptimizedInvertedIndex.js.map +0 -1
  143. package/dist/search/ParallelSearchExecutor.d.ts +0 -172
  144. package/dist/search/ParallelSearchExecutor.d.ts.map +0 -1
  145. package/dist/search/ParallelSearchExecutor.js +0 -310
  146. package/dist/search/ParallelSearchExecutor.js.map +0 -1
  147. package/dist/search/QuantizedVectorStore.d.ts +0 -171
  148. package/dist/search/QuantizedVectorStore.d.ts.map +0 -1
  149. package/dist/search/QuantizedVectorStore.js +0 -308
  150. package/dist/search/QuantizedVectorStore.js.map +0 -1
  151. package/dist/search/QueryAnalyzer.d.ts +0 -76
  152. package/dist/search/QueryAnalyzer.d.ts.map +0 -1
  153. package/dist/search/QueryAnalyzer.js +0 -228
  154. package/dist/search/QueryAnalyzer.js.map +0 -1
  155. package/dist/search/QueryCostEstimator.d.ts +0 -244
  156. package/dist/search/QueryCostEstimator.d.ts.map +0 -1
  157. package/dist/search/QueryCostEstimator.js +0 -653
  158. package/dist/search/QueryCostEstimator.js.map +0 -1
  159. package/dist/search/QueryPlanCache.d.ts +0 -220
  160. package/dist/search/QueryPlanCache.d.ts.map +0 -1
  161. package/dist/search/QueryPlanCache.js +0 -380
  162. package/dist/search/QueryPlanCache.js.map +0 -1
  163. package/dist/search/QueryPlanner.d.ts +0 -58
  164. package/dist/search/QueryPlanner.d.ts.map +0 -1
  165. package/dist/search/QueryPlanner.js +0 -138
  166. package/dist/search/QueryPlanner.js.map +0 -1
  167. package/dist/search/RankedSearch.d.ts +0 -71
  168. package/dist/search/RankedSearch.d.ts.map +0 -1
  169. package/dist/search/RankedSearch.js +0 -239
  170. package/dist/search/RankedSearch.js.map +0 -1
  171. package/dist/search/ReflectionManager.d.ts +0 -120
  172. package/dist/search/ReflectionManager.d.ts.map +0 -1
  173. package/dist/search/ReflectionManager.js +0 -232
  174. package/dist/search/ReflectionManager.js.map +0 -1
  175. package/dist/search/SavedSearchManager.d.ts +0 -79
  176. package/dist/search/SavedSearchManager.d.ts.map +0 -1
  177. package/dist/search/SavedSearchManager.js +0 -147
  178. package/dist/search/SavedSearchManager.js.map +0 -1
  179. package/dist/search/SearchFilterChain.d.ts +0 -120
  180. package/dist/search/SearchFilterChain.d.ts.map +0 -1
  181. package/dist/search/SearchFilterChain.js +0 -186
  182. package/dist/search/SearchFilterChain.js.map +0 -1
  183. package/dist/search/SearchManager.d.ts +0 -326
  184. package/dist/search/SearchManager.d.ts.map +0 -1
  185. package/dist/search/SearchManager.js +0 -454
  186. package/dist/search/SearchManager.js.map +0 -1
  187. package/dist/search/SearchSuggestions.d.ts +0 -27
  188. package/dist/search/SearchSuggestions.d.ts.map +0 -1
  189. package/dist/search/SearchSuggestions.js +0 -58
  190. package/dist/search/SearchSuggestions.js.map +0 -1
  191. package/dist/search/SemanticSearch.d.ts +0 -149
  192. package/dist/search/SemanticSearch.d.ts.map +0 -1
  193. package/dist/search/SemanticSearch.js +0 -324
  194. package/dist/search/SemanticSearch.js.map +0 -1
  195. package/dist/search/SymbolicSearch.d.ts +0 -61
  196. package/dist/search/SymbolicSearch.d.ts.map +0 -1
  197. package/dist/search/SymbolicSearch.js +0 -164
  198. package/dist/search/SymbolicSearch.js.map +0 -1
  199. package/dist/search/TFIDFEventSync.d.ts +0 -85
  200. package/dist/search/TFIDFEventSync.d.ts.map +0 -1
  201. package/dist/search/TFIDFEventSync.js +0 -134
  202. package/dist/search/TFIDFEventSync.js.map +0 -1
  203. package/dist/search/TFIDFIndexManager.d.ts +0 -151
  204. package/dist/search/TFIDFIndexManager.d.ts.map +0 -1
  205. package/dist/search/TFIDFIndexManager.js +0 -433
  206. package/dist/search/TFIDFIndexManager.js.map +0 -1
  207. package/dist/search/VectorStore.d.ts +0 -235
  208. package/dist/search/VectorStore.d.ts.map +0 -1
  209. package/dist/search/VectorStore.js +0 -312
  210. package/dist/search/VectorStore.js.map +0 -1
  211. package/dist/search/index.d.ts +0 -35
  212. package/dist/search/index.d.ts.map +0 -1
  213. package/dist/search/index.js +0 -53
  214. package/dist/search/index.js.map +0 -1
  215. package/dist/types/index.d.ts +0 -13
  216. package/dist/types/index.d.ts.map +0 -1
  217. package/dist/types/index.js +0 -13
  218. package/dist/types/index.js.map +0 -1
  219. package/dist/types/types.d.ts +0 -1811
  220. package/dist/types/types.d.ts.map +0 -1
  221. package/dist/types/types.js +0 -10
  222. package/dist/types/types.js.map +0 -1
  223. package/dist/utils/BatchProcessor.d.ts +0 -271
  224. package/dist/utils/BatchProcessor.d.ts.map +0 -1
  225. package/dist/utils/BatchProcessor.js +0 -377
  226. package/dist/utils/BatchProcessor.js.map +0 -1
  227. package/dist/utils/MemoryMonitor.d.ts +0 -176
  228. package/dist/utils/MemoryMonitor.d.ts.map +0 -1
  229. package/dist/utils/MemoryMonitor.js +0 -306
  230. package/dist/utils/MemoryMonitor.js.map +0 -1
  231. package/dist/utils/WorkerPoolManager.d.ts +0 -233
  232. package/dist/utils/WorkerPoolManager.d.ts.map +0 -1
  233. package/dist/utils/WorkerPoolManager.js +0 -421
  234. package/dist/utils/WorkerPoolManager.js.map +0 -1
  235. package/dist/utils/compressedCache.d.ts +0 -221
  236. package/dist/utils/compressedCache.d.ts.map +0 -1
  237. package/dist/utils/compressedCache.js +0 -349
  238. package/dist/utils/compressedCache.js.map +0 -1
  239. package/dist/utils/compressionUtil.d.ts +0 -214
  240. package/dist/utils/compressionUtil.d.ts.map +0 -1
  241. package/dist/utils/compressionUtil.js +0 -248
  242. package/dist/utils/compressionUtil.js.map +0 -1
  243. package/dist/utils/constants.d.ts +0 -245
  244. package/dist/utils/constants.d.ts.map +0 -1
  245. package/dist/utils/constants.js +0 -253
  246. package/dist/utils/constants.js.map +0 -1
  247. package/dist/utils/entityUtils.d.ts +0 -379
  248. package/dist/utils/entityUtils.d.ts.map +0 -1
  249. package/dist/utils/entityUtils.js +0 -649
  250. package/dist/utils/entityUtils.js.map +0 -1
  251. package/dist/utils/errors.d.ts +0 -95
  252. package/dist/utils/errors.d.ts.map +0 -1
  253. package/dist/utils/errors.js +0 -146
  254. package/dist/utils/errors.js.map +0 -1
  255. package/dist/utils/formatters.d.ts +0 -145
  256. package/dist/utils/formatters.d.ts.map +0 -1
  257. package/dist/utils/formatters.js +0 -133
  258. package/dist/utils/formatters.js.map +0 -1
  259. package/dist/utils/index.d.ts +0 -26
  260. package/dist/utils/index.d.ts.map +0 -1
  261. package/dist/utils/index.js +0 -88
  262. package/dist/utils/index.js.map +0 -1
  263. package/dist/utils/indexes.d.ts +0 -270
  264. package/dist/utils/indexes.d.ts.map +0 -1
  265. package/dist/utils/indexes.js +0 -527
  266. package/dist/utils/indexes.js.map +0 -1
  267. package/dist/utils/logger.d.ts +0 -31
  268. package/dist/utils/logger.d.ts.map +0 -1
  269. package/dist/utils/logger.js +0 -41
  270. package/dist/utils/logger.js.map +0 -1
  271. package/dist/utils/operationUtils.d.ts +0 -124
  272. package/dist/utils/operationUtils.d.ts.map +0 -1
  273. package/dist/utils/operationUtils.js +0 -176
  274. package/dist/utils/operationUtils.js.map +0 -1
  275. package/dist/utils/parallelUtils.d.ts +0 -76
  276. package/dist/utils/parallelUtils.d.ts.map +0 -1
  277. package/dist/utils/parallelUtils.js +0 -192
  278. package/dist/utils/parallelUtils.js.map +0 -1
  279. package/dist/utils/schemas.d.ts +0 -556
  280. package/dist/utils/schemas.d.ts.map +0 -1
  281. package/dist/utils/schemas.js +0 -485
  282. package/dist/utils/schemas.js.map +0 -1
  283. package/dist/utils/searchAlgorithms.d.ts +0 -99
  284. package/dist/utils/searchAlgorithms.d.ts.map +0 -1
  285. package/dist/utils/searchAlgorithms.js +0 -168
  286. package/dist/utils/searchAlgorithms.js.map +0 -1
  287. package/dist/utils/searchCache.d.ts +0 -108
  288. package/dist/utils/searchCache.d.ts.map +0 -1
  289. package/dist/utils/searchCache.js +0 -210
  290. package/dist/utils/searchCache.js.map +0 -1
  291. package/dist/utils/taskScheduler.d.ts +0 -294
  292. package/dist/utils/taskScheduler.d.ts.map +0 -1
  293. package/dist/utils/taskScheduler.js +0 -487
  294. package/dist/utils/taskScheduler.js.map +0 -1
  295. package/dist/workers/index.d.ts +0 -12
  296. package/dist/workers/index.d.ts.map +0 -1
  297. package/dist/workers/index.js +0 -10
  298. package/dist/workers/index.js.map +0 -1
  299. package/dist/workers/levenshteinWorker.d.ts +0 -60
  300. package/dist/workers/levenshteinWorker.d.ts.map +0 -1
@@ -1,201 +0,0 @@
1
- /**
2
- * Incremental Indexer
3
- *
4
- * Phase 12 Sprint 5: Queues embedding index updates and batch-processes them
5
- * efficiently using flush thresholds and timer-based flushing.
6
- *
7
- * @module search/IncrementalIndexer
8
- */
9
- import type { EmbeddingService, EmbeddingMode } from '../types/index.js';
10
- import type { IVectorStore } from '../types/index.js';
11
- import type { EmbeddingProgressCallback } from './EmbeddingService.js';
12
- /**
13
- * Types of index operations.
14
- */
15
- export type IndexOperationType = 'create' | 'update' | 'delete';
16
- /**
17
- * Queued index operation.
18
- */
19
- export interface IndexOperation {
20
- /** Type of operation */
21
- type: IndexOperationType;
22
- /** Entity name */
23
- entityName: string;
24
- /** Text to embed (for create/update) */
25
- text?: string;
26
- /** Timestamp when operation was queued */
27
- queuedAt: number;
28
- }
29
- /**
30
- * Options for IncrementalIndexer.
31
- */
32
- export interface IncrementalIndexerOptions {
33
- /** Flush threshold - number of operations to queue before auto-flush (default: 50) */
34
- flushThreshold?: number;
35
- /** Timer-based flush interval in milliseconds (default: 5000ms) */
36
- flushIntervalMs?: number;
37
- /** Embedding mode for new embeddings (default: 'document') */
38
- embeddingMode?: EmbeddingMode;
39
- /** Progress callback for batch operations */
40
- onProgress?: EmbeddingProgressCallback;
41
- }
42
- /**
43
- * Default indexer options.
44
- */
45
- export declare const DEFAULT_INDEXER_OPTIONS: Required<Omit<IncrementalIndexerOptions, 'onProgress'>>;
46
- /**
47
- * Result of a flush operation.
48
- */
49
- export interface FlushResult {
50
- /** Number of operations processed */
51
- processed: number;
52
- /** Number of successful operations */
53
- succeeded: number;
54
- /** Number of failed operations */
55
- failed: number;
56
- /** Errors encountered during flush */
57
- errors: Array<{
58
- entityName: string;
59
- error: string;
60
- }>;
61
- /** Duration of flush in milliseconds */
62
- durationMs: number;
63
- }
64
- /**
65
- * Incremental indexer for embedding vectors.
66
- *
67
- * Queues index updates and batch-processes them efficiently:
68
- * - Auto-flush when queue reaches threshold
69
- * - Timer-based flush for time-sensitive updates
70
- * - Supports create, update, and delete operations
71
- * - Graceful shutdown with final flush
72
- *
73
- * @example
74
- * ```typescript
75
- * const indexer = new IncrementalIndexer(embeddingService, vectorStore, {
76
- * flushThreshold: 100,
77
- * flushIntervalMs: 10000,
78
- * });
79
- *
80
- * // Queue operations
81
- * indexer.queueCreate('entity1', 'Entity text content');
82
- * indexer.queueUpdate('entity2', 'Updated text content');
83
- * indexer.queueDelete('entity3');
84
- *
85
- * // Manual flush
86
- * const result = await indexer.flush();
87
- * console.log(`Processed ${result.processed} operations`);
88
- *
89
- * // Graceful shutdown
90
- * await indexer.shutdown();
91
- * ```
92
- */
93
- export declare class IncrementalIndexer {
94
- private embeddingService;
95
- private vectorStore;
96
- private options;
97
- private onProgress?;
98
- private queue;
99
- private flushTimer;
100
- private isFlushing;
101
- private isShutdown;
102
- /**
103
- * Create a new incremental indexer.
104
- *
105
- * @param embeddingService - Service for generating embeddings
106
- * @param vectorStore - Store for embedding vectors
107
- * @param options - Indexer configuration options
108
- */
109
- constructor(embeddingService: EmbeddingService, vectorStore: IVectorStore, options?: IncrementalIndexerOptions);
110
- /**
111
- * Start the timer-based flush interval.
112
- */
113
- private startFlushTimer;
114
- /**
115
- * Stop the flush timer.
116
- */
117
- private stopFlushTimer;
118
- /**
119
- * Queue a create operation.
120
- *
121
- * @param entityName - Name of the entity to create
122
- * @param text - Text content to embed
123
- */
124
- queueCreate(entityName: string, text: string): void;
125
- /**
126
- * Queue an update operation.
127
- *
128
- * @param entityName - Name of the entity to update
129
- * @param text - Updated text content to embed
130
- */
131
- queueUpdate(entityName: string, text: string): void;
132
- /**
133
- * Queue a delete operation.
134
- *
135
- * @param entityName - Name of the entity to delete
136
- */
137
- queueDelete(entityName: string): void;
138
- /**
139
- * Remove all queued operations for an entity.
140
- *
141
- * @param entityName - Entity name to remove from queue
142
- */
143
- private removeFromQueue;
144
- /**
145
- * Check if auto-flush threshold is reached.
146
- */
147
- private checkAutoFlush;
148
- /**
149
- * Flush the queue and process all pending operations.
150
- *
151
- * @returns Result of the flush operation
152
- */
153
- flush(): Promise<FlushResult>;
154
- /**
155
- * Get the current queue size.
156
- *
157
- * @returns Number of operations in the queue
158
- */
159
- getQueueSize(): number;
160
- /**
161
- * Get the current queue contents (for debugging/monitoring).
162
- *
163
- * @returns Copy of the current queue
164
- */
165
- getQueue(): IndexOperation[];
166
- /**
167
- * Check if the indexer is currently flushing.
168
- *
169
- * @returns True if flushing
170
- */
171
- isBusy(): boolean;
172
- /**
173
- * Check if the indexer is shutdown.
174
- *
175
- * @returns True if shutdown
176
- */
177
- isShutdownComplete(): boolean;
178
- /**
179
- * Graceful shutdown with final flush.
180
- *
181
- * Stops the timer and flushes any remaining operations.
182
- *
183
- * @returns Result of the final flush
184
- */
185
- shutdown(): Promise<FlushResult>;
186
- /**
187
- * Update indexer options.
188
- *
189
- * Note: Changes to flushIntervalMs will take effect on the next interval.
190
- *
191
- * @param options - New options to apply
192
- */
193
- updateOptions(options: Partial<IncrementalIndexerOptions>): void;
194
- /**
195
- * Clear the queue without processing.
196
- *
197
- * @returns Number of operations cleared
198
- */
199
- clearQueue(): number;
200
- }
201
- //# sourceMappingURL=IncrementalIndexer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"IncrementalIndexer.d.ts","sourceRoot":"","sources":["../../src/search/IncrementalIndexer.ts"],"names":[],"mappings":"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"}
@@ -1,343 +0,0 @@
1
- /**
2
- * Incremental Indexer
3
- *
4
- * Phase 12 Sprint 5: Queues embedding index updates and batch-processes them
5
- * efficiently using flush thresholds and timer-based flushing.
6
- *
7
- * @module search/IncrementalIndexer
8
- */
9
- /**
10
- * Default indexer options.
11
- */
12
- export const DEFAULT_INDEXER_OPTIONS = {
13
- flushThreshold: 50,
14
- flushIntervalMs: 5000,
15
- embeddingMode: 'document',
16
- };
17
- /**
18
- * Incremental indexer for embedding vectors.
19
- *
20
- * Queues index updates and batch-processes them efficiently:
21
- * - Auto-flush when queue reaches threshold
22
- * - Timer-based flush for time-sensitive updates
23
- * - Supports create, update, and delete operations
24
- * - Graceful shutdown with final flush
25
- *
26
- * @example
27
- * ```typescript
28
- * const indexer = new IncrementalIndexer(embeddingService, vectorStore, {
29
- * flushThreshold: 100,
30
- * flushIntervalMs: 10000,
31
- * });
32
- *
33
- * // Queue operations
34
- * indexer.queueCreate('entity1', 'Entity text content');
35
- * indexer.queueUpdate('entity2', 'Updated text content');
36
- * indexer.queueDelete('entity3');
37
- *
38
- * // Manual flush
39
- * const result = await indexer.flush();
40
- * console.log(`Processed ${result.processed} operations`);
41
- *
42
- * // Graceful shutdown
43
- * await indexer.shutdown();
44
- * ```
45
- */
46
- export class IncrementalIndexer {
47
- embeddingService;
48
- vectorStore;
49
- options;
50
- onProgress;
51
- queue = [];
52
- flushTimer = null;
53
- isFlushing = false;
54
- isShutdown = false;
55
- /**
56
- * Create a new incremental indexer.
57
- *
58
- * @param embeddingService - Service for generating embeddings
59
- * @param vectorStore - Store for embedding vectors
60
- * @param options - Indexer configuration options
61
- */
62
- constructor(embeddingService, vectorStore, options) {
63
- this.embeddingService = embeddingService;
64
- this.vectorStore = vectorStore;
65
- this.options = { ...DEFAULT_INDEXER_OPTIONS, ...options };
66
- this.onProgress = options?.onProgress;
67
- // Start the flush timer
68
- this.startFlushTimer();
69
- }
70
- /**
71
- * Start the timer-based flush interval.
72
- */
73
- startFlushTimer() {
74
- if (this.flushTimer || this.isShutdown) {
75
- return;
76
- }
77
- this.flushTimer = setInterval(async () => {
78
- if (this.queue.length > 0 && !this.isFlushing) {
79
- await this.flush();
80
- }
81
- }, this.options.flushIntervalMs);
82
- }
83
- /**
84
- * Stop the flush timer.
85
- */
86
- stopFlushTimer() {
87
- if (this.flushTimer) {
88
- clearInterval(this.flushTimer);
89
- this.flushTimer = null;
90
- }
91
- }
92
- /**
93
- * Queue a create operation.
94
- *
95
- * @param entityName - Name of the entity to create
96
- * @param text - Text content to embed
97
- */
98
- queueCreate(entityName, text) {
99
- if (this.isShutdown) {
100
- throw new Error('Indexer is shutdown');
101
- }
102
- // Remove any existing operations for this entity
103
- this.removeFromQueue(entityName);
104
- this.queue.push({
105
- type: 'create',
106
- entityName,
107
- text,
108
- queuedAt: Date.now(),
109
- });
110
- this.checkAutoFlush();
111
- }
112
- /**
113
- * Queue an update operation.
114
- *
115
- * @param entityName - Name of the entity to update
116
- * @param text - Updated text content to embed
117
- */
118
- queueUpdate(entityName, text) {
119
- if (this.isShutdown) {
120
- throw new Error('Indexer is shutdown');
121
- }
122
- // Remove any existing operations for this entity
123
- this.removeFromQueue(entityName);
124
- this.queue.push({
125
- type: 'update',
126
- entityName,
127
- text,
128
- queuedAt: Date.now(),
129
- });
130
- this.checkAutoFlush();
131
- }
132
- /**
133
- * Queue a delete operation.
134
- *
135
- * @param entityName - Name of the entity to delete
136
- */
137
- queueDelete(entityName) {
138
- if (this.isShutdown) {
139
- throw new Error('Indexer is shutdown');
140
- }
141
- // Remove any existing operations for this entity
142
- this.removeFromQueue(entityName);
143
- this.queue.push({
144
- type: 'delete',
145
- entityName,
146
- queuedAt: Date.now(),
147
- });
148
- this.checkAutoFlush();
149
- }
150
- /**
151
- * Remove all queued operations for an entity.
152
- *
153
- * @param entityName - Entity name to remove from queue
154
- */
155
- removeFromQueue(entityName) {
156
- this.queue = this.queue.filter(op => op.entityName !== entityName);
157
- }
158
- /**
159
- * Check if auto-flush threshold is reached.
160
- */
161
- checkAutoFlush() {
162
- if (this.queue.length >= this.options.flushThreshold && !this.isFlushing) {
163
- // Use setImmediate to avoid blocking
164
- setImmediate(() => this.flush());
165
- }
166
- }
167
- /**
168
- * Flush the queue and process all pending operations.
169
- *
170
- * @returns Result of the flush operation
171
- */
172
- async flush() {
173
- if (this.isFlushing) {
174
- return {
175
- processed: 0,
176
- succeeded: 0,
177
- failed: 0,
178
- errors: [],
179
- durationMs: 0,
180
- };
181
- }
182
- this.isFlushing = true;
183
- const startTime = Date.now();
184
- const errors = [];
185
- let succeeded = 0;
186
- let failed = 0;
187
- // Take the current queue
188
- const operations = [...this.queue];
189
- this.queue = [];
190
- try {
191
- // Separate operations by type
192
- const createOps = operations.filter(op => op.type === 'create');
193
- const updateOps = operations.filter(op => op.type === 'update');
194
- const deleteOps = operations.filter(op => op.type === 'delete');
195
- // Process deletes first (fast, O(1))
196
- for (const op of deleteOps) {
197
- try {
198
- this.vectorStore.remove(op.entityName);
199
- succeeded++;
200
- }
201
- catch (error) {
202
- failed++;
203
- errors.push({
204
- entityName: op.entityName,
205
- error: error instanceof Error ? error.message : String(error),
206
- });
207
- }
208
- }
209
- // Batch process creates and updates together
210
- const embedOps = [...createOps, ...updateOps];
211
- if (embedOps.length > 0) {
212
- const texts = embedOps.map(op => op.text);
213
- const entityNames = embedOps.map(op => op.entityName);
214
- try {
215
- // Check if the embedding service has the batch with progress method
216
- let embeddings;
217
- if (this.onProgress && 'embedBatchWithProgress' in this.embeddingService) {
218
- embeddings = await this.embeddingService
219
- .embedBatchWithProgress(texts, this.options.embeddingMode, this.onProgress);
220
- }
221
- else {
222
- embeddings = await this.embeddingService.embedBatch(texts, this.options.embeddingMode);
223
- }
224
- // Store each embedding
225
- for (let i = 0; i < embeddings.length; i++) {
226
- try {
227
- this.vectorStore.add(entityNames[i], embeddings[i]);
228
- succeeded++;
229
- }
230
- catch (error) {
231
- failed++;
232
- errors.push({
233
- entityName: entityNames[i],
234
- error: error instanceof Error ? error.message : String(error),
235
- });
236
- }
237
- }
238
- }
239
- catch (error) {
240
- // Batch embedding failed, count all as failed
241
- failed += embedOps.length;
242
- for (const op of embedOps) {
243
- errors.push({
244
- entityName: op.entityName,
245
- error: error instanceof Error ? error.message : String(error),
246
- });
247
- }
248
- }
249
- }
250
- }
251
- finally {
252
- this.isFlushing = false;
253
- }
254
- return {
255
- processed: operations.length,
256
- succeeded,
257
- failed,
258
- errors,
259
- durationMs: Date.now() - startTime,
260
- };
261
- }
262
- /**
263
- * Get the current queue size.
264
- *
265
- * @returns Number of operations in the queue
266
- */
267
- getQueueSize() {
268
- return this.queue.length;
269
- }
270
- /**
271
- * Get the current queue contents (for debugging/monitoring).
272
- *
273
- * @returns Copy of the current queue
274
- */
275
- getQueue() {
276
- return [...this.queue];
277
- }
278
- /**
279
- * Check if the indexer is currently flushing.
280
- *
281
- * @returns True if flushing
282
- */
283
- isBusy() {
284
- return this.isFlushing;
285
- }
286
- /**
287
- * Check if the indexer is shutdown.
288
- *
289
- * @returns True if shutdown
290
- */
291
- isShutdownComplete() {
292
- return this.isShutdown;
293
- }
294
- /**
295
- * Graceful shutdown with final flush.
296
- *
297
- * Stops the timer and flushes any remaining operations.
298
- *
299
- * @returns Result of the final flush
300
- */
301
- async shutdown() {
302
- this.isShutdown = true;
303
- this.stopFlushTimer();
304
- // Wait for any in-progress flush to complete
305
- while (this.isFlushing) {
306
- await new Promise(resolve => setTimeout(resolve, 10));
307
- }
308
- // Final flush
309
- return this.flush();
310
- }
311
- /**
312
- * Update indexer options.
313
- *
314
- * Note: Changes to flushIntervalMs will take effect on the next interval.
315
- *
316
- * @param options - New options to apply
317
- */
318
- updateOptions(options) {
319
- const { onProgress, ...rest } = options;
320
- if (onProgress !== undefined) {
321
- this.onProgress = onProgress;
322
- }
323
- if (Object.keys(rest).length > 0) {
324
- this.options = { ...this.options, ...rest };
325
- // Restart timer if interval changed
326
- if (rest.flushIntervalMs !== undefined) {
327
- this.stopFlushTimer();
328
- this.startFlushTimer();
329
- }
330
- }
331
- }
332
- /**
333
- * Clear the queue without processing.
334
- *
335
- * @returns Number of operations cleared
336
- */
337
- clearQueue() {
338
- const count = this.queue.length;
339
- this.queue = [];
340
- return count;
341
- }
342
- }
343
- //# sourceMappingURL=IncrementalIndexer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"IncrementalIndexer.js","sourceRoot":"","sources":["../../src/search/IncrementalIndexer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAuCH;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAA4D;IAC9F,cAAc,EAAE,EAAE;IAClB,eAAe,EAAE,IAAI;IACrB,aAAa,EAAE,UAAU;CAC1B,CAAC;AAkBF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,OAAO,kBAAkB;IACrB,gBAAgB,CAAmB;IACnC,WAAW,CAAe;IAC1B,OAAO,CAA0D;IACjE,UAAU,CAA6B;IAEvC,KAAK,GAAqB,EAAE,CAAC;IAC7B,UAAU,GAAyC,IAAI,CAAC;IACxD,UAAU,GAAG,KAAK,CAAC;IACnB,UAAU,GAAG,KAAK,CAAC;IAE3B;;;;;;OAMG;IACH,YACE,gBAAkC,EAClC,WAAyB,EACzB,OAAmC;QAEnC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,uBAAuB,EAAE,GAAG,OAAO,EAAE,CAAC;QAC1D,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;QAEtC,wBAAwB;QACxB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,eAAe;QACrB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YACvC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC9C,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACK,cAAc;QACpB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,UAAkB,EAAE,IAAY;QAC1C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,iDAAiD;QACjD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAEjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,QAAQ;YACd,UAAU;YACV,IAAI;YACJ,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,UAAkB,EAAE,IAAY;QAC1C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,iDAAiD;QACjD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAEjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,QAAQ;YACd,UAAU;YACV,IAAI;YACJ,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,UAAkB;QAC5B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,iDAAiD;QACjD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAEjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,QAAQ;YACd,UAAU;YACV,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACK,eAAe,CAAC,UAAkB;QACxC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;IACrE,CAAC;IAED;;OAEG;IACK,cAAc;QACpB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACzE,qCAAqC;YACrC,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO;gBACL,SAAS,EAAE,CAAC;gBACZ,SAAS,EAAE,CAAC;gBACZ,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,EAAE;gBACV,UAAU,EAAE,CAAC;aACd,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAiD,EAAE,CAAC;QAChE,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,yBAAyB;QACzB,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAEhB,IAAI,CAAC;YACH,8BAA8B;YAC9B,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;YAChE,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;YAChE,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;YAEhE,qCAAqC;YACrC,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;oBACvC,SAAS,EAAE,CAAC;gBACd,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,EAAE,CAAC;oBACT,MAAM,CAAC,IAAI,CAAC;wBACV,UAAU,EAAE,EAAE,CAAC,UAAU;wBACzB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;qBAC9D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,6CAA6C;YAC7C,MAAM,QAAQ,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,SAAS,CAAC,CAAC;YAC9C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAK,CAAC,CAAC;gBAC3C,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;gBAEtD,IAAI,CAAC;oBACH,oEAAoE;oBACpE,IAAI,UAAsB,CAAC;oBAE3B,IAAI,IAAI,CAAC,UAAU,IAAI,wBAAwB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACzE,UAAU,GAAG,MAAO,IAAI,CAAC,gBAAsJ;6BAC5K,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;oBAChF,CAAC;yBAAM,CAAC;wBACN,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;oBACzF,CAAC;oBAED,uBAAuB;oBACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC3C,IAAI,CAAC;4BACH,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;4BACpD,SAAS,EAAE,CAAC;wBACd,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,MAAM,EAAE,CAAC;4BACT,MAAM,CAAC,IAAI,CAAC;gCACV,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;gCAC1B,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;6BAC9D,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,8CAA8C;oBAC9C,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC;oBAC1B,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;wBAC1B,MAAM,CAAC,IAAI,CAAC;4BACV,UAAU,EAAE,EAAE,CAAC,UAAU;4BACzB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;yBAC9D,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAC1B,CAAC;QAED,OAAO;YACL,SAAS,EAAE,UAAU,CAAC,MAAM;YAC5B,SAAS;YACT,MAAM;YACN,MAAM;YACN,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACnC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACH,kBAAkB;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,6CAA6C;QAC7C,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;YACvB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC;QAED,cAAc;QACd,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED;;;;;;OAMG;IACH,aAAa,CAAC,OAA2C;QACvD,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;QAExC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC/B,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,EAA6D,CAAC;YAEvG,oCAAoC;YACpC,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;gBACvC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,UAAU;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}