claude-ex 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.
- package/README.md +65 -0
- package/dist/claude/claudemd.d.ts +3 -0
- package/dist/claude/claudemd.js +112 -0
- package/dist/claude/claudemd.js.map +1 -0
- package/dist/claude/installer.d.ts +1 -0
- package/dist/claude/installer.js +193 -0
- package/dist/claude/installer.js.map +1 -0
- package/dist/claude/mcp.d.ts +1 -0
- package/dist/claude/mcp.js +195 -0
- package/dist/claude/mcp.js.map +1 -0
- package/dist/db/schema.d.ts +25 -0
- package/dist/db/schema.js +218 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +339 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer/collector.d.ts +1 -0
- package/dist/indexer/collector.js +133 -0
- package/dist/indexer/collector.js.map +1 -0
- package/dist/indexer/index.d.ts +13 -0
- package/dist/indexer/index.js +326 -0
- package/dist/indexer/index.js.map +1 -0
- package/dist/indexer/parser.d.ts +31 -0
- package/dist/indexer/parser.js +407 -0
- package/dist/indexer/parser.js.map +1 -0
- package/dist/query/engine.d.ts +65 -0
- package/dist/query/engine.js +340 -0
- package/dist/query/engine.js.map +1 -0
- package/dist/utils.d.ts +5 -0
- package/dist/utils.js +75 -0
- package/dist/utils.js.map +1 -0
- package/dist/watcher/daemon.d.ts +5 -0
- package/dist/watcher/daemon.js +136 -0
- package/dist/watcher/daemon.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.collectFiles = collectFiles;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const SKIP_DIRS = new Set([
|
|
40
|
+
'node_modules', '.git', '.hg', '.svn', 'dist', 'build', 'out',
|
|
41
|
+
'.next', '.nuxt', '__pycache__', '.pytest_cache', 'target', 'vendor',
|
|
42
|
+
'.codex', '.claude', 'coverage', '.vscode', '.idea', 'venv', '.venv',
|
|
43
|
+
'.env', '.tox', 'bower_components', '.cache', '.parcel-cache',
|
|
44
|
+
'tmp', 'temp', '.turbo', '.vercel', '.netlify',
|
|
45
|
+
]);
|
|
46
|
+
const SKIP_EXTENSIONS = new Set([
|
|
47
|
+
'.lock', '.log', '.map', '.min.js', '.min.css',
|
|
48
|
+
'.png', '.jpg', '.jpeg', '.gif', '.bmp', '.ico', '.svg', '.webp',
|
|
49
|
+
'.woff', '.woff2', '.ttf', '.eot', '.otf',
|
|
50
|
+
'.mp3', '.mp4', '.wav', '.avi', '.mov', '.webm', '.ogg',
|
|
51
|
+
'.zip', '.tar', '.gz', '.bz2', '.rar', '.7z',
|
|
52
|
+
'.pdf', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx',
|
|
53
|
+
'.exe', '.dll', '.so', '.dylib', '.o', '.a',
|
|
54
|
+
'.pyc', '.pyo', '.class', '.jar',
|
|
55
|
+
'.db', '.sqlite', '.sqlite3',
|
|
56
|
+
'.bin', '.dat', '.img', '.iso',
|
|
57
|
+
]);
|
|
58
|
+
const SUPPORTED_EXTENSIONS = new Set([
|
|
59
|
+
'.ts', '.tsx', '.js', '.jsx', '.mjs',
|
|
60
|
+
'.py',
|
|
61
|
+
'.rs',
|
|
62
|
+
'.go',
|
|
63
|
+
'.sh', '.bash',
|
|
64
|
+
'.c', '.h',
|
|
65
|
+
'.cpp', '.cc', '.hpp',
|
|
66
|
+
'.json',
|
|
67
|
+
'.css',
|
|
68
|
+
'.html', '.htm',
|
|
69
|
+
]);
|
|
70
|
+
const MAX_FILE_SIZE = 512 * 1024; // 512KB
|
|
71
|
+
function parseGitignore(rootDir) {
|
|
72
|
+
const ignored = new Set();
|
|
73
|
+
const gitignorePath = path.join(rootDir, '.gitignore');
|
|
74
|
+
if (!fs.existsSync(gitignorePath))
|
|
75
|
+
return ignored;
|
|
76
|
+
try {
|
|
77
|
+
const content = fs.readFileSync(gitignorePath, 'utf-8');
|
|
78
|
+
for (const line of content.split('\n')) {
|
|
79
|
+
const trimmed = line.trim();
|
|
80
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
81
|
+
continue;
|
|
82
|
+
const name = trimmed.replace(/\/$/, '').replace(/^\//, '');
|
|
83
|
+
if (!name.includes('/') && !name.includes('*')) {
|
|
84
|
+
ignored.add(name);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// ignore read errors
|
|
90
|
+
}
|
|
91
|
+
return ignored;
|
|
92
|
+
}
|
|
93
|
+
function collectFiles(rootDir) {
|
|
94
|
+
const files = [];
|
|
95
|
+
const gitignored = parseGitignore(rootDir);
|
|
96
|
+
function walk(dir) {
|
|
97
|
+
let entries;
|
|
98
|
+
try {
|
|
99
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
for (const entry of entries) {
|
|
105
|
+
const name = entry.name;
|
|
106
|
+
if (entry.isDirectory()) {
|
|
107
|
+
if (name.startsWith('.') || SKIP_DIRS.has(name) || gitignored.has(name))
|
|
108
|
+
continue;
|
|
109
|
+
walk(path.join(dir, name));
|
|
110
|
+
}
|
|
111
|
+
else if (entry.isFile()) {
|
|
112
|
+
const ext = path.extname(name).toLowerCase();
|
|
113
|
+
if (SKIP_EXTENSIONS.has(ext))
|
|
114
|
+
continue;
|
|
115
|
+
if (!SUPPORTED_EXTENSIONS.has(ext))
|
|
116
|
+
continue;
|
|
117
|
+
const fullPath = path.join(dir, name);
|
|
118
|
+
try {
|
|
119
|
+
const stat = fs.statSync(fullPath);
|
|
120
|
+
if (stat.size > MAX_FILE_SIZE)
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
files.push(path.relative(rootDir, fullPath));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
walk(rootDir);
|
|
131
|
+
return files;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=collector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collector.js","sourceRoot":"","sources":["../../src/indexer/collector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
export interface IndexStats {
|
|
3
|
+
totalFiles: number;
|
|
4
|
+
indexedFiles: number;
|
|
5
|
+
skippedFiles: number;
|
|
6
|
+
symbols: number;
|
|
7
|
+
edges: number;
|
|
8
|
+
timeMs: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function indexProject(rootDir: string, options?: {
|
|
11
|
+
verbose?: boolean;
|
|
12
|
+
}): IndexStats;
|
|
13
|
+
export declare function reindexFile(rootDir: string, relPath: string, db?: Database.Database): void;
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.indexProject = indexProject;
|
|
37
|
+
exports.reindexFile = reindexFile;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const schema_1 = require("../db/schema");
|
|
41
|
+
const collector_1 = require("./collector");
|
|
42
|
+
const parser_1 = require("./parser");
|
|
43
|
+
function resolveImportPath(rootDir, fromFile, importSource) {
|
|
44
|
+
// Skip non-relative imports (packages)
|
|
45
|
+
if (!importSource.startsWith('.') && !importSource.startsWith('/'))
|
|
46
|
+
return null;
|
|
47
|
+
const fromDir = path.dirname(path.join(rootDir, fromFile));
|
|
48
|
+
const resolved = path.resolve(fromDir, importSource);
|
|
49
|
+
const rel = path.relative(rootDir, resolved);
|
|
50
|
+
const extensions = ['.ts', '.tsx', '.js', '.jsx', '.py', '.rs', '.go', ''];
|
|
51
|
+
const indexFiles = ['/index.ts', '/index.tsx', '/index.js', '/index.jsx'];
|
|
52
|
+
// Try direct match with extensions
|
|
53
|
+
for (const ext of extensions) {
|
|
54
|
+
const candidate = rel + ext;
|
|
55
|
+
if (fs.existsSync(path.join(rootDir, candidate)))
|
|
56
|
+
return candidate;
|
|
57
|
+
}
|
|
58
|
+
// Try index files in directory
|
|
59
|
+
for (const idx of indexFiles) {
|
|
60
|
+
const candidate = rel + idx;
|
|
61
|
+
if (fs.existsSync(path.join(rootDir, candidate)))
|
|
62
|
+
return candidate;
|
|
63
|
+
}
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
function indexProject(rootDir, options) {
|
|
67
|
+
const start = performance.now();
|
|
68
|
+
const db = (0, schema_1.openDatabase)(rootDir);
|
|
69
|
+
const files = (0, collector_1.collectFiles)(rootDir);
|
|
70
|
+
const verbose = options?.verbose ?? false;
|
|
71
|
+
let indexedFiles = 0;
|
|
72
|
+
let skippedFiles = 0;
|
|
73
|
+
let totalSymbols = 0;
|
|
74
|
+
let totalEdges = 0;
|
|
75
|
+
// Track file -> symbol IDs and file -> imported file paths
|
|
76
|
+
const fileSymbolMap = new Map(); // filePath -> (symbolName -> symbolId)
|
|
77
|
+
const fileImportMap = new Map();
|
|
78
|
+
const validPaths = new Set(files);
|
|
79
|
+
const transaction = db.transaction(() => {
|
|
80
|
+
for (const relPath of files) {
|
|
81
|
+
const fullPath = path.join(rootDir, relPath);
|
|
82
|
+
let content;
|
|
83
|
+
try {
|
|
84
|
+
content = fs.readFileSync(fullPath, 'utf-8');
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
skippedFiles++;
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const hash = (0, parser_1.hashFile)(content);
|
|
91
|
+
const language = (0, parser_1.getLanguage)(relPath);
|
|
92
|
+
const lineCount = content.split('\n').length;
|
|
93
|
+
const fileRecord = (0, schema_1.getOrCreateFile)(db, relPath, hash, language, lineCount);
|
|
94
|
+
if (!fileRecord.changed) {
|
|
95
|
+
skippedFiles++;
|
|
96
|
+
// Still need to track existing symbols for cross-file resolution
|
|
97
|
+
const existingSymbols = db.prepare('SELECT id, name, qualified_name, exported FROM symbols WHERE file_id = ?').all(fileRecord.id);
|
|
98
|
+
const symbolMap = new Map();
|
|
99
|
+
for (const s of existingSymbols) {
|
|
100
|
+
if (s.exported) {
|
|
101
|
+
symbolMap.set(s.name, s.id);
|
|
102
|
+
if (s.qualified_name)
|
|
103
|
+
symbolMap.set(s.qualified_name, s.id);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
fileSymbolMap.set(relPath, symbolMap);
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
(0, schema_1.clearFileData)(db, fileRecord.id);
|
|
110
|
+
const parsed = (0, parser_1.parseFile)(relPath, content);
|
|
111
|
+
const symbolMap = new Map();
|
|
112
|
+
for (const sym of parsed.symbols) {
|
|
113
|
+
const symId = (0, schema_1.insertSymbol)(db, fileRecord.id, {
|
|
114
|
+
name: sym.name,
|
|
115
|
+
qualifiedName: sym.qualifiedName,
|
|
116
|
+
kind: sym.kind,
|
|
117
|
+
lineStart: sym.lineStart,
|
|
118
|
+
lineEnd: sym.lineEnd,
|
|
119
|
+
signature: sym.signature,
|
|
120
|
+
docstring: sym.docstring,
|
|
121
|
+
content: sym.content,
|
|
122
|
+
exported: sym.exported,
|
|
123
|
+
});
|
|
124
|
+
symbolMap.set(sym.name, symId);
|
|
125
|
+
if (sym.qualifiedName)
|
|
126
|
+
symbolMap.set(sym.qualifiedName, symId);
|
|
127
|
+
totalSymbols++;
|
|
128
|
+
}
|
|
129
|
+
fileSymbolMap.set(relPath, symbolMap);
|
|
130
|
+
// Resolve imports to file paths
|
|
131
|
+
const resolvedImports = [];
|
|
132
|
+
for (const imp of parsed.imports) {
|
|
133
|
+
const resolved = resolveImportPath(rootDir, relPath, imp.source);
|
|
134
|
+
if (resolved) {
|
|
135
|
+
// Create file dep
|
|
136
|
+
const toFile = db.prepare('SELECT id FROM files WHERE path = ?').get(resolved);
|
|
137
|
+
if (toFile) {
|
|
138
|
+
const importName = imp.names.length > 0 ? imp.names.join(',') : '*';
|
|
139
|
+
(0, schema_1.insertFileDep)(db, fileRecord.id, toFile.id, 'import', importName);
|
|
140
|
+
}
|
|
141
|
+
resolvedImports.push({ resolved, names: imp.names });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
fileImportMap.set(relPath, resolvedImports);
|
|
145
|
+
// Create intra-file call edges
|
|
146
|
+
for (const call of parsed.calls) {
|
|
147
|
+
const callerId = symbolMap.get(call.callerSymbol);
|
|
148
|
+
const calledId = symbolMap.get(call.calledName);
|
|
149
|
+
if (callerId && calledId && callerId !== calledId) {
|
|
150
|
+
(0, schema_1.insertEdge)(db, callerId, calledId, 'calls');
|
|
151
|
+
totalEdges++;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
indexedFiles++;
|
|
155
|
+
if (verbose && indexedFiles % 100 === 0) {
|
|
156
|
+
process.stderr.write(` Indexed ${indexedFiles} files...\n`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Remove stale files
|
|
160
|
+
(0, schema_1.removeStaleFiles)(db, validPaths);
|
|
161
|
+
// Cross-file edge resolution
|
|
162
|
+
for (const [filePath, resolvedImports] of fileImportMap) {
|
|
163
|
+
const importingSymbols = fileSymbolMap.get(filePath);
|
|
164
|
+
if (!importingSymbols)
|
|
165
|
+
continue;
|
|
166
|
+
for (const imp of resolvedImports) {
|
|
167
|
+
const exportedSymbols = fileSymbolMap.get(imp.resolved);
|
|
168
|
+
if (!exportedSymbols)
|
|
169
|
+
continue;
|
|
170
|
+
for (const importedName of imp.names) {
|
|
171
|
+
const targetId = exportedSymbols.get(importedName);
|
|
172
|
+
if (targetId) {
|
|
173
|
+
// Create REFERENCES edges from all symbols in importing file to imported symbol
|
|
174
|
+
for (const [, srcId] of importingSymbols) {
|
|
175
|
+
if (srcId !== targetId) {
|
|
176
|
+
(0, schema_1.insertEdge)(db, srcId, targetId, 'references');
|
|
177
|
+
totalEdges++;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
transaction();
|
|
186
|
+
// Compute PageRank
|
|
187
|
+
computePageRank(db);
|
|
188
|
+
db.close();
|
|
189
|
+
return {
|
|
190
|
+
totalFiles: files.length,
|
|
191
|
+
indexedFiles,
|
|
192
|
+
skippedFiles,
|
|
193
|
+
symbols: totalSymbols,
|
|
194
|
+
edges: totalEdges,
|
|
195
|
+
timeMs: performance.now() - start,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
function reindexFile(rootDir, relPath, db) {
|
|
199
|
+
const shouldClose = !db;
|
|
200
|
+
if (!db)
|
|
201
|
+
db = (0, schema_1.openDatabase)(rootDir);
|
|
202
|
+
const fullPath = path.join(rootDir, relPath);
|
|
203
|
+
if (!fs.existsSync(fullPath)) {
|
|
204
|
+
(0, schema_1.removeFile)(db, relPath);
|
|
205
|
+
if (shouldClose)
|
|
206
|
+
db.close();
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
let content;
|
|
210
|
+
try {
|
|
211
|
+
content = fs.readFileSync(fullPath, 'utf-8');
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
if (shouldClose)
|
|
215
|
+
db.close();
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
const hash = (0, parser_1.hashFile)(content);
|
|
219
|
+
const language = (0, parser_1.getLanguage)(relPath);
|
|
220
|
+
const lineCount = content.split('\n').length;
|
|
221
|
+
const fileRecord = (0, schema_1.getOrCreateFile)(db, relPath, hash, language, lineCount);
|
|
222
|
+
if (!fileRecord.changed) {
|
|
223
|
+
if (shouldClose)
|
|
224
|
+
db.close();
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
(0, schema_1.clearFileData)(db, fileRecord.id);
|
|
228
|
+
const parsed = (0, parser_1.parseFile)(relPath, content);
|
|
229
|
+
const symbolMap = new Map();
|
|
230
|
+
for (const sym of parsed.symbols) {
|
|
231
|
+
const symId = (0, schema_1.insertSymbol)(db, fileRecord.id, {
|
|
232
|
+
name: sym.name,
|
|
233
|
+
qualifiedName: sym.qualifiedName,
|
|
234
|
+
kind: sym.kind,
|
|
235
|
+
lineStart: sym.lineStart,
|
|
236
|
+
lineEnd: sym.lineEnd,
|
|
237
|
+
signature: sym.signature,
|
|
238
|
+
docstring: sym.docstring,
|
|
239
|
+
content: sym.content,
|
|
240
|
+
exported: sym.exported,
|
|
241
|
+
});
|
|
242
|
+
symbolMap.set(sym.name, symId);
|
|
243
|
+
if (sym.qualifiedName)
|
|
244
|
+
symbolMap.set(sym.qualifiedName, symId);
|
|
245
|
+
}
|
|
246
|
+
// Resolve imports
|
|
247
|
+
for (const imp of parsed.imports) {
|
|
248
|
+
const resolved = resolveImportPath(rootDir, relPath, imp.source);
|
|
249
|
+
if (resolved) {
|
|
250
|
+
const toFile = db.prepare('SELECT id FROM files WHERE path = ?').get(resolved);
|
|
251
|
+
if (toFile) {
|
|
252
|
+
(0, schema_1.insertFileDep)(db, fileRecord.id, toFile.id, 'import', imp.names.join(',') || '*');
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// Intra-file call edges
|
|
257
|
+
for (const call of parsed.calls) {
|
|
258
|
+
const callerId = symbolMap.get(call.callerSymbol);
|
|
259
|
+
const calledId = symbolMap.get(call.calledName);
|
|
260
|
+
if (callerId && calledId && callerId !== calledId) {
|
|
261
|
+
(0, schema_1.insertEdge)(db, callerId, calledId, 'calls');
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
if (shouldClose)
|
|
265
|
+
db.close();
|
|
266
|
+
}
|
|
267
|
+
function computePageRank(db, iterations = 20, damping = 0.85) {
|
|
268
|
+
const symbols = db.prepare('SELECT id FROM symbols').all();
|
|
269
|
+
if (symbols.length === 0)
|
|
270
|
+
return;
|
|
271
|
+
const n = symbols.length;
|
|
272
|
+
const idToIdx = new Map();
|
|
273
|
+
const ids = [];
|
|
274
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
275
|
+
idToIdx.set(symbols[i].id, i);
|
|
276
|
+
ids.push(symbols[i].id);
|
|
277
|
+
}
|
|
278
|
+
const edges = db.prepare('SELECT from_id, to_id FROM edges').all();
|
|
279
|
+
// Build adjacency: outgoing[i] = [j, k, ...] means i links to j, k
|
|
280
|
+
const outgoing = new Array(n).fill(null).map(() => []);
|
|
281
|
+
const incoming = new Array(n).fill(null).map(() => []);
|
|
282
|
+
const outDegree = new Array(n).fill(0);
|
|
283
|
+
const inDegree = new Array(n).fill(0);
|
|
284
|
+
for (const edge of edges) {
|
|
285
|
+
const from = idToIdx.get(edge.from_id);
|
|
286
|
+
const to = idToIdx.get(edge.to_id);
|
|
287
|
+
if (from !== undefined && to !== undefined) {
|
|
288
|
+
outgoing[from].push(to);
|
|
289
|
+
incoming[to].push(from);
|
|
290
|
+
outDegree[from]++;
|
|
291
|
+
inDegree[to]++;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// PageRank iteration
|
|
295
|
+
let rank = new Float64Array(n).fill(1 / n);
|
|
296
|
+
let newRank = new Float64Array(n);
|
|
297
|
+
for (let iter = 0; iter < iterations; iter++) {
|
|
298
|
+
newRank.fill((1 - damping) / n);
|
|
299
|
+
for (let i = 0; i < n; i++) {
|
|
300
|
+
if (outDegree[i] > 0) {
|
|
301
|
+
const share = rank[i] / outDegree[i];
|
|
302
|
+
for (const j of outgoing[i]) {
|
|
303
|
+
newRank[j] += damping * share;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
// Distribute dangling node's rank
|
|
308
|
+
const share = rank[i] / n;
|
|
309
|
+
for (let j = 0; j < n; j++) {
|
|
310
|
+
newRank[j] += damping * share;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
[rank, newRank] = [newRank, rank];
|
|
315
|
+
}
|
|
316
|
+
// Write rankings
|
|
317
|
+
db.prepare('DELETE FROM rankings').run();
|
|
318
|
+
const insertRank = db.prepare('INSERT INTO rankings (symbol_id, pagerank, in_degree, out_degree) VALUES (?, ?, ?, ?)');
|
|
319
|
+
const writeRankings = db.transaction(() => {
|
|
320
|
+
for (let i = 0; i < n; i++) {
|
|
321
|
+
insertRank.run(ids[i], rank[i], inDegree[i], outDegree[i]);
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
writeRankings();
|
|
325
|
+
}
|
|
326
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/indexer/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare function getLanguage(filePath: string): string | null;
|
|
2
|
+
export declare function isSupportedFile(filePath: string): boolean;
|
|
3
|
+
export declare function hashFile(content: string): string;
|
|
4
|
+
export interface ExtractedSymbol {
|
|
5
|
+
name: string;
|
|
6
|
+
qualifiedName?: string;
|
|
7
|
+
kind: string;
|
|
8
|
+
lineStart: number;
|
|
9
|
+
lineEnd: number;
|
|
10
|
+
signature?: string;
|
|
11
|
+
docstring?: string;
|
|
12
|
+
content?: string;
|
|
13
|
+
exported?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface ExtractedImport {
|
|
16
|
+
source: string;
|
|
17
|
+
names: string[];
|
|
18
|
+
isDefault: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface ExtractedCall {
|
|
21
|
+
callerSymbol: string;
|
|
22
|
+
calledName: string;
|
|
23
|
+
line: number;
|
|
24
|
+
}
|
|
25
|
+
export interface ParseResult {
|
|
26
|
+
symbols: ExtractedSymbol[];
|
|
27
|
+
imports: ExtractedImport[];
|
|
28
|
+
calls: ExtractedCall[];
|
|
29
|
+
language: string | null;
|
|
30
|
+
}
|
|
31
|
+
export declare function parseFile(filePath: string, content: string): ParseResult;
|