@nahisaho/musubix-codegraph 2.3.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.
- package/README.md +187 -0
- package/dist/codegraph.d.ts +218 -0
- package/dist/codegraph.d.ts.map +1 -0
- package/dist/codegraph.js +429 -0
- package/dist/codegraph.js.map +1 -0
- package/dist/events/event-emitter.d.ts +93 -0
- package/dist/events/event-emitter.d.ts.map +1 -0
- package/dist/events/event-emitter.js +152 -0
- package/dist/events/event-emitter.js.map +1 -0
- package/dist/events/index.d.ts +8 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +8 -0
- package/dist/events/index.js.map +1 -0
- package/dist/graph/graph-engine.d.ts +97 -0
- package/dist/graph/graph-engine.d.ts.map +1 -0
- package/dist/graph/graph-engine.js +341 -0
- package/dist/graph/graph-engine.js.map +1 -0
- package/dist/graph/index.d.ts +8 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +8 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graphrag/graphrag-search.d.ts +67 -0
- package/dist/graphrag/graphrag-search.d.ts.map +1 -0
- package/dist/graphrag/graphrag-search.js +297 -0
- package/dist/graphrag/graphrag-search.js.map +1 -0
- package/dist/graphrag/index.d.ts +8 -0
- package/dist/graphrag/index.d.ts.map +1 -0
- package/dist/graphrag/index.js +8 -0
- package/dist/graphrag/index.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer/index.d.ts +8 -0
- package/dist/indexer/index.d.ts.map +1 -0
- package/dist/indexer/index.js +8 -0
- package/dist/indexer/index.js.map +1 -0
- package/dist/indexer/indexer.d.ts +58 -0
- package/dist/indexer/indexer.d.ts.map +1 -0
- package/dist/indexer/indexer.js +206 -0
- package/dist/indexer/indexer.js.map +1 -0
- package/dist/parser/ast-parser.d.ts +79 -0
- package/dist/parser/ast-parser.d.ts.map +1 -0
- package/dist/parser/ast-parser.js +489 -0
- package/dist/parser/ast-parser.js.map +1 -0
- package/dist/parser/index.d.ts +8 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +8 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/storage/index.d.ts +9 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +10 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/memory-storage.d.ts +102 -0
- package/dist/storage/memory-storage.d.ts.map +1 -0
- package/dist/storage/memory-storage.js +263 -0
- package/dist/storage/memory-storage.js.map +1 -0
- package/dist/storage/sqlite-storage.d.ts +90 -0
- package/dist/storage/sqlite-storage.d.ts.map +1 -0
- package/dist/storage/sqlite-storage.js +344 -0
- package/dist/storage/sqlite-storage.js.map +1 -0
- package/dist/types.d.ts +539 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +99 -0
- package/dist/types.js.map +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nahisaho/musubix-codegraph - CodeGraph Facade
|
|
3
|
+
*
|
|
4
|
+
* Main entry point for code graph analysis
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module @nahisaho/musubix-codegraph
|
|
8
|
+
*
|
|
9
|
+
* @see REQ-CG-API-001
|
|
10
|
+
* @see REQ-CG-API-002
|
|
11
|
+
* @see REQ-CG-API-003
|
|
12
|
+
* @see DES-CG-001
|
|
13
|
+
*/
|
|
14
|
+
import { DEFAULT_CODEGRAPH_OPTIONS } from './types.js';
|
|
15
|
+
import { CodeGraphEventEmitter } from './events/index.js';
|
|
16
|
+
/**
|
|
17
|
+
* CodeGraph - Main facade for code graph analysis
|
|
18
|
+
*
|
|
19
|
+
* Provides a unified API for:
|
|
20
|
+
* - AST parsing and entity extraction
|
|
21
|
+
* - Graph construction and querying
|
|
22
|
+
* - Dependency and call graph analysis
|
|
23
|
+
* - GraphRAG-based semantic search
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* // Basic usage
|
|
28
|
+
* const codeGraph = new CodeGraph({ storage: 'memory' });
|
|
29
|
+
* await codeGraph.index('/path/to/repo');
|
|
30
|
+
*
|
|
31
|
+
* const deps = await codeGraph.findDependencies('UserService');
|
|
32
|
+
* const callers = await codeGraph.findCallers('authenticate');
|
|
33
|
+
* const results = await codeGraph.globalSearch('authentication');
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* @see REQ-CG-API-001 - Library as standalone
|
|
37
|
+
* @see REQ-CG-API-002 - Programmatic API
|
|
38
|
+
*/
|
|
39
|
+
export class CodeGraph extends CodeGraphEventEmitter {
|
|
40
|
+
options;
|
|
41
|
+
storage = null;
|
|
42
|
+
initialized = false;
|
|
43
|
+
/**
|
|
44
|
+
* Create a new CodeGraph instance
|
|
45
|
+
*
|
|
46
|
+
* @param options - Configuration options
|
|
47
|
+
*/
|
|
48
|
+
constructor(options = {}) {
|
|
49
|
+
super();
|
|
50
|
+
this.options = {
|
|
51
|
+
...options,
|
|
52
|
+
parser: { ...DEFAULT_CODEGRAPH_OPTIONS.parser, ...options.parser },
|
|
53
|
+
graph: { ...DEFAULT_CODEGRAPH_OPTIONS.graph, ...options.graph },
|
|
54
|
+
indexer: { ...DEFAULT_CODEGRAPH_OPTIONS.indexer, ...options.indexer },
|
|
55
|
+
graphrag: { ...DEFAULT_CODEGRAPH_OPTIONS.graphrag, ...options.graphrag },
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
// =========================================================================
|
|
59
|
+
// Event handler shortcuts
|
|
60
|
+
// =========================================================================
|
|
61
|
+
/**
|
|
62
|
+
* Register a handler for indexing start events
|
|
63
|
+
*/
|
|
64
|
+
onIndexingStart(handler) {
|
|
65
|
+
this.on('indexing:start', (data) => handler(data.path));
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Register a handler for indexing complete events
|
|
70
|
+
*/
|
|
71
|
+
onIndexingComplete(handler) {
|
|
72
|
+
this.on('indexing:complete', handler);
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Register a handler for indexing progress events
|
|
77
|
+
*/
|
|
78
|
+
onIndexingProgress(handler) {
|
|
79
|
+
this.on('indexing:progress', (data) => handler(data.processed, data.total, data.currentFile));
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Register a handler for indexing error events
|
|
84
|
+
*/
|
|
85
|
+
onIndexingError(handler) {
|
|
86
|
+
this.on('indexing:error', (data) => handler(data.error, data.file));
|
|
87
|
+
return this;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Register a handler for query start events
|
|
91
|
+
*/
|
|
92
|
+
onQueryStart(handler) {
|
|
93
|
+
this.on('query:start', (data) => handler(data.query));
|
|
94
|
+
return this;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Register a handler for query complete events
|
|
98
|
+
*/
|
|
99
|
+
onQueryComplete(handler) {
|
|
100
|
+
this.on('query:complete', (data) => handler(data.result, data.durationMs));
|
|
101
|
+
return this;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Initialize the CodeGraph instance
|
|
105
|
+
*
|
|
106
|
+
* @internal
|
|
107
|
+
*/
|
|
108
|
+
async ensureInitialized() {
|
|
109
|
+
if (this.initialized)
|
|
110
|
+
return;
|
|
111
|
+
// Initialize storage
|
|
112
|
+
this.storage = await this.createStorage();
|
|
113
|
+
await this.storage.initialize();
|
|
114
|
+
this.initialized = true;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Create storage adapter based on options
|
|
118
|
+
*
|
|
119
|
+
* @internal
|
|
120
|
+
*/
|
|
121
|
+
async createStorage() {
|
|
122
|
+
const storageOption = this.options.storage ?? 'memory';
|
|
123
|
+
if (typeof storageOption === 'object') {
|
|
124
|
+
// Custom storage adapter provided
|
|
125
|
+
return storageOption;
|
|
126
|
+
}
|
|
127
|
+
// Lazy import storage implementations
|
|
128
|
+
switch (storageOption) {
|
|
129
|
+
case 'memory': {
|
|
130
|
+
const { MemoryStorage } = await import('./storage/memory-storage.js');
|
|
131
|
+
return new MemoryStorage();
|
|
132
|
+
}
|
|
133
|
+
case 'sqlite': {
|
|
134
|
+
const { SQLiteStorage } = await import('./storage/sqlite-storage.js');
|
|
135
|
+
return new SQLiteStorage(this.options.sqlitePath ?? '.codegraph/index.db');
|
|
136
|
+
}
|
|
137
|
+
default:
|
|
138
|
+
throw new Error(`Unknown storage type: ${storageOption}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// =========================================================================
|
|
142
|
+
// Indexing Methods
|
|
143
|
+
// =========================================================================
|
|
144
|
+
/**
|
|
145
|
+
* Index a repository or directory
|
|
146
|
+
*
|
|
147
|
+
* @param path - Path to repository or directory
|
|
148
|
+
* @returns Index result with statistics
|
|
149
|
+
*
|
|
150
|
+
* @see REQ-CG-IDX-001
|
|
151
|
+
*
|
|
152
|
+
* @example
|
|
153
|
+
* ```typescript
|
|
154
|
+
* const result = await codeGraph.index('/path/to/repo');
|
|
155
|
+
* console.log(`Indexed ${result.entitiesIndexed} entities`);
|
|
156
|
+
* ```
|
|
157
|
+
*/
|
|
158
|
+
async index(path) {
|
|
159
|
+
await this.ensureInitialized();
|
|
160
|
+
this.emitIndexingStart(path);
|
|
161
|
+
try {
|
|
162
|
+
const { Indexer } = await import('./indexer/index.js');
|
|
163
|
+
const { ASTParser } = await import('./parser/index.js');
|
|
164
|
+
const { GraphEngine } = await import('./graph/index.js');
|
|
165
|
+
const parser = new ASTParser(this.options.parser);
|
|
166
|
+
const graph = new GraphEngine(this.storage, this.options.graph);
|
|
167
|
+
const indexer = new Indexer(parser, graph, this.options.indexer);
|
|
168
|
+
// Set up progress tracking
|
|
169
|
+
indexer.onProgress((progress) => {
|
|
170
|
+
this.emitIndexingProgress(progress.processed, progress.total, progress.currentFile);
|
|
171
|
+
});
|
|
172
|
+
const result = await indexer.indexRepository(path);
|
|
173
|
+
this.emitIndexingComplete(result);
|
|
174
|
+
return result;
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
178
|
+
this.emitIndexingError(err);
|
|
179
|
+
throw err;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Reindex a repository (clear and index fresh)
|
|
184
|
+
*
|
|
185
|
+
* @param path - Path to repository or directory
|
|
186
|
+
* @returns Index result with statistics
|
|
187
|
+
*/
|
|
188
|
+
async reindex(path) {
|
|
189
|
+
await this.ensureInitialized();
|
|
190
|
+
await this.storage.clear();
|
|
191
|
+
return this.index(path);
|
|
192
|
+
}
|
|
193
|
+
// =========================================================================
|
|
194
|
+
// Query Methods
|
|
195
|
+
// =========================================================================
|
|
196
|
+
/**
|
|
197
|
+
* Query the code graph
|
|
198
|
+
*
|
|
199
|
+
* @param query - Search query string or query object
|
|
200
|
+
* @returns Query result with matching entities
|
|
201
|
+
*
|
|
202
|
+
* @see REQ-CG-GRF-003
|
|
203
|
+
*/
|
|
204
|
+
async query(query) {
|
|
205
|
+
await this.ensureInitialized();
|
|
206
|
+
const graphQuery = typeof query === 'string'
|
|
207
|
+
? { textSearch: query }
|
|
208
|
+
: query;
|
|
209
|
+
this.emitQueryStart(graphQuery);
|
|
210
|
+
const startTime = Date.now();
|
|
211
|
+
const { GraphEngine } = await import('./graph/index.js');
|
|
212
|
+
const graph = new GraphEngine(this.storage, this.options.graph);
|
|
213
|
+
const result = await graph.query(graphQuery);
|
|
214
|
+
const durationMs = Date.now() - startTime;
|
|
215
|
+
this.emitQueryComplete(result, durationMs);
|
|
216
|
+
return result;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Find dependencies of an entity
|
|
220
|
+
*
|
|
221
|
+
* @param entityName - Name or ID of the entity
|
|
222
|
+
* @param options - Dependency analysis options
|
|
223
|
+
* @returns List of dependent entities
|
|
224
|
+
*
|
|
225
|
+
* @see REQ-CG-GRF-004
|
|
226
|
+
*/
|
|
227
|
+
async findDependencies(entityName, options) {
|
|
228
|
+
await this.ensureInitialized();
|
|
229
|
+
const { GraphEngine } = await import('./graph/index.js');
|
|
230
|
+
const graph = new GraphEngine(this.storage, this.options.graph);
|
|
231
|
+
return graph.findDependencies(entityName, options?.depth ?? 3);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Find callers of a function or method
|
|
235
|
+
*
|
|
236
|
+
* @param entityName - Name or ID of the function/method
|
|
237
|
+
* @returns List of call paths
|
|
238
|
+
*
|
|
239
|
+
* @see REQ-CG-GRF-005
|
|
240
|
+
*/
|
|
241
|
+
async findCallers(entityName) {
|
|
242
|
+
await this.ensureInitialized();
|
|
243
|
+
const { GraphEngine } = await import('./graph/index.js');
|
|
244
|
+
const graph = new GraphEngine(this.storage, this.options.graph);
|
|
245
|
+
return graph.findCallers(entityName);
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Find callees of a function or method
|
|
249
|
+
*
|
|
250
|
+
* @param entityName - Name or ID of the function/method
|
|
251
|
+
* @returns List of call paths
|
|
252
|
+
*
|
|
253
|
+
* @see REQ-CG-GRF-005
|
|
254
|
+
*/
|
|
255
|
+
async findCallees(entityName) {
|
|
256
|
+
await this.ensureInitialized();
|
|
257
|
+
const { GraphEngine } = await import('./graph/index.js');
|
|
258
|
+
const graph = new GraphEngine(this.storage, this.options.graph);
|
|
259
|
+
return graph.findCallees(entityName);
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Find implementations of an interface
|
|
263
|
+
*
|
|
264
|
+
* @param interfaceName - Name or ID of the interface
|
|
265
|
+
* @returns List of implementing entities
|
|
266
|
+
*/
|
|
267
|
+
async findImplementations(interfaceName) {
|
|
268
|
+
await this.ensureInitialized();
|
|
269
|
+
const { GraphEngine } = await import('./graph/index.js');
|
|
270
|
+
const graph = new GraphEngine(this.storage, this.options.graph);
|
|
271
|
+
return graph.findImplementations(interfaceName);
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Analyze module structure
|
|
275
|
+
*
|
|
276
|
+
* @param path - Path to module/file
|
|
277
|
+
* @returns Module analysis result
|
|
278
|
+
*/
|
|
279
|
+
async analyzeModule(path) {
|
|
280
|
+
await this.ensureInitialized();
|
|
281
|
+
const { GraphEngine } = await import('./graph/index.js');
|
|
282
|
+
const graph = new GraphEngine(this.storage, this.options.graph);
|
|
283
|
+
return graph.analyzeModule(path);
|
|
284
|
+
}
|
|
285
|
+
// =========================================================================
|
|
286
|
+
// Code Retrieval Methods
|
|
287
|
+
// =========================================================================
|
|
288
|
+
/**
|
|
289
|
+
* Get source code snippet for an entity
|
|
290
|
+
*
|
|
291
|
+
* @param entityId - Entity ID
|
|
292
|
+
* @returns Code snippet with context
|
|
293
|
+
*/
|
|
294
|
+
async getSnippet(entityId) {
|
|
295
|
+
await this.ensureInitialized();
|
|
296
|
+
const entity = await this.storage.getEntity(entityId);
|
|
297
|
+
if (!entity) {
|
|
298
|
+
throw new Error(`Entity not found: ${entityId}`);
|
|
299
|
+
}
|
|
300
|
+
return {
|
|
301
|
+
entityId,
|
|
302
|
+
code: entity.sourceCode ?? '',
|
|
303
|
+
language: entity.language ?? 'typescript',
|
|
304
|
+
filePath: entity.filePath ?? '',
|
|
305
|
+
startLine: entity.startLine ?? 0,
|
|
306
|
+
endLine: entity.endLine ?? 0,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Get file structure overview
|
|
311
|
+
*
|
|
312
|
+
* @param path - File path
|
|
313
|
+
* @returns File structure with entities
|
|
314
|
+
*/
|
|
315
|
+
async getFileStructure(path) {
|
|
316
|
+
await this.ensureInitialized();
|
|
317
|
+
const entities = await this.storage.queryEntities({
|
|
318
|
+
filePath: path,
|
|
319
|
+
});
|
|
320
|
+
const imports = entities.filter(e => e.type === 'import');
|
|
321
|
+
const exports = entities.filter(e => e.type === 'export');
|
|
322
|
+
return {
|
|
323
|
+
filePath: path,
|
|
324
|
+
language: entities[0]?.language ?? 'typescript',
|
|
325
|
+
entities,
|
|
326
|
+
linesOfCode: Math.max(...entities.map(e => e.endLine ?? 0), 0),
|
|
327
|
+
importCount: imports.length,
|
|
328
|
+
exportCount: exports.length,
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
// =========================================================================
|
|
332
|
+
// GraphRAG Methods
|
|
333
|
+
// =========================================================================
|
|
334
|
+
/**
|
|
335
|
+
* Global search across all code communities
|
|
336
|
+
*
|
|
337
|
+
* @param query - Search query
|
|
338
|
+
* @param options - Search options
|
|
339
|
+
* @returns Search results with relevance scores
|
|
340
|
+
*
|
|
341
|
+
* @see REQ-CG-RAG-002
|
|
342
|
+
*/
|
|
343
|
+
async globalSearch(query, options) {
|
|
344
|
+
await this.ensureInitialized();
|
|
345
|
+
const { GraphRAGSearch } = await import('./graphrag/index.js');
|
|
346
|
+
const { GraphEngine } = await import('./graph/index.js');
|
|
347
|
+
const graph = new GraphEngine(this.storage, this.options.graph);
|
|
348
|
+
const search = new GraphRAGSearch(graph, this.options.graphrag);
|
|
349
|
+
return search.globalSearch(query, options);
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Local search in entity neighborhood
|
|
353
|
+
*
|
|
354
|
+
* @param entityName - Entity name or ID
|
|
355
|
+
* @param options - Search options
|
|
356
|
+
* @returns Search results from entity neighborhood
|
|
357
|
+
*
|
|
358
|
+
* @see REQ-CG-RAG-003
|
|
359
|
+
*/
|
|
360
|
+
async localSearch(entityName, options) {
|
|
361
|
+
await this.ensureInitialized();
|
|
362
|
+
const { GraphRAGSearch } = await import('./graphrag/index.js');
|
|
363
|
+
const { GraphEngine } = await import('./graph/index.js');
|
|
364
|
+
const graph = new GraphEngine(this.storage, this.options.graph);
|
|
365
|
+
const search = new GraphRAGSearch(graph, this.options.graphrag);
|
|
366
|
+
return search.localSearch(entityName, options);
|
|
367
|
+
}
|
|
368
|
+
// =========================================================================
|
|
369
|
+
// Statistics Methods
|
|
370
|
+
// =========================================================================
|
|
371
|
+
/**
|
|
372
|
+
* Get graph statistics
|
|
373
|
+
*
|
|
374
|
+
* @returns Graph statistics
|
|
375
|
+
*/
|
|
376
|
+
async getStats() {
|
|
377
|
+
await this.ensureInitialized();
|
|
378
|
+
const storageStats = await this.storage.getStats();
|
|
379
|
+
// Get entity type distribution
|
|
380
|
+
const entities = await this.storage.queryEntities({});
|
|
381
|
+
const entitiesByType = {};
|
|
382
|
+
const languages = new Set();
|
|
383
|
+
for (const entity of entities) {
|
|
384
|
+
entitiesByType[entity.type] = (entitiesByType[entity.type] ?? 0) + 1;
|
|
385
|
+
if (entity.language) {
|
|
386
|
+
languages.add(entity.language);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
return {
|
|
390
|
+
entityCount: storageStats.entityCount,
|
|
391
|
+
relationCount: storageStats.relationCount,
|
|
392
|
+
fileCount: storageStats.fileCount,
|
|
393
|
+
communityCount: 0, // Will be populated by GraphRAG
|
|
394
|
+
entitiesByType: entitiesByType,
|
|
395
|
+
relationsByType: {},
|
|
396
|
+
languages: Array.from(languages),
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
// =========================================================================
|
|
400
|
+
// Lifecycle Methods
|
|
401
|
+
// =========================================================================
|
|
402
|
+
/**
|
|
403
|
+
* Close the CodeGraph instance and release resources
|
|
404
|
+
*/
|
|
405
|
+
async close() {
|
|
406
|
+
if (this.storage) {
|
|
407
|
+
await this.storage.close();
|
|
408
|
+
this.storage = null;
|
|
409
|
+
}
|
|
410
|
+
this.initialized = false;
|
|
411
|
+
this.removeAllListeners();
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Check if instance is initialized
|
|
415
|
+
*/
|
|
416
|
+
isInitialized() {
|
|
417
|
+
return this.initialized;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Create a new CodeGraph instance
|
|
422
|
+
*
|
|
423
|
+
* @param options - Configuration options
|
|
424
|
+
* @returns CodeGraph instance
|
|
425
|
+
*/
|
|
426
|
+
export function createCodeGraph(options) {
|
|
427
|
+
return new CodeGraph(options);
|
|
428
|
+
}
|
|
429
|
+
//# sourceMappingURL=codegraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegraph.js","sourceRoot":"","sources":["../src/codegraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nahisaho/musubix-codegraph - Event System
|
|
3
|
+
*
|
|
4
|
+
* Type-safe event emitter for CodeGraph events
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module @nahisaho/musubix-codegraph/events
|
|
8
|
+
*
|
|
9
|
+
* @see REQ-CG-API-006
|
|
10
|
+
* @see DES-CG-001
|
|
11
|
+
*/
|
|
12
|
+
import type { CodeGraphEvents } from '../types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Type-safe event emitter for CodeGraph
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const emitter = new TypedEventEmitter<CodeGraphEvents>();
|
|
19
|
+
*
|
|
20
|
+
* emitter.on('indexing:progress', (data) => {
|
|
21
|
+
* console.log(`Progress: ${data.processed}/${data.total}`);
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* emitter.emit('indexing:progress', { processed: 10, total: 100, currentFile: 'src/index.ts' });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare class TypedEventEmitter<TEvents extends Record<string, unknown>> {
|
|
28
|
+
private emitter;
|
|
29
|
+
constructor();
|
|
30
|
+
/**
|
|
31
|
+
* Register an event listener
|
|
32
|
+
*/
|
|
33
|
+
on<K extends keyof TEvents>(event: K, listener: (data: TEvents[K]) => void): this;
|
|
34
|
+
/**
|
|
35
|
+
* Register a one-time event listener
|
|
36
|
+
*/
|
|
37
|
+
once<K extends keyof TEvents>(event: K, listener: (data: TEvents[K]) => void): this;
|
|
38
|
+
/**
|
|
39
|
+
* Remove an event listener
|
|
40
|
+
*/
|
|
41
|
+
off<K extends keyof TEvents>(event: K, listener: (data: TEvents[K]) => void): this;
|
|
42
|
+
/**
|
|
43
|
+
* Remove all listeners for an event
|
|
44
|
+
*/
|
|
45
|
+
removeAllListeners<K extends keyof TEvents>(event?: K): this;
|
|
46
|
+
/**
|
|
47
|
+
* Emit an event
|
|
48
|
+
*/
|
|
49
|
+
emit<K extends keyof TEvents>(event: K, data: TEvents[K]): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Get listener count for an event
|
|
52
|
+
*/
|
|
53
|
+
listenerCount<K extends keyof TEvents>(event: K): number;
|
|
54
|
+
/**
|
|
55
|
+
* Get all listeners for an event
|
|
56
|
+
*/
|
|
57
|
+
listeners<K extends keyof TEvents>(event: K): ((data: TEvents[K]) => void)[];
|
|
58
|
+
/**
|
|
59
|
+
* Wait for an event (Promise-based)
|
|
60
|
+
*/
|
|
61
|
+
waitFor<K extends keyof TEvents>(event: K, timeout?: number): Promise<TEvents[K]>;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* CodeGraph event emitter with pre-defined event types
|
|
65
|
+
*/
|
|
66
|
+
export declare class CodeGraphEventEmitter extends TypedEventEmitter<CodeGraphEvents> {
|
|
67
|
+
/**
|
|
68
|
+
* Emit indexing start event
|
|
69
|
+
*/
|
|
70
|
+
emitIndexingStart(path: string): void;
|
|
71
|
+
/**
|
|
72
|
+
* Emit indexing progress event
|
|
73
|
+
*/
|
|
74
|
+
emitIndexingProgress(processed: number, total: number, currentFile: string): void;
|
|
75
|
+
/**
|
|
76
|
+
* Emit indexing complete event
|
|
77
|
+
*/
|
|
78
|
+
emitIndexingComplete(result: CodeGraphEvents['indexing:complete']): void;
|
|
79
|
+
/**
|
|
80
|
+
* Emit indexing error event
|
|
81
|
+
*/
|
|
82
|
+
emitIndexingError(error: Error, file?: string): void;
|
|
83
|
+
/**
|
|
84
|
+
* Emit query start event
|
|
85
|
+
*/
|
|
86
|
+
emitQueryStart(query: CodeGraphEvents['query:start']['query']): void;
|
|
87
|
+
/**
|
|
88
|
+
* Emit query complete event
|
|
89
|
+
*/
|
|
90
|
+
emitQueryComplete(result: CodeGraphEvents['query:complete']['result'], durationMs: number): void;
|
|
91
|
+
}
|
|
92
|
+
export declare function createEventEmitter(): CodeGraphEventEmitter;
|
|
93
|
+
//# sourceMappingURL=event-emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-emitter.d.ts","sourceRoot":"","sources":["../../src/events/event-emitter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD;;;;;;;;;;;;;GAaG;AACH,qBAAa,iBAAiB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpE,OAAO,CAAC,OAAO,CAAe;;IAQ9B;;OAEG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAKjF;;OAEG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAKnF;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAKlF;;OAEG;IACH,kBAAkB,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI;IAS5D;;OAEG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO;IAIlE;;OAEG;IACH,aAAa,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM;IAIxD;;OAEG;IACH,SAAS,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE;IAI5E;;OAEG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;CAqBlF;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,iBAAiB,CAAC,eAAe,CAAC;IAC3E;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIrC;;OAEG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAIjF;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,mBAAmB,CAAC,GAAG,IAAI;IAIxE;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAIpD;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI;IAIpE;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;CAGjG;AAGD,wBAAgB,kBAAkB,IAAI,qBAAqB,CAE1D"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nahisaho/musubix-codegraph - Event System
|
|
3
|
+
*
|
|
4
|
+
* Type-safe event emitter for CodeGraph events
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module @nahisaho/musubix-codegraph/events
|
|
8
|
+
*
|
|
9
|
+
* @see REQ-CG-API-006
|
|
10
|
+
* @see DES-CG-001
|
|
11
|
+
*/
|
|
12
|
+
import { EventEmitter } from 'events';
|
|
13
|
+
/**
|
|
14
|
+
* Type-safe event emitter for CodeGraph
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const emitter = new TypedEventEmitter<CodeGraphEvents>();
|
|
19
|
+
*
|
|
20
|
+
* emitter.on('indexing:progress', (data) => {
|
|
21
|
+
* console.log(`Progress: ${data.processed}/${data.total}`);
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* emitter.emit('indexing:progress', { processed: 10, total: 100, currentFile: 'src/index.ts' });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export class TypedEventEmitter {
|
|
28
|
+
emitter;
|
|
29
|
+
constructor() {
|
|
30
|
+
this.emitter = new EventEmitter();
|
|
31
|
+
// Increase max listeners for complex applications
|
|
32
|
+
this.emitter.setMaxListeners(50);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Register an event listener
|
|
36
|
+
*/
|
|
37
|
+
on(event, listener) {
|
|
38
|
+
this.emitter.on(event, listener);
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Register a one-time event listener
|
|
43
|
+
*/
|
|
44
|
+
once(event, listener) {
|
|
45
|
+
this.emitter.once(event, listener);
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Remove an event listener
|
|
50
|
+
*/
|
|
51
|
+
off(event, listener) {
|
|
52
|
+
this.emitter.off(event, listener);
|
|
53
|
+
return this;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Remove all listeners for an event
|
|
57
|
+
*/
|
|
58
|
+
removeAllListeners(event) {
|
|
59
|
+
if (event) {
|
|
60
|
+
this.emitter.removeAllListeners(event);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
this.emitter.removeAllListeners();
|
|
64
|
+
}
|
|
65
|
+
return this;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Emit an event
|
|
69
|
+
*/
|
|
70
|
+
emit(event, data) {
|
|
71
|
+
return this.emitter.emit(event, data);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get listener count for an event
|
|
75
|
+
*/
|
|
76
|
+
listenerCount(event) {
|
|
77
|
+
return this.emitter.listenerCount(event);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get all listeners for an event
|
|
81
|
+
*/
|
|
82
|
+
listeners(event) {
|
|
83
|
+
return this.emitter.listeners(event);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Wait for an event (Promise-based)
|
|
87
|
+
*/
|
|
88
|
+
waitFor(event, timeout) {
|
|
89
|
+
return new Promise((resolve, reject) => {
|
|
90
|
+
let timeoutId;
|
|
91
|
+
const listener = (data) => {
|
|
92
|
+
if (timeoutId) {
|
|
93
|
+
clearTimeout(timeoutId);
|
|
94
|
+
}
|
|
95
|
+
resolve(data);
|
|
96
|
+
};
|
|
97
|
+
this.once(event, listener);
|
|
98
|
+
if (timeout) {
|
|
99
|
+
timeoutId = setTimeout(() => {
|
|
100
|
+
this.off(event, listener);
|
|
101
|
+
reject(new Error(`Timeout waiting for event: ${String(event)}`));
|
|
102
|
+
}, timeout);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* CodeGraph event emitter with pre-defined event types
|
|
109
|
+
*/
|
|
110
|
+
export class CodeGraphEventEmitter extends TypedEventEmitter {
|
|
111
|
+
/**
|
|
112
|
+
* Emit indexing start event
|
|
113
|
+
*/
|
|
114
|
+
emitIndexingStart(path) {
|
|
115
|
+
this.emit('indexing:start', { path, timestamp: new Date() });
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Emit indexing progress event
|
|
119
|
+
*/
|
|
120
|
+
emitIndexingProgress(processed, total, currentFile) {
|
|
121
|
+
this.emit('indexing:progress', { processed, total, currentFile });
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Emit indexing complete event
|
|
125
|
+
*/
|
|
126
|
+
emitIndexingComplete(result) {
|
|
127
|
+
this.emit('indexing:complete', result);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Emit indexing error event
|
|
131
|
+
*/
|
|
132
|
+
emitIndexingError(error, file) {
|
|
133
|
+
this.emit('indexing:error', { error, file });
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Emit query start event
|
|
137
|
+
*/
|
|
138
|
+
emitQueryStart(query) {
|
|
139
|
+
this.emit('query:start', { query });
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Emit query complete event
|
|
143
|
+
*/
|
|
144
|
+
emitQueryComplete(result, durationMs) {
|
|
145
|
+
this.emit('query:complete', { result, durationMs });
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Export default instance factory
|
|
149
|
+
export function createEventEmitter() {
|
|
150
|
+
return new CodeGraphEventEmitter();
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=event-emitter.js.map
|