@danielsimonjr/memoryjs 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/README.md +385 -113
  2. package/README.md.backup-1768084780988 +266 -0
  3. package/dist/index.cjs +24156 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +16967 -0
  6. package/dist/index.d.ts +16963 -11
  7. package/dist/index.js +23887 -19
  8. package/dist/index.js.map +1 -1
  9. package/dist/workers/levenshteinWorker.cjs +102 -0
  10. package/dist/workers/levenshteinWorker.cjs.map +1 -0
  11. package/dist/workers/levenshteinWorker.js +57 -91
  12. package/dist/workers/levenshteinWorker.js.map +1 -1
  13. package/package.json +75 -69
  14. package/dist/core/EntityManager.d.ts +0 -268
  15. package/dist/core/EntityManager.d.ts.map +0 -1
  16. package/dist/core/EntityManager.js +0 -512
  17. package/dist/core/EntityManager.js.map +0 -1
  18. package/dist/core/GraphEventEmitter.d.ts +0 -202
  19. package/dist/core/GraphEventEmitter.d.ts.map +0 -1
  20. package/dist/core/GraphEventEmitter.js +0 -347
  21. package/dist/core/GraphEventEmitter.js.map +0 -1
  22. package/dist/core/GraphStorage.d.ts +0 -395
  23. package/dist/core/GraphStorage.d.ts.map +0 -1
  24. package/dist/core/GraphStorage.js +0 -786
  25. package/dist/core/GraphStorage.js.map +0 -1
  26. package/dist/core/GraphTraversal.d.ts +0 -141
  27. package/dist/core/GraphTraversal.d.ts.map +0 -1
  28. package/dist/core/GraphTraversal.js +0 -574
  29. package/dist/core/GraphTraversal.js.map +0 -1
  30. package/dist/core/HierarchyManager.d.ts +0 -111
  31. package/dist/core/HierarchyManager.d.ts.map +0 -1
  32. package/dist/core/HierarchyManager.js +0 -225
  33. package/dist/core/HierarchyManager.js.map +0 -1
  34. package/dist/core/ManagerContext.d.ts +0 -76
  35. package/dist/core/ManagerContext.d.ts.map +0 -1
  36. package/dist/core/ManagerContext.js +0 -129
  37. package/dist/core/ManagerContext.js.map +0 -1
  38. package/dist/core/ObservationManager.d.ts +0 -85
  39. package/dist/core/ObservationManager.d.ts.map +0 -1
  40. package/dist/core/ObservationManager.js +0 -124
  41. package/dist/core/ObservationManager.js.map +0 -1
  42. package/dist/core/RelationManager.d.ts +0 -131
  43. package/dist/core/RelationManager.d.ts.map +0 -1
  44. package/dist/core/RelationManager.js +0 -212
  45. package/dist/core/RelationManager.js.map +0 -1
  46. package/dist/core/SQLiteStorage.d.ts +0 -354
  47. package/dist/core/SQLiteStorage.d.ts.map +0 -1
  48. package/dist/core/SQLiteStorage.js +0 -919
  49. package/dist/core/SQLiteStorage.js.map +0 -1
  50. package/dist/core/StorageFactory.d.ts +0 -45
  51. package/dist/core/StorageFactory.d.ts.map +0 -1
  52. package/dist/core/StorageFactory.js +0 -65
  53. package/dist/core/StorageFactory.js.map +0 -1
  54. package/dist/core/TransactionManager.d.ts +0 -464
  55. package/dist/core/TransactionManager.d.ts.map +0 -1
  56. package/dist/core/TransactionManager.js +0 -869
  57. package/dist/core/TransactionManager.js.map +0 -1
  58. package/dist/core/index.d.ts +0 -17
  59. package/dist/core/index.d.ts.map +0 -1
  60. package/dist/core/index.js +0 -20
  61. package/dist/core/index.js.map +0 -1
  62. package/dist/features/AnalyticsManager.d.ts +0 -44
  63. package/dist/features/AnalyticsManager.d.ts.map +0 -1
  64. package/dist/features/AnalyticsManager.js +0 -224
  65. package/dist/features/AnalyticsManager.js.map +0 -1
  66. package/dist/features/ArchiveManager.d.ts +0 -133
  67. package/dist/features/ArchiveManager.d.ts.map +0 -1
  68. package/dist/features/ArchiveManager.js +0 -282
  69. package/dist/features/ArchiveManager.js.map +0 -1
  70. package/dist/features/CompressionManager.d.ts +0 -119
  71. package/dist/features/CompressionManager.d.ts.map +0 -1
  72. package/dist/features/CompressionManager.js +0 -470
  73. package/dist/features/CompressionManager.js.map +0 -1
  74. package/dist/features/IOManager.d.ts +0 -225
  75. package/dist/features/IOManager.d.ts.map +0 -1
  76. package/dist/features/IOManager.js +0 -1093
  77. package/dist/features/IOManager.js.map +0 -1
  78. package/dist/features/KeywordExtractor.d.ts +0 -61
  79. package/dist/features/KeywordExtractor.d.ts.map +0 -1
  80. package/dist/features/KeywordExtractor.js +0 -127
  81. package/dist/features/KeywordExtractor.js.map +0 -1
  82. package/dist/features/ObservationNormalizer.d.ts +0 -90
  83. package/dist/features/ObservationNormalizer.d.ts.map +0 -1
  84. package/dist/features/ObservationNormalizer.js +0 -194
  85. package/dist/features/ObservationNormalizer.js.map +0 -1
  86. package/dist/features/StreamingExporter.d.ts +0 -128
  87. package/dist/features/StreamingExporter.d.ts.map +0 -1
  88. package/dist/features/StreamingExporter.js +0 -212
  89. package/dist/features/StreamingExporter.js.map +0 -1
  90. package/dist/features/TagManager.d.ts +0 -147
  91. package/dist/features/TagManager.d.ts.map +0 -1
  92. package/dist/features/TagManager.js +0 -211
  93. package/dist/features/TagManager.js.map +0 -1
  94. package/dist/features/index.d.ts +0 -14
  95. package/dist/features/index.d.ts.map +0 -1
  96. package/dist/features/index.js +0 -15
  97. package/dist/features/index.js.map +0 -1
  98. package/dist/index.d.ts.map +0 -1
  99. package/dist/search/BM25Search.d.ts +0 -148
  100. package/dist/search/BM25Search.d.ts.map +0 -1
  101. package/dist/search/BM25Search.js +0 -340
  102. package/dist/search/BM25Search.js.map +0 -1
  103. package/dist/search/BasicSearch.d.ts +0 -51
  104. package/dist/search/BasicSearch.d.ts.map +0 -1
  105. package/dist/search/BasicSearch.js +0 -138
  106. package/dist/search/BasicSearch.js.map +0 -1
  107. package/dist/search/BooleanSearch.d.ts +0 -98
  108. package/dist/search/BooleanSearch.d.ts.map +0 -1
  109. package/dist/search/BooleanSearch.js +0 -431
  110. package/dist/search/BooleanSearch.js.map +0 -1
  111. package/dist/search/EarlyTerminationManager.d.ts +0 -140
  112. package/dist/search/EarlyTerminationManager.d.ts.map +0 -1
  113. package/dist/search/EarlyTerminationManager.js +0 -280
  114. package/dist/search/EarlyTerminationManager.js.map +0 -1
  115. package/dist/search/EmbeddingCache.d.ts +0 -175
  116. package/dist/search/EmbeddingCache.d.ts.map +0 -1
  117. package/dist/search/EmbeddingCache.js +0 -247
  118. package/dist/search/EmbeddingCache.js.map +0 -1
  119. package/dist/search/EmbeddingService.d.ts +0 -277
  120. package/dist/search/EmbeddingService.d.ts.map +0 -1
  121. package/dist/search/EmbeddingService.js +0 -531
  122. package/dist/search/EmbeddingService.js.map +0 -1
  123. package/dist/search/FuzzySearch.d.ts +0 -118
  124. package/dist/search/FuzzySearch.d.ts.map +0 -1
  125. package/dist/search/FuzzySearch.js +0 -313
  126. package/dist/search/FuzzySearch.js.map +0 -1
  127. package/dist/search/HybridScorer.d.ts +0 -181
  128. package/dist/search/HybridScorer.d.ts.map +0 -1
  129. package/dist/search/HybridScorer.js +0 -258
  130. package/dist/search/HybridScorer.js.map +0 -1
  131. package/dist/search/HybridSearchManager.d.ts +0 -80
  132. package/dist/search/HybridSearchManager.d.ts.map +0 -1
  133. package/dist/search/HybridSearchManager.js +0 -188
  134. package/dist/search/HybridSearchManager.js.map +0 -1
  135. package/dist/search/IncrementalIndexer.d.ts +0 -201
  136. package/dist/search/IncrementalIndexer.d.ts.map +0 -1
  137. package/dist/search/IncrementalIndexer.js +0 -343
  138. package/dist/search/IncrementalIndexer.js.map +0 -1
  139. package/dist/search/OptimizedInvertedIndex.d.ts +0 -163
  140. package/dist/search/OptimizedInvertedIndex.d.ts.map +0 -1
  141. package/dist/search/OptimizedInvertedIndex.js +0 -359
  142. package/dist/search/OptimizedInvertedIndex.js.map +0 -1
  143. package/dist/search/ParallelSearchExecutor.d.ts +0 -172
  144. package/dist/search/ParallelSearchExecutor.d.ts.map +0 -1
  145. package/dist/search/ParallelSearchExecutor.js +0 -310
  146. package/dist/search/ParallelSearchExecutor.js.map +0 -1
  147. package/dist/search/QuantizedVectorStore.d.ts +0 -171
  148. package/dist/search/QuantizedVectorStore.d.ts.map +0 -1
  149. package/dist/search/QuantizedVectorStore.js +0 -308
  150. package/dist/search/QuantizedVectorStore.js.map +0 -1
  151. package/dist/search/QueryAnalyzer.d.ts +0 -76
  152. package/dist/search/QueryAnalyzer.d.ts.map +0 -1
  153. package/dist/search/QueryAnalyzer.js +0 -228
  154. package/dist/search/QueryAnalyzer.js.map +0 -1
  155. package/dist/search/QueryCostEstimator.d.ts +0 -244
  156. package/dist/search/QueryCostEstimator.d.ts.map +0 -1
  157. package/dist/search/QueryCostEstimator.js +0 -653
  158. package/dist/search/QueryCostEstimator.js.map +0 -1
  159. package/dist/search/QueryPlanCache.d.ts +0 -220
  160. package/dist/search/QueryPlanCache.d.ts.map +0 -1
  161. package/dist/search/QueryPlanCache.js +0 -380
  162. package/dist/search/QueryPlanCache.js.map +0 -1
  163. package/dist/search/QueryPlanner.d.ts +0 -58
  164. package/dist/search/QueryPlanner.d.ts.map +0 -1
  165. package/dist/search/QueryPlanner.js +0 -138
  166. package/dist/search/QueryPlanner.js.map +0 -1
  167. package/dist/search/RankedSearch.d.ts +0 -71
  168. package/dist/search/RankedSearch.d.ts.map +0 -1
  169. package/dist/search/RankedSearch.js +0 -239
  170. package/dist/search/RankedSearch.js.map +0 -1
  171. package/dist/search/ReflectionManager.d.ts +0 -120
  172. package/dist/search/ReflectionManager.d.ts.map +0 -1
  173. package/dist/search/ReflectionManager.js +0 -232
  174. package/dist/search/ReflectionManager.js.map +0 -1
  175. package/dist/search/SavedSearchManager.d.ts +0 -79
  176. package/dist/search/SavedSearchManager.d.ts.map +0 -1
  177. package/dist/search/SavedSearchManager.js +0 -147
  178. package/dist/search/SavedSearchManager.js.map +0 -1
  179. package/dist/search/SearchFilterChain.d.ts +0 -120
  180. package/dist/search/SearchFilterChain.d.ts.map +0 -1
  181. package/dist/search/SearchFilterChain.js +0 -186
  182. package/dist/search/SearchFilterChain.js.map +0 -1
  183. package/dist/search/SearchManager.d.ts +0 -326
  184. package/dist/search/SearchManager.d.ts.map +0 -1
  185. package/dist/search/SearchManager.js +0 -454
  186. package/dist/search/SearchManager.js.map +0 -1
  187. package/dist/search/SearchSuggestions.d.ts +0 -27
  188. package/dist/search/SearchSuggestions.d.ts.map +0 -1
  189. package/dist/search/SearchSuggestions.js +0 -58
  190. package/dist/search/SearchSuggestions.js.map +0 -1
  191. package/dist/search/SemanticSearch.d.ts +0 -149
  192. package/dist/search/SemanticSearch.d.ts.map +0 -1
  193. package/dist/search/SemanticSearch.js +0 -324
  194. package/dist/search/SemanticSearch.js.map +0 -1
  195. package/dist/search/SymbolicSearch.d.ts +0 -61
  196. package/dist/search/SymbolicSearch.d.ts.map +0 -1
  197. package/dist/search/SymbolicSearch.js +0 -164
  198. package/dist/search/SymbolicSearch.js.map +0 -1
  199. package/dist/search/TFIDFEventSync.d.ts +0 -85
  200. package/dist/search/TFIDFEventSync.d.ts.map +0 -1
  201. package/dist/search/TFIDFEventSync.js +0 -134
  202. package/dist/search/TFIDFEventSync.js.map +0 -1
  203. package/dist/search/TFIDFIndexManager.d.ts +0 -151
  204. package/dist/search/TFIDFIndexManager.d.ts.map +0 -1
  205. package/dist/search/TFIDFIndexManager.js +0 -433
  206. package/dist/search/TFIDFIndexManager.js.map +0 -1
  207. package/dist/search/VectorStore.d.ts +0 -235
  208. package/dist/search/VectorStore.d.ts.map +0 -1
  209. package/dist/search/VectorStore.js +0 -312
  210. package/dist/search/VectorStore.js.map +0 -1
  211. package/dist/search/index.d.ts +0 -35
  212. package/dist/search/index.d.ts.map +0 -1
  213. package/dist/search/index.js +0 -53
  214. package/dist/search/index.js.map +0 -1
  215. package/dist/types/index.d.ts +0 -13
  216. package/dist/types/index.d.ts.map +0 -1
  217. package/dist/types/index.js +0 -13
  218. package/dist/types/index.js.map +0 -1
  219. package/dist/types/types.d.ts +0 -1811
  220. package/dist/types/types.d.ts.map +0 -1
  221. package/dist/types/types.js +0 -10
  222. package/dist/types/types.js.map +0 -1
  223. package/dist/utils/BatchProcessor.d.ts +0 -271
  224. package/dist/utils/BatchProcessor.d.ts.map +0 -1
  225. package/dist/utils/BatchProcessor.js +0 -377
  226. package/dist/utils/BatchProcessor.js.map +0 -1
  227. package/dist/utils/MemoryMonitor.d.ts +0 -176
  228. package/dist/utils/MemoryMonitor.d.ts.map +0 -1
  229. package/dist/utils/MemoryMonitor.js +0 -306
  230. package/dist/utils/MemoryMonitor.js.map +0 -1
  231. package/dist/utils/WorkerPoolManager.d.ts +0 -233
  232. package/dist/utils/WorkerPoolManager.d.ts.map +0 -1
  233. package/dist/utils/WorkerPoolManager.js +0 -421
  234. package/dist/utils/WorkerPoolManager.js.map +0 -1
  235. package/dist/utils/compressedCache.d.ts +0 -221
  236. package/dist/utils/compressedCache.d.ts.map +0 -1
  237. package/dist/utils/compressedCache.js +0 -349
  238. package/dist/utils/compressedCache.js.map +0 -1
  239. package/dist/utils/compressionUtil.d.ts +0 -214
  240. package/dist/utils/compressionUtil.d.ts.map +0 -1
  241. package/dist/utils/compressionUtil.js +0 -248
  242. package/dist/utils/compressionUtil.js.map +0 -1
  243. package/dist/utils/constants.d.ts +0 -245
  244. package/dist/utils/constants.d.ts.map +0 -1
  245. package/dist/utils/constants.js +0 -253
  246. package/dist/utils/constants.js.map +0 -1
  247. package/dist/utils/entityUtils.d.ts +0 -379
  248. package/dist/utils/entityUtils.d.ts.map +0 -1
  249. package/dist/utils/entityUtils.js +0 -649
  250. package/dist/utils/entityUtils.js.map +0 -1
  251. package/dist/utils/errors.d.ts +0 -95
  252. package/dist/utils/errors.d.ts.map +0 -1
  253. package/dist/utils/errors.js +0 -146
  254. package/dist/utils/errors.js.map +0 -1
  255. package/dist/utils/formatters.d.ts +0 -145
  256. package/dist/utils/formatters.d.ts.map +0 -1
  257. package/dist/utils/formatters.js +0 -133
  258. package/dist/utils/formatters.js.map +0 -1
  259. package/dist/utils/index.d.ts +0 -26
  260. package/dist/utils/index.d.ts.map +0 -1
  261. package/dist/utils/index.js +0 -88
  262. package/dist/utils/index.js.map +0 -1
  263. package/dist/utils/indexes.d.ts +0 -270
  264. package/dist/utils/indexes.d.ts.map +0 -1
  265. package/dist/utils/indexes.js +0 -527
  266. package/dist/utils/indexes.js.map +0 -1
  267. package/dist/utils/logger.d.ts +0 -31
  268. package/dist/utils/logger.d.ts.map +0 -1
  269. package/dist/utils/logger.js +0 -41
  270. package/dist/utils/logger.js.map +0 -1
  271. package/dist/utils/operationUtils.d.ts +0 -124
  272. package/dist/utils/operationUtils.d.ts.map +0 -1
  273. package/dist/utils/operationUtils.js +0 -176
  274. package/dist/utils/operationUtils.js.map +0 -1
  275. package/dist/utils/parallelUtils.d.ts +0 -76
  276. package/dist/utils/parallelUtils.d.ts.map +0 -1
  277. package/dist/utils/parallelUtils.js +0 -192
  278. package/dist/utils/parallelUtils.js.map +0 -1
  279. package/dist/utils/schemas.d.ts +0 -556
  280. package/dist/utils/schemas.d.ts.map +0 -1
  281. package/dist/utils/schemas.js +0 -485
  282. package/dist/utils/schemas.js.map +0 -1
  283. package/dist/utils/searchAlgorithms.d.ts +0 -99
  284. package/dist/utils/searchAlgorithms.d.ts.map +0 -1
  285. package/dist/utils/searchAlgorithms.js +0 -168
  286. package/dist/utils/searchAlgorithms.js.map +0 -1
  287. package/dist/utils/searchCache.d.ts +0 -108
  288. package/dist/utils/searchCache.d.ts.map +0 -1
  289. package/dist/utils/searchCache.js +0 -210
  290. package/dist/utils/searchCache.js.map +0 -1
  291. package/dist/utils/taskScheduler.d.ts +0 -294
  292. package/dist/utils/taskScheduler.d.ts.map +0 -1
  293. package/dist/utils/taskScheduler.js +0 -487
  294. package/dist/utils/taskScheduler.js.map +0 -1
  295. package/dist/workers/index.d.ts +0 -12
  296. package/dist/workers/index.d.ts.map +0 -1
  297. package/dist/workers/index.js +0 -10
  298. package/dist/workers/index.js.map +0 -1
  299. package/dist/workers/levenshteinWorker.d.ts +0 -60
  300. package/dist/workers/levenshteinWorker.d.ts.map +0 -1
