@mduenas/codegraph 0.4.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 (192) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +641 -0
  3. package/dist/bin/codegraph.d.ts +20 -0
  4. package/dist/bin/codegraph.d.ts.map +1 -0
  5. package/dist/bin/codegraph.js +704 -0
  6. package/dist/bin/codegraph.js.map +1 -0
  7. package/dist/config.d.ts +51 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +291 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/context/formatter.d.ts +30 -0
  12. package/dist/context/formatter.d.ts.map +1 -0
  13. package/dist/context/formatter.js +244 -0
  14. package/dist/context/formatter.js.map +1 -0
  15. package/dist/context/index.d.ts +86 -0
  16. package/dist/context/index.d.ts.map +1 -0
  17. package/dist/context/index.js +402 -0
  18. package/dist/context/index.js.map +1 -0
  19. package/dist/db/index.d.ts +64 -0
  20. package/dist/db/index.d.ts.map +1 -0
  21. package/dist/db/index.js +170 -0
  22. package/dist/db/index.js.map +1 -0
  23. package/dist/db/migrations.d.ts +44 -0
  24. package/dist/db/migrations.d.ts.map +1 -0
  25. package/dist/db/migrations.js +105 -0
  26. package/dist/db/migrations.js.map +1 -0
  27. package/dist/db/queries.d.ts +148 -0
  28. package/dist/db/queries.d.ts.map +1 -0
  29. package/dist/db/queries.js +669 -0
  30. package/dist/db/queries.js.map +1 -0
  31. package/dist/directory.d.ts +45 -0
  32. package/dist/directory.d.ts.map +1 -0
  33. package/dist/directory.js +191 -0
  34. package/dist/directory.js.map +1 -0
  35. package/dist/errors.d.ts +136 -0
  36. package/dist/errors.d.ts.map +1 -0
  37. package/dist/errors.js +219 -0
  38. package/dist/errors.js.map +1 -0
  39. package/dist/extraction/grammars.d.ts +36 -0
  40. package/dist/extraction/grammars.d.ts.map +1 -0
  41. package/dist/extraction/grammars.js +181 -0
  42. package/dist/extraction/grammars.js.map +1 -0
  43. package/dist/extraction/index.d.ts +91 -0
  44. package/dist/extraction/index.d.ts.map +1 -0
  45. package/dist/extraction/index.js +493 -0
  46. package/dist/extraction/index.js.map +1 -0
  47. package/dist/extraction/tree-sitter.d.ts +176 -0
  48. package/dist/extraction/tree-sitter.d.ts.map +1 -0
  49. package/dist/extraction/tree-sitter.js +1798 -0
  50. package/dist/extraction/tree-sitter.js.map +1 -0
  51. package/dist/graph/index.d.ts +8 -0
  52. package/dist/graph/index.d.ts.map +1 -0
  53. package/dist/graph/index.js +13 -0
  54. package/dist/graph/index.js.map +1 -0
  55. package/dist/graph/queries.d.ts +106 -0
  56. package/dist/graph/queries.d.ts.map +1 -0
  57. package/dist/graph/queries.js +355 -0
  58. package/dist/graph/queries.js.map +1 -0
  59. package/dist/graph/traversal.d.ts +127 -0
  60. package/dist/graph/traversal.d.ts.map +1 -0
  61. package/dist/graph/traversal.js +465 -0
  62. package/dist/graph/traversal.js.map +1 -0
  63. package/dist/index.d.ts +496 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +818 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/installer/banner.d.ts +40 -0
  68. package/dist/installer/banner.d.ts.map +1 -0
  69. package/dist/installer/banner.js +162 -0
  70. package/dist/installer/banner.js.map +1 -0
  71. package/dist/installer/claude-md-template.d.ts +10 -0
  72. package/dist/installer/claude-md-template.d.ts.map +1 -0
  73. package/dist/installer/claude-md-template.js +46 -0
  74. package/dist/installer/claude-md-template.js.map +1 -0
  75. package/dist/installer/config-writer.d.ts +36 -0
  76. package/dist/installer/config-writer.d.ts.map +1 -0
  77. package/dist/installer/config-writer.js +282 -0
  78. package/dist/installer/config-writer.js.map +1 -0
  79. package/dist/installer/index.d.ts +13 -0
  80. package/dist/installer/index.d.ts.map +1 -0
  81. package/dist/installer/index.js +155 -0
  82. package/dist/installer/index.js.map +1 -0
  83. package/dist/installer/prompts.d.ts +18 -0
  84. package/dist/installer/prompts.d.ts.map +1 -0
  85. package/dist/installer/prompts.js +113 -0
  86. package/dist/installer/prompts.js.map +1 -0
  87. package/dist/mcp/index.d.ts +64 -0
  88. package/dist/mcp/index.d.ts.map +1 -0
  89. package/dist/mcp/index.js +207 -0
  90. package/dist/mcp/index.js.map +1 -0
  91. package/dist/mcp/tools.d.ts +93 -0
  92. package/dist/mcp/tools.d.ts.map +1 -0
  93. package/dist/mcp/tools.js +442 -0
  94. package/dist/mcp/tools.js.map +1 -0
  95. package/dist/mcp/transport.d.ts +89 -0
  96. package/dist/mcp/transport.d.ts.map +1 -0
  97. package/dist/mcp/transport.js +170 -0
  98. package/dist/mcp/transport.js.map +1 -0
  99. package/dist/resolution/frameworks/csharp.d.ts +8 -0
  100. package/dist/resolution/frameworks/csharp.d.ts.map +1 -0
  101. package/dist/resolution/frameworks/csharp.js +274 -0
  102. package/dist/resolution/frameworks/csharp.js.map +1 -0
  103. package/dist/resolution/frameworks/express.d.ts +8 -0
  104. package/dist/resolution/frameworks/express.d.ts.map +1 -0
  105. package/dist/resolution/frameworks/express.js +208 -0
  106. package/dist/resolution/frameworks/express.js.map +1 -0
  107. package/dist/resolution/frameworks/go.d.ts +8 -0
  108. package/dist/resolution/frameworks/go.d.ts.map +1 -0
  109. package/dist/resolution/frameworks/go.js +225 -0
  110. package/dist/resolution/frameworks/go.js.map +1 -0
  111. package/dist/resolution/frameworks/index.d.ts +33 -0
  112. package/dist/resolution/frameworks/index.d.ts.map +1 -0
  113. package/dist/resolution/frameworks/index.js +113 -0
  114. package/dist/resolution/frameworks/index.js.map +1 -0
  115. package/dist/resolution/frameworks/java.d.ts +8 -0
  116. package/dist/resolution/frameworks/java.d.ts.map +1 -0
  117. package/dist/resolution/frameworks/java.js +239 -0
  118. package/dist/resolution/frameworks/java.js.map +1 -0
  119. package/dist/resolution/frameworks/laravel.d.ts +13 -0
  120. package/dist/resolution/frameworks/laravel.d.ts.map +1 -0
  121. package/dist/resolution/frameworks/laravel.js +198 -0
  122. package/dist/resolution/frameworks/laravel.js.map +1 -0
  123. package/dist/resolution/frameworks/python.d.ts +10 -0
  124. package/dist/resolution/frameworks/python.d.ts.map +1 -0
  125. package/dist/resolution/frameworks/python.js +331 -0
  126. package/dist/resolution/frameworks/python.js.map +1 -0
  127. package/dist/resolution/frameworks/react.d.ts +8 -0
  128. package/dist/resolution/frameworks/react.d.ts.map +1 -0
  129. package/dist/resolution/frameworks/react.js +294 -0
  130. package/dist/resolution/frameworks/react.js.map +1 -0
  131. package/dist/resolution/frameworks/ruby.d.ts +8 -0
  132. package/dist/resolution/frameworks/ruby.d.ts.map +1 -0
  133. package/dist/resolution/frameworks/ruby.js +262 -0
  134. package/dist/resolution/frameworks/ruby.js.map +1 -0
  135. package/dist/resolution/frameworks/rust.d.ts +8 -0
  136. package/dist/resolution/frameworks/rust.d.ts.map +1 -0
  137. package/dist/resolution/frameworks/rust.js +222 -0
  138. package/dist/resolution/frameworks/rust.js.map +1 -0
  139. package/dist/resolution/frameworks/swift.d.ts +10 -0
  140. package/dist/resolution/frameworks/swift.d.ts.map +1 -0
  141. package/dist/resolution/frameworks/swift.js +486 -0
  142. package/dist/resolution/frameworks/swift.js.map +1 -0
  143. package/dist/resolution/import-resolver.d.ts +20 -0
  144. package/dist/resolution/import-resolver.d.ts.map +1 -0
  145. package/dist/resolution/import-resolver.js +445 -0
  146. package/dist/resolution/import-resolver.js.map +1 -0
  147. package/dist/resolution/index.d.ts +72 -0
  148. package/dist/resolution/index.d.ts.map +1 -0
  149. package/dist/resolution/index.js +301 -0
  150. package/dist/resolution/index.js.map +1 -0
  151. package/dist/resolution/name-matcher.d.ts +27 -0
  152. package/dist/resolution/name-matcher.d.ts.map +1 -0
  153. package/dist/resolution/name-matcher.js +210 -0
  154. package/dist/resolution/name-matcher.js.map +1 -0
  155. package/dist/resolution/types.d.ts +108 -0
  156. package/dist/resolution/types.d.ts.map +1 -0
  157. package/dist/resolution/types.js +8 -0
  158. package/dist/resolution/types.js.map +1 -0
  159. package/dist/sync/git-hooks.d.ts +66 -0
  160. package/dist/sync/git-hooks.d.ts.map +1 -0
  161. package/dist/sync/git-hooks.js +281 -0
  162. package/dist/sync/git-hooks.js.map +1 -0
  163. package/dist/sync/index.d.ts +13 -0
  164. package/dist/sync/index.d.ts.map +1 -0
  165. package/dist/sync/index.js +18 -0
  166. package/dist/sync/index.js.map +1 -0
  167. package/dist/types.d.ts +410 -0
  168. package/dist/types.d.ts.map +1 -0
  169. package/dist/types.js +165 -0
  170. package/dist/types.js.map +1 -0
  171. package/dist/utils.d.ts +116 -0
  172. package/dist/utils.d.ts.map +1 -0
  173. package/dist/utils.js +295 -0
  174. package/dist/utils.js.map +1 -0
  175. package/dist/vectors/embedder.d.ts +140 -0
  176. package/dist/vectors/embedder.d.ts.map +1 -0
  177. package/dist/vectors/embedder.js +336 -0
  178. package/dist/vectors/embedder.js.map +1 -0
  179. package/dist/vectors/index.d.ts +9 -0
  180. package/dist/vectors/index.d.ts.map +1 -0
  181. package/dist/vectors/index.js +20 -0
  182. package/dist/vectors/index.js.map +1 -0
  183. package/dist/vectors/manager.d.ts +119 -0
  184. package/dist/vectors/manager.d.ts.map +1 -0
  185. package/dist/vectors/manager.js +274 -0
  186. package/dist/vectors/manager.js.map +1 -0
  187. package/dist/vectors/search.d.ts +134 -0
  188. package/dist/vectors/search.d.ts.map +1 -0
  189. package/dist/vectors/search.js +409 -0
  190. package/dist/vectors/search.js.map +1 -0
  191. package/package.json +67 -0
  192. package/scripts/postinstall.js +68 -0
