@danielsimonjr/memoryjs 1.0.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 (295) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +266 -0
  3. package/dist/core/EntityManager.d.ts +268 -0
  4. package/dist/core/EntityManager.d.ts.map +1 -0
  5. package/dist/core/EntityManager.js +512 -0
  6. package/dist/core/EntityManager.js.map +1 -0
  7. package/dist/core/GraphEventEmitter.d.ts +202 -0
  8. package/dist/core/GraphEventEmitter.d.ts.map +1 -0
  9. package/dist/core/GraphEventEmitter.js +347 -0
  10. package/dist/core/GraphEventEmitter.js.map +1 -0
  11. package/dist/core/GraphStorage.d.ts +395 -0
  12. package/dist/core/GraphStorage.d.ts.map +1 -0
  13. package/dist/core/GraphStorage.js +786 -0
  14. package/dist/core/GraphStorage.js.map +1 -0
  15. package/dist/core/GraphTraversal.d.ts +141 -0
  16. package/dist/core/GraphTraversal.d.ts.map +1 -0
  17. package/dist/core/GraphTraversal.js +574 -0
  18. package/dist/core/GraphTraversal.js.map +1 -0
  19. package/dist/core/HierarchyManager.d.ts +111 -0
  20. package/dist/core/HierarchyManager.d.ts.map +1 -0
  21. package/dist/core/HierarchyManager.js +225 -0
  22. package/dist/core/HierarchyManager.js.map +1 -0
  23. package/dist/core/ManagerContext.d.ts +76 -0
  24. package/dist/core/ManagerContext.d.ts.map +1 -0
  25. package/dist/core/ManagerContext.js +129 -0
  26. package/dist/core/ManagerContext.js.map +1 -0
  27. package/dist/core/ObservationManager.d.ts +85 -0
  28. package/dist/core/ObservationManager.d.ts.map +1 -0
  29. package/dist/core/ObservationManager.js +124 -0
  30. package/dist/core/ObservationManager.js.map +1 -0
  31. package/dist/core/RelationManager.d.ts +131 -0
  32. package/dist/core/RelationManager.d.ts.map +1 -0
  33. package/dist/core/RelationManager.js +212 -0
  34. package/dist/core/RelationManager.js.map +1 -0
  35. package/dist/core/SQLiteStorage.d.ts +354 -0
  36. package/dist/core/SQLiteStorage.d.ts.map +1 -0
  37. package/dist/core/SQLiteStorage.js +919 -0
  38. package/dist/core/SQLiteStorage.js.map +1 -0
  39. package/dist/core/StorageFactory.d.ts +45 -0
  40. package/dist/core/StorageFactory.d.ts.map +1 -0
  41. package/dist/core/StorageFactory.js +65 -0
  42. package/dist/core/StorageFactory.js.map +1 -0
  43. package/dist/core/TransactionManager.d.ts +464 -0
  44. package/dist/core/TransactionManager.d.ts.map +1 -0
  45. package/dist/core/TransactionManager.js +869 -0
  46. package/dist/core/TransactionManager.js.map +1 -0
  47. package/dist/core/index.d.ts +17 -0
  48. package/dist/core/index.d.ts.map +1 -0
  49. package/dist/core/index.js +20 -0
  50. package/dist/core/index.js.map +1 -0
  51. package/dist/features/AnalyticsManager.d.ts +44 -0
  52. package/dist/features/AnalyticsManager.d.ts.map +1 -0
  53. package/dist/features/AnalyticsManager.js +224 -0
  54. package/dist/features/AnalyticsManager.js.map +1 -0
  55. package/dist/features/ArchiveManager.d.ts +133 -0
  56. package/dist/features/ArchiveManager.d.ts.map +1 -0
  57. package/dist/features/ArchiveManager.js +282 -0
  58. package/dist/features/ArchiveManager.js.map +1 -0
  59. package/dist/features/CompressionManager.d.ts +119 -0
  60. package/dist/features/CompressionManager.d.ts.map +1 -0
  61. package/dist/features/CompressionManager.js +470 -0
  62. package/dist/features/CompressionManager.js.map +1 -0
  63. package/dist/features/IOManager.d.ts +225 -0
  64. package/dist/features/IOManager.d.ts.map +1 -0
  65. package/dist/features/IOManager.js +1093 -0
  66. package/dist/features/IOManager.js.map +1 -0
  67. package/dist/features/KeywordExtractor.d.ts +61 -0
  68. package/dist/features/KeywordExtractor.d.ts.map +1 -0
  69. package/dist/features/KeywordExtractor.js +127 -0
  70. package/dist/features/KeywordExtractor.js.map +1 -0
  71. package/dist/features/ObservationNormalizer.d.ts +90 -0
  72. package/dist/features/ObservationNormalizer.d.ts.map +1 -0
  73. package/dist/features/ObservationNormalizer.js +194 -0
  74. package/dist/features/ObservationNormalizer.js.map +1 -0
  75. package/dist/features/StreamingExporter.d.ts +128 -0
  76. package/dist/features/StreamingExporter.d.ts.map +1 -0
  77. package/dist/features/StreamingExporter.js +212 -0
  78. package/dist/features/StreamingExporter.js.map +1 -0
  79. package/dist/features/TagManager.d.ts +147 -0
  80. package/dist/features/TagManager.d.ts.map +1 -0
  81. package/dist/features/TagManager.js +211 -0
  82. package/dist/features/TagManager.js.map +1 -0
  83. package/dist/features/index.d.ts +14 -0
  84. package/dist/features/index.d.ts.map +1 -0
  85. package/dist/features/index.js +15 -0
  86. package/dist/features/index.js.map +1 -0
  87. package/dist/index.d.ts +15 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +20 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/search/BM25Search.d.ts +148 -0
  92. package/dist/search/BM25Search.d.ts.map +1 -0
  93. package/dist/search/BM25Search.js +340 -0
  94. package/dist/search/BM25Search.js.map +1 -0
  95. package/dist/search/BasicSearch.d.ts +51 -0
  96. package/dist/search/BasicSearch.d.ts.map +1 -0
  97. package/dist/search/BasicSearch.js +138 -0
  98. package/dist/search/BasicSearch.js.map +1 -0
  99. package/dist/search/BooleanSearch.d.ts +98 -0
  100. package/dist/search/BooleanSearch.d.ts.map +1 -0
  101. package/dist/search/BooleanSearch.js +431 -0
  102. package/dist/search/BooleanSearch.js.map +1 -0
  103. package/dist/search/EarlyTerminationManager.d.ts +140 -0
  104. package/dist/search/EarlyTerminationManager.d.ts.map +1 -0
  105. package/dist/search/EarlyTerminationManager.js +280 -0
  106. package/dist/search/EarlyTerminationManager.js.map +1 -0
  107. package/dist/search/EmbeddingCache.d.ts +175 -0
  108. package/dist/search/EmbeddingCache.d.ts.map +1 -0
  109. package/dist/search/EmbeddingCache.js +247 -0
  110. package/dist/search/EmbeddingCache.js.map +1 -0
  111. package/dist/search/EmbeddingService.d.ts +277 -0
  112. package/dist/search/EmbeddingService.d.ts.map +1 -0
  113. package/dist/search/EmbeddingService.js +531 -0
  114. package/dist/search/EmbeddingService.js.map +1 -0
  115. package/dist/search/FuzzySearch.d.ts +118 -0
  116. package/dist/search/FuzzySearch.d.ts.map +1 -0
  117. package/dist/search/FuzzySearch.js +313 -0
  118. package/dist/search/FuzzySearch.js.map +1 -0
  119. package/dist/search/HybridScorer.d.ts +181 -0
  120. package/dist/search/HybridScorer.d.ts.map +1 -0
  121. package/dist/search/HybridScorer.js +258 -0
  122. package/dist/search/HybridScorer.js.map +1 -0
  123. package/dist/search/HybridSearchManager.d.ts +80 -0
  124. package/dist/search/HybridSearchManager.d.ts.map +1 -0
  125. package/dist/search/HybridSearchManager.js +188 -0
  126. package/dist/search/HybridSearchManager.js.map +1 -0
  127. package/dist/search/IncrementalIndexer.d.ts +201 -0
  128. package/dist/search/IncrementalIndexer.d.ts.map +1 -0
  129. package/dist/search/IncrementalIndexer.js +343 -0
  130. package/dist/search/IncrementalIndexer.js.map +1 -0
  131. package/dist/search/OptimizedInvertedIndex.d.ts +163 -0
  132. package/dist/search/OptimizedInvertedIndex.d.ts.map +1 -0
  133. package/dist/search/OptimizedInvertedIndex.js +359 -0
  134. package/dist/search/OptimizedInvertedIndex.js.map +1 -0
  135. package/dist/search/ParallelSearchExecutor.d.ts +172 -0
  136. package/dist/search/ParallelSearchExecutor.d.ts.map +1 -0
  137. package/dist/search/ParallelSearchExecutor.js +310 -0
  138. package/dist/search/ParallelSearchExecutor.js.map +1 -0
  139. package/dist/search/QuantizedVectorStore.d.ts +171 -0
  140. package/dist/search/QuantizedVectorStore.d.ts.map +1 -0
  141. package/dist/search/QuantizedVectorStore.js +308 -0
  142. package/dist/search/QuantizedVectorStore.js.map +1 -0
  143. package/dist/search/QueryAnalyzer.d.ts +76 -0
  144. package/dist/search/QueryAnalyzer.d.ts.map +1 -0
  145. package/dist/search/QueryAnalyzer.js +228 -0
  146. package/dist/search/QueryAnalyzer.js.map +1 -0
  147. package/dist/search/QueryCostEstimator.d.ts +244 -0
  148. package/dist/search/QueryCostEstimator.d.ts.map +1 -0
  149. package/dist/search/QueryCostEstimator.js +653 -0
  150. package/dist/search/QueryCostEstimator.js.map +1 -0
  151. package/dist/search/QueryPlanCache.d.ts +220 -0
  152. package/dist/search/QueryPlanCache.d.ts.map +1 -0
  153. package/dist/search/QueryPlanCache.js +380 -0
  154. package/dist/search/QueryPlanCache.js.map +1 -0
  155. package/dist/search/QueryPlanner.d.ts +58 -0
  156. package/dist/search/QueryPlanner.d.ts.map +1 -0
  157. package/dist/search/QueryPlanner.js +138 -0
  158. package/dist/search/QueryPlanner.js.map +1 -0
  159. package/dist/search/RankedSearch.d.ts +71 -0
  160. package/dist/search/RankedSearch.d.ts.map +1 -0
  161. package/dist/search/RankedSearch.js +239 -0
  162. package/dist/search/RankedSearch.js.map +1 -0
  163. package/dist/search/ReflectionManager.d.ts +120 -0
  164. package/dist/search/ReflectionManager.d.ts.map +1 -0
  165. package/dist/search/ReflectionManager.js +232 -0
  166. package/dist/search/ReflectionManager.js.map +1 -0
  167. package/dist/search/SavedSearchManager.d.ts +79 -0
  168. package/dist/search/SavedSearchManager.d.ts.map +1 -0
  169. package/dist/search/SavedSearchManager.js +147 -0
  170. package/dist/search/SavedSearchManager.js.map +1 -0
  171. package/dist/search/SearchFilterChain.d.ts +120 -0
  172. package/dist/search/SearchFilterChain.d.ts.map +1 -0
  173. package/dist/search/SearchFilterChain.js +186 -0
  174. package/dist/search/SearchFilterChain.js.map +1 -0
  175. package/dist/search/SearchManager.d.ts +326 -0
  176. package/dist/search/SearchManager.d.ts.map +1 -0
  177. package/dist/search/SearchManager.js +454 -0
  178. package/dist/search/SearchManager.js.map +1 -0
  179. package/dist/search/SearchSuggestions.d.ts +27 -0
  180. package/dist/search/SearchSuggestions.d.ts.map +1 -0
  181. package/dist/search/SearchSuggestions.js +58 -0
  182. package/dist/search/SearchSuggestions.js.map +1 -0
  183. package/dist/search/SemanticSearch.d.ts +149 -0
  184. package/dist/search/SemanticSearch.d.ts.map +1 -0
  185. package/dist/search/SemanticSearch.js +324 -0
  186. package/dist/search/SemanticSearch.js.map +1 -0
  187. package/dist/search/SymbolicSearch.d.ts +61 -0
  188. package/dist/search/SymbolicSearch.d.ts.map +1 -0
  189. package/dist/search/SymbolicSearch.js +164 -0
  190. package/dist/search/SymbolicSearch.js.map +1 -0
  191. package/dist/search/TFIDFEventSync.d.ts +85 -0
  192. package/dist/search/TFIDFEventSync.d.ts.map +1 -0
  193. package/dist/search/TFIDFEventSync.js +134 -0
  194. package/dist/search/TFIDFEventSync.js.map +1 -0
  195. package/dist/search/TFIDFIndexManager.d.ts +151 -0
  196. package/dist/search/TFIDFIndexManager.d.ts.map +1 -0
  197. package/dist/search/TFIDFIndexManager.js +433 -0
  198. package/dist/search/TFIDFIndexManager.js.map +1 -0
  199. package/dist/search/VectorStore.d.ts +235 -0
  200. package/dist/search/VectorStore.d.ts.map +1 -0
  201. package/dist/search/VectorStore.js +312 -0
  202. package/dist/search/VectorStore.js.map +1 -0
  203. package/dist/search/index.d.ts +35 -0
  204. package/dist/search/index.d.ts.map +1 -0
  205. package/dist/search/index.js +53 -0
  206. package/dist/search/index.js.map +1 -0
  207. package/dist/types/index.d.ts +13 -0
  208. package/dist/types/index.d.ts.map +1 -0
  209. package/dist/types/index.js +13 -0
  210. package/dist/types/index.js.map +1 -0
  211. package/dist/types/types.d.ts +1811 -0
  212. package/dist/types/types.d.ts.map +1 -0
  213. package/dist/types/types.js +10 -0
  214. package/dist/types/types.js.map +1 -0
  215. package/dist/utils/BatchProcessor.d.ts +271 -0
  216. package/dist/utils/BatchProcessor.d.ts.map +1 -0
  217. package/dist/utils/BatchProcessor.js +377 -0
  218. package/dist/utils/BatchProcessor.js.map +1 -0
  219. package/dist/utils/MemoryMonitor.d.ts +176 -0
  220. package/dist/utils/MemoryMonitor.d.ts.map +1 -0
  221. package/dist/utils/MemoryMonitor.js +306 -0
  222. package/dist/utils/MemoryMonitor.js.map +1 -0
  223. package/dist/utils/WorkerPoolManager.d.ts +233 -0
  224. package/dist/utils/WorkerPoolManager.d.ts.map +1 -0
  225. package/dist/utils/WorkerPoolManager.js +421 -0
  226. package/dist/utils/WorkerPoolManager.js.map +1 -0
  227. package/dist/utils/compressedCache.d.ts +221 -0
  228. package/dist/utils/compressedCache.d.ts.map +1 -0
  229. package/dist/utils/compressedCache.js +349 -0
  230. package/dist/utils/compressedCache.js.map +1 -0
  231. package/dist/utils/compressionUtil.d.ts +214 -0
  232. package/dist/utils/compressionUtil.d.ts.map +1 -0
  233. package/dist/utils/compressionUtil.js +248 -0
  234. package/dist/utils/compressionUtil.js.map +1 -0
  235. package/dist/utils/constants.d.ts +245 -0
  236. package/dist/utils/constants.d.ts.map +1 -0
  237. package/dist/utils/constants.js +253 -0
  238. package/dist/utils/constants.js.map +1 -0
  239. package/dist/utils/entityUtils.d.ts +379 -0
  240. package/dist/utils/entityUtils.d.ts.map +1 -0
  241. package/dist/utils/entityUtils.js +649 -0
  242. package/dist/utils/entityUtils.js.map +1 -0
  243. package/dist/utils/errors.d.ts +95 -0
  244. package/dist/utils/errors.d.ts.map +1 -0
  245. package/dist/utils/errors.js +146 -0
  246. package/dist/utils/errors.js.map +1 -0
  247. package/dist/utils/formatters.d.ts +145 -0
  248. package/dist/utils/formatters.d.ts.map +1 -0
  249. package/dist/utils/formatters.js +133 -0
  250. package/dist/utils/formatters.js.map +1 -0
  251. package/dist/utils/index.d.ts +26 -0
  252. package/dist/utils/index.d.ts.map +1 -0
  253. package/dist/utils/index.js +88 -0
  254. package/dist/utils/index.js.map +1 -0
  255. package/dist/utils/indexes.d.ts +270 -0
  256. package/dist/utils/indexes.d.ts.map +1 -0
  257. package/dist/utils/indexes.js +527 -0
  258. package/dist/utils/indexes.js.map +1 -0
  259. package/dist/utils/logger.d.ts +31 -0
  260. package/dist/utils/logger.d.ts.map +1 -0
  261. package/dist/utils/logger.js +41 -0
  262. package/dist/utils/logger.js.map +1 -0
  263. package/dist/utils/operationUtils.d.ts +124 -0
  264. package/dist/utils/operationUtils.d.ts.map +1 -0
  265. package/dist/utils/operationUtils.js +176 -0
  266. package/dist/utils/operationUtils.js.map +1 -0
  267. package/dist/utils/parallelUtils.d.ts +76 -0
  268. package/dist/utils/parallelUtils.d.ts.map +1 -0
  269. package/dist/utils/parallelUtils.js +192 -0
  270. package/dist/utils/parallelUtils.js.map +1 -0
  271. package/dist/utils/schemas.d.ts +556 -0
  272. package/dist/utils/schemas.d.ts.map +1 -0
  273. package/dist/utils/schemas.js +485 -0
  274. package/dist/utils/schemas.js.map +1 -0
  275. package/dist/utils/searchAlgorithms.d.ts +99 -0
  276. package/dist/utils/searchAlgorithms.d.ts.map +1 -0
  277. package/dist/utils/searchAlgorithms.js +168 -0
  278. package/dist/utils/searchAlgorithms.js.map +1 -0
  279. package/dist/utils/searchCache.d.ts +108 -0
  280. package/dist/utils/searchCache.d.ts.map +1 -0
  281. package/dist/utils/searchCache.js +210 -0
  282. package/dist/utils/searchCache.js.map +1 -0
  283. package/dist/utils/taskScheduler.d.ts +294 -0
  284. package/dist/utils/taskScheduler.d.ts.map +1 -0
  285. package/dist/utils/taskScheduler.js +487 -0
  286. package/dist/utils/taskScheduler.js.map +1 -0
  287. package/dist/workers/index.d.ts +12 -0
  288. package/dist/workers/index.d.ts.map +1 -0
  289. package/dist/workers/index.js +10 -0
  290. package/dist/workers/index.js.map +1 -0
  291. package/dist/workers/levenshteinWorker.d.ts +60 -0
  292. package/dist/workers/levenshteinWorker.d.ts.map +1 -0
  293. package/dist/workers/levenshteinWorker.js +99 -0
  294. package/dist/workers/levenshteinWorker.js.map +1 -0
  295. package/package.json +69 -0
