@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,263 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nahisaho/musubix-codegraph - Memory Storage Implementation
|
|
3
|
+
*
|
|
4
|
+
* In-memory storage adapter for CodeGraph
|
|
5
|
+
*
|
|
6
|
+
* @see REQ-CG-API-005
|
|
7
|
+
* @see DES-CG-006
|
|
8
|
+
* @see TSK-CG-051
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* In-memory storage adapter
|
|
12
|
+
*
|
|
13
|
+
* Stores entities and relations in memory using Maps.
|
|
14
|
+
* Suitable for testing and small codebases.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const storage = new MemoryStorage();
|
|
19
|
+
* await storage.initialize();
|
|
20
|
+
*
|
|
21
|
+
* await storage.saveEntity(entity);
|
|
22
|
+
* const retrieved = await storage.getEntity(entity.id);
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export class MemoryStorage {
|
|
26
|
+
entities = new Map();
|
|
27
|
+
relations = new Map();
|
|
28
|
+
relationsBySource = new Map();
|
|
29
|
+
relationsByTarget = new Map();
|
|
30
|
+
fileCount = new Set();
|
|
31
|
+
initialized = false;
|
|
32
|
+
/**
|
|
33
|
+
* Initialize the storage
|
|
34
|
+
*/
|
|
35
|
+
async initialize() {
|
|
36
|
+
if (this.initialized)
|
|
37
|
+
return;
|
|
38
|
+
this.initialized = true;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Close the storage and release resources
|
|
42
|
+
*/
|
|
43
|
+
async close() {
|
|
44
|
+
this.entities.clear();
|
|
45
|
+
this.relations.clear();
|
|
46
|
+
this.relationsBySource.clear();
|
|
47
|
+
this.relationsByTarget.clear();
|
|
48
|
+
this.fileCount.clear();
|
|
49
|
+
this.initialized = false;
|
|
50
|
+
}
|
|
51
|
+
// =========================================================================
|
|
52
|
+
// Entity Operations
|
|
53
|
+
// =========================================================================
|
|
54
|
+
/**
|
|
55
|
+
* Save an entity
|
|
56
|
+
*/
|
|
57
|
+
async saveEntity(entity) {
|
|
58
|
+
this.entities.set(entity.id, entity);
|
|
59
|
+
if (entity.filePath) {
|
|
60
|
+
this.fileCount.add(entity.filePath);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get an entity by ID
|
|
65
|
+
*/
|
|
66
|
+
async getEntity(id) {
|
|
67
|
+
return this.entities.get(id) ?? null;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Query entities
|
|
71
|
+
*/
|
|
72
|
+
async queryEntities(query) {
|
|
73
|
+
let results = Array.from(this.entities.values());
|
|
74
|
+
// Filter by entity types
|
|
75
|
+
if (query.entityTypes && query.entityTypes.length > 0) {
|
|
76
|
+
results = results.filter((e) => query.entityTypes.includes(e.type));
|
|
77
|
+
}
|
|
78
|
+
// Filter by file path
|
|
79
|
+
if (query.filePath) {
|
|
80
|
+
const normalizedPath = query.filePath.toLowerCase();
|
|
81
|
+
results = results.filter((e) => e.filePath?.toLowerCase() === normalizedPath);
|
|
82
|
+
}
|
|
83
|
+
// Text search
|
|
84
|
+
if (query.textSearch) {
|
|
85
|
+
const searchLower = query.textSearch.toLowerCase();
|
|
86
|
+
results = results.filter((e) => e.name.toLowerCase().includes(searchLower) ||
|
|
87
|
+
e.id.toLowerCase().includes(searchLower) ||
|
|
88
|
+
e.docstring?.toLowerCase().includes(searchLower));
|
|
89
|
+
}
|
|
90
|
+
// Apply limit
|
|
91
|
+
if (query.limit && query.limit > 0) {
|
|
92
|
+
results = results.slice(0, query.limit);
|
|
93
|
+
}
|
|
94
|
+
return results;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Delete an entity
|
|
98
|
+
*/
|
|
99
|
+
async deleteEntity(id) {
|
|
100
|
+
const entity = this.entities.get(id);
|
|
101
|
+
if (entity) {
|
|
102
|
+
// Also remove related relations
|
|
103
|
+
const relatedRelationIds = new Set();
|
|
104
|
+
// Outgoing relations
|
|
105
|
+
const outgoing = this.relationsBySource.get(id);
|
|
106
|
+
if (outgoing) {
|
|
107
|
+
outgoing.forEach((rid) => relatedRelationIds.add(rid));
|
|
108
|
+
this.relationsBySource.delete(id);
|
|
109
|
+
}
|
|
110
|
+
// Incoming relations
|
|
111
|
+
const incoming = this.relationsByTarget.get(id);
|
|
112
|
+
if (incoming) {
|
|
113
|
+
incoming.forEach((rid) => relatedRelationIds.add(rid));
|
|
114
|
+
this.relationsByTarget.delete(id);
|
|
115
|
+
}
|
|
116
|
+
// Delete relations
|
|
117
|
+
for (const rid of relatedRelationIds) {
|
|
118
|
+
this.relations.delete(rid);
|
|
119
|
+
}
|
|
120
|
+
// Delete entity
|
|
121
|
+
this.entities.delete(id);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// =========================================================================
|
|
125
|
+
// Relation Operations
|
|
126
|
+
// =========================================================================
|
|
127
|
+
/**
|
|
128
|
+
* Save a relation
|
|
129
|
+
*/
|
|
130
|
+
async saveRelation(relation) {
|
|
131
|
+
this.relations.set(relation.id, relation);
|
|
132
|
+
// Index by source
|
|
133
|
+
if (!this.relationsBySource.has(relation.sourceId)) {
|
|
134
|
+
this.relationsBySource.set(relation.sourceId, new Set());
|
|
135
|
+
}
|
|
136
|
+
this.relationsBySource.get(relation.sourceId).add(relation.id);
|
|
137
|
+
// Index by target
|
|
138
|
+
if (!this.relationsByTarget.has(relation.targetId)) {
|
|
139
|
+
this.relationsByTarget.set(relation.targetId, new Set());
|
|
140
|
+
}
|
|
141
|
+
this.relationsByTarget.get(relation.targetId).add(relation.id);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get relations for an entity
|
|
145
|
+
*/
|
|
146
|
+
async getRelations(entityId, direction = 'both') {
|
|
147
|
+
const relationIds = new Set();
|
|
148
|
+
if (direction === 'out' || direction === 'both') {
|
|
149
|
+
const outgoing = this.relationsBySource.get(entityId);
|
|
150
|
+
if (outgoing) {
|
|
151
|
+
outgoing.forEach((id) => relationIds.add(id));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (direction === 'in' || direction === 'both') {
|
|
155
|
+
const incoming = this.relationsByTarget.get(entityId);
|
|
156
|
+
if (incoming) {
|
|
157
|
+
incoming.forEach((id) => relationIds.add(id));
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return Array.from(relationIds)
|
|
161
|
+
.map((id) => this.relations.get(id))
|
|
162
|
+
.filter((r) => r !== undefined);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Delete a relation
|
|
166
|
+
*/
|
|
167
|
+
async deleteRelation(id) {
|
|
168
|
+
const relation = this.relations.get(id);
|
|
169
|
+
if (relation) {
|
|
170
|
+
// Remove from source index
|
|
171
|
+
const sourceRels = this.relationsBySource.get(relation.sourceId);
|
|
172
|
+
if (sourceRels) {
|
|
173
|
+
sourceRels.delete(id);
|
|
174
|
+
if (sourceRels.size === 0) {
|
|
175
|
+
this.relationsBySource.delete(relation.sourceId);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Remove from target index
|
|
179
|
+
const targetRels = this.relationsByTarget.get(relation.targetId);
|
|
180
|
+
if (targetRels) {
|
|
181
|
+
targetRels.delete(id);
|
|
182
|
+
if (targetRels.size === 0) {
|
|
183
|
+
this.relationsByTarget.delete(relation.targetId);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
this.relations.delete(id);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// =========================================================================
|
|
190
|
+
// Bulk Operations
|
|
191
|
+
// =========================================================================
|
|
192
|
+
/**
|
|
193
|
+
* Bulk save entities and relations
|
|
194
|
+
*/
|
|
195
|
+
async bulkSave(entities, relations) {
|
|
196
|
+
for (const entity of entities) {
|
|
197
|
+
await this.saveEntity(entity);
|
|
198
|
+
}
|
|
199
|
+
for (const relation of relations) {
|
|
200
|
+
await this.saveRelation(relation);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Clear all data
|
|
205
|
+
*/
|
|
206
|
+
async clear() {
|
|
207
|
+
this.entities.clear();
|
|
208
|
+
this.relations.clear();
|
|
209
|
+
this.relationsBySource.clear();
|
|
210
|
+
this.relationsByTarget.clear();
|
|
211
|
+
this.fileCount.clear();
|
|
212
|
+
}
|
|
213
|
+
// =========================================================================
|
|
214
|
+
// Statistics
|
|
215
|
+
// =========================================================================
|
|
216
|
+
/**
|
|
217
|
+
* Get storage statistics
|
|
218
|
+
*/
|
|
219
|
+
async getStats() {
|
|
220
|
+
return {
|
|
221
|
+
entityCount: this.entities.size,
|
|
222
|
+
relationCount: this.relations.size,
|
|
223
|
+
fileCount: this.fileCount.size,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
// =========================================================================
|
|
227
|
+
// Additional Helper Methods
|
|
228
|
+
// =========================================================================
|
|
229
|
+
/**
|
|
230
|
+
* Find entities by name pattern
|
|
231
|
+
*/
|
|
232
|
+
async findByName(name, exact = false) {
|
|
233
|
+
const nameLower = name.toLowerCase();
|
|
234
|
+
return Array.from(this.entities.values()).filter((e) => exact
|
|
235
|
+
? e.name.toLowerCase() === nameLower
|
|
236
|
+
: e.name.toLowerCase().includes(nameLower));
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Get all entities of a specific type
|
|
240
|
+
*/
|
|
241
|
+
async getEntitiesByType(type) {
|
|
242
|
+
return Array.from(this.entities.values()).filter((e) => e.type === type);
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Get relations by type
|
|
246
|
+
*/
|
|
247
|
+
async getRelationsByType(type) {
|
|
248
|
+
return Array.from(this.relations.values()).filter((r) => r.type === type);
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Get all file paths
|
|
252
|
+
*/
|
|
253
|
+
async getFilePaths() {
|
|
254
|
+
return Array.from(this.fileCount);
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Check if storage is initialized
|
|
258
|
+
*/
|
|
259
|
+
isInitialized() {
|
|
260
|
+
return this.initialized;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=memory-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-storage.js","sourceRoot":"","sources":["../../src/storage/memory-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nahisaho/musubix-codegraph - SQLite Storage Implementation
|
|
3
|
+
*
|
|
4
|
+
* Persistent SQLite-based storage adapter for CodeGraph
|
|
5
|
+
*
|
|
6
|
+
* @see REQ-CG-API-005
|
|
7
|
+
* @see DES-CG-006
|
|
8
|
+
* @see TSK-CG-052
|
|
9
|
+
*/
|
|
10
|
+
import type { StorageAdapter, StorageStats, Entity, Relation, GraphQuery } from '../types.js';
|
|
11
|
+
/**
|
|
12
|
+
* SQLite storage adapter
|
|
13
|
+
*
|
|
14
|
+
* Stores entities and relations in SQLite database for persistence.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const storage = new SQLiteStorage('.codegraph/index.db');
|
|
19
|
+
* await storage.initialize();
|
|
20
|
+
*
|
|
21
|
+
* await storage.saveEntity(entity);
|
|
22
|
+
* const retrieved = await storage.getEntity(entity.id);
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare class SQLiteStorage implements StorageAdapter {
|
|
26
|
+
private dbPath;
|
|
27
|
+
private db;
|
|
28
|
+
private initialized;
|
|
29
|
+
constructor(dbPath?: string);
|
|
30
|
+
/**
|
|
31
|
+
* Initialize the database
|
|
32
|
+
*/
|
|
33
|
+
initialize(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Close the database connection
|
|
36
|
+
*/
|
|
37
|
+
close(): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Save an entity
|
|
40
|
+
*/
|
|
41
|
+
saveEntity(entity: Entity): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Get an entity by ID
|
|
44
|
+
*/
|
|
45
|
+
getEntity(id: string): Promise<Entity | null>;
|
|
46
|
+
/**
|
|
47
|
+
* Query entities
|
|
48
|
+
*/
|
|
49
|
+
queryEntities(query: GraphQuery): Promise<Entity[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Delete an entity
|
|
52
|
+
*/
|
|
53
|
+
deleteEntity(id: string): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Save a relation
|
|
56
|
+
*/
|
|
57
|
+
saveRelation(relation: Relation): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Get relations for an entity
|
|
60
|
+
*/
|
|
61
|
+
getRelations(entityId: string, direction?: 'in' | 'out' | 'both'): Promise<Relation[]>;
|
|
62
|
+
/**
|
|
63
|
+
* Delete a relation
|
|
64
|
+
*/
|
|
65
|
+
deleteRelation(id: string): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Bulk save entities and relations
|
|
68
|
+
*/
|
|
69
|
+
bulkSave(entities: Entity[], relations: Relation[]): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Clear all data
|
|
72
|
+
*/
|
|
73
|
+
clear(): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Get storage statistics
|
|
76
|
+
*/
|
|
77
|
+
getStats(): Promise<StorageStats>;
|
|
78
|
+
private ensureInitialized;
|
|
79
|
+
private rowToEntity;
|
|
80
|
+
private rowToRelation;
|
|
81
|
+
/**
|
|
82
|
+
* Check if storage is initialized
|
|
83
|
+
*/
|
|
84
|
+
isInitialized(): boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Get database path
|
|
87
|
+
*/
|
|
88
|
+
getDatabasePath(): string;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=sqlite-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-storage.d.ts","sourceRoot":"","sources":["../../src/storage/sqlite-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,UAAU,EAEX,MAAM,aAAa,CAAC;AAkBrB;;;;;;;;;;;;;GAaG;AACH,qBAAa,aAAc,YAAW,cAAc;IAClD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,EAAE,CAAyB;IACnC,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,GAAE,MAA8B;IAIlD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2DjC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAY5B;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B/C;;OAEG;IACG,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IASnD;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA8DzD;;OAEG;IACG,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB7C;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBrD;;OAEG;IACG,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,IAAI,GAAG,KAAK,GAAG,MAAe,GACxC,OAAO,CAAC,QAAQ,EAAE,CAAC;IA0BtB;;OAEG;IACG,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/C;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDxE;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC;IAkBvC,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,eAAe,IAAI,MAAM;CAG1B"}
|