@@ -0,0 +1,493 @@
1
+ "use strict";
2
+ /**
3
+ * Extraction Orchestrator
4
+ *
5
+ * Coordinates file scanning, parsing, and database storage.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.getSupportedLanguages = exports.isLanguageSupported = exports.detectLanguage = exports.extractFromSource = exports.ExtractionOrchestrator = void 0;
42
+ exports.hashContent = hashContent;
43
+ exports.shouldIncludeFile = shouldIncludeFile;
44
+ exports.scanDirectory = scanDirectory;
45
+ const fs = __importStar(require("fs"));
46
+ const path = __importStar(require("path"));
47
+ const crypto = __importStar(require("crypto"));
48
+ const tree_sitter_1 = require("./tree-sitter");
49
+ const grammars_1 = require("./grammars");
50
+ const errors_1 = require("../errors");
51
+ /**
52
+ * Calculate SHA256 hash of file contents
53
+ */
54
+ function hashContent(content) {
55
+ return crypto.createHash('sha256').update(content).digest('hex');
56
+ }
57
+ /**
58
+ * Check if a path matches any glob pattern (simplified)
59
+ */
60
+ function matchesGlob(filePath, pattern) {
61
+ // Convert glob to regex using placeholders to avoid conflicts
62
+ let regexStr = pattern;
63
+ // Replace glob patterns with placeholders first
64
+ regexStr = regexStr.replace(/\*\*\//g, '\x00GLOBSTAR_SLASH\x00');
65
+ regexStr = regexStr.replace(/\*\*/g, '\x00GLOBSTAR\x00');
66
+ regexStr = regexStr.replace(/\*/g, '\x00STAR\x00');
67
+ regexStr = regexStr.replace(/\?/g, '\x00QUESTION\x00');
68
+ // Escape regex special characters
69
+ regexStr = regexStr.replace(/[.+^${}()|[\]\\]/g, '\\$&');
70
+ // Replace placeholders with regex equivalents
71
+ regexStr = regexStr.replace(/\x00GLOBSTAR_SLASH\x00/g, '(?:.*/)?'); // **/ = zero or more dirs
72
+ regexStr = regexStr.replace(/\x00GLOBSTAR\x00/g, '.*'); // ** = anything
73
+ regexStr = regexStr.replace(/\x00STAR\x00/g, '[^/]*'); // * = anything except /
74
+ regexStr = regexStr.replace(/\x00QUESTION\x00/g, '.'); // ? = single char
75
+ const regex = new RegExp(`^${regexStr}$`);
76
+ return regex.test(filePath);
77
+ }
78
+ /**
79
+ * Check if a file should be included based on config
80
+ */
81
+ function shouldIncludeFile(filePath, config) {
82
+ // Check exclude patterns first
83
+ for (const pattern of config.exclude) {
84
+ if (matchesGlob(filePath, pattern)) {
85
+ return false;
86
+ }
87
+ }
88
+ // Check include patterns
89
+ for (const pattern of config.include) {
90
+ if (matchesGlob(filePath, pattern)) {
91
+ return true;
92
+ }
93
+ }
94
+ return false;
95
+ }
96
+ /**
97
+ * Recursively scan directory for source files
98
+ */
99
+ function scanDirectory(rootDir, config, onProgress) {
100
+ const files = [];
101
+ let count = 0;
102
+ function walk(dir) {
103
+ let entries;
104
+ try {
105
+ entries = fs.readdirSync(dir, { withFileTypes: true });
106
+ }
107
+ catch (error) {
108
+ (0, errors_1.logDebug)('Skipping unreadable directory', { dir, error: String(error) });
109
+ return;
110
+ }
111
+ for (const entry of entries) {
112
+ const fullPath = path.join(dir, entry.name);
113
+ const relativePath = path.relative(rootDir, fullPath);
114
+ if (entry.isDirectory()) {
115
+ // Check if directory should be excluded
116
+ const dirPattern = relativePath + '/';
117
+ let excluded = false;
118
+ for (const pattern of config.exclude) {
119
+ if (matchesGlob(dirPattern, pattern) || matchesGlob(relativePath, pattern)) {
120
+ excluded = true;
121
+ break;
122
+ }
123
+ }
124
+ if (!excluded) {
125
+ walk(fullPath);
126
+ }
127
+ }
128
+ else if (entry.isFile()) {
129
+ if (shouldIncludeFile(relativePath, config)) {
130
+ files.push(relativePath);
131
+ count++;
132
+ if (onProgress) {
133
+ onProgress(count, relativePath);
134
+ }
135
+ }
136
+ }
137
+ }
138
+ }
139
+ walk(rootDir);
140
+ return files;
141
+ }
142
+ /**
143
+ * Extraction orchestrator
144
+ */
145
+ class ExtractionOrchestrator {
146
+ rootDir;
147
+ config;
148
+ queries;
149
+ constructor(rootDir, config, queries) {
150
+ this.rootDir = rootDir;
151
+ this.config = config;
152
+ this.queries = queries;
153
+ }
154
+ /**
155
+ * Index all files in the project
156
+ */
157
+ async indexAll(onProgress, signal) {
158
+ const startTime = Date.now();
159
+ const errors = [];
160
+ let filesIndexed = 0;
161
+ let filesSkipped = 0;
162
+ let totalNodes = 0;
163
+ let totalEdges = 0;
164
+ // Phase 1: Scan for files
165
+ onProgress?.({
166
+ phase: 'scanning',
167
+ current: 0,
168
+ total: 0,
169
+ });
170
+ const files = scanDirectory(this.rootDir, this.config, (current, file) => {
171
+ onProgress?.({
172
+ phase: 'scanning',
173
+ current,
174
+ total: 0,
175
+ currentFile: file,
176
+ });
177
+ });
178
+ if (signal?.aborted) {
179
+ return {
180
+ success: false,
181
+ filesIndexed: 0,
182
+ filesSkipped: 0,
183
+ nodesCreated: 0,
184
+ edgesCreated: 0,
185
+ errors: [{ message: 'Aborted', severity: 'error' }],
186
+ durationMs: Date.now() - startTime,
187
+ };
188
+ }
189
+ // Phase 2: Parse files
190
+ const total = files.length;
191
+ for (let i = 0; i < files.length; i++) {
192
+ if (signal?.aborted) {
193
+ return {
194
+ success: false,
195
+ filesIndexed,
196
+ filesSkipped,
197
+ nodesCreated: totalNodes,
198
+ edgesCreated: totalEdges,
199
+ errors: [{ message: 'Aborted', severity: 'error' }, ...errors],
200
+ durationMs: Date.now() - startTime,
201
+ };
202
+ }
203
+ const filePath = files[i];
204
+ onProgress?.({
205
+ phase: 'parsing',
206
+ current: i + 1,
207
+ total,
208
+ currentFile: filePath,
209
+ });
210
+ const result = await this.indexFile(filePath);
211
+ if (result.errors.length > 0) {
212
+ errors.push(...result.errors);
213
+ }
214
+ if (result.nodes.length > 0) {
215
+ filesIndexed++;
216
+ totalNodes += result.nodes.length;
217
+ totalEdges += result.edges.length;
218
+ }
219
+ else if (result.errors.length === 0) {
220
+ filesSkipped++;
221
+ }
222
+ }
223
+ // Phase 3: Resolve references
224
+ onProgress?.({
225
+ phase: 'resolving',
226
+ current: 0,
227
+ total: 1,
228
+ });
229
+ // TODO: Implement reference resolution in Phase 3
230
+ return {
231
+ success: errors.filter((e) => e.severity === 'error').length === 0,
232
+ filesIndexed,
233
+ filesSkipped,
234
+ nodesCreated: totalNodes,
235
+ edgesCreated: totalEdges,
236
+ errors,
237
+ durationMs: Date.now() - startTime,
238
+ };
239
+ }
240
+ /**
241
+ * Index specific files
242
+ */
243
+ async indexFiles(filePaths) {
244
+ const startTime = Date.now();
245
+ const errors = [];
246
+ let filesIndexed = 0;
247
+ let filesSkipped = 0;
248
+ let totalNodes = 0;
249
+ let totalEdges = 0;
250
+ for (const filePath of filePaths) {
251
+ const result = await this.indexFile(filePath);
252
+ if (result.errors.length > 0) {
253
+ errors.push(...result.errors);
254
+ }
255
+ if (result.nodes.length > 0) {
256
+ filesIndexed++;
257
+ totalNodes += result.nodes.length;
258
+ totalEdges += result.edges.length;
259
+ }
260
+ else {
261
+ filesSkipped++;
262
+ }
263
+ }
264
+ return {
265
+ success: errors.filter((e) => e.severity === 'error').length === 0,
266
+ filesIndexed,
267
+ filesSkipped,
268
+ nodesCreated: totalNodes,
269
+ edgesCreated: totalEdges,
270
+ errors,
271
+ durationMs: Date.now() - startTime,
272
+ };
273
+ }
274
+ /**
275
+ * Index a single file
276
+ */
277
+ async indexFile(relativePath) {
278
+ const fullPath = path.join(this.rootDir, relativePath);
279
+ // Check file exists and is readable
280
+ let content;
281
+ let stats;
282
+ try {
283
+ stats = fs.statSync(fullPath);
284
+ content = fs.readFileSync(fullPath, 'utf-8');
285
+ }
286
+ catch (error) {
287
+ return {
288
+ nodes: [],
289
+ edges: [],
290
+ unresolvedReferences: [],
291
+ errors: [
292
+ {
293
+ message: `Failed to read file: ${error instanceof Error ? error.message : String(error)}`,
294
+ severity: 'error',
295
+ },
296
+ ],
297
+ durationMs: 0,
298
+ };
299
+ }
300
+ // Check file size
301
+ if (stats.size > this.config.maxFileSize) {
302
+ return {
303
+ nodes: [],
304
+ edges: [],
305
+ unresolvedReferences: [],
306
+ errors: [
307
+ {
308
+ message: `File exceeds max size (${stats.size} > ${this.config.maxFileSize})`,
309
+ severity: 'warning',
310
+ },
311
+ ],
312
+ durationMs: 0,
313
+ };
314
+ }
315
+ // Detect language
316
+ const language = (0, grammars_1.detectLanguage)(relativePath);
317
+ if (!(0, grammars_1.isLanguageSupported)(language)) {
318
+ return {
319
+ nodes: [],
320
+ edges: [],
321
+ unresolvedReferences: [],
322
+ errors: [],
323
+ durationMs: 0,
324
+ };
325
+ }
326
+ // Extract from source
327
+ const result = (0, tree_sitter_1.extractFromSource)(relativePath, content, language);
328
+ // Store in database
329
+ if (result.nodes.length > 0 || result.errors.length === 0) {
330
+ this.storeExtractionResult(relativePath, content, language, stats, result);
331
+ }
332
+ return result;
333
+ }
334
+ /**
335
+ * Store extraction result in database
336
+ */
337
+ storeExtractionResult(filePath, content, language, stats, result) {
338
+ const contentHash = hashContent(content);
339
+ // Check if file already exists and hasn't changed
340
+ const existingFile = this.queries.getFileByPath(filePath);
341
+ if (existingFile && existingFile.contentHash === contentHash) {
342
+ return; // No changes
343
+ }
344
+ // Delete existing data for this file
345
+ if (existingFile) {
346
+ this.queries.deleteFile(filePath);
347
+ }
348
+ // Insert nodes
349
+ if (result.nodes.length > 0) {
350
+ this.queries.insertNodes(result.nodes);
351
+ }
352
+ // Insert edges
353
+ if (result.edges.length > 0) {
354
+ this.queries.insertEdges(result.edges);
355
+ }
356
+ // Insert unresolved references
357
+ for (const ref of result.unresolvedReferences) {
358
+ this.queries.insertUnresolvedRef(ref);
359
+ }
360
+ // Insert file record
361
+ const fileRecord = {
362
+ path: filePath,
363
+ contentHash,
364
+ language,
365
+ size: stats.size,
366
+ modifiedAt: stats.mtimeMs,
367
+ indexedAt: Date.now(),
368
+ nodeCount: result.nodes.length,
369
+ errors: result.errors.length > 0 ? result.errors : undefined,
370
+ };
371
+ this.queries.upsertFile(fileRecord);
372
+ }
373
+ /**
374
+ * Sync with current file state
375
+ */
376
+ async sync(onProgress) {
377
+ const startTime = Date.now();
378
+ let filesChecked = 0;
379
+ let filesAdded = 0;
380
+ let filesModified = 0;
381
+ let filesRemoved = 0;
382
+ let nodesUpdated = 0;
383
+ // Get current files on disk
384
+ onProgress?.({
385
+ phase: 'scanning',
386
+ current: 0,
387
+ total: 0,
388
+ });
389
+ const currentFiles = new Set(scanDirectory(this.rootDir, this.config));
390
+ filesChecked = currentFiles.size;
391
+ // Get tracked files from database
392
+ const trackedFiles = this.queries.getAllFiles();
393
+ // Find files to remove (in DB but not on disk)
394
+ for (const tracked of trackedFiles) {
395
+ if (!currentFiles.has(tracked.path)) {
396
+ this.queries.deleteFile(tracked.path);
397
+ filesRemoved++;
398
+ }
399
+ }
400
+ // Find files to add or update
401
+ const filesToIndex = [];
402
+ for (const filePath of currentFiles) {
403
+ const fullPath = path.join(this.rootDir, filePath);
404
+ let content;
405
+ try {
406
+ content = fs.readFileSync(fullPath, 'utf-8');
407
+ }
408
+ catch (error) {
409
+ (0, errors_1.logDebug)('Skipping unreadable file during sync', { filePath, error: String(error) });
410
+ continue;
411
+ }
412
+ const contentHash = hashContent(content);
413
+ const tracked = trackedFiles.find((f) => f.path === filePath);
414
+ if (!tracked) {
415
+ // New file
416
+ filesToIndex.push(filePath);
417
+ filesAdded++;
418
+ }
419
+ else if (tracked.contentHash !== contentHash) {
420
+ // Modified file
421
+ filesToIndex.push(filePath);
422
+ filesModified++;
423
+ }
424
+ }
425
+ // Index changed files
426
+ const total = filesToIndex.length;
427
+ for (let i = 0; i < filesToIndex.length; i++) {
428
+ const filePath = filesToIndex[i];
429
+ onProgress?.({
430
+ phase: 'parsing',
431
+ current: i + 1,
432
+ total,
433
+ currentFile: filePath,
434
+ });
435
+ const result = await this.indexFile(filePath);
436
+ nodesUpdated += result.nodes.length;
437
+ }
438
+ return {
439
+ filesChecked,
440
+ filesAdded,
441
+ filesModified,
442
+ filesRemoved,
443
+ nodesUpdated,
444
+ durationMs: Date.now() - startTime,
445
+ };
446
+ }
447
+ /**
448
+ * Get files that have changed since last index
449
+ */
450
+ getChangedFiles() {
451
+ const currentFiles = new Set(scanDirectory(this.rootDir, this.config));
452
+ const trackedFiles = this.queries.getAllFiles();
453
+ const added = [];
454
+ const modified = [];
455
+ const removed = [];
456
+ // Find removed files
457
+ for (const tracked of trackedFiles) {
458
+ if (!currentFiles.has(tracked.path)) {
459
+ removed.push(tracked.path);
460
+ }
461
+ }
462
+ // Find added and modified files
463
+ for (const filePath of currentFiles) {
464
+ const fullPath = path.join(this.rootDir, filePath);
465
+ let content;
466
+ try {
467
+ content = fs.readFileSync(fullPath, 'utf-8');
468
+ }
469
+ catch (error) {
470
+ (0, errors_1.logDebug)('Skipping unreadable file while detecting changes', { filePath, error: String(error) });
471
+ continue;
472
+ }
473
+ const contentHash = hashContent(content);
474
+ const tracked = trackedFiles.find((f) => f.path === filePath);
475
+ if (!tracked) {
476
+ added.push(filePath);
477
+ }
478
+ else if (tracked.contentHash !== contentHash) {
479
+ modified.push(filePath);
480
+ }
481
+ }
482
+ return { added, modified, removed };
483
+ }
484
+ }
485
+ exports.ExtractionOrchestrator = ExtractionOrchestrator;
486
+ // Re-export useful types and functions
487
+ var tree_sitter_2 = require("./tree-sitter");
488
+ Object.defineProperty(exports, "extractFromSource", { enumerable: true, get: function () { return tree_sitter_2.extractFromSource; } });
489
+ var grammars_2 = require("./grammars");
490
+ Object.defineProperty(exports, "detectLanguage", { enumerable: true, get: function () { return grammars_2.detectLanguage; } });
491
+ Object.defineProperty(exports, "isLanguageSupported", { enumerable: true, get: function () { return grammars_2.isLanguageSupported; } });
492
+ Object.defineProperty(exports, "getSupportedLanguages", { enumerable: true, get: function () { return grammars_2.getSupportedLanguages; } });
493
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extraction/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Tree-sitter Parser Wrapper
3
+ *
4
+ * Handles parsing source code and extracting structural information.
5
+ */
6
+ import { Language, NodeKind, ExtractionResult } from '../types';
7
+ /**
8
+ * Generate a unique node ID
9
+ *
10
+ * Uses a 32-character (128-bit) hash to avoid collisions when indexing
11
+ * large codebases with many files containing similar symbols.
12
+ */
13
+ export declare function generateNodeId(filePath: string, kind: NodeKind, name: string, line: number): string;
14
+ /**
15
+ * TreeSitterExtractor - Main extraction class
16
+ */
17
+ export declare class TreeSitterExtractor {
18
+ private filePath;
19
+ private language;
20
+ private source;
21
+ private tree;
22
+ private nodes;
23
+ private edges;
24
+ private unresolvedReferences;
25
+ private errors;
26
+ private extractor;
27
+ private nodeStack;
28
+ constructor(filePath: string, source: string, language?: Language);
29
+ /**
30
+ * Parse and extract from the source code
31
+ */
32
+ extract(): ExtractionResult;
33
+ /**
34
+ * Visit a node and extract information
35
+ */
36
+ private visitNode;
37
+ /**
38
+ * Create a Node object
39
+ */
40
+ private createNode;
41
+ /**
42
+ * Build qualified name from node stack
43
+ */
44
+ private buildQualifiedName;
45
+ /**
46
+ * Check if a node has a child of a specific type
47
+ */
48
+ private hasChildOfType;
49
+ /**
50
+ * Extract a function
51
+ */
52
+ private extractFunction;
53
+ /**
54
+ * Extract a class
55
+ */
56
+ private extractClass;
57
+ /**
58
+ * Extract a method
59
+ */
60
+ private extractMethod;
61
+ /**
62
+ * Extract an interface/protocol/trait
63
+ */
64
+ private extractInterface;
65
+ /**
66
+ * Extract a struct
67
+ */
68
+ private extractStruct;
69
+ /**
70
+ * Extract an enum
71
+ */
72
+ private extractEnum;
73
+ /**
74
+ * Extract an import
75
+ */
76
+ private extractImport;
77
+ /**
78
+ * Extract a function call
79
+ */
80
+ private extractCall;
81
+ /**
82
+ * Visit function body and extract calls
83
+ */
84
+ private visitFunctionBody;
85
+ /**
86
+ * Extract inheritance relationships
87
+ */
88
+ private extractInheritance;
89
+ /**
90
+ * Extract a Kotlin class with enhanced metadata (data, sealed, abstract)
91
+ */
92
+ private extractKotlinClass;
93
+ /**
94
+ * Extract a Kotlin enum class
95
+ */
96
+ private extractKotlinEnum;
97
+ /**
98
+ * Extract a Kotlin enum entry
99
+ */
100
+ private extractKotlinEnumEntry;
101
+ /**
102
+ * Extract a Kotlin object declaration (singleton)
103
+ */
104
+ private extractKotlinObject;
105
+ /**
106
+ * Extract a Kotlin companion object
107
+ */
108
+ private extractKotlinCompanionObject;
109
+ /**
110
+ * Extract a Kotlin property (val/var)
111
+ */
112
+ private extractKotlinProperty;
113
+ /**
114
+ * Extract a Kotlin type alias
115
+ */
116
+ private extractKotlinTypeAlias;
117
+ /**
118
+ * Extract Kotlin inheritance (delegation specifiers after ":")
119
+ */
120
+ private extractKotlinInheritance;
121
+ }
122
+ /**
123
+ * LiquidExtractor - Extracts relationships from Liquid template files
124
+ *
125
+ * Liquid is a templating language (used by Shopify, Jekyll, etc.) that doesn't
126
+ * have traditional functions or classes. Instead, we extract:
127
+ * - Section references ({% section 'name' %})
128
+ * - Snippet references ({% render 'name' %} and {% include 'name' %})
129
+ * - Schema blocks ({% schema %}...{% endschema %})
130
+ */
131
+ export declare class LiquidExtractor {
132
+ private filePath;
133
+ private source;
134
+ private nodes;
135
+ private edges;
136
+ private unresolvedReferences;
137
+ private errors;
138
+ constructor(filePath: string, source: string);
139
+ /**
140
+ * Extract from Liquid source
141
+ */
142
+ extract(): ExtractionResult;
143
+ /**
144
+ * Create a file node for the Liquid template
145
+ */
146
+ private createFileNode;
147
+ /**
148
+ * Extract {% render 'snippet' %} and {% include 'snippet' %} references
149
+ */
150
+ private extractSnippetReferences;
151
+ /**
152
+ * Extract {% section 'name' %} references
153
+ */
154
+ private extractSectionReferences;
155
+ /**
156
+ * Extract {% schema %}...{% endschema %} blocks
157
+ */
158
+ private extractSchema;
159
+ /**
160
+ * Extract {% assign var = value %} statements
161
+ */
162
+ private extractAssignments;
163
+ /**
164
+ * Get the line number for a character index
165
+ */
166
+ private getLineNumber;
167
+ /**
168
+ * Get the character index of the start of a line
169
+ */
170
+ private getLineStart;
171
+ }
172
+ /**
173
+ * Extract nodes and edges from source code
174
+ */
175
+ export declare function extractFromSource(filePath: string, source: string, language?: Language): ExtractionResult;
176
+ //# sourceMappingURL=tree-sitter.d.ts.map