@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,306 @@
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
+ * Default memory thresholds.
11
+ */
12
+ const DEFAULT_THRESHOLDS = {
13
+ warning: 100 * 1024 * 1024, // 100 MB
14
+ critical: 500 * 1024 * 1024, // 500 MB
15
+ };
16
+ /**
17
+ * Memory Monitor for tracking usage across components.
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * const monitor = new MemoryMonitor();
22
+ *
23
+ * // Register components
24
+ * monitor.registerComponent('entities', () => entities.length * 500);
25
+ * monitor.registerComponent('vectors', () => vectors.size * dimension * 4);
26
+ *
27
+ * // Get usage stats
28
+ * const stats = monitor.getUsage();
29
+ * console.log(`Total memory: ${stats.totalFormatted}`);
30
+ *
31
+ * // Check for alerts
32
+ * const alerts = monitor.checkThresholds();
33
+ * ```
34
+ */
35
+ export class MemoryMonitor {
36
+ componentEstimators;
37
+ itemCounters;
38
+ thresholds;
39
+ listeners;
40
+ lastUsage = null;
41
+ constructor(thresholds) {
42
+ this.componentEstimators = new Map();
43
+ this.itemCounters = new Map();
44
+ this.thresholds = { ...DEFAULT_THRESHOLDS, ...thresholds };
45
+ this.listeners = [];
46
+ }
47
+ /**
48
+ * Register a component for memory tracking.
49
+ *
50
+ * @param name - Component name
51
+ * @param estimator - Function that returns estimated bytes
52
+ * @param itemCounter - Optional function that returns item count
53
+ */
54
+ registerComponent(name, estimator, itemCounter) {
55
+ this.componentEstimators.set(name, estimator);
56
+ if (itemCounter) {
57
+ this.itemCounters.set(name, itemCounter);
58
+ }
59
+ }
60
+ /**
61
+ * Unregister a component.
62
+ *
63
+ * @param name - Component name
64
+ */
65
+ unregisterComponent(name) {
66
+ this.componentEstimators.delete(name);
67
+ this.itemCounters.delete(name);
68
+ }
69
+ /**
70
+ * Get current memory usage statistics.
71
+ */
72
+ getUsage() {
73
+ const components = [];
74
+ let totalBytes = 0;
75
+ for (const [name, estimator] of this.componentEstimators) {
76
+ const bytes = estimator();
77
+ totalBytes += bytes;
78
+ const itemCounter = this.itemCounters.get(name);
79
+ const itemCount = itemCounter ? itemCounter() : undefined;
80
+ const bytesPerItem = itemCount && itemCount > 0 ? Math.round(bytes / itemCount) : undefined;
81
+ components.push({
82
+ name,
83
+ bytes,
84
+ itemCount,
85
+ bytesPerItem,
86
+ });
87
+ }
88
+ // Sort by usage descending
89
+ components.sort((a, b) => b.bytes - a.bytes);
90
+ // Get Node.js heap stats if available
91
+ let heapStats;
92
+ if (typeof process !== 'undefined' && process.memoryUsage) {
93
+ const mem = process.memoryUsage();
94
+ heapStats = {
95
+ heapUsed: mem.heapUsed,
96
+ heapTotal: mem.heapTotal,
97
+ external: mem.external,
98
+ rss: mem.rss,
99
+ };
100
+ }
101
+ const stats = {
102
+ totalBytes,
103
+ totalFormatted: this.formatBytes(totalBytes),
104
+ components,
105
+ timestamp: new Date(),
106
+ heapStats,
107
+ };
108
+ this.lastUsage = stats;
109
+ this.notifyListeners(stats);
110
+ return stats;
111
+ }
112
+ /**
113
+ * Get memory usage for a specific component.
114
+ *
115
+ * @param name - Component name
116
+ */
117
+ getComponentUsage(name) {
118
+ const estimator = this.componentEstimators.get(name);
119
+ if (!estimator)
120
+ return undefined;
121
+ const bytes = estimator();
122
+ const itemCounter = this.itemCounters.get(name);
123
+ const itemCount = itemCounter ? itemCounter() : undefined;
124
+ const bytesPerItem = itemCount && itemCount > 0 ? Math.round(bytes / itemCount) : undefined;
125
+ return {
126
+ name,
127
+ bytes,
128
+ itemCount,
129
+ bytesPerItem,
130
+ };
131
+ }
132
+ /**
133
+ * Check memory thresholds and return alerts.
134
+ */
135
+ checkThresholds() {
136
+ const alerts = [];
137
+ const usage = this.getUsage();
138
+ // Check total memory
139
+ if (usage.totalBytes >= this.thresholds.critical) {
140
+ alerts.push({
141
+ level: 'critical',
142
+ component: 'total',
143
+ currentBytes: usage.totalBytes,
144
+ threshold: this.thresholds.critical,
145
+ message: `Total memory usage (${this.formatBytes(usage.totalBytes)}) exceeds critical threshold (${this.formatBytes(this.thresholds.critical)})`,
146
+ });
147
+ }
148
+ else if (usage.totalBytes >= this.thresholds.warning) {
149
+ alerts.push({
150
+ level: 'warning',
151
+ component: 'total',
152
+ currentBytes: usage.totalBytes,
153
+ threshold: this.thresholds.warning,
154
+ message: `Total memory usage (${this.formatBytes(usage.totalBytes)}) exceeds warning threshold (${this.formatBytes(this.thresholds.warning)})`,
155
+ });
156
+ }
157
+ // Check per-component thresholds (50% of total threshold per component)
158
+ const componentWarning = this.thresholds.warning * 0.5;
159
+ const componentCritical = this.thresholds.critical * 0.5;
160
+ for (const component of usage.components) {
161
+ if (component.bytes >= componentCritical) {
162
+ alerts.push({
163
+ level: 'critical',
164
+ component: component.name,
165
+ currentBytes: component.bytes,
166
+ threshold: componentCritical,
167
+ message: `Component '${component.name}' (${this.formatBytes(component.bytes)}) exceeds critical threshold`,
168
+ });
169
+ }
170
+ else if (component.bytes >= componentWarning) {
171
+ alerts.push({
172
+ level: 'warning',
173
+ component: component.name,
174
+ currentBytes: component.bytes,
175
+ threshold: componentWarning,
176
+ message: `Component '${component.name}' (${this.formatBytes(component.bytes)}) exceeds warning threshold`,
177
+ });
178
+ }
179
+ }
180
+ return alerts;
181
+ }
182
+ /**
183
+ * Set memory thresholds.
184
+ *
185
+ * @param thresholds - New threshold values
186
+ */
187
+ setThresholds(thresholds) {
188
+ this.thresholds = { ...this.thresholds, ...thresholds };
189
+ }
190
+ /**
191
+ * Get current thresholds.
192
+ */
193
+ getThresholds() {
194
+ return { ...this.thresholds };
195
+ }
196
+ /**
197
+ * Add a listener for memory changes.
198
+ *
199
+ * @param callback - Callback to invoke on memory changes
200
+ */
201
+ addListener(callback) {
202
+ this.listeners.push(callback);
203
+ }
204
+ /**
205
+ * Remove a listener.
206
+ *
207
+ * @param callback - Callback to remove
208
+ */
209
+ removeListener(callback) {
210
+ const index = this.listeners.indexOf(callback);
211
+ if (index !== -1) {
212
+ this.listeners.splice(index, 1);
213
+ }
214
+ }
215
+ /**
216
+ * Get a human-readable summary of memory usage.
217
+ */
218
+ getSummary() {
219
+ const usage = this.getUsage();
220
+ const lines = [
221
+ '=== Memory Usage Summary ===',
222
+ `Total: ${usage.totalFormatted}`,
223
+ '',
224
+ 'By Component:',
225
+ ];
226
+ for (const component of usage.components) {
227
+ const itemInfo = component.itemCount
228
+ ? ` (${component.itemCount.toLocaleString()} items, ~${this.formatBytes(component.bytesPerItem ?? 0)}/item)`
229
+ : '';
230
+ lines.push(` ${component.name}: ${this.formatBytes(component.bytes)}${itemInfo}`);
231
+ }
232
+ if (usage.heapStats) {
233
+ lines.push('');
234
+ lines.push('Node.js Heap:');
235
+ lines.push(` Heap Used: ${this.formatBytes(usage.heapStats.heapUsed)}`);
236
+ lines.push(` Heap Total: ${this.formatBytes(usage.heapStats.heapTotal)}`);
237
+ lines.push(` External: ${this.formatBytes(usage.heapStats.external)}`);
238
+ lines.push(` RSS: ${this.formatBytes(usage.heapStats.rss)}`);
239
+ }
240
+ return lines.join('\n');
241
+ }
242
+ /**
243
+ * Get the last recorded usage without triggering a new measurement.
244
+ */
245
+ getLastUsage() {
246
+ return this.lastUsage;
247
+ }
248
+ /**
249
+ * Format bytes as human-readable string.
250
+ *
251
+ * @param bytes - Number of bytes
252
+ */
253
+ formatBytes(bytes) {
254
+ if (bytes === 0)
255
+ return '0 B';
256
+ const units = ['B', 'KB', 'MB', 'GB', 'TB'];
257
+ const k = 1024;
258
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
259
+ const value = bytes / Math.pow(k, i);
260
+ return `${value.toFixed(i === 0 ? 0 : 2)} ${units[i]}`;
261
+ }
262
+ /**
263
+ * Parse a formatted byte string back to number.
264
+ *
265
+ * @param formatted - Formatted string like "10 MB"
266
+ */
267
+ parseBytes(formatted) {
268
+ const match = formatted.match(/^([\d.]+)\s*(B|KB|MB|GB|TB)$/i);
269
+ if (!match)
270
+ return 0;
271
+ const value = parseFloat(match[1]);
272
+ const unit = match[2].toUpperCase();
273
+ const units = {
274
+ 'B': 1,
275
+ 'KB': 1024,
276
+ 'MB': 1024 * 1024,
277
+ 'GB': 1024 * 1024 * 1024,
278
+ 'TB': 1024 * 1024 * 1024 * 1024,
279
+ };
280
+ return value * (units[unit] ?? 1);
281
+ }
282
+ /**
283
+ * Clear all registered components.
284
+ */
285
+ clear() {
286
+ this.componentEstimators.clear();
287
+ this.itemCounters.clear();
288
+ this.lastUsage = null;
289
+ }
290
+ // Private methods
291
+ notifyListeners(usage) {
292
+ for (const listener of this.listeners) {
293
+ try {
294
+ listener(usage);
295
+ }
296
+ catch {
297
+ // Ignore listener errors
298
+ }
299
+ }
300
+ }
301
+ }
302
+ /**
303
+ * Singleton instance for global memory monitoring.
304
+ */
305
+ export const globalMemoryMonitor = new MemoryMonitor();
306
+ //# sourceMappingURL=MemoryMonitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryMonitor.js","sourceRoot":"","sources":["../../src/utils/MemoryMonitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Worker Pool Manager
3
+ *
4
+ * Phase 12 Sprint 2: Unified worker pool management for all parallelizable operations.
5
+ * Provides centralized lifecycle management, configuration, and statistics.
6
+ *
7
+ * @module utils/WorkerPoolManager
8
+ */
9
+ import type { Pool, PoolStats } from '@danielsimonjr/workerpool';
10
+ /**
11
+ * Configuration options for worker pools.
12
+ */
13
+ export interface WorkerPoolConfig {
14
+ /** Maximum number of worker threads (default: CPU count - 1) */
15
+ maxWorkers?: number;
16
+ /** Worker type: 'thread' or 'process' (default: 'thread') */
17
+ workerType?: 'thread' | 'process';
18
+ /** Optional path to worker script file */
19
+ workerPath?: string;
20
+ /** Minimum array size to use parallel processing (default: 200) */
21
+ minParallelSize?: number;
22
+ /** Default task timeout in milliseconds (default: 30000) */
23
+ defaultTimeout?: number;
24
+ }
25
+ /**
26
+ * Extended pool statistics with additional metadata.
27
+ */
28
+ export interface ExtendedPoolStats extends PoolStats {
29
+ /** Pool identifier */
30
+ poolId: string;
31
+ /** When the pool was created */
32
+ createdAt: number;
33
+ /** Total tasks executed since creation */
34
+ totalTasksExecuted: number;
35
+ /** Total execution time in milliseconds */
36
+ totalExecutionTime: number;
37
+ /** Average task execution time in milliseconds */
38
+ averageExecutionTime: number;
39
+ }
40
+ /**
41
+ * Callback for pool events.
42
+ */
43
+ export type PoolEventCallback = (poolId: string, event: 'created' | 'shutdown' | 'error', data?: unknown) => void;
44
+ /**
45
+ * WorkerPoolManager - Unified worker pool management
46
+ *
47
+ * Provides centralized management of worker pools for parallel processing.
48
+ * Features:
49
+ * - Named pool registration with automatic lifecycle management
50
+ * - Pool cleanup on process exit
51
+ * - Statistics tracking per pool
52
+ * - Event callbacks for monitoring
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * const manager = WorkerPoolManager.getInstance();
57
+ *
58
+ * // Get or create a pool
59
+ * const pool = manager.getPool('fuzzySearch', {
60
+ * maxWorkers: 4,
61
+ * workerPath: '/path/to/worker.js'
62
+ * });
63
+ *
64
+ * // Execute task
65
+ * const result = await pool.exec('searchEntities', [data]);
66
+ *
67
+ * // Get statistics
68
+ * const stats = manager.getPoolStats('fuzzySearch');
69
+ *
70
+ * // Shutdown all pools on exit
71
+ * await manager.shutdownAll();
72
+ * ```
73
+ */
74
+ export declare class WorkerPoolManager {
75
+ private static instance;
76
+ private pools;
77
+ private eventCallbacks;
78
+ private isShuttingDown;
79
+ private shutdownRegistered;
80
+ /**
81
+ * Private constructor for singleton pattern.
82
+ */
83
+ private constructor();
84
+ /**
85
+ * Get the singleton instance of WorkerPoolManager.
86
+ *
87
+ * @returns The WorkerPoolManager instance
88
+ */
89
+ static getInstance(): WorkerPoolManager;
90
+ /**
91
+ * Reset the singleton instance (primarily for testing).
92
+ */
93
+ static resetInstance(): void;
94
+ /**
95
+ * Register process exit handlers for cleanup.
96
+ */
97
+ private registerShutdownHandlers;
98
+ /**
99
+ * Get or create a named worker pool.
100
+ *
101
+ * If a pool with the given ID exists, returns the existing pool.
102
+ * Otherwise, creates a new pool with the provided configuration.
103
+ *
104
+ * @param poolId - Unique identifier for the pool
105
+ * @param config - Pool configuration options
106
+ * @returns The worker pool instance
107
+ */
108
+ getPool(poolId: string, config?: WorkerPoolConfig): Pool;
109
+ /**
110
+ * Create a new worker pool with the given ID.
111
+ *
112
+ * @param poolId - Unique identifier for the pool
113
+ * @param config - Pool configuration options
114
+ * @returns The newly created worker pool
115
+ * @throws Error if a pool with the same ID already exists
116
+ */
117
+ createPool(poolId: string, config?: WorkerPoolConfig): Pool;
118
+ /**
119
+ * Check if a pool with the given ID exists.
120
+ *
121
+ * @param poolId - Pool identifier to check
122
+ * @returns True if pool exists
123
+ */
124
+ hasPool(poolId: string): boolean;
125
+ /**
126
+ * Get the configuration for a pool.
127
+ *
128
+ * @param poolId - Pool identifier
129
+ * @returns Pool configuration or undefined if not found
130
+ */
131
+ getPoolConfig(poolId: string): WorkerPoolConfig | undefined;
132
+ /**
133
+ * Get extended statistics for a pool.
134
+ *
135
+ * @param poolId - Pool identifier
136
+ * @returns Extended pool statistics or undefined if not found
137
+ */
138
+ getPoolStats(poolId: string): ExtendedPoolStats | undefined;
139
+ /**
140
+ * Get statistics for all pools.
141
+ *
142
+ * @returns Map of pool IDs to their statistics
143
+ */
144
+ getAllPoolStats(): Map<string, ExtendedPoolStats>;
145
+ /**
146
+ * Record task execution for statistics tracking.
147
+ *
148
+ * @param poolId - Pool identifier
149
+ * @param executionTimeMs - Task execution time in milliseconds
150
+ */
151
+ recordTaskExecution(poolId: string, executionTimeMs: number): void;
152
+ /**
153
+ * Execute a task on a pool with automatic statistics tracking.
154
+ *
155
+ * @template T - Result type
156
+ * @param poolId - Pool identifier
157
+ * @param method - Method name to execute (for worker script pools) or inline function
158
+ * @param args - Arguments to pass to the method/function
159
+ * @param timeout - Optional timeout in milliseconds
160
+ * @returns Promise resolving to the task result
161
+ */
162
+ executeTask<T>(poolId: string, method: string | ((...args: unknown[]) => T), args?: unknown[], timeout?: number): Promise<T>;
163
+ /**
164
+ * Shutdown a specific pool.
165
+ *
166
+ * @param poolId - Pool identifier
167
+ * @param force - If true, forcefully terminate workers (default: false)
168
+ * @returns Promise resolving when shutdown is complete
169
+ */
170
+ shutdownPool(poolId: string, force?: boolean): Promise<void>;
171
+ /**
172
+ * Shutdown all pools asynchronously.
173
+ *
174
+ * @param force - If true, forcefully terminate workers (default: false)
175
+ * @returns Promise resolving when all pools are shut down
176
+ */
177
+ shutdownAll(force?: boolean): Promise<void>;
178
+ /**
179
+ * Synchronous shutdown for process exit handlers.
180
+ * Forces immediate termination of all pools.
181
+ */
182
+ private shutdownAllSync;
183
+ /**
184
+ * Register an event callback for pool events.
185
+ *
186
+ * @param callback - Callback function to invoke on events
187
+ * @returns Unsubscribe function
188
+ */
189
+ onEvent(callback: PoolEventCallback): () => void;
190
+ /**
191
+ * Emit an event to all registered callbacks.
192
+ */
193
+ private emitEvent;
194
+ /**
195
+ * Get the number of active pools.
196
+ *
197
+ * @returns Number of pools currently managed
198
+ */
199
+ get poolCount(): number;
200
+ /**
201
+ * Get all pool IDs.
202
+ *
203
+ * @returns Array of pool identifiers
204
+ */
205
+ getPoolIds(): string[];
206
+ /**
207
+ * Check if the minimum parallel size threshold is met.
208
+ *
209
+ * @param poolId - Pool identifier
210
+ * @param size - Size of the data to process
211
+ * @returns True if size meets or exceeds minimum threshold
212
+ */
213
+ shouldUseParallel(poolId: string, size: number): boolean;
214
+ /**
215
+ * Get the default configuration values.
216
+ *
217
+ * @returns Copy of default configuration
218
+ */
219
+ static getDefaultConfig(): Required<WorkerPoolConfig>;
220
+ /**
221
+ * Get the CPU count available for workers.
222
+ *
223
+ * @returns Number of CPUs
224
+ */
225
+ static getCpuCount(): number;
226
+ }
227
+ /**
228
+ * Convenience function to get the WorkerPoolManager instance.
229
+ *
230
+ * @returns The WorkerPoolManager singleton
231
+ */
232
+ export declare function getWorkerPoolManager(): WorkerPoolManager;
233
+ //# sourceMappingURL=WorkerPoolManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkerPoolManager.d.ts","sourceRoot":"","sources":["../../src/utils/WorkerPoolManager.ts"],"names":[],"mappings":"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"}