@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,344 @@
|
|
|
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 * as fs from 'fs/promises';
|
|
11
|
+
import * as path from 'path';
|
|
12
|
+
/**
|
|
13
|
+
* SQLite storage adapter
|
|
14
|
+
*
|
|
15
|
+
* Stores entities and relations in SQLite database for persistence.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const storage = new SQLiteStorage('.codegraph/index.db');
|
|
20
|
+
* await storage.initialize();
|
|
21
|
+
*
|
|
22
|
+
* await storage.saveEntity(entity);
|
|
23
|
+
* const retrieved = await storage.getEntity(entity.id);
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export class SQLiteStorage {
|
|
27
|
+
dbPath;
|
|
28
|
+
db = null;
|
|
29
|
+
initialized = false;
|
|
30
|
+
constructor(dbPath = '.codegraph/index.db') {
|
|
31
|
+
this.dbPath = dbPath;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Initialize the database
|
|
35
|
+
*/
|
|
36
|
+
async initialize() {
|
|
37
|
+
if (this.initialized)
|
|
38
|
+
return;
|
|
39
|
+
// Ensure directory exists
|
|
40
|
+
const dir = path.dirname(this.dbPath);
|
|
41
|
+
await fs.mkdir(dir, { recursive: true });
|
|
42
|
+
// Dynamic import of better-sqlite3
|
|
43
|
+
try {
|
|
44
|
+
const BetterSqlite3 = (await import('better-sqlite3')).default;
|
|
45
|
+
this.db = new BetterSqlite3(this.dbPath);
|
|
46
|
+
// Create tables
|
|
47
|
+
this.db.exec(`
|
|
48
|
+
CREATE TABLE IF NOT EXISTS entities (
|
|
49
|
+
id TEXT PRIMARY KEY,
|
|
50
|
+
name TEXT NOT NULL,
|
|
51
|
+
type TEXT NOT NULL,
|
|
52
|
+
language TEXT,
|
|
53
|
+
file_path TEXT,
|
|
54
|
+
start_line INTEGER,
|
|
55
|
+
end_line INTEGER,
|
|
56
|
+
source_code TEXT,
|
|
57
|
+
docstring TEXT,
|
|
58
|
+
signature TEXT,
|
|
59
|
+
qualified_name TEXT,
|
|
60
|
+
namespace TEXT,
|
|
61
|
+
community_id TEXT,
|
|
62
|
+
metadata TEXT,
|
|
63
|
+
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
64
|
+
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
CREATE TABLE IF NOT EXISTS relations (
|
|
68
|
+
id TEXT PRIMARY KEY,
|
|
69
|
+
source_id TEXT NOT NULL,
|
|
70
|
+
target_id TEXT NOT NULL,
|
|
71
|
+
type TEXT NOT NULL,
|
|
72
|
+
weight REAL DEFAULT 1.0,
|
|
73
|
+
metadata TEXT,
|
|
74
|
+
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
75
|
+
FOREIGN KEY (source_id) REFERENCES entities(id) ON DELETE CASCADE,
|
|
76
|
+
FOREIGN KEY (target_id) REFERENCES entities(id) ON DELETE CASCADE
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
CREATE INDEX IF NOT EXISTS idx_entities_name ON entities(name);
|
|
80
|
+
CREATE INDEX IF NOT EXISTS idx_entities_type ON entities(type);
|
|
81
|
+
CREATE INDEX IF NOT EXISTS idx_entities_file_path ON entities(file_path);
|
|
82
|
+
CREATE INDEX IF NOT EXISTS idx_relations_source ON relations(source_id);
|
|
83
|
+
CREATE INDEX IF NOT EXISTS idx_relations_target ON relations(target_id);
|
|
84
|
+
CREATE INDEX IF NOT EXISTS idx_relations_type ON relations(type);
|
|
85
|
+
`);
|
|
86
|
+
this.initialized = true;
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
throw new Error(`Failed to initialize SQLite: ${error instanceof Error ? error.message : String(error)}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Close the database connection
|
|
94
|
+
*/
|
|
95
|
+
async close() {
|
|
96
|
+
if (this.db) {
|
|
97
|
+
this.db.close();
|
|
98
|
+
this.db = null;
|
|
99
|
+
}
|
|
100
|
+
this.initialized = false;
|
|
101
|
+
}
|
|
102
|
+
// =========================================================================
|
|
103
|
+
// Entity Operations
|
|
104
|
+
// =========================================================================
|
|
105
|
+
/**
|
|
106
|
+
* Save an entity
|
|
107
|
+
*/
|
|
108
|
+
async saveEntity(entity) {
|
|
109
|
+
this.ensureInitialized();
|
|
110
|
+
const stmt = this.db.prepare(`
|
|
111
|
+
INSERT OR REPLACE INTO entities (
|
|
112
|
+
id, name, type, language, file_path, start_line, end_line,
|
|
113
|
+
source_code, docstring, signature, qualified_name, namespace,
|
|
114
|
+
community_id, metadata, updated_at
|
|
115
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
|
|
116
|
+
`);
|
|
117
|
+
stmt.run(entity.id, entity.name, entity.type, entity.language ?? null, entity.filePath ?? null, entity.startLine ?? null, entity.endLine ?? null, entity.sourceCode ?? null, entity.docstring ?? null, entity.signature ?? null, entity.qualifiedName ?? null, entity.namespace ?? null, entity.communityId ?? null, entity.metadata ? JSON.stringify(entity.metadata) : '{}');
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get an entity by ID
|
|
121
|
+
*/
|
|
122
|
+
async getEntity(id) {
|
|
123
|
+
this.ensureInitialized();
|
|
124
|
+
const stmt = this.db.prepare('SELECT * FROM entities WHERE id = ?');
|
|
125
|
+
const row = stmt.get(id);
|
|
126
|
+
return row ? this.rowToEntity(row) : null;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Query entities
|
|
130
|
+
*/
|
|
131
|
+
async queryEntities(query) {
|
|
132
|
+
this.ensureInitialized();
|
|
133
|
+
const conditions = ['1=1'];
|
|
134
|
+
const params = [];
|
|
135
|
+
// Filter by entity types
|
|
136
|
+
if (query.entityTypes && query.entityTypes.length > 0) {
|
|
137
|
+
const placeholders = query.entityTypes.map(() => '?').join(',');
|
|
138
|
+
conditions.push(`type IN (${placeholders})`);
|
|
139
|
+
params.push(...query.entityTypes);
|
|
140
|
+
}
|
|
141
|
+
// Filter by file path
|
|
142
|
+
if (query.filePath) {
|
|
143
|
+
conditions.push('LOWER(file_path) = LOWER(?)');
|
|
144
|
+
params.push(query.filePath);
|
|
145
|
+
}
|
|
146
|
+
// Filter by namespace
|
|
147
|
+
if (query.namespace) {
|
|
148
|
+
conditions.push('namespace = ?');
|
|
149
|
+
params.push(query.namespace);
|
|
150
|
+
}
|
|
151
|
+
// Filter by name pattern
|
|
152
|
+
if (query.namePattern) {
|
|
153
|
+
conditions.push('name GLOB ?');
|
|
154
|
+
params.push(query.namePattern);
|
|
155
|
+
}
|
|
156
|
+
// Text search
|
|
157
|
+
if (query.textSearch) {
|
|
158
|
+
conditions.push(`(
|
|
159
|
+
name LIKE ? OR
|
|
160
|
+
id LIKE ? OR
|
|
161
|
+
docstring LIKE ?
|
|
162
|
+
)`);
|
|
163
|
+
const searchPattern = `%${query.textSearch}%`;
|
|
164
|
+
params.push(searchPattern, searchPattern, searchPattern);
|
|
165
|
+
}
|
|
166
|
+
let sql = `SELECT * FROM entities WHERE ${conditions.join(' AND ')}`;
|
|
167
|
+
// Apply limit
|
|
168
|
+
if (query.limit && query.limit > 0) {
|
|
169
|
+
sql += ` LIMIT ?`;
|
|
170
|
+
params.push(query.limit);
|
|
171
|
+
}
|
|
172
|
+
// Apply offset
|
|
173
|
+
if (query.offset && query.offset > 0) {
|
|
174
|
+
sql += ` OFFSET ?`;
|
|
175
|
+
params.push(query.offset);
|
|
176
|
+
}
|
|
177
|
+
const stmt = this.db.prepare(sql);
|
|
178
|
+
const rows = stmt.all(...params);
|
|
179
|
+
return rows.map(row => this.rowToEntity(row));
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Delete an entity
|
|
183
|
+
*/
|
|
184
|
+
async deleteEntity(id) {
|
|
185
|
+
this.ensureInitialized();
|
|
186
|
+
// Delete relations first (SQLite CASCADE should handle this, but be explicit)
|
|
187
|
+
const deleteRelations = this.db.prepare('DELETE FROM relations WHERE source_id = ? OR target_id = ?');
|
|
188
|
+
deleteRelations.run(id, id);
|
|
189
|
+
// Delete entity
|
|
190
|
+
const deleteEntity = this.db.prepare('DELETE FROM entities WHERE id = ?');
|
|
191
|
+
deleteEntity.run(id);
|
|
192
|
+
}
|
|
193
|
+
// =========================================================================
|
|
194
|
+
// Relation Operations
|
|
195
|
+
// =========================================================================
|
|
196
|
+
/**
|
|
197
|
+
* Save a relation
|
|
198
|
+
*/
|
|
199
|
+
async saveRelation(relation) {
|
|
200
|
+
this.ensureInitialized();
|
|
201
|
+
const stmt = this.db.prepare(`
|
|
202
|
+
INSERT OR REPLACE INTO relations (id, source_id, target_id, type, weight, metadata)
|
|
203
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
204
|
+
`);
|
|
205
|
+
stmt.run(relation.id, relation.sourceId, relation.targetId, relation.type, relation.weight, relation.metadata ? JSON.stringify(relation.metadata) : '{}');
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Get relations for an entity
|
|
209
|
+
*/
|
|
210
|
+
async getRelations(entityId, direction = 'both') {
|
|
211
|
+
this.ensureInitialized();
|
|
212
|
+
let sql;
|
|
213
|
+
let params;
|
|
214
|
+
switch (direction) {
|
|
215
|
+
case 'out':
|
|
216
|
+
sql = 'SELECT * FROM relations WHERE source_id = ?';
|
|
217
|
+
params = [entityId];
|
|
218
|
+
break;
|
|
219
|
+
case 'in':
|
|
220
|
+
sql = 'SELECT * FROM relations WHERE target_id = ?';
|
|
221
|
+
params = [entityId];
|
|
222
|
+
break;
|
|
223
|
+
default:
|
|
224
|
+
sql = 'SELECT * FROM relations WHERE source_id = ? OR target_id = ?';
|
|
225
|
+
params = [entityId, entityId];
|
|
226
|
+
}
|
|
227
|
+
const stmt = this.db.prepare(sql);
|
|
228
|
+
const rows = stmt.all(...params);
|
|
229
|
+
return rows.map(row => this.rowToRelation(row));
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Delete a relation
|
|
233
|
+
*/
|
|
234
|
+
async deleteRelation(id) {
|
|
235
|
+
this.ensureInitialized();
|
|
236
|
+
const stmt = this.db.prepare('DELETE FROM relations WHERE id = ?');
|
|
237
|
+
stmt.run(id);
|
|
238
|
+
}
|
|
239
|
+
// =========================================================================
|
|
240
|
+
// Bulk Operations
|
|
241
|
+
// =========================================================================
|
|
242
|
+
/**
|
|
243
|
+
* Bulk save entities and relations
|
|
244
|
+
*/
|
|
245
|
+
async bulkSave(entities, relations) {
|
|
246
|
+
this.ensureInitialized();
|
|
247
|
+
const saveEntitiesAndRelations = this.db.transaction(() => {
|
|
248
|
+
for (const entity of entities) {
|
|
249
|
+
const stmt = this.db.prepare(`
|
|
250
|
+
INSERT OR REPLACE INTO entities (
|
|
251
|
+
id, name, type, language, file_path, start_line, end_line,
|
|
252
|
+
source_code, docstring, signature, qualified_name, namespace,
|
|
253
|
+
community_id, metadata, updated_at
|
|
254
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
|
|
255
|
+
`);
|
|
256
|
+
stmt.run(entity.id, entity.name, entity.type, entity.language ?? null, entity.filePath ?? null, entity.startLine ?? null, entity.endLine ?? null, entity.sourceCode ?? null, entity.docstring ?? null, entity.signature ?? null, entity.qualifiedName ?? null, entity.namespace ?? null, entity.communityId ?? null, entity.metadata ? JSON.stringify(entity.metadata) : '{}');
|
|
257
|
+
}
|
|
258
|
+
for (const relation of relations) {
|
|
259
|
+
const stmt = this.db.prepare(`
|
|
260
|
+
INSERT OR REPLACE INTO relations (id, source_id, target_id, type, weight, metadata)
|
|
261
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
262
|
+
`);
|
|
263
|
+
stmt.run(relation.id, relation.sourceId, relation.targetId, relation.type, relation.weight, relation.metadata ? JSON.stringify(relation.metadata) : '{}');
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
saveEntitiesAndRelations();
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Clear all data
|
|
270
|
+
*/
|
|
271
|
+
async clear() {
|
|
272
|
+
this.ensureInitialized();
|
|
273
|
+
this.db.exec(`
|
|
274
|
+
DELETE FROM relations;
|
|
275
|
+
DELETE FROM entities;
|
|
276
|
+
`);
|
|
277
|
+
}
|
|
278
|
+
// =========================================================================
|
|
279
|
+
// Statistics
|
|
280
|
+
// =========================================================================
|
|
281
|
+
/**
|
|
282
|
+
* Get storage statistics
|
|
283
|
+
*/
|
|
284
|
+
async getStats() {
|
|
285
|
+
this.ensureInitialized();
|
|
286
|
+
const entityCount = this.db.prepare('SELECT COUNT(*) as count FROM entities').get();
|
|
287
|
+
const relationCount = this.db.prepare('SELECT COUNT(*) as count FROM relations').get();
|
|
288
|
+
const fileCount = this.db.prepare('SELECT COUNT(DISTINCT file_path) as count FROM entities WHERE file_path IS NOT NULL').get();
|
|
289
|
+
return {
|
|
290
|
+
entityCount: entityCount.count,
|
|
291
|
+
relationCount: relationCount.count,
|
|
292
|
+
fileCount: fileCount.count,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
// =========================================================================
|
|
296
|
+
// Helper Methods
|
|
297
|
+
// =========================================================================
|
|
298
|
+
ensureInitialized() {
|
|
299
|
+
if (!this.initialized || !this.db) {
|
|
300
|
+
throw new Error('SQLite storage not initialized. Call initialize() first.');
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
rowToEntity(row) {
|
|
304
|
+
return {
|
|
305
|
+
id: row.id,
|
|
306
|
+
name: row.name,
|
|
307
|
+
type: row.type,
|
|
308
|
+
language: row.language ?? undefined,
|
|
309
|
+
filePath: row.file_path ?? undefined,
|
|
310
|
+
startLine: row.start_line ?? undefined,
|
|
311
|
+
endLine: row.end_line ?? undefined,
|
|
312
|
+
sourceCode: row.source_code ?? undefined,
|
|
313
|
+
docstring: row.docstring ?? undefined,
|
|
314
|
+
signature: row.signature ?? undefined,
|
|
315
|
+
qualifiedName: row.qualified_name ?? undefined,
|
|
316
|
+
namespace: row.namespace ?? undefined,
|
|
317
|
+
communityId: row.community_id ?? undefined,
|
|
318
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : {},
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
rowToRelation(row) {
|
|
322
|
+
return {
|
|
323
|
+
id: row.id,
|
|
324
|
+
sourceId: row.source_id,
|
|
325
|
+
targetId: row.target_id,
|
|
326
|
+
type: row.type,
|
|
327
|
+
weight: row.weight ?? 1.0,
|
|
328
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : {},
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Check if storage is initialized
|
|
333
|
+
*/
|
|
334
|
+
isInitialized() {
|
|
335
|
+
return this.initialized;
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Get database path
|
|
339
|
+
*/
|
|
340
|
+
getDatabasePath() {
|
|
341
|
+
return this.dbPath;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
//# sourceMappingURL=sqlite-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-storage.js","sourceRoot":"","sources":["../../src/storage/sqlite-storage.ts"],"names":[],"mappings":"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"}
|