@@ -0,0 +1,377 @@
1
+ /**
2
+ * Batch Processor
3
+ *
4
+ * Phase 12 Sprint 2: Generic batch processing utility with parallel execution,
5
+ * retry logic, progress callbacks, and error collection.
6
+ *
7
+ * @module utils/BatchProcessor
8
+ */
9
+ /**
10
+ * Default options for batch processing.
11
+ */
12
+ const DEFAULT_OPTIONS = {
13
+ concurrency: 4,
14
+ batchSize: 4,
15
+ maxRetries: 0,
16
+ retryDelayMs: 1000,
17
+ retryBackoffMultiplier: 2,
18
+ maxRetryDelayMs: 30000,
19
+ continueOnError: true,
20
+ itemTimeoutMs: 0,
21
+ };
22
+ /**
23
+ * BatchProcessor - Generic batch processing with parallel execution
24
+ *
25
+ * Provides a flexible utility for processing arrays of items with:
26
+ * - Configurable concurrency
27
+ * - Automatic retry with exponential backoff
28
+ * - Progress callbacks for monitoring
29
+ * - Error collection without failing the entire batch
30
+ * - Cancellation support via AbortSignal
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * const processor = new BatchProcessor<string, number>({
35
+ * concurrency: 4,
36
+ * maxRetries: 3,
37
+ * onProgress: (p) => console.log(`${p.percentage.toFixed(1)}% complete`),
38
+ * });
39
+ *
40
+ * const result = await processor.process(
41
+ * ['item1', 'item2', 'item3'],
42
+ * async (item) => {
43
+ * const response = await fetchData(item);
44
+ * return response.value;
45
+ * }
46
+ * );
47
+ *
48
+ * console.log(`Succeeded: ${result.succeeded}, Failed: ${result.failed}`);
49
+ * ```
50
+ */
51
+ export class BatchProcessor {
52
+ options;
53
+ constructor(options = {}) {
54
+ this.options = {
55
+ ...DEFAULT_OPTIONS,
56
+ ...options,
57
+ batchSize: options.batchSize ?? options.concurrency ?? DEFAULT_OPTIONS.concurrency,
58
+ };
59
+ }
60
+ /**
61
+ * Process all items in batches with the specified processor function.
62
+ *
63
+ * @param items - Array of items to process
64
+ * @param processor - Async function to process each item
65
+ * @returns Batch processing result with all item results and statistics
66
+ */
67
+ async process(items, processor) {
68
+ const startTime = Date.now();
69
+ const results = new Array(items.length);
70
+ const errors = new Map();
71
+ let succeeded = 0;
72
+ let failed = 0;
73
+ const totalBatches = Math.ceil(items.length / this.options.batchSize);
74
+ // Process items in batches
75
+ for (let batchIndex = 0; batchIndex < items.length; batchIndex += this.options.batchSize) {
76
+ // Check for cancellation
77
+ if (this.options.signal?.aborted) {
78
+ throw new Error('Batch processing cancelled');
79
+ }
80
+ const batchItems = items.slice(batchIndex, batchIndex + this.options.batchSize);
81
+ const batchStartIndex = batchIndex;
82
+ const currentBatchIndex = Math.floor(batchIndex / this.options.batchSize);
83
+ // Process batch concurrently
84
+ const batchPromises = batchItems.map((item, localIndex) => this.processItem(item, batchStartIndex + localIndex, processor));
85
+ const batchResults = await Promise.all(batchPromises);
86
+ // Collect results
87
+ for (let i = 0; i < batchResults.length; i++) {
88
+ const itemResult = batchResults[i];
89
+ const globalIndex = batchStartIndex + i;
90
+ results[globalIndex] = itemResult;
91
+ if (itemResult.success) {
92
+ succeeded++;
93
+ }
94
+ else {
95
+ failed++;
96
+ if (itemResult.error) {
97
+ errors.set(globalIndex, itemResult.error);
98
+ }
99
+ // Stop if continueOnError is false
100
+ if (!this.options.continueOnError) {
101
+ return {
102
+ results,
103
+ succeeded,
104
+ failed,
105
+ totalTimeMs: Date.now() - startTime,
106
+ allSucceeded: false,
107
+ errors,
108
+ };
109
+ }
110
+ }
111
+ }
112
+ // Report progress
113
+ if (this.options.onProgress) {
114
+ const completed = Math.min(batchIndex + batchItems.length, items.length);
115
+ this.options.onProgress({
116
+ completed,
117
+ total: items.length,
118
+ percentage: (completed / items.length) * 100,
119
+ succeeded,
120
+ failed,
121
+ batchIndex: currentBatchIndex,
122
+ totalBatches,
123
+ });
124
+ }
125
+ }
126
+ return {
127
+ results,
128
+ succeeded,
129
+ failed,
130
+ totalTimeMs: Date.now() - startTime,
131
+ allSucceeded: failed === 0,
132
+ errors,
133
+ };
134
+ }
135
+ /**
136
+ * Process a single item with retry logic.
137
+ */
138
+ async processItem(item, index, processor) {
139
+ const startTime = Date.now();
140
+ let lastError;
141
+ let attempts = 0;
142
+ for (let attempt = 0; attempt <= this.options.maxRetries; attempt++) {
143
+ attempts = attempt + 1;
144
+ // Check for cancellation before each attempt
145
+ if (this.options.signal?.aborted) {
146
+ return {
147
+ index,
148
+ success: false,
149
+ error: new Error('Processing cancelled'),
150
+ attempts,
151
+ durationMs: Date.now() - startTime,
152
+ };
153
+ }
154
+ try {
155
+ let result;
156
+ if (this.options.itemTimeoutMs > 0) {
157
+ // Process with timeout
158
+ result = await Promise.race([
159
+ processor(item, index),
160
+ this.createTimeout(this.options.itemTimeoutMs),
161
+ ]);
162
+ }
163
+ else {
164
+ result = await processor(item, index);
165
+ }
166
+ return {
167
+ index,
168
+ success: true,
169
+ result,
170
+ attempts,
171
+ durationMs: Date.now() - startTime,
172
+ };
173
+ }
174
+ catch (error) {
175
+ lastError = error instanceof Error ? error : new Error(String(error));
176
+ // Don't retry on last attempt
177
+ if (attempt < this.options.maxRetries) {
178
+ const delay = this.calculateRetryDelay(attempt);
179
+ await this.sleep(delay);
180
+ }
181
+ }
182
+ }
183
+ return {
184
+ index,
185
+ success: false,
186
+ error: lastError,
187
+ attempts,
188
+ durationMs: Date.now() - startTime,
189
+ };
190
+ }
191
+ /**
192
+ * Calculate delay for retry with exponential backoff.
193
+ */
194
+ calculateRetryDelay(attempt) {
195
+ const delay = this.options.retryDelayMs * Math.pow(this.options.retryBackoffMultiplier, attempt);
196
+ return Math.min(delay, this.options.maxRetryDelayMs);
197
+ }
198
+ /**
199
+ * Create a timeout promise.
200
+ */
201
+ createTimeout(ms) {
202
+ return new Promise((_, reject) => {
203
+ setTimeout(() => reject(new Error('Item processing timeout')), ms);
204
+ });
205
+ }
206
+ /**
207
+ * Sleep for the specified duration.
208
+ */
209
+ sleep(ms) {
210
+ return new Promise(resolve => setTimeout(resolve, ms));
211
+ }
212
+ /**
213
+ * Get the configured options.
214
+ */
215
+ getOptions() {
216
+ return { ...this.options };
217
+ }
218
+ }
219
+ /**
220
+ * Process items in parallel batches (convenience function).
221
+ *
222
+ * @template TInput - Input item type
223
+ * @template TOutput - Output result type
224
+ * @param items - Array of items to process
225
+ * @param processor - Async function to process each item
226
+ * @param options - Batch processing options
227
+ * @returns Batch processing result
228
+ *
229
+ * @example
230
+ * ```typescript
231
+ * const result = await processBatch(
232
+ * urls,
233
+ * async (url) => fetch(url).then(r => r.json()),
234
+ * { concurrency: 5, maxRetries: 2 }
235
+ * );
236
+ * ```
237
+ */
238
+ export async function processBatch(items, processor, options = {}) {
239
+ const batchProcessor = new BatchProcessor(options);
240
+ return batchProcessor.process(items, processor);
241
+ }
242
+ /**
243
+ * Process items with automatic retry on failure (convenience function).
244
+ *
245
+ * @template TInput - Input item type
246
+ * @template TOutput - Output result type
247
+ * @param items - Array of items to process
248
+ * @param processor - Async function to process each item
249
+ * @param maxRetries - Maximum retry attempts (default: 3)
250
+ * @param onProgress - Optional progress callback
251
+ * @returns Batch processing result
252
+ *
253
+ * @example
254
+ * ```typescript
255
+ * const result = await processWithRetry(
256
+ * items,
257
+ * async (item) => unreliableOperation(item),
258
+ * 3,
259
+ * (p) => console.log(`${p.percentage}%`)
260
+ * );
261
+ * ```
262
+ */
263
+ export async function processWithRetry(items, processor, maxRetries = 3, onProgress) {
264
+ return processBatch(items, processor, { maxRetries, onProgress });
265
+ }
266
+ /**
267
+ * Chunk an array into smaller arrays of specified size.
268
+ *
269
+ * @template T - Item type
270
+ * @param array - Array to chunk
271
+ * @param size - Size of each chunk
272
+ * @returns Array of chunks
273
+ *
274
+ * @example
275
+ * ```typescript
276
+ * const chunks = chunkArray([1, 2, 3, 4, 5], 2);
277
+ * // [[1, 2], [3, 4], [5]]
278
+ * ```
279
+ */
280
+ export function chunkArray(array, size) {
281
+ if (size <= 0) {
282
+ throw new Error('Chunk size must be greater than 0');
283
+ }
284
+ const chunks = [];
285
+ for (let i = 0; i < array.length; i += size) {
286
+ chunks.push(array.slice(i, i + size));
287
+ }
288
+ return chunks;
289
+ }
290
+ /**
291
+ * Execute async functions in parallel with a concurrency limit.
292
+ *
293
+ * @template T - Result type
294
+ * @param tasks - Array of async functions to execute
295
+ * @param concurrency - Maximum concurrent executions
296
+ * @returns Array of results (successful results or errors)
297
+ *
298
+ * @example
299
+ * ```typescript
300
+ * const tasks = urls.map(url => () => fetch(url));
301
+ * const results = await parallelLimit(tasks, 5);
302
+ * ```
303
+ */
304
+ export async function parallelLimit(tasks, concurrency) {
305
+ const results = [];
306
+ for (let i = 0; i < tasks.length; i += concurrency) {
307
+ const batch = tasks.slice(i, i + concurrency);
308
+ const batchResults = await Promise.all(batch.map(async (task) => {
309
+ try {
310
+ const value = await task();
311
+ return { success: true, value };
312
+ }
313
+ catch (error) {
314
+ return {
315
+ success: false,
316
+ error: error instanceof Error ? error : new Error(String(error)),
317
+ };
318
+ }
319
+ }));
320
+ results.push(...batchResults);
321
+ }
322
+ return results;
323
+ }
324
+ /**
325
+ * Map over items in parallel with a concurrency limit.
326
+ *
327
+ * @template TInput - Input item type
328
+ * @template TOutput - Output result type
329
+ * @param items - Array of items to map
330
+ * @param mapper - Async mapping function
331
+ * @param concurrency - Maximum concurrent operations (default: 4)
332
+ * @returns Array of results (in order)
333
+ *
334
+ * @example
335
+ * ```typescript
336
+ * const results = await mapParallel(
337
+ * ids,
338
+ * async (id) => fetchUser(id),
339
+ * 10
340
+ * );
341
+ * ```
342
+ */
343
+ export async function mapParallel(items, mapper, concurrency = 4) {
344
+ const results = new Array(items.length);
345
+ for (let i = 0; i < items.length; i += concurrency) {
346
+ const batch = items.slice(i, i + concurrency);
347
+ const startIndex = i;
348
+ const batchResults = await Promise.all(batch.map((item, localIndex) => mapper(item, startIndex + localIndex)));
349
+ for (let j = 0; j < batchResults.length; j++) {
350
+ results[startIndex + j] = batchResults[j];
351
+ }
352
+ }
353
+ return results;
354
+ }
355
+ /**
356
+ * Filter items in parallel with a concurrency limit.
357
+ *
358
+ * @template T - Item type
359
+ * @param items - Array of items to filter
360
+ * @param predicate - Async predicate function
361
+ * @param concurrency - Maximum concurrent operations (default: 4)
362
+ * @returns Filtered array (in order)
363
+ *
364
+ * @example
365
+ * ```typescript
366
+ * const validItems = await filterParallel(
367
+ * items,
368
+ * async (item) => validateItem(item),
369
+ * 10
370
+ * );
371
+ * ```
372
+ */
373
+ export async function filterParallel(items, predicate, concurrency = 4) {
374
+ const includeFlags = await mapParallel(items, predicate, concurrency);
375
+ return items.filter((_, index) => includeFlags[index]);
376
+ }
377
+ //# sourceMappingURL=BatchProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BatchProcessor.js","sourceRoot":"","sources":["../../src/utils/BatchProcessor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Memory Usage Monitor
3
+ *
4
+ * Phase 12 Sprint 6: Track memory usage across all components
5
+ * with human-readable formatting.
6
+ *
7
+ * @module utils/MemoryMonitor
8
+ */
9
+ /**
10
+ * Memory usage for a single component.
11
+ */
12
+ export interface ComponentMemoryUsage {
13
+ /** Component name */
14
+ name: string;
15
+ /** Estimated memory usage in bytes */
16
+ bytes: number;
17
+ /** Item count (if applicable) */
18
+ itemCount?: number;
19
+ /** Average bytes per item */
20
+ bytesPerItem?: number;
21
+ }
22
+ /**
23
+ * Aggregate memory usage statistics.
24
+ */
25
+ export interface MemoryUsageStats {
26
+ /** Total memory usage in bytes */
27
+ totalBytes: number;
28
+ /** Formatted total memory */
29
+ totalFormatted: string;
30
+ /** Per-component breakdown */
31
+ components: ComponentMemoryUsage[];
32
+ /** Timestamp of measurement */
33
+ timestamp: Date;
34
+ /** Node.js heap stats (if available) */
35
+ heapStats?: {
36
+ heapUsed: number;
37
+ heapTotal: number;
38
+ external: number;
39
+ rss: number;
40
+ };
41
+ }
42
+ /**
43
+ * Memory threshold configuration.
44
+ */
45
+ export interface MemoryThresholds {
46
+ /** Warning threshold in bytes */
47
+ warning: number;
48
+ /** Critical threshold in bytes */
49
+ critical: number;
50
+ }
51
+ /**
52
+ * Memory alert.
53
+ */
54
+ export interface MemoryAlert {
55
+ /** Alert level */
56
+ level: 'warning' | 'critical';
57
+ /** Component that triggered the alert */
58
+ component: string;
59
+ /** Current usage */
60
+ currentBytes: number;
61
+ /** Threshold exceeded */
62
+ threshold: number;
63
+ /** Message */
64
+ message: string;
65
+ }
66
+ /**
67
+ * Callback for memory change events.
68
+ */
69
+ export type MemoryChangeCallback = (usage: MemoryUsageStats) => void;
70
+ /**
71
+ * Memory Monitor for tracking usage across components.
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * const monitor = new MemoryMonitor();
76
+ *
77
+ * // Register components
78
+ * monitor.registerComponent('entities', () => entities.length * 500);
79
+ * monitor.registerComponent('vectors', () => vectors.size * dimension * 4);
80
+ *
81
+ * // Get usage stats
82
+ * const stats = monitor.getUsage();
83
+ * console.log(`Total memory: ${stats.totalFormatted}`);
84
+ *
85
+ * // Check for alerts
86
+ * const alerts = monitor.checkThresholds();
87
+ * ```
88
+ */
89
+ export declare class MemoryMonitor {
90
+ private componentEstimators;
91
+ private itemCounters;
92
+ private thresholds;
93
+ private listeners;
94
+ private lastUsage;
95
+ constructor(thresholds?: Partial<MemoryThresholds>);
96
+ /**
97
+ * Register a component for memory tracking.
98
+ *
99
+ * @param name - Component name
100
+ * @param estimator - Function that returns estimated bytes
101
+ * @param itemCounter - Optional function that returns item count
102
+ */
103
+ registerComponent(name: string, estimator: () => number, itemCounter?: () => number): void;
104
+ /**
105
+ * Unregister a component.
106
+ *
107
+ * @param name - Component name
108
+ */
109
+ unregisterComponent(name: string): void;
110
+ /**
111
+ * Get current memory usage statistics.
112
+ */
113
+ getUsage(): MemoryUsageStats;
114
+ /**
115
+ * Get memory usage for a specific component.
116
+ *
117
+ * @param name - Component name
118
+ */
119
+ getComponentUsage(name: string): ComponentMemoryUsage | undefined;
120
+ /**
121
+ * Check memory thresholds and return alerts.
122
+ */
123
+ checkThresholds(): MemoryAlert[];
124
+ /**
125
+ * Set memory thresholds.
126
+ *
127
+ * @param thresholds - New threshold values
128
+ */
129
+ setThresholds(thresholds: Partial<MemoryThresholds>): void;
130
+ /**
131
+ * Get current thresholds.
132
+ */
133
+ getThresholds(): MemoryThresholds;
134
+ /**
135
+ * Add a listener for memory changes.
136
+ *
137
+ * @param callback - Callback to invoke on memory changes
138
+ */
139
+ addListener(callback: MemoryChangeCallback): void;
140
+ /**
141
+ * Remove a listener.
142
+ *
143
+ * @param callback - Callback to remove
144
+ */
145
+ removeListener(callback: MemoryChangeCallback): void;
146
+ /**
147
+ * Get a human-readable summary of memory usage.
148
+ */
149
+ getSummary(): string;
150
+ /**
151
+ * Get the last recorded usage without triggering a new measurement.
152
+ */
153
+ getLastUsage(): MemoryUsageStats | null;
154
+ /**
155
+ * Format bytes as human-readable string.
156
+ *
157
+ * @param bytes - Number of bytes
158
+ */
159
+ formatBytes(bytes: number): string;
160
+ /**
161
+ * Parse a formatted byte string back to number.
162
+ *
163
+ * @param formatted - Formatted string like "10 MB"
164
+ */
165
+ parseBytes(formatted: string): number;
166
+ /**
167
+ * Clear all registered components.
168
+ */
169
+ clear(): void;
170
+ private notifyListeners;
171
+ }
172
+ /**
173
+ * Singleton instance for global memory monitoring.
174
+ */
175
+ export declare const globalMemoryMonitor: MemoryMonitor;
176
+ //# sourceMappingURL=MemoryMonitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryMonitor.d.ts","sourceRoot":"","sources":["../../src/utils/MemoryMonitor.ts"],"names":[],"mappings":"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"}