@danielsimonjr/memoryjs 1.0.0 → 1.1.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 +17364 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +12371 -0
  6. package/dist/index.d.ts +12367 -11
  7. package/dist/index.js +17102 -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 +12 -6
  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,421 +0,0 @@
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 workerpool from '@danielsimonjr/workerpool';
10
- /**
11
- * Default configuration values.
12
- */
13
- const DEFAULT_CONFIG = {
14
- maxWorkers: Math.max(1, workerpool.cpus - 1),
15
- workerType: 'thread',
16
- workerPath: '',
17
- minParallelSize: 200,
18
- defaultTimeout: 30000,
19
- };
20
- /**
21
- * WorkerPoolManager - Unified worker pool management
22
- *
23
- * Provides centralized management of worker pools for parallel processing.
24
- * Features:
25
- * - Named pool registration with automatic lifecycle management
26
- * - Pool cleanup on process exit
27
- * - Statistics tracking per pool
28
- * - Event callbacks for monitoring
29
- *
30
- * @example
31
- * ```typescript
32
- * const manager = WorkerPoolManager.getInstance();
33
- *
34
- * // Get or create a pool
35
- * const pool = manager.getPool('fuzzySearch', {
36
- * maxWorkers: 4,
37
- * workerPath: '/path/to/worker.js'
38
- * });
39
- *
40
- * // Execute task
41
- * const result = await pool.exec('searchEntities', [data]);
42
- *
43
- * // Get statistics
44
- * const stats = manager.getPoolStats('fuzzySearch');
45
- *
46
- * // Shutdown all pools on exit
47
- * await manager.shutdownAll();
48
- * ```
49
- */
50
- export class WorkerPoolManager {
51
- static instance = null;
52
- pools = new Map();
53
- eventCallbacks = [];
54
- isShuttingDown = false;
55
- shutdownRegistered = false;
56
- /**
57
- * Private constructor for singleton pattern.
58
- */
59
- constructor() {
60
- this.registerShutdownHandlers();
61
- }
62
- /**
63
- * Get the singleton instance of WorkerPoolManager.
64
- *
65
- * @returns The WorkerPoolManager instance
66
- */
67
- static getInstance() {
68
- if (!WorkerPoolManager.instance) {
69
- WorkerPoolManager.instance = new WorkerPoolManager();
70
- }
71
- return WorkerPoolManager.instance;
72
- }
73
- /**
74
- * Reset the singleton instance (primarily for testing).
75
- */
76
- static resetInstance() {
77
- if (WorkerPoolManager.instance) {
78
- WorkerPoolManager.instance.shutdownAll().catch(() => {
79
- // Ignore errors during reset
80
- });
81
- WorkerPoolManager.instance = null;
82
- }
83
- }
84
- /**
85
- * Register process exit handlers for cleanup.
86
- */
87
- registerShutdownHandlers() {
88
- if (this.shutdownRegistered)
89
- return;
90
- this.shutdownRegistered = true;
91
- const shutdownHandler = () => {
92
- if (!this.isShuttingDown) {
93
- this.shutdownAllSync();
94
- }
95
- };
96
- // Register for various exit signals
97
- process.on('exit', shutdownHandler);
98
- process.on('SIGINT', () => {
99
- this.shutdownAll().then(() => process.exit(0)).catch(() => process.exit(1));
100
- });
101
- process.on('SIGTERM', () => {
102
- this.shutdownAll().then(() => process.exit(0)).catch(() => process.exit(1));
103
- });
104
- process.on('uncaughtException', (err) => {
105
- console.error('Uncaught exception:', err);
106
- this.shutdownAllSync();
107
- process.exit(1);
108
- });
109
- }
110
- /**
111
- * Get or create a named worker pool.
112
- *
113
- * If a pool with the given ID exists, returns the existing pool.
114
- * Otherwise, creates a new pool with the provided configuration.
115
- *
116
- * @param poolId - Unique identifier for the pool
117
- * @param config - Pool configuration options
118
- * @returns The worker pool instance
119
- */
120
- getPool(poolId, config = {}) {
121
- const existing = this.pools.get(poolId);
122
- if (existing) {
123
- return existing.pool;
124
- }
125
- return this.createPool(poolId, config);
126
- }
127
- /**
128
- * Create a new worker pool with the given ID.
129
- *
130
- * @param poolId - Unique identifier for the pool
131
- * @param config - Pool configuration options
132
- * @returns The newly created worker pool
133
- * @throws Error if a pool with the same ID already exists
134
- */
135
- createPool(poolId, config = {}) {
136
- if (this.pools.has(poolId)) {
137
- throw new Error(`Pool with ID '${poolId}' already exists`);
138
- }
139
- const mergedConfig = { ...DEFAULT_CONFIG, ...config };
140
- // Create pool options with inline type definition
141
- // Using inline type since WorkerPoolOptions is not directly exported
142
- const poolOptions = {
143
- maxWorkers: mergedConfig.maxWorkers,
144
- workerType: mergedConfig.workerType,
145
- };
146
- // Add worker thread options for ESM support
147
- if (mergedConfig.workerType === 'thread') {
148
- poolOptions.workerThreadOpts = { type: 'module' };
149
- }
150
- // Create pool with or without worker script
151
- let pool;
152
- if (mergedConfig.workerPath) {
153
- pool = workerpool.pool(mergedConfig.workerPath, poolOptions);
154
- }
155
- else {
156
- pool = workerpool.pool(poolOptions);
157
- }
158
- const entry = {
159
- pool,
160
- config: mergedConfig,
161
- createdAt: Date.now(),
162
- totalTasksExecuted: 0,
163
- totalExecutionTime: 0,
164
- };
165
- this.pools.set(poolId, entry);
166
- this.emitEvent(poolId, 'created');
167
- return pool;
168
- }
169
- /**
170
- * Check if a pool with the given ID exists.
171
- *
172
- * @param poolId - Pool identifier to check
173
- * @returns True if pool exists
174
- */
175
- hasPool(poolId) {
176
- return this.pools.has(poolId);
177
- }
178
- /**
179
- * Get the configuration for a pool.
180
- *
181
- * @param poolId - Pool identifier
182
- * @returns Pool configuration or undefined if not found
183
- */
184
- getPoolConfig(poolId) {
185
- const entry = this.pools.get(poolId);
186
- return entry ? { ...entry.config } : undefined;
187
- }
188
- /**
189
- * Get extended statistics for a pool.
190
- *
191
- * @param poolId - Pool identifier
192
- * @returns Extended pool statistics or undefined if not found
193
- */
194
- getPoolStats(poolId) {
195
- const entry = this.pools.get(poolId);
196
- if (!entry)
197
- return undefined;
198
- const baseStats = entry.pool.stats();
199
- return {
200
- ...baseStats,
201
- poolId,
202
- createdAt: entry.createdAt,
203
- totalTasksExecuted: entry.totalTasksExecuted,
204
- totalExecutionTime: entry.totalExecutionTime,
205
- averageExecutionTime: entry.totalTasksExecuted > 0
206
- ? entry.totalExecutionTime / entry.totalTasksExecuted
207
- : 0,
208
- };
209
- }
210
- /**
211
- * Get statistics for all pools.
212
- *
213
- * @returns Map of pool IDs to their statistics
214
- */
215
- getAllPoolStats() {
216
- const stats = new Map();
217
- for (const poolId of this.pools.keys()) {
218
- const poolStats = this.getPoolStats(poolId);
219
- if (poolStats) {
220
- stats.set(poolId, poolStats);
221
- }
222
- }
223
- return stats;
224
- }
225
- /**
226
- * Record task execution for statistics tracking.
227
- *
228
- * @param poolId - Pool identifier
229
- * @param executionTimeMs - Task execution time in milliseconds
230
- */
231
- recordTaskExecution(poolId, executionTimeMs) {
232
- const entry = this.pools.get(poolId);
233
- if (entry) {
234
- entry.totalTasksExecuted++;
235
- entry.totalExecutionTime += executionTimeMs;
236
- }
237
- }
238
- /**
239
- * Execute a task on a pool with automatic statistics tracking.
240
- *
241
- * @template T - Result type
242
- * @param poolId - Pool identifier
243
- * @param method - Method name to execute (for worker script pools) or inline function
244
- * @param args - Arguments to pass to the method/function
245
- * @param timeout - Optional timeout in milliseconds
246
- * @returns Promise resolving to the task result
247
- */
248
- async executeTask(poolId, method, args = [], timeout) {
249
- const entry = this.pools.get(poolId);
250
- if (!entry) {
251
- throw new Error(`Pool '${poolId}' not found`);
252
- }
253
- const effectiveTimeout = timeout ?? entry.config.defaultTimeout ?? DEFAULT_CONFIG.defaultTimeout;
254
- const startTime = Date.now();
255
- try {
256
- let result;
257
- if (typeof method === 'string') {
258
- // Execute named method from worker script
259
- result = await entry.pool.exec(method, args).timeout(effectiveTimeout);
260
- }
261
- else {
262
- // Execute inline function
263
- result = await entry.pool.exec(method, args).timeout(effectiveTimeout);
264
- }
265
- const executionTime = Date.now() - startTime;
266
- this.recordTaskExecution(poolId, executionTime);
267
- return result;
268
- }
269
- catch (error) {
270
- const executionTime = Date.now() - startTime;
271
- this.recordTaskExecution(poolId, executionTime);
272
- throw error;
273
- }
274
- }
275
- /**
276
- * Shutdown a specific pool.
277
- *
278
- * @param poolId - Pool identifier
279
- * @param force - If true, forcefully terminate workers (default: false)
280
- * @returns Promise resolving when shutdown is complete
281
- */
282
- async shutdownPool(poolId, force = false) {
283
- const entry = this.pools.get(poolId);
284
- if (!entry)
285
- return;
286
- try {
287
- await entry.pool.terminate(force);
288
- this.emitEvent(poolId, 'shutdown');
289
- }
290
- catch (error) {
291
- this.emitEvent(poolId, 'error', error);
292
- throw error;
293
- }
294
- finally {
295
- this.pools.delete(poolId);
296
- }
297
- }
298
- /**
299
- * Shutdown all pools asynchronously.
300
- *
301
- * @param force - If true, forcefully terminate workers (default: false)
302
- * @returns Promise resolving when all pools are shut down
303
- */
304
- async shutdownAll(force = false) {
305
- if (this.isShuttingDown)
306
- return;
307
- this.isShuttingDown = true;
308
- const shutdownPromises = [];
309
- for (const poolId of this.pools.keys()) {
310
- shutdownPromises.push(this.shutdownPool(poolId, force));
311
- }
312
- try {
313
- await Promise.allSettled(shutdownPromises);
314
- }
315
- finally {
316
- this.pools.clear();
317
- this.isShuttingDown = false;
318
- }
319
- }
320
- /**
321
- * Synchronous shutdown for process exit handlers.
322
- * Forces immediate termination of all pools.
323
- */
324
- shutdownAllSync() {
325
- if (this.isShuttingDown)
326
- return;
327
- this.isShuttingDown = true;
328
- for (const [poolId, entry] of this.pools) {
329
- try {
330
- entry.pool.terminate(true);
331
- this.emitEvent(poolId, 'shutdown');
332
- }
333
- catch {
334
- // Ignore errors during sync shutdown
335
- }
336
- }
337
- this.pools.clear();
338
- this.isShuttingDown = false;
339
- }
340
- /**
341
- * Register an event callback for pool events.
342
- *
343
- * @param callback - Callback function to invoke on events
344
- * @returns Unsubscribe function
345
- */
346
- onEvent(callback) {
347
- this.eventCallbacks.push(callback);
348
- return () => {
349
- const index = this.eventCallbacks.indexOf(callback);
350
- if (index >= 0) {
351
- this.eventCallbacks.splice(index, 1);
352
- }
353
- };
354
- }
355
- /**
356
- * Emit an event to all registered callbacks.
357
- */
358
- emitEvent(poolId, event, data) {
359
- for (const callback of this.eventCallbacks) {
360
- try {
361
- callback(poolId, event, data);
362
- }
363
- catch {
364
- // Ignore callback errors
365
- }
366
- }
367
- }
368
- /**
369
- * Get the number of active pools.
370
- *
371
- * @returns Number of pools currently managed
372
- */
373
- get poolCount() {
374
- return this.pools.size;
375
- }
376
- /**
377
- * Get all pool IDs.
378
- *
379
- * @returns Array of pool identifiers
380
- */
381
- getPoolIds() {
382
- return Array.from(this.pools.keys());
383
- }
384
- /**
385
- * Check if the minimum parallel size threshold is met.
386
- *
387
- * @param poolId - Pool identifier
388
- * @param size - Size of the data to process
389
- * @returns True if size meets or exceeds minimum threshold
390
- */
391
- shouldUseParallel(poolId, size) {
392
- const entry = this.pools.get(poolId);
393
- const minSize = entry?.config.minParallelSize ?? DEFAULT_CONFIG.minParallelSize;
394
- return size >= minSize;
395
- }
396
- /**
397
- * Get the default configuration values.
398
- *
399
- * @returns Copy of default configuration
400
- */
401
- static getDefaultConfig() {
402
- return { ...DEFAULT_CONFIG };
403
- }
404
- /**
405
- * Get the CPU count available for workers.
406
- *
407
- * @returns Number of CPUs
408
- */
409
- static getCpuCount() {
410
- return workerpool.cpus;
411
- }
412
- }
413
- /**
414
- * Convenience function to get the WorkerPoolManager instance.
415
- *
416
- * @returns The WorkerPoolManager singleton
417
- */
418
- export function getWorkerPoolManager() {
419
- return WorkerPoolManager.getInstance();
420
- }
421
- //# sourceMappingURL=WorkerPoolManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WorkerPoolManager.js","sourceRoot":"","sources":["../../src/utils/WorkerPoolManager.ts"],"names":[],"mappings":"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"}
@@ -1,221 +0,0 @@
1
- /**
2
- * Compressed Cache Utility
3
- *
4
- * Provides an LRU cache with automatic compression of old entries.
5
- * Reduces memory footprint for large knowledge graphs (50k+ entities).
6
- *
7
- * Uses synchronous brotli compression/decompression for cache operations
8
- * to avoid async complexity in hot paths.
9
- *
10
- * Phase 3 Sprint 5: Archive & Cache Compression
11
- *
12
- * @module utils/compressedCache
13
- */
14
- import type { Entity } from '../types/index.js';
15
- /**
16
- * Options for CompressedCache configuration.
17
- */
18
- export interface CompressedCacheOptions {
19
- /**
20
- * Maximum number of uncompressed (hot) entries to keep.
21
- * Entries beyond this limit may be compressed.
22
- * @default 1000
23
- */
24
- maxUncompressed?: number;
25
- /**
26
- * Time in milliseconds before an entry is eligible for compression.
27
- * Entries accessed within this time window stay uncompressed.
28
- * @default 300000 (5 minutes)
29
- */
30
- compressionThresholdMs?: number;
31
- /**
32
- * Whether to enable automatic compression.
33
- * If false, entries are never automatically compressed.
34
- * @default true
35
- */
36
- autoCompress?: boolean;
37
- /**
38
- * Minimum entry size in bytes before compression is applied.
39
- * Entries smaller than this are not compressed (overhead exceeds benefit).
40
- * Phase 12 Sprint 6: Adaptive compression.
41
- * @default 256
42
- */
43
- minCompressionSize?: number;
44
- /**
45
- * Minimum compression ratio to keep entry compressed.
46
- * If compression achieves less than this ratio, entry stays uncompressed.
47
- * Phase 12 Sprint 6: Adaptive compression.
48
- * @default 0.7 (30% reduction minimum)
49
- */
50
- minCompressionRatio?: number;
51
- }
52
- /**
53
- * Statistics about the cache state.
54
- */
55
- export interface CompressedCacheStats {
56
- /** Total number of entries in the cache */
57
- total: number;
58
- /** Number of compressed entries */
59
- compressed: number;
60
- /** Number of uncompressed (hot) entries */
61
- uncompressed: number;
62
- /** Estimated memory saved by compression in bytes */
63
- memorySaved: number;
64
- /** Total original size of all entries in bytes */
65
- totalOriginalSize: number;
66
- /** Total compressed size in bytes */
67
- totalCompressedSize: number;
68
- /** Cache hit count since creation */
69
- hits: number;
70
- /** Cache miss count since creation */
71
- misses: number;
72
- /** Number of compressions performed */
73
- compressions: number;
74
- /** Number of decompressions performed */
75
- decompressions: number;
76
- /** Phase 12 Sprint 6: Number of entries skipped due to size */
77
- skippedSmallEntries: number;
78
- /** Phase 12 Sprint 6: Number of entries skipped due to poor ratio */
79
- skippedPoorRatio: number;
80
- /** Phase 12 Sprint 6: Average compression ratio (0-1) */
81
- avgCompressionRatio: number;
82
- /** Phase 12 Sprint 6: Estimated memory usage in bytes */
83
- estimatedMemoryBytes: number;
84
- }
85
- /**
86
- * LRU cache with automatic compression of old entries.
87
- *
88
- * Reduces memory footprint by compressing infrequently accessed entries
89
- * using brotli compression. Hot (recently accessed) entries stay
90
- * uncompressed for fast access.
91
- *
92
- * @example
93
- * ```typescript
94
- * const cache = new CompressedCache({
95
- * maxUncompressed: 500,
96
- * compressionThresholdMs: 60000 // 1 minute
97
- * });
98
- *
99
- * // Store entity
100
- * cache.set('Alice', { name: 'Alice', entityType: 'person', observations: [] });
101
- *
102
- * // Retrieve entity (decompresses if needed)
103
- * const entity = cache.get('Alice');
104
- *
105
- * // Check stats
106
- * const stats = cache.getStats();
107
- * console.log(`Memory saved: ${stats.memorySaved} bytes`);
108
- * ```
109
- */
110
- export declare class CompressedCache {
111
- private _entryMap;
112
- private readonly maxUncompressed;
113
- private readonly compressionThresholdMs;
114
- private readonly autoCompress;
115
- private readonly minCompressionSize;
116
- private readonly minCompressionRatio;
117
- private hits;
118
- private misses;
119
- private compressions;
120
- private decompressions;
121
- private skippedSmallEntries;
122
- private skippedPoorRatio;
123
- private compressionRatios;
124
- constructor(options?: CompressedCacheOptions);
125
- /**
126
- * Get an entity from the cache.
127
- *
128
- * If the entity is compressed, it will be decompressed on access.
129
- * The entry is marked as recently accessed to prevent re-compression.
130
- *
131
- * @param name - Entity name to retrieve
132
- * @returns The entity if found, undefined otherwise
133
- */
134
- get(name: string): Entity | undefined;
135
- /**
136
- * Store an entity in the cache.
137
- *
138
- * Entries are stored uncompressed initially. Old entries may be
139
- * compressed automatically based on cache settings.
140
- *
141
- * @param name - Entity name (key)
142
- * @param entity - Entity to store
143
- */
144
- set(name: string, entity: Entity): void;
145
- /**
146
- * Check if an entity exists in the cache.
147
- *
148
- * @param name - Entity name to check
149
- * @returns True if entity exists in cache
150
- */
151
- has(name: string): boolean;
152
- /**
153
- * Delete an entity from the cache.
154
- *
155
- * @param name - Entity name to delete
156
- * @returns True if entity was deleted, false if not found
157
- */
158
- delete(name: string): boolean;
159
- /**
160
- * Clear all entries from the cache.
161
- */
162
- clear(): void;
163
- /**
164
- * Get the number of entries in the cache.
165
- */
166
- get size(): number;
167
- /**
168
- * Get all entity names in the cache.
169
- */
170
- keys(): IterableIterator<string>;
171
- /**
172
- * Get comprehensive cache statistics.
173
- *
174
- * @returns Statistics about cache state and performance
175
- */
176
- getStats(): CompressedCacheStats;
177
- /**
178
- * Force compression of entries older than the threshold.
179
- *
180
- * Called automatically after set() when autoCompress is enabled.
181
- * Can be called manually to trigger compression on demand.
182
- *
183
- * @returns Number of entries compressed
184
- */
185
- compressOldEntries(): number;
186
- /**
187
- * Compress old entries if we're over the uncompressed limit.
188
- *
189
- * @param force - If true, compress regardless of limit
190
- * @returns Number of entries compressed
191
- */
192
- private maybeCompressOldEntries;
193
- /**
194
- * Decompress all entries in the cache.
195
- *
196
- * Useful when preparing for bulk operations or export.
197
- *
198
- * @returns Number of entries decompressed
199
- */
200
- decompressAll(): number;
201
- /**
202
- * Get all entities from the cache (decompressing as needed).
203
- *
204
- * @returns Array of all entities in the cache
205
- */
206
- getAllEntities(): Entity[];
207
- /**
208
- * Iterate over all entries with their compression status.
209
- *
210
- * Does not decompress entries - useful for inspection.
211
- *
212
- * @yields Entry information without decompressing
213
- */
214
- entries(): IterableIterator<{
215
- name: string;
216
- compressed: boolean;
217
- originalSize: number;
218
- lastAccessed: number;
219
- }>;
220
- }
221
- //# sourceMappingURL=compressedCache.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compressedCache.d.ts","sourceRoot":"","sources":["../../src/utils/compressedCache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAmBhD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qCAAqC;IACrC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qEAAqE;IACrE,gBAAgB,EAAE,MAAM,CAAC;IACzB,yDAAyD;IACzD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,yDAAyD;IACzD,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IAEvC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAG7C,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,cAAc,CAAa;IAEnC,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,iBAAiB,CAAgB;gBAE7B,OAAO,GAAE,sBAA2B;IAShD;;;;;;;;OAQG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IA6BrC;;;;;;;;OAQG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAgBvC;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI7B;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC;IAIhC;;;;OAIG;IACH,QAAQ,IAAI,oBAAoB;IA+ChC;;;;;;;OAOG;IACH,kBAAkB,IAAI,MAAM;IAI5B;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IA4E/B;;;;;;OAMG;IACH,aAAa,IAAI,MAAM;IAsBvB;;;;OAIG;IACH,cAAc,IAAI,MAAM,EAAE;IAa1B;;;;;;OAMG;IACF,OAAO,IAAI,gBAAgB,CAAC;QAC3B,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,OAAO,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CAUH"}