@@ -1,574 +0,0 @@
1
- /**
2
- * Graph Traversal
3
- *
4
- * Phase 4 Sprints 6-8: Graph traversal algorithms for knowledge graph analysis.
5
- * Includes BFS, DFS, shortest path, all paths, connected components, and centrality.
6
- *
7
- * @module core/GraphTraversal
8
- */
9
- import { checkCancellation } from '../utils/index.js';
10
- /**
11
- * Phase 4 Sprint 6: Default traversal options.
12
- */
13
- const DEFAULT_OPTIONS = {
14
- direction: 'both',
15
- maxDepth: Infinity,
16
- relationTypes: [],
17
- entityTypes: [],
18
- };
19
- /**
20
- * Graph traversal algorithms for knowledge graph analysis.
21
- *
22
- * Provides BFS, DFS, shortest path finding, connected component detection,
23
- * and centrality metrics for analyzing graph structure.
24
- */
25
- export class GraphTraversal {
26
- storage;
27
- constructor(storage) {
28
- this.storage = storage;
29
- }
30
- // ==================== Sprint 6: BFS and DFS Traversal ====================
31
- /**
32
- * Get neighbors of a node based on traversal direction and filters.
33
- *
34
- * @param entityName - Entity to get neighbors for
35
- * @param options - Traversal options
36
- * @returns Array of neighbor entity names with their relations
37
- */
38
- getNeighborsWithRelations(entityName, options = {}) {
39
- // Filter out undefined values before merging with defaults
40
- const definedOptions = Object.fromEntries(Object.entries(options).filter(([, v]) => v !== undefined));
41
- const opts = { ...DEFAULT_OPTIONS, ...definedOptions };
42
- const neighbors = [];
43
- // Get relations based on direction
44
- let relations = [];
45
- if (opts.direction === 'outgoing' || opts.direction === 'both') {
46
- relations = relations.concat(this.storage.getRelationsFrom(entityName));
47
- }
48
- if (opts.direction === 'incoming' || opts.direction === 'both') {
49
- relations = relations.concat(this.storage.getRelationsTo(entityName));
50
- }
51
- // Filter by relation types if specified
52
- if (opts.relationTypes && opts.relationTypes.length > 0) {
53
- const typeSet = new Set(opts.relationTypes.map(t => t.toLowerCase()));
54
- relations = relations.filter(r => typeSet.has(r.relationType.toLowerCase()));
55
- }
56
- // Process relations to get neighbors
57
- for (const relation of relations) {
58
- const neighbor = relation.from === entityName ? relation.to : relation.from;
59
- // Skip self-loops
60
- if (neighbor === entityName)
61
- continue;
62
- // Filter by entity types if specified
63
- if (opts.entityTypes && opts.entityTypes.length > 0) {
64
- const entity = this.storage.getEntityByName(neighbor);
65
- if (!entity)
66
- continue;
67
- const typeSet = new Set(opts.entityTypes.map(t => t.toLowerCase()));
68
- if (!typeSet.has(entity.entityType.toLowerCase()))
69
- continue;
70
- }
71
- neighbors.push({ neighbor, relation });
72
- }
73
- return neighbors;
74
- }
75
- /**
76
- * Breadth-First Search traversal starting from a given entity.
77
- *
78
- * @param startEntity - Entity name to start traversal from
79
- * @param options - Traversal options
80
- * @returns Traversal result with visited nodes, depths, and parent pointers
81
- */
82
- bfs(startEntity, options = {}) {
83
- const opts = { ...DEFAULT_OPTIONS, ...options };
84
- // Validate start entity exists
85
- if (!this.storage.hasEntity(startEntity)) {
86
- return { nodes: [], depths: new Map(), parents: new Map() };
87
- }
88
- const visited = new Set();
89
- const queue = [{ node: startEntity, depth: 0 }];
90
- const nodes = [];
91
- const depths = new Map();
92
- const parents = new Map();
93
- visited.add(startEntity);
94
- parents.set(startEntity, null);
95
- while (queue.length > 0) {
96
- const { node, depth } = queue.shift();
97
- // Respect maxDepth limit
98
- if (depth > opts.maxDepth)
99
- continue;
100
- nodes.push(node);
101
- depths.set(node, depth);
102
- // Get neighbors and add unvisited ones to queue
103
- const neighbors = this.getNeighborsWithRelations(node, opts);
104
- for (const { neighbor } of neighbors) {
105
- if (!visited.has(neighbor)) {
106
- visited.add(neighbor);
107
- queue.push({ node: neighbor, depth: depth + 1 });
108
- parents.set(neighbor, node);
109
- }
110
- }
111
- }
112
- return { nodes, depths, parents };
113
- }
114
- /**
115
- * Depth-First Search traversal starting from a given entity.
116
- *
117
- * @param startEntity - Entity name to start traversal from
118
- * @param options - Traversal options
119
- * @returns Traversal result with visited nodes, depths, and parent pointers
120
- */
121
- dfs(startEntity, options = {}) {
122
- const opts = { ...DEFAULT_OPTIONS, ...options };
123
- // Validate start entity exists
124
- if (!this.storage.hasEntity(startEntity)) {
125
- return { nodes: [], depths: new Map(), parents: new Map() };
126
- }
127
- const visited = new Set();
128
- const stack = [{ node: startEntity, depth: 0 }];
129
- const nodes = [];
130
- const depths = new Map();
131
- const parents = new Map();
132
- parents.set(startEntity, null);
133
- while (stack.length > 0) {
134
- const { node, depth } = stack.pop();
135
- // Skip if already visited
136
- if (visited.has(node))
137
- continue;
138
- // Respect maxDepth limit
139
- if (depth > opts.maxDepth)
140
- continue;
141
- visited.add(node);
142
- nodes.push(node);
143
- depths.set(node, depth);
144
- // Get neighbors and add unvisited ones to stack
145
- const neighbors = this.getNeighborsWithRelations(node, opts);
146
- for (const { neighbor } of neighbors) {
147
- if (!visited.has(neighbor)) {
148
- stack.push({ node: neighbor, depth: depth + 1 });
149
- if (!parents.has(neighbor)) {
150
- parents.set(neighbor, node);
151
- }
152
- }
153
- }
154
- }
155
- return { nodes, depths, parents };
156
- }
157
- // ==================== Sprint 7: Path Finding Algorithms ====================
158
- /**
159
- * Find the shortest path between two entities using BFS.
160
- *
161
- * @param source - Source entity name
162
- * @param target - Target entity name
163
- * @param options - Traversal options
164
- * @returns PathResult if path exists, null otherwise
165
- */
166
- async findShortestPath(source, target, options = {}) {
167
- // Ensure graph is loaded to populate indexes
168
- await this.storage.loadGraph();
169
- // Validate entities exist
170
- if (!this.storage.hasEntity(source) || !this.storage.hasEntity(target)) {
171
- return null;
172
- }
173
- // Same source and target
174
- if (source === target) {
175
- return { path: [source], length: 0, relations: [] };
176
- }
177
- const opts = { ...DEFAULT_OPTIONS, ...options };
178
- const visited = new Set();
179
- const queue = [source];
180
- const parents = new Map();
181
- visited.add(source);
182
- parents.set(source, null);
183
- while (queue.length > 0) {
184
- const current = queue.shift();
185
- // Found target, reconstruct path
186
- if (current === target) {
187
- return this.reconstructPath(source, target, parents);
188
- }
189
- // Get neighbors
190
- const neighbors = this.getNeighborsWithRelations(current, opts);
191
- for (const { neighbor, relation } of neighbors) {
192
- if (!visited.has(neighbor)) {
193
- visited.add(neighbor);
194
- queue.push(neighbor);
195
- parents.set(neighbor, { parent: current, relation });
196
- }
197
- }
198
- }
199
- // No path found
200
- return null;
201
- }
202
- /**
203
- * Reconstruct path from parent pointers.
204
- */
205
- reconstructPath(_source, target, parents) {
206
- const path = [];
207
- const relations = [];
208
- let current = target;
209
- while (current !== null) {
210
- path.unshift(current);
211
- const parentInfo = parents.get(current);
212
- if (parentInfo) {
213
- relations.unshift(parentInfo.relation);
214
- current = parentInfo.parent;
215
- }
216
- else {
217
- current = null;
218
- }
219
- }
220
- return {
221
- path,
222
- length: path.length - 1,
223
- relations,
224
- };
225
- }
226
- /**
227
- * Find all paths between two entities up to a maximum depth.
228
- *
229
- * Phase 9B: Supports cancellation via AbortSignal in options.
230
- *
231
- * @param source - Source entity name
232
- * @param target - Target entity name
233
- * @param maxDepth - Maximum path length (default: 5)
234
- * @param options - Traversal options (includes signal for cancellation)
235
- * @returns Array of PathResult objects for all found paths
236
- * @throws {OperationCancelledError} If operation is cancelled via signal (Phase 9B)
237
- */
238
- async findAllPaths(source, target, maxDepth = 5, options = {}) {
239
- // Check for early cancellation
240
- const { signal, ...traversalOptions } = options;
241
- checkCancellation(signal, 'findAllPaths');
242
- // Ensure graph is loaded to populate indexes
243
- await this.storage.loadGraph();
244
- // Check for cancellation after load
245
- checkCancellation(signal, 'findAllPaths');
246
- // Validate entities exist
247
- if (!this.storage.hasEntity(source) || !this.storage.hasEntity(target)) {
248
- return [];
249
- }
250
- const opts = { ...DEFAULT_OPTIONS, ...traversalOptions };
251
- const allPaths = [];
252
- const currentPath = [source];
253
- const currentRelations = [];
254
- const visited = new Set([source]);
255
- // Track iterations for periodic cancellation checks
256
- let iterationCount = 0;
257
- const CANCELLATION_CHECK_INTERVAL = 100;
258
- const dfsAllPaths = (current, depth) => {
259
- // Periodic cancellation check
260
- iterationCount++;
261
- if (iterationCount % CANCELLATION_CHECK_INTERVAL === 0) {
262
- checkCancellation(signal, 'findAllPaths');
263
- }
264
- if (depth > maxDepth)
265
- return;
266
- if (current === target && depth > 0) {
267
- allPaths.push({
268
- path: [...currentPath],
269
- length: currentPath.length - 1,
270
- relations: [...currentRelations],
271
- });
272
- return;
273
- }
274
- const neighbors = this.getNeighborsWithRelations(current, opts);
275
- for (const { neighbor, relation } of neighbors) {
276
- if (!visited.has(neighbor)) {
277
- visited.add(neighbor);
278
- currentPath.push(neighbor);
279
- currentRelations.push(relation);
280
- dfsAllPaths(neighbor, depth + 1);
281
- currentPath.pop();
282
- currentRelations.pop();
283
- visited.delete(neighbor);
284
- }
285
- }
286
- };
287
- dfsAllPaths(source, 0);
288
- return allPaths;
289
- }
290
- // ==================== Sprint 8: Connected Components ====================
291
- /**
292
- * Find all connected components in the graph.
293
- *
294
- * Uses BFS to find all weakly connected components (treating the graph as undirected).
295
- *
296
- * @returns ConnectedComponentsResult with all components
297
- */
298
- async findConnectedComponents() {
299
- const graph = await this.storage.loadGraph();
300
- const visited = new Set();
301
- const components = [];
302
- for (const entity of graph.entities) {
303
- if (!visited.has(entity.name)) {
304
- // BFS to find all nodes in this component
305
- const component = [];
306
- const queue = [entity.name];
307
- visited.add(entity.name);
308
- while (queue.length > 0) {
309
- const current = queue.shift();
310
- component.push(current);
311
- // Get all neighbors (both directions for weakly connected)
312
- const neighbors = this.getNeighborsWithRelations(current, { direction: 'both' });
313
- for (const { neighbor } of neighbors) {
314
- if (!visited.has(neighbor)) {
315
- visited.add(neighbor);
316
- queue.push(neighbor);
317
- }
318
- }
319
- }
320
- components.push(component);
321
- }
322
- }
323
- // Sort components by size (largest first)
324
- components.sort((a, b) => b.length - a.length);
325
- return {
326
- components,
327
- count: components.length,
328
- largestComponentSize: components.length > 0 ? components[0].length : 0,
329
- };
330
- }
331
- // ==================== Sprint 8: Centrality Algorithms ====================
332
- /**
333
- * Calculate degree centrality for all entities.
334
- *
335
- * Degree centrality is the number of connections an entity has,
336
- * normalized by the maximum possible connections.
337
- *
338
- * @param direction - Direction to count: 'in', 'out', or 'both' (default)
339
- * @param topN - Number of top entities to return (default: 10)
340
- * @returns CentralityResult with scores and top entities
341
- */
342
- async calculateDegreeCentrality(direction = 'both', topN = 10) {
343
- const graph = await this.storage.loadGraph();
344
- const scores = new Map();
345
- const n = graph.entities.length;
346
- // Calculate degree for each entity
347
- for (const entity of graph.entities) {
348
- let degree = 0;
349
- if (direction === 'in' || direction === 'both') {
350
- degree += this.storage.getRelationsTo(entity.name).length;
351
- }
352
- if (direction === 'out' || direction === 'both') {
353
- degree += this.storage.getRelationsFrom(entity.name).length;
354
- }
355
- // Normalize by maximum possible degree
356
- const normalizedDegree = n > 1 ? degree / (n - 1) : 0;
357
- scores.set(entity.name, normalizedDegree);
358
- }
359
- // Get top N entities
360
- const topEntities = this.getTopEntities(scores, topN);
361
- return {
362
- scores,
363
- topEntities,
364
- algorithm: 'degree',
365
- };
366
- }
367
- /**
368
- * Calculate betweenness centrality for all entities.
369
- *
370
- * Betweenness centrality measures how often a node appears on shortest paths
371
- * between other nodes. Uses Brandes' algorithm for efficiency.
372
- *
373
- * @param options - Configuration options
374
- * @param options.topN - Number of top entities to return (default: 10)
375
- * @param options.chunkSize - Yield control every N vertices (default: 50)
376
- * @param options.onProgress - Progress callback (0.0 to 1.0)
377
- * @param options.approximate - Use approximation for faster results (default: false)
378
- * @param options.sampleRate - Sample rate for approximation (default: 0.2)
379
- * @returns CentralityResult with scores and top entities
380
- */
381
- async calculateBetweennessCentrality(options = {}) {
382
- const { topN = 10, chunkSize = 50, onProgress, approximate = false, sampleRate = 0.2 } = options;
383
- const graph = await this.storage.loadGraph();
384
- const scores = new Map();
385
- // Initialize scores
386
- for (const entity of graph.entities) {
387
- scores.set(entity.name, 0);
388
- }
389
- // Determine which sources to process (full or sampled)
390
- let sourcesToProcess = graph.entities;
391
- if (approximate && graph.entities.length > 100) {
392
- const sampleSize = Math.max(10, Math.floor(graph.entities.length * sampleRate));
393
- sourcesToProcess = this.sampleEntities(graph.entities, sampleSize);
394
- }
395
- // Brandes' algorithm with chunked processing
396
- let processed = 0;
397
- for (const source of sourcesToProcess) {
398
- const stack = [];
399
- const predecessors = new Map();
400
- const sigma = new Map(); // Number of shortest paths
401
- const distance = new Map(); // Distance from source
402
- const delta = new Map(); // Dependency
403
- // Initialize
404
- for (const entity of graph.entities) {
405
- predecessors.set(entity.name, []);
406
- sigma.set(entity.name, 0);
407
- distance.set(entity.name, -1);
408
- delta.set(entity.name, 0);
409
- }
410
- sigma.set(source.name, 1);
411
- distance.set(source.name, 0);
412
- // BFS
413
- const queue = [source.name];
414
- while (queue.length > 0) {
415
- const v = queue.shift();
416
- stack.push(v);
417
- const neighbors = this.getNeighborsWithRelations(v, { direction: 'both' });
418
- for (const { neighbor: w } of neighbors) {
419
- // First time w is discovered
420
- if (distance.get(w) === -1) {
421
- distance.set(w, distance.get(v) + 1);
422
- queue.push(w);
423
- }
424
- // w is on a shortest path from source via v
425
- if (distance.get(w) === distance.get(v) + 1) {
426
- sigma.set(w, sigma.get(w) + sigma.get(v));
427
- predecessors.get(w).push(v);
428
- }
429
- }
430
- }
431
- // Accumulation
432
- while (stack.length > 0) {
433
- const w = stack.pop();
434
- for (const v of predecessors.get(w)) {
435
- const contribution = (sigma.get(v) / sigma.get(w)) * (1 + delta.get(w));
436
- delta.set(v, delta.get(v) + contribution);
437
- }
438
- if (w !== source.name) {
439
- scores.set(w, scores.get(w) + delta.get(w));
440
- }
441
- }
442
- // Yield control periodically to prevent blocking event loop
443
- processed++;
444
- if (processed % chunkSize === 0) {
445
- // Yield control to allow event loop to process other events
446
- await new Promise(resolve => setImmediate(resolve));
447
- // Report progress
448
- if (onProgress) {
449
- onProgress(processed / sourcesToProcess.length);
450
- }
451
- }
452
- }
453
- // Final progress update
454
- if (onProgress) {
455
- onProgress(1);
456
- }
457
- // Scale scores if using approximation
458
- if (approximate && sampleRate < 1.0) {
459
- const scaleFactor = 1 / sampleRate;
460
- for (const [entity, score] of scores) {
461
- scores.set(entity, score * scaleFactor);
462
- }
463
- }
464
- // Normalize scores
465
- const n = graph.entities.length;
466
- const normalization = n > 2 ? 2 / ((n - 1) * (n - 2)) : 1;
467
- for (const [name, score] of scores) {
468
- scores.set(name, score * normalization);
469
- }
470
- const topEntities = this.getTopEntities(scores, topN);
471
- return {
472
- scores,
473
- topEntities,
474
- algorithm: 'betweenness',
475
- };
476
- }
477
- /**
478
- * Sample entities randomly for approximation algorithms.
479
- *
480
- * @param entities - Array of entities to sample from
481
- * @param sampleSize - Number of entities to sample
482
- * @returns Array of sampled entities
483
- */
484
- sampleEntities(entities, sampleSize) {
485
- const shuffled = [...entities];
486
- // Fisher-Yates shuffle
487
- for (let i = shuffled.length - 1; i > 0; i--) {
488
- const j = Math.floor(Math.random() * (i + 1));
489
- [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
490
- }
491
- return shuffled.slice(0, sampleSize);
492
- }
493
- /**
494
- * Calculate PageRank centrality for all entities.
495
- *
496
- * PageRank measures importance based on incoming connections from
497
- * other important nodes. Uses iterative power method.
498
- *
499
- * @param dampingFactor - Damping factor (default: 0.85)
500
- * @param maxIterations - Maximum iterations (default: 100)
501
- * @param tolerance - Convergence tolerance (default: 1e-6)
502
- * @param topN - Number of top entities to return (default: 10)
503
- * @returns CentralityResult with scores and top entities
504
- */
505
- async calculatePageRank(dampingFactor = 0.85, maxIterations = 100, tolerance = 1e-6, topN = 10) {
506
- const graph = await this.storage.loadGraph();
507
- const n = graph.entities.length;
508
- if (n === 0) {
509
- return { scores: new Map(), topEntities: [], algorithm: 'pagerank' };
510
- }
511
- // Initialize PageRank scores
512
- const scores = new Map();
513
- const initialScore = 1 / n;
514
- for (const entity of graph.entities) {
515
- scores.set(entity.name, initialScore);
516
- }
517
- // Build outgoing links map
518
- const outLinks = new Map();
519
- for (const entity of graph.entities) {
520
- const outgoing = this.storage.getRelationsFrom(entity.name);
521
- outLinks.set(entity.name, outgoing.map(r => r.to));
522
- }
523
- // Power iteration
524
- for (let iteration = 0; iteration < maxIterations; iteration++) {
525
- const newScores = new Map();
526
- let totalDiff = 0;
527
- // Calculate dangling node contribution (nodes with no outgoing links)
528
- let danglingSum = 0;
529
- for (const entity of graph.entities) {
530
- if (outLinks.get(entity.name).length === 0) {
531
- danglingSum += scores.get(entity.name);
532
- }
533
- }
534
- const danglingContribution = (dampingFactor * danglingSum) / n;
535
- // Calculate new scores
536
- for (const entity of graph.entities) {
537
- let incomingScore = 0;
538
- const incoming = this.storage.getRelationsTo(entity.name);
539
- for (const relation of incoming) {
540
- const source = relation.from;
541
- const sourceOutCount = outLinks.get(source)?.length || 1;
542
- incomingScore += scores.get(source) / sourceOutCount;
543
- }
544
- const newScore = (1 - dampingFactor) / n + dampingFactor * incomingScore + danglingContribution;
545
- newScores.set(entity.name, newScore);
546
- totalDiff += Math.abs(newScore - scores.get(entity.name));
547
- }
548
- // Update scores
549
- for (const [name, score] of newScores) {
550
- scores.set(name, score);
551
- }
552
- // Check convergence
553
- if (totalDiff < tolerance) {
554
- break;
555
- }
556
- }
557
- const topEntities = this.getTopEntities(scores, topN);
558
- return {
559
- scores,
560
- topEntities,
561
- algorithm: 'pagerank',
562
- };
563
- }
564
- /**
565
- * Get top N entities from a scores map.
566
- */
567
- getTopEntities(scores, topN) {
568
- return Array.from(scores.entries())
569
- .sort((a, b) => b[1] - a[1])
570
- .slice(0, topN)
571
- .map(([name, score]) => ({ name, score }));
572
- }
573
- }
574
- //# sourceMappingURL=GraphTraversal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GraphTraversal.js","sourceRoot":"","sources":["../../src/core/GraphTraversal.ts"],"names":[],"mappings":"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"}