@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,202 @@
1
+ /**
2
+ * Graph Event Emitter
3
+ *
4
+ * Phase 10 Sprint 2: Provides event-based notifications for graph changes.
5
+ * Enables loose coupling between graph operations and dependent systems
6
+ * like search indexes, analytics, and external integrations.
7
+ *
8
+ * @module core/GraphEventEmitter
9
+ */
10
+ import type { GraphEventType, GraphEvent, GraphEventListener, GraphEventMap, Entity, Relation } from '../types/index.js';
11
+ /**
12
+ * Phase 10 Sprint 2: Event emitter for graph change notifications.
13
+ *
14
+ * Provides a type-safe event system for subscribing to and emitting
15
+ * graph change events. Supports wildcard listeners for all events.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const emitter = new GraphEventEmitter();
20
+ *
21
+ * // Listen to specific event types
22
+ * emitter.on('entity:created', (event) => {
23
+ * console.log(`Entity ${event.entity.name} created`);
24
+ * });
25
+ *
26
+ * // Listen to all events
27
+ * emitter.onAny((event) => {
28
+ * console.log(`Event: ${event.type}`);
29
+ * });
30
+ *
31
+ * // Emit an event
32
+ * emitter.emitEntityCreated(entity);
33
+ *
34
+ * // Remove listener
35
+ * const unsubscribe = emitter.on('entity:deleted', handler);
36
+ * unsubscribe();
37
+ * ```
38
+ */
39
+ export declare class GraphEventEmitter {
40
+ /**
41
+ * Map of event types to their registered listeners.
42
+ */
43
+ private listeners;
44
+ /**
45
+ * Listeners that receive all events regardless of type.
46
+ */
47
+ private wildcardListeners;
48
+ /**
49
+ * Whether to suppress errors from listeners (default: true).
50
+ * When true, listener errors are logged but don't stop event propagation.
51
+ */
52
+ private suppressListenerErrors;
53
+ /**
54
+ * Create a new GraphEventEmitter instance.
55
+ *
56
+ * @param options - Optional configuration
57
+ */
58
+ constructor(options?: {
59
+ suppressListenerErrors?: boolean;
60
+ });
61
+ /**
62
+ * Subscribe to a specific event type.
63
+ *
64
+ * @template K - The event type key
65
+ * @param eventType - The event type to listen for
66
+ * @param listener - Callback function to invoke when event occurs
67
+ * @returns Unsubscribe function to remove the listener
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * const unsubscribe = emitter.on('entity:created', (event) => {
72
+ * console.log(`Created: ${event.entity.name}`);
73
+ * });
74
+ *
75
+ * // Later: unsubscribe();
76
+ * ```
77
+ */
78
+ on<K extends GraphEventType>(eventType: K, listener: GraphEventListener<GraphEventMap[K]>): () => void;
79
+ /**
80
+ * Unsubscribe from a specific event type.
81
+ *
82
+ * @template K - The event type key
83
+ * @param eventType - The event type to unsubscribe from
84
+ * @param listener - The listener function to remove
85
+ */
86
+ off<K extends GraphEventType>(eventType: K, listener: GraphEventListener<GraphEventMap[K]>): void;
87
+ /**
88
+ * Subscribe to all event types.
89
+ *
90
+ * @param listener - Callback function to invoke for any event
91
+ * @returns Unsubscribe function to remove the listener
92
+ *
93
+ * @example
94
+ * ```typescript
95
+ * emitter.onAny((event) => {
96
+ * console.log(`Event: ${event.type} at ${event.timestamp}`);
97
+ * });
98
+ * ```
99
+ */
100
+ onAny(listener: GraphEventListener<GraphEvent>): () => void;
101
+ /**
102
+ * Unsubscribe from all events.
103
+ *
104
+ * @param listener - The listener function to remove
105
+ */
106
+ offAny(listener: GraphEventListener<GraphEvent>): void;
107
+ /**
108
+ * Subscribe to an event type, but only receive the first occurrence.
109
+ *
110
+ * @template K - The event type key
111
+ * @param eventType - The event type to listen for once
112
+ * @param listener - Callback function to invoke once
113
+ * @returns Unsubscribe function to cancel before event occurs
114
+ */
115
+ once<K extends GraphEventType>(eventType: K, listener: GraphEventListener<GraphEventMap[K]>): () => void;
116
+ /**
117
+ * Remove all listeners for all event types.
118
+ */
119
+ removeAllListeners(): void;
120
+ /**
121
+ * Get the count of listeners for a specific event type.
122
+ *
123
+ * @param eventType - The event type to count listeners for
124
+ * @returns Number of listeners registered
125
+ */
126
+ listenerCount(eventType?: GraphEventType): number;
127
+ /**
128
+ * Emit an event to all registered listeners.
129
+ *
130
+ * @param event - The event to emit
131
+ */
132
+ emit(event: GraphEvent): void;
133
+ /**
134
+ * Emit an entity:created event.
135
+ *
136
+ * @param entity - The entity that was created
137
+ */
138
+ emitEntityCreated(entity: Entity): void;
139
+ /**
140
+ * Emit an entity:updated event.
141
+ *
142
+ * @param entityName - Name of the updated entity
143
+ * @param changes - The changes that were applied
144
+ * @param previousValues - Optional previous values before update
145
+ */
146
+ emitEntityUpdated(entityName: string, changes: Partial<Entity>, previousValues?: Partial<Entity>): void;
147
+ /**
148
+ * Emit an entity:deleted event.
149
+ *
150
+ * @param entityName - Name of the deleted entity
151
+ * @param entity - Optional entity data before deletion
152
+ */
153
+ emitEntityDeleted(entityName: string, entity?: Entity): void;
154
+ /**
155
+ * Emit a relation:created event.
156
+ *
157
+ * @param relation - The relation that was created
158
+ */
159
+ emitRelationCreated(relation: Relation): void;
160
+ /**
161
+ * Emit a relation:deleted event.
162
+ *
163
+ * @param from - Source entity name
164
+ * @param to - Target entity name
165
+ * @param relationType - Type of the deleted relation
166
+ */
167
+ emitRelationDeleted(from: string, to: string, relationType: string): void;
168
+ /**
169
+ * Emit an observation:added event.
170
+ *
171
+ * @param entityName - Name of the entity
172
+ * @param observations - Observations that were added
173
+ */
174
+ emitObservationAdded(entityName: string, observations: string[]): void;
175
+ /**
176
+ * Emit an observation:deleted event.
177
+ *
178
+ * @param entityName - Name of the entity
179
+ * @param observations - Observations that were deleted
180
+ */
181
+ emitObservationDeleted(entityName: string, observations: string[]): void;
182
+ /**
183
+ * Emit a graph:saved event.
184
+ *
185
+ * @param entityCount - Number of entities in the saved graph
186
+ * @param relationCount - Number of relations in the saved graph
187
+ */
188
+ emitGraphSaved(entityCount: number, relationCount: number): void;
189
+ /**
190
+ * Emit a graph:loaded event.
191
+ *
192
+ * @param entityCount - Number of entities in the loaded graph
193
+ * @param relationCount - Number of relations in the loaded graph
194
+ */
195
+ emitGraphLoaded(entityCount: number, relationCount: number): void;
196
+ /**
197
+ * Safely invoke a listener, optionally catching errors.
198
+ * @private
199
+ */
200
+ private invokeListener;
201
+ }
202
+ //# sourceMappingURL=GraphEventEmitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphEventEmitter.d.ts","sourceRoot":"","sources":["../../src/core/GraphEventEmitter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,aAAa,EACb,MAAM,EACN,QAAQ,EAUT,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,iBAAiB;IAC5B;;OAEG;IACH,OAAO,CAAC,SAAS,CAAgE;IAEjF;;OAEG;IACH,OAAO,CAAC,iBAAiB,CAAkD;IAE3E;;;OAGG;IACH,OAAO,CAAC,sBAAsB,CAAiB;IAE/C;;;;OAIG;gBACS,OAAO,CAAC,EAAE;QAAE,sBAAsB,CAAC,EAAE,OAAO,CAAA;KAAE;IAQ1D;;;;;;;;;;;;;;;;OAgBG;IACH,EAAE,CAAC,CAAC,SAAS,cAAc,EACzB,SAAS,EAAE,CAAC,EACZ,QAAQ,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAC7C,MAAM,IAAI;IAYb;;;;;;OAMG;IACH,GAAG,CAAC,CAAC,SAAS,cAAc,EAC1B,SAAS,EAAE,CAAC,EACZ,QAAQ,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAC7C,IAAI;IAOP;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,GAAG,MAAM,IAAI;IAO3D;;;;OAIG;IACH,MAAM,CAAC,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,GAAG,IAAI;IAItD;;;;;;;OAOG;IACH,IAAI,CAAC,CAAC,SAAS,cAAc,EAC3B,SAAS,EAAE,CAAC,EACZ,QAAQ,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAC7C,MAAM,IAAI;IASb;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAK1B;;;;;OAKG;IACH,aAAa,CAAC,SAAS,CAAC,EAAE,cAAc,GAAG,MAAM;IAcjD;;;;OAIG;IACH,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAe7B;;;;OAIG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASvC;;;;;;OAMG;IACH,iBAAiB,CACf,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,EACxB,cAAc,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAC/B,IAAI;IAWP;;;;;OAKG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAU5D;;;;OAIG;IACH,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAS7C;;;;;;OAMG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAWzE;;;;;OAKG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI;IAYtE;;;;;OAKG;IACH,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI;IAYxE;;;;;OAKG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAUhE;;;;;OAKG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAYjE;;;OAGG;IACH,OAAO,CAAC,cAAc;CAYvB"}
@@ -0,0 +1,347 @@
1
+ /**
2
+ * Graph Event Emitter
3
+ *
4
+ * Phase 10 Sprint 2: Provides event-based notifications for graph changes.
5
+ * Enables loose coupling between graph operations and dependent systems
6
+ * like search indexes, analytics, and external integrations.
7
+ *
8
+ * @module core/GraphEventEmitter
9
+ */
10
+ /**
11
+ * Phase 10 Sprint 2: Event emitter for graph change notifications.
12
+ *
13
+ * Provides a type-safe event system for subscribing to and emitting
14
+ * graph change events. Supports wildcard listeners for all events.
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const emitter = new GraphEventEmitter();
19
+ *
20
+ * // Listen to specific event types
21
+ * emitter.on('entity:created', (event) => {
22
+ * console.log(`Entity ${event.entity.name} created`);
23
+ * });
24
+ *
25
+ * // Listen to all events
26
+ * emitter.onAny((event) => {
27
+ * console.log(`Event: ${event.type}`);
28
+ * });
29
+ *
30
+ * // Emit an event
31
+ * emitter.emitEntityCreated(entity);
32
+ *
33
+ * // Remove listener
34
+ * const unsubscribe = emitter.on('entity:deleted', handler);
35
+ * unsubscribe();
36
+ * ```
37
+ */
38
+ export class GraphEventEmitter {
39
+ /**
40
+ * Map of event types to their registered listeners.
41
+ */
42
+ listeners = new Map();
43
+ /**
44
+ * Listeners that receive all events regardless of type.
45
+ */
46
+ wildcardListeners = new Set();
47
+ /**
48
+ * Whether to suppress errors from listeners (default: true).
49
+ * When true, listener errors are logged but don't stop event propagation.
50
+ */
51
+ suppressListenerErrors = true;
52
+ /**
53
+ * Create a new GraphEventEmitter instance.
54
+ *
55
+ * @param options - Optional configuration
56
+ */
57
+ constructor(options) {
58
+ if (options?.suppressListenerErrors !== undefined) {
59
+ this.suppressListenerErrors = options.suppressListenerErrors;
60
+ }
61
+ }
62
+ // ==================== Subscription Methods ====================
63
+ /**
64
+ * Subscribe to a specific event type.
65
+ *
66
+ * @template K - The event type key
67
+ * @param eventType - The event type to listen for
68
+ * @param listener - Callback function to invoke when event occurs
69
+ * @returns Unsubscribe function to remove the listener
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * const unsubscribe = emitter.on('entity:created', (event) => {
74
+ * console.log(`Created: ${event.entity.name}`);
75
+ * });
76
+ *
77
+ * // Later: unsubscribe();
78
+ * ```
79
+ */
80
+ on(eventType, listener) {
81
+ if (!this.listeners.has(eventType)) {
82
+ this.listeners.set(eventType, new Set());
83
+ }
84
+ this.listeners.get(eventType).add(listener);
85
+ // Return unsubscribe function
86
+ return () => {
87
+ this.off(eventType, listener);
88
+ };
89
+ }
90
+ /**
91
+ * Unsubscribe from a specific event type.
92
+ *
93
+ * @template K - The event type key
94
+ * @param eventType - The event type to unsubscribe from
95
+ * @param listener - The listener function to remove
96
+ */
97
+ off(eventType, listener) {
98
+ const listeners = this.listeners.get(eventType);
99
+ if (listeners) {
100
+ listeners.delete(listener);
101
+ }
102
+ }
103
+ /**
104
+ * Subscribe to all event types.
105
+ *
106
+ * @param listener - Callback function to invoke for any event
107
+ * @returns Unsubscribe function to remove the listener
108
+ *
109
+ * @example
110
+ * ```typescript
111
+ * emitter.onAny((event) => {
112
+ * console.log(`Event: ${event.type} at ${event.timestamp}`);
113
+ * });
114
+ * ```
115
+ */
116
+ onAny(listener) {
117
+ this.wildcardListeners.add(listener);
118
+ return () => {
119
+ this.offAny(listener);
120
+ };
121
+ }
122
+ /**
123
+ * Unsubscribe from all events.
124
+ *
125
+ * @param listener - The listener function to remove
126
+ */
127
+ offAny(listener) {
128
+ this.wildcardListeners.delete(listener);
129
+ }
130
+ /**
131
+ * Subscribe to an event type, but only receive the first occurrence.
132
+ *
133
+ * @template K - The event type key
134
+ * @param eventType - The event type to listen for once
135
+ * @param listener - Callback function to invoke once
136
+ * @returns Unsubscribe function to cancel before event occurs
137
+ */
138
+ once(eventType, listener) {
139
+ const wrappedListener = ((event) => {
140
+ this.off(eventType, wrappedListener);
141
+ listener(event);
142
+ });
143
+ return this.on(eventType, wrappedListener);
144
+ }
145
+ /**
146
+ * Remove all listeners for all event types.
147
+ */
148
+ removeAllListeners() {
149
+ this.listeners.clear();
150
+ this.wildcardListeners.clear();
151
+ }
152
+ /**
153
+ * Get the count of listeners for a specific event type.
154
+ *
155
+ * @param eventType - The event type to count listeners for
156
+ * @returns Number of listeners registered
157
+ */
158
+ listenerCount(eventType) {
159
+ if (eventType) {
160
+ return (this.listeners.get(eventType)?.size ?? 0) + this.wildcardListeners.size;
161
+ }
162
+ // Count all listeners
163
+ let count = this.wildcardListeners.size;
164
+ for (const listeners of this.listeners.values()) {
165
+ count += listeners.size;
166
+ }
167
+ return count;
168
+ }
169
+ // ==================== Emit Methods ====================
170
+ /**
171
+ * Emit an event to all registered listeners.
172
+ *
173
+ * @param event - The event to emit
174
+ */
175
+ emit(event) {
176
+ // Notify type-specific listeners
177
+ const typeListeners = this.listeners.get(event.type);
178
+ if (typeListeners) {
179
+ for (const listener of typeListeners) {
180
+ this.invokeListener(listener, event);
181
+ }
182
+ }
183
+ // Notify wildcard listeners
184
+ for (const listener of this.wildcardListeners) {
185
+ this.invokeListener(listener, event);
186
+ }
187
+ }
188
+ /**
189
+ * Emit an entity:created event.
190
+ *
191
+ * @param entity - The entity that was created
192
+ */
193
+ emitEntityCreated(entity) {
194
+ const event = {
195
+ type: 'entity:created',
196
+ timestamp: new Date().toISOString(),
197
+ entity,
198
+ };
199
+ this.emit(event);
200
+ }
201
+ /**
202
+ * Emit an entity:updated event.
203
+ *
204
+ * @param entityName - Name of the updated entity
205
+ * @param changes - The changes that were applied
206
+ * @param previousValues - Optional previous values before update
207
+ */
208
+ emitEntityUpdated(entityName, changes, previousValues) {
209
+ const event = {
210
+ type: 'entity:updated',
211
+ timestamp: new Date().toISOString(),
212
+ entityName,
213
+ changes,
214
+ previousValues,
215
+ };
216
+ this.emit(event);
217
+ }
218
+ /**
219
+ * Emit an entity:deleted event.
220
+ *
221
+ * @param entityName - Name of the deleted entity
222
+ * @param entity - Optional entity data before deletion
223
+ */
224
+ emitEntityDeleted(entityName, entity) {
225
+ const event = {
226
+ type: 'entity:deleted',
227
+ timestamp: new Date().toISOString(),
228
+ entityName,
229
+ entity,
230
+ };
231
+ this.emit(event);
232
+ }
233
+ /**
234
+ * Emit a relation:created event.
235
+ *
236
+ * @param relation - The relation that was created
237
+ */
238
+ emitRelationCreated(relation) {
239
+ const event = {
240
+ type: 'relation:created',
241
+ timestamp: new Date().toISOString(),
242
+ relation,
243
+ };
244
+ this.emit(event);
245
+ }
246
+ /**
247
+ * Emit a relation:deleted event.
248
+ *
249
+ * @param from - Source entity name
250
+ * @param to - Target entity name
251
+ * @param relationType - Type of the deleted relation
252
+ */
253
+ emitRelationDeleted(from, to, relationType) {
254
+ const event = {
255
+ type: 'relation:deleted',
256
+ timestamp: new Date().toISOString(),
257
+ from,
258
+ to,
259
+ relationType,
260
+ };
261
+ this.emit(event);
262
+ }
263
+ /**
264
+ * Emit an observation:added event.
265
+ *
266
+ * @param entityName - Name of the entity
267
+ * @param observations - Observations that were added
268
+ */
269
+ emitObservationAdded(entityName, observations) {
270
+ if (observations.length === 0)
271
+ return;
272
+ const event = {
273
+ type: 'observation:added',
274
+ timestamp: new Date().toISOString(),
275
+ entityName,
276
+ observations,
277
+ };
278
+ this.emit(event);
279
+ }
280
+ /**
281
+ * Emit an observation:deleted event.
282
+ *
283
+ * @param entityName - Name of the entity
284
+ * @param observations - Observations that were deleted
285
+ */
286
+ emitObservationDeleted(entityName, observations) {
287
+ if (observations.length === 0)
288
+ return;
289
+ const event = {
290
+ type: 'observation:deleted',
291
+ timestamp: new Date().toISOString(),
292
+ entityName,
293
+ observations,
294
+ };
295
+ this.emit(event);
296
+ }
297
+ /**
298
+ * Emit a graph:saved event.
299
+ *
300
+ * @param entityCount - Number of entities in the saved graph
301
+ * @param relationCount - Number of relations in the saved graph
302
+ */
303
+ emitGraphSaved(entityCount, relationCount) {
304
+ const event = {
305
+ type: 'graph:saved',
306
+ timestamp: new Date().toISOString(),
307
+ entityCount,
308
+ relationCount,
309
+ };
310
+ this.emit(event);
311
+ }
312
+ /**
313
+ * Emit a graph:loaded event.
314
+ *
315
+ * @param entityCount - Number of entities in the loaded graph
316
+ * @param relationCount - Number of relations in the loaded graph
317
+ */
318
+ emitGraphLoaded(entityCount, relationCount) {
319
+ const event = {
320
+ type: 'graph:loaded',
321
+ timestamp: new Date().toISOString(),
322
+ entityCount,
323
+ relationCount,
324
+ };
325
+ this.emit(event);
326
+ }
327
+ // ==================== Helper Methods ====================
328
+ /**
329
+ * Safely invoke a listener, optionally catching errors.
330
+ * @private
331
+ */
332
+ invokeListener(listener, event) {
333
+ if (this.suppressListenerErrors) {
334
+ try {
335
+ listener(event);
336
+ }
337
+ catch (error) {
338
+ // Log but don't propagate errors from listeners
339
+ console.error(`GraphEventEmitter: Listener error for ${event.type}:`, error);
340
+ }
341
+ }
342
+ else {
343
+ listener(event);
344
+ }
345
+ }
346
+ }
347
+ //# sourceMappingURL=GraphEventEmitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphEventEmitter.js","sourceRoot":"","sources":["../../src/core/GraphEventEmitter.ts"],"names":[],"mappings":"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"}