codesearch-mcp 0.3.0-alpha → 0.4.0-alpha

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 (224) hide show
  1. package/CHANGELOG.md +59 -6
  2. package/LICENSE +661 -21
  3. package/README.md +33 -17
  4. package/dist/app.js +13 -20
  5. package/dist/src/ast/CallExtractor.d.ts +8 -0
  6. package/dist/src/ast/CallExtractor.js +68 -0
  7. package/dist/src/ast/GraphqlNameExtractor.d.ts +22 -0
  8. package/dist/src/ast/GraphqlNameExtractor.js +240 -0
  9. package/dist/src/ast/ImportEdgeExtractor.d.ts +11 -0
  10. package/dist/src/ast/ImportEdgeExtractor.js +129 -0
  11. package/dist/src/ast/IndexedNodeResolver.d.ts +14 -0
  12. package/dist/src/ast/IndexedNodeResolver.js +217 -0
  13. package/dist/src/ast/MemberExtractor.d.ts +8 -0
  14. package/dist/src/ast/MemberExtractor.js +129 -0
  15. package/dist/src/ast/TopLevelSymbolExtractor.d.ts +5 -0
  16. package/dist/src/ast/TopLevelSymbolExtractor.js +86 -0
  17. package/dist/src/ast/graphql-grammar.d.ts +24 -0
  18. package/dist/src/ast/graphql-grammar.js +93 -0
  19. package/dist/src/ast/node-helpers.d.ts +11 -0
  20. package/dist/src/ast/node-helpers.js +55 -0
  21. package/dist/src/commands/EvalCommand.d.ts +7 -3
  22. package/dist/src/commands/EvalCommand.js +36 -158
  23. package/dist/src/commands/IndexCommand.d.ts +10 -4
  24. package/dist/src/commands/IndexCommand.js +52 -124
  25. package/dist/src/commands/McpCommand.d.ts +6 -3
  26. package/dist/src/commands/McpCommand.js +19 -14
  27. package/dist/src/commands/WebCommand.d.ts +9 -3
  28. package/dist/src/commands/WebCommand.js +17 -8
  29. package/dist/src/commands/eval/baseline-comparison.d.ts +6 -0
  30. package/dist/src/commands/eval/baseline-comparison.js +54 -0
  31. package/dist/src/commands/eval/eval-args.d.ts +6 -0
  32. package/dist/src/commands/eval/eval-args.js +71 -0
  33. package/dist/src/commands/eval/eval-corpora.d.ts +6 -0
  34. package/dist/src/commands/eval/eval-corpora.js +76 -0
  35. package/dist/src/commands/eval/eval-metadata.d.ts +17 -0
  36. package/dist/src/commands/eval/eval-metadata.js +75 -0
  37. package/dist/src/commands/eval/index-inspector.d.ts +3 -0
  38. package/dist/src/commands/eval/index-inspector.js +21 -0
  39. package/dist/src/commands/eval/staged-search.d.ts +3 -0
  40. package/dist/src/commands/eval/staged-search.js +20 -0
  41. package/dist/src/commands/eval/suite-loader.d.ts +8 -0
  42. package/dist/src/commands/eval/suite-loader.js +52 -0
  43. package/dist/src/commands/index/backend-probe.d.ts +2 -0
  44. package/dist/src/commands/index/backend-probe.js +15 -0
  45. package/dist/src/commands/index/embedding-setup.d.ts +3 -0
  46. package/dist/src/commands/index/embedding-setup.js +16 -0
  47. package/dist/src/commands/index/index-summary.d.ts +2 -0
  48. package/dist/src/commands/index/index-summary.js +22 -0
  49. package/dist/src/commands/index/legacy-ollama-guard.d.ts +3 -0
  50. package/dist/src/commands/index/legacy-ollama-guard.js +23 -0
  51. package/dist/src/commands/index/prune-step.d.ts +3 -0
  52. package/dist/src/commands/index/prune-step.js +22 -0
  53. package/dist/src/commands/index/scan-targets.d.ts +8 -0
  54. package/dist/src/commands/index/scan-targets.js +107 -0
  55. package/dist/src/config-store.d.ts +0 -1
  56. package/dist/src/config-store.js +3 -4
  57. package/dist/src/config.d.ts +1 -1
  58. package/dist/src/config.js +1 -1
  59. package/dist/src/constants.d.ts +15 -0
  60. package/dist/src/constants.js +34 -6
  61. package/dist/src/container.d.ts +4 -2
  62. package/dist/src/container.js +7 -5
  63. package/dist/src/db/drizzle-types.d.ts +7 -0
  64. package/dist/src/db/index.d.ts +1 -0
  65. package/dist/src/db/schema-steps.d.ts +8 -0
  66. package/dist/src/db/schema-steps.js +105 -0
  67. package/dist/src/declarations/DeclarationTree.d.ts +1 -1
  68. package/dist/src/eval-results.js +16 -2
  69. package/dist/src/eval-vector-index.d.ts +5 -0
  70. package/dist/src/eval-vector-index.js +60 -0
  71. package/dist/src/help.js +9 -1
  72. package/dist/src/index-args.d.ts +13 -0
  73. package/dist/src/index-args.js +48 -0
  74. package/dist/src/indexing/AnalysisBatcher.d.ts +12 -0
  75. package/dist/src/indexing/AnalysisBatcher.js +28 -0
  76. package/dist/src/indexing/ChunkEmbedder.d.ts +24 -0
  77. package/dist/src/indexing/ChunkEmbedder.js +37 -0
  78. package/dist/src/indexing/ConsoleScanReporter.d.ts +10 -0
  79. package/dist/src/indexing/ConsoleScanReporter.js +73 -0
  80. package/dist/src/indexing/EmbeddingSchemaPreparer.d.ts +14 -0
  81. package/dist/src/indexing/EmbeddingSchemaPreparer.js +66 -0
  82. package/dist/src/indexing/FileIngestor.d.ts +22 -0
  83. package/dist/src/indexing/FileIngestor.js +116 -0
  84. package/dist/src/indexing/IndexStore.d.ts +24 -0
  85. package/dist/src/indexing/IndexStore.js +69 -0
  86. package/dist/src/indexing/StaleFilePruner.d.ts +8 -0
  87. package/dist/src/indexing/StaleFilePruner.js +55 -0
  88. package/dist/src/indexing/analysis-rows.d.ts +4 -0
  89. package/dist/src/indexing/analysis-rows.js +65 -0
  90. package/dist/src/indexing/project-notices.d.ts +2 -0
  91. package/dist/src/indexing/project-notices.js +63 -0
  92. package/dist/src/interfaces/IAstParser.d.ts +2 -1
  93. package/dist/src/interfaces/ICallGraph.d.ts +28 -0
  94. package/dist/src/interfaces/ICallGraph.js +2 -0
  95. package/dist/src/interfaces/IChunkSearch.d.ts +42 -0
  96. package/dist/src/interfaces/IChunkSearch.js +2 -0
  97. package/dist/src/interfaces/IDatabase.d.ts +6 -2
  98. package/dist/src/interfaces/IDependencyGraph.d.ts +24 -0
  99. package/dist/src/interfaces/IDependencyGraph.js +2 -0
  100. package/dist/src/interfaces/IIndexIdentityGuard.d.ts +3 -0
  101. package/dist/src/interfaces/IIndexIdentityGuard.js +2 -0
  102. package/dist/src/interfaces/IIndexedNodeResolver.d.ts +10 -0
  103. package/dist/src/interfaces/IIndexedNodeResolver.js +2 -0
  104. package/dist/src/interfaces/IMcpReadiness.d.ts +12 -0
  105. package/dist/src/interfaces/IMcpReadiness.js +2 -0
  106. package/dist/src/interfaces/IProjectCatalog.d.ts +13 -0
  107. package/dist/src/interfaces/IProjectCatalog.js +2 -0
  108. package/dist/src/interfaces/IProjectRoots.d.ts +3 -0
  109. package/dist/src/interfaces/IProjectRoots.js +2 -0
  110. package/dist/src/interfaces/IRetrievalEvaluator.d.ts +21 -2
  111. package/dist/src/interfaces/IScanReporter.d.ts +13 -0
  112. package/dist/src/interfaces/IScanReporter.js +2 -0
  113. package/dist/src/interfaces/ISymbolLookup.d.ts +49 -0
  114. package/dist/src/interfaces/ISymbolLookup.js +2 -0
  115. package/dist/src/interfaces/IToolPaths.d.ts +62 -0
  116. package/dist/src/interfaces/IToolPaths.js +2 -0
  117. package/dist/src/interfaces/IWorkspaceFiles.d.ts +28 -0
  118. package/dist/src/interfaces/IWorkspaceFiles.js +2 -0
  119. package/dist/src/interfaces/SymbolKind.d.ts +1 -0
  120. package/dist/src/interfaces/SymbolKind.js +2 -0
  121. package/dist/src/interfaces/index.d.ts +12 -1
  122. package/dist/src/project-scope.d.ts +1 -0
  123. package/dist/src/project-scope.js +5 -0
  124. package/dist/src/retrieval-eval.d.ts +2 -1
  125. package/dist/src/retrieval-eval.js +45 -2
  126. package/dist/src/search/CallGraph.d.ts +9 -0
  127. package/dist/src/search/CallGraph.js +84 -0
  128. package/dist/src/search/ChunkSearch.d.ts +23 -0
  129. package/dist/src/search/ChunkSearch.js +115 -0
  130. package/dist/src/search/DependencyGraph.d.ts +19 -0
  131. package/dist/src/search/DependencyGraph.js +180 -0
  132. package/dist/src/search/IndexIdentityGuard.d.ts +11 -0
  133. package/dist/src/search/IndexIdentityGuard.js +37 -0
  134. package/dist/src/search/ProjectCatalog.d.ts +11 -0
  135. package/dist/src/search/ProjectCatalog.js +38 -0
  136. package/dist/src/search/SymbolLookup.d.ts +24 -0
  137. package/dist/src/search/SymbolLookup.js +97 -0
  138. package/dist/src/search/chunks/CandidateFetcher.d.ts +19 -0
  139. package/dist/src/search/chunks/CandidateFetcher.js +40 -0
  140. package/dist/src/search/chunks/IterativeScanGate.d.ts +10 -0
  141. package/dist/src/search/chunks/IterativeScanGate.js +42 -0
  142. package/dist/src/search/chunks/RerankStage.d.ts +15 -0
  143. package/dist/src/search/chunks/RerankStage.js +42 -0
  144. package/dist/src/search/chunks/search-metrics.d.ts +18 -0
  145. package/dist/src/search/chunks/search-metrics.js +32 -0
  146. package/dist/src/search/chunks/search-plan.d.ts +18 -0
  147. package/dist/src/search/chunks/search-plan.js +19 -0
  148. package/dist/src/search/create-search-services.d.ts +26 -0
  149. package/dist/src/search/create-search-services.js +29 -0
  150. package/dist/src/search/index-paths.d.ts +1 -0
  151. package/dist/src/search/index-paths.js +5 -0
  152. package/dist/src/search/symbol-sql.d.ts +13 -0
  153. package/dist/src/search/symbol-sql.js +66 -0
  154. package/dist/src/search/symbols/SymbolGrepFallback.d.ts +19 -0
  155. package/dist/src/search/symbols/SymbolGrepFallback.js +106 -0
  156. package/dist/src/search/symbols/SymbolIndexQuery.d.ts +14 -0
  157. package/dist/src/search/symbols/SymbolIndexQuery.js +52 -0
  158. package/dist/src/search/symbols/SymbolTextSearch.d.ts +13 -0
  159. package/dist/src/search/symbols/SymbolTextSearch.js +84 -0
  160. package/dist/src/search/symbols/TargetColumnGate.d.ts +7 -0
  161. package/dist/src/search/symbols/TargetColumnGate.js +23 -0
  162. package/dist/src/search/symbols/find-symbol-constants.d.ts +4 -0
  163. package/dist/src/search/symbols/find-symbol-constants.js +8 -0
  164. package/dist/src/search/symbols/grep-args.d.ts +3 -0
  165. package/dist/src/search/symbols/grep-args.js +7 -0
  166. package/dist/src/search/symbols/grep-patterns.d.ts +4 -0
  167. package/dist/src/search/symbols/grep-patterns.js +60 -0
  168. package/dist/src/services/AstParserService.d.ts +8 -44
  169. package/dist/src/services/AstParserService.js +19 -938
  170. package/dist/src/services/DatabaseService.d.ts +8 -10
  171. package/dist/src/services/DatabaseService.js +29 -86
  172. package/dist/src/services/IndexerService.d.ts +7 -10
  173. package/dist/src/services/IndexerService.js +36 -255
  174. package/dist/src/services/McpReadiness.d.ts +18 -0
  175. package/dist/src/services/McpReadiness.js +73 -0
  176. package/dist/src/services/McpServer.d.ts +32 -9
  177. package/dist/src/services/McpServer.js +78 -41
  178. package/dist/src/services/WebServerService.d.ts +4 -3
  179. package/dist/src/services/WebServerService.js +16 -8
  180. package/dist/src/setup.d.ts +16 -4
  181. package/dist/src/setup.js +115 -40
  182. package/dist/src/symbol-name.d.ts +1 -0
  183. package/dist/src/symbol-name.js +16 -12
  184. package/dist/src/tools/FindSymbolTool.d.ts +17 -7
  185. package/dist/src/tools/FindSymbolTool.js +54 -35
  186. package/dist/src/tools/GetCallersTool.d.ts +16 -8
  187. package/dist/src/tools/GetCallersTool.js +65 -35
  188. package/dist/src/tools/GetDependenciesTool.d.ts +16 -8
  189. package/dist/src/tools/GetDependenciesTool.js +35 -28
  190. package/dist/src/tools/GetDependentsTool.d.ts +20 -8
  191. package/dist/src/tools/GetDependentsTool.js +47 -33
  192. package/dist/src/tools/ListFilesTool.d.ts +16 -8
  193. package/dist/src/tools/ListFilesTool.js +20 -26
  194. package/dist/src/tools/ListProjectsTool.d.ts +11 -7
  195. package/dist/src/tools/ListProjectsTool.js +13 -11
  196. package/dist/src/tools/McpTool.d.ts +17 -0
  197. package/dist/src/tools/McpTool.js +28 -0
  198. package/dist/src/tools/ReadFileRangeTool.d.ts +16 -8
  199. package/dist/src/tools/ReadFileRangeTool.js +23 -25
  200. package/dist/src/tools/ReadFileTool.d.ts +15 -8
  201. package/dist/src/tools/ReadFileTool.js +19 -24
  202. package/dist/src/tools/SearchCodebaseTool.d.ts +22 -10
  203. package/dist/src/tools/SearchCodebaseTool.js +69 -51
  204. package/dist/src/tools/format-helpers.d.ts +9 -3
  205. package/dist/src/tools/format-helpers.js +59 -14
  206. package/dist/src/tools/tool-args.d.ts +38 -0
  207. package/dist/src/tools/tool-args.js +95 -0
  208. package/dist/src/workspace/GrepRunner.d.ts +15 -0
  209. package/dist/src/workspace/GrepRunner.js +104 -0
  210. package/dist/src/workspace/ProjectRoots.d.ts +22 -0
  211. package/dist/src/workspace/ProjectRoots.js +102 -0
  212. package/dist/src/workspace/ToolPaths.d.ts +31 -0
  213. package/dist/src/workspace/ToolPaths.js +312 -0
  214. package/dist/src/workspace/WorkspaceFiles.d.ts +19 -0
  215. package/dist/src/workspace/WorkspaceFiles.js +285 -0
  216. package/dist/src/workspace/fs-access.d.ts +9 -0
  217. package/dist/src/workspace/fs-access.js +47 -0
  218. package/dist/src/workspace/path-helpers.d.ts +3 -0
  219. package/dist/src/workspace/path-helpers.js +43 -0
  220. package/package.json +4 -3
  221. package/dist/src/interfaces/ISearcher.d.ts +0 -46
  222. package/dist/src/services/SearcherService.d.ts +0 -235
  223. package/dist/src/services/SearcherService.js +0 -1118
  224. /package/dist/src/{interfaces/ISearcher.js → db/drizzle-types.js} +0 -0
@@ -0,0 +1,14 @@
1
+ import type { IDatabase } from '../../interfaces';
2
+ import type { SymbolHit, SymbolKind } from '../../interfaces/ISymbolLookup';
3
+ import type { FindSymbolQuery } from '../../symbol-name';
4
+ import type { TargetColumnGate } from './TargetColumnGate';
5
+ export interface IndexedSymbols {
6
+ hits: SymbolHit[];
7
+ truncated: boolean;
8
+ }
9
+ export declare class SymbolIndexQuery {
10
+ private db;
11
+ private gate;
12
+ constructor(db: IDatabase, gate: TargetColumnGate);
13
+ query(parsed: FindSymbolQuery, project: string | null, kind: SymbolKind): Promise<IndexedSymbols>;
14
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SymbolIndexQuery = void 0;
4
+ const symbol_sql_1 = require("../symbol-sql");
5
+ const find_symbol_constants_1 = require("./find-symbol-constants");
6
+ class SymbolIndexQuery {
7
+ db;
8
+ gate;
9
+ constructor(db, gate) {
10
+ this.db = db;
11
+ this.gate = gate;
12
+ }
13
+ async query(parsed, project, kind) {
14
+ const container = 'container' in parsed ? parsed.container : null;
15
+ const hasTarget = await this.gate.present();
16
+ const params = [];
17
+ const { filter: nameFilter, exactRank } = (0, symbol_sql_1.symbolMatch)(parsed.name, container, params);
18
+ const orderPrefix = exactRank ? `${exactRank}, ` : '';
19
+ let projectFilter = '';
20
+ if (project) {
21
+ params.push(project);
22
+ projectFilter = `AND project = $${params.length}`;
23
+ }
24
+ let kindFilter = '';
25
+ if (kind !== 'all') {
26
+ params.push(kind);
27
+ kindFilter = `AND kind = $${params.length}`;
28
+ }
29
+ params.push(find_symbol_constants_1.FIND_SYMBOL_LIMIT + 1);
30
+ const targetSelect = hasTarget ? '"target"' : 'NULL AS target';
31
+ const rows = await this.db.query(`SELECT "filePath", name, kind, signature, line, col, container, "isStatic", ${targetSelect}
32
+ FROM code_symbol
33
+ WHERE ${nameFilter} ${projectFilter} ${kindFilter}
34
+ ORDER BY ${orderPrefix}project, "filePath", line, col, kind COLLATE "C", container COLLATE "C" NULLS FIRST
35
+ LIMIT $${params.length}`, params);
36
+ return {
37
+ truncated: rows.length > find_symbol_constants_1.FIND_SYMBOL_LIMIT,
38
+ hits: rows.slice(0, find_symbol_constants_1.FIND_SYMBOL_LIMIT).map(row => ({
39
+ filePath: row.filePath,
40
+ line: row.line ?? 1,
41
+ column: row.col ?? 1,
42
+ kind: row.kind,
43
+ signature: row.signature ?? row.name,
44
+ qualified: row.container ? `${row.container}.${row.name}` : row.name,
45
+ isStatic: !!row.isStatic,
46
+ source: 'index',
47
+ target: row.target ?? null,
48
+ })),
49
+ };
50
+ }
51
+ }
52
+ exports.SymbolIndexQuery = SymbolIndexQuery;
@@ -0,0 +1,13 @@
1
+ import type { Config } from '../../config';
2
+ import type { ILogger } from '../../interfaces';
3
+ import type { GrepSymbolResult } from '../../interfaces/ISymbolLookup';
4
+ import type { GrepRunner } from '../../workspace/GrepRunner';
5
+ import type { ProjectRoots } from '../../workspace/ProjectRoots';
6
+ export declare class SymbolTextSearch {
7
+ private grep;
8
+ private roots;
9
+ private config;
10
+ private logger;
11
+ constructor(grep: GrepRunner, roots: ProjectRoots, config: Config, logger: ILogger);
12
+ search(symbol: string, rootDir: string, excludeFile: string): Promise<GrepSymbolResult>;
13
+ }
@@ -0,0 +1,84 @@
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.SymbolTextSearch = void 0;
37
+ const path = __importStar(require("path"));
38
+ const grep_args_1 = require("./grep-args");
39
+ const GREP_MAX_RESULTS = 200;
40
+ const GREP_RAW_LIMIT = GREP_MAX_RESULTS * 5;
41
+ class SymbolTextSearch {
42
+ grep;
43
+ roots;
44
+ config;
45
+ logger;
46
+ constructor(grep, roots, config, logger) {
47
+ this.grep = grep;
48
+ this.roots = roots;
49
+ this.config = config;
50
+ this.logger = logger;
51
+ }
52
+ async search(symbol, rootDir, excludeFile) {
53
+ const t0 = Date.now();
54
+ this.logger.debug('SymbolTextSearch: grepSymbol', { symbol, rootDir, excludeFile });
55
+ if (symbol.includes('\n'))
56
+ return { ok: true, matches: [], truncated: false, partial: false };
57
+ const result = await this.grep.run([
58
+ '-rn', '-F', '-w',
59
+ grep_args_1.GREP_BINARY_AS_TEXT,
60
+ '-m', String(GREP_RAW_LIMIT),
61
+ ...grep_args_1.SOURCE_INCLUDES,
62
+ ...grep_args_1.GREP_EXCLUDE_DIRS,
63
+ '--',
64
+ symbol,
65
+ this.roots.toAbs(rootDir),
66
+ ]);
67
+ const excludeAbsPath = path.join(this.config.workspaceRoot, excludeFile);
68
+ const all = (result.output ?? '').split('\n').flatMap(line => {
69
+ const match = line.match(/^(.+?):(\d+):/);
70
+ if (!match)
71
+ return [];
72
+ const [, absFile, lineNum] = match;
73
+ if (absFile === excludeAbsPath)
74
+ return [];
75
+ return [{ filePath: path.relative(this.config.workspaceRoot, absFile), line: parseInt(lineNum, 10) }];
76
+ });
77
+ if (!result.ok && all.length === 0)
78
+ return { ok: false };
79
+ const truncated = all.length > GREP_MAX_RESULTS;
80
+ this.logger.debug('SymbolTextSearch: grepSymbol result', { matches: Math.min(all.length, GREP_MAX_RESULTS), truncated, partial: !result.ok, ms: Date.now() - t0 });
81
+ return { ok: true, matches: all.slice(0, GREP_MAX_RESULTS), truncated, partial: !result.ok };
82
+ }
83
+ }
84
+ exports.SymbolTextSearch = SymbolTextSearch;
@@ -0,0 +1,7 @@
1
+ import type { IDatabase } from '../../interfaces';
2
+ export declare class TargetColumnGate {
3
+ private db;
4
+ private targetColumnPresent;
5
+ constructor(db: IDatabase);
6
+ present(): Promise<boolean>;
7
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TargetColumnGate = void 0;
4
+ class TargetColumnGate {
5
+ db;
6
+ targetColumnPresent = false;
7
+ constructor(db) {
8
+ this.db = db;
9
+ }
10
+ async present() {
11
+ if (this.targetColumnPresent)
12
+ return true;
13
+ const rows = await this.db.query(`SELECT EXISTS (
14
+ SELECT 1 FROM information_schema.columns
15
+ WHERE table_schema = 'public' AND table_name = 'code_symbol' AND column_name = 'target'
16
+ ) AS present`);
17
+ const present = !!rows[0]?.present;
18
+ if (present)
19
+ this.targetColumnPresent = true;
20
+ return present;
21
+ }
22
+ }
23
+ exports.TargetColumnGate = TargetColumnGate;
@@ -0,0 +1,4 @@
1
+ import type { FindSymbolGrep, SymbolKind } from '../../interfaces/ISymbolLookup';
2
+ export declare const GRAPHQL_KINDS: ReadonlySet<SymbolKind>;
3
+ export declare const FIND_SYMBOL_LIMIT = 50;
4
+ export declare const COMPLETE: FindSymbolGrep;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.COMPLETE = exports.FIND_SYMBOL_LIMIT = exports.GRAPHQL_KINDS = void 0;
4
+ exports.GRAPHQL_KINDS = new Set([
5
+ 'graphql_query', 'graphql_mutation', 'graphql_subscription', 'graphql_field', 'graphql_type',
6
+ ]);
7
+ exports.FIND_SYMBOL_LIMIT = 50;
8
+ exports.COMPLETE = { outcome: 'complete' };
@@ -0,0 +1,3 @@
1
+ export declare const SOURCE_INCLUDES: readonly ["--include=*.ts", "--include=*.tsx", "--include=*.js", "--include=*.jsx"];
2
+ export declare const GREP_EXCLUDE_DIRS: string[];
3
+ export declare const GREP_BINARY_AS_TEXT = "--binary-files=text";
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GREP_BINARY_AS_TEXT = exports.GREP_EXCLUDE_DIRS = exports.SOURCE_INCLUDES = void 0;
4
+ const file_utils_1 = require("../../file-utils");
5
+ exports.SOURCE_INCLUDES = ['--include=*.ts', '--include=*.tsx', '--include=*.js', '--include=*.jsx'];
6
+ exports.GREP_EXCLUDE_DIRS = [...file_utils_1.IGNORE_DIRS].map(d => `--exclude-dir=${d}`);
7
+ exports.GREP_BINARY_AS_TEXT = '--binary-files=text';
@@ -0,0 +1,4 @@
1
+ import type { SymbolKind } from '../../interfaces/ISymbolLookup';
2
+ export declare function buildFindSymbolPattern(name: string, kind: SymbolKind): string | null;
3
+ export declare function wholeWordIndex(line: string, name: string): number;
4
+ export declare function inferKind(line: string, name: string): Exclude<SymbolKind, 'all'>;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildFindSymbolPattern = buildFindSymbolPattern;
4
+ exports.wholeWordIndex = wholeWordIndex;
5
+ exports.inferKind = inferKind;
6
+ const find_symbol_constants_1 = require("./find-symbol-constants");
7
+ const MODIFIERS = ['public', 'private', 'protected', 'static', 'abstract', 'async', 'override'];
8
+ function buildFindSymbolPattern(name, kind) {
9
+ if (kind === 'function_property' || kind === 'method_signature')
10
+ return null;
11
+ if (find_symbol_constants_1.GRAPHQL_KINDS.has(kind))
12
+ return null;
13
+ if (kind === 'constructor')
14
+ return name === 'constructor' ? `(^|[[:space:]])constructor[[:space:]]*\\(` : null;
15
+ const esc = name.replace(/\$/g, '\\$');
16
+ const MODIFIER = `(${MODIFIERS.join('|')})`;
17
+ const BOUNDARY = '(^|[^[:alnum:]_$])';
18
+ const patterns = {
19
+ function: `(export[[:space:]]+)?(async[[:space:]]+)?function[[:space:]]+${esc}[[:space:](<]`,
20
+ class: `(export[[:space:]]+)?(abstract[[:space:]]+)?class[[:space:]]+${esc}[[:space:]{<]`,
21
+ type: `(export[[:space:]]+)?type[[:space:]]+${esc}[[:space:]=<]`,
22
+ interface: `(export[[:space:]]+)?interface[[:space:]]+${esc}[[:space:]{<]`,
23
+ variable: `(export[[:space:]]+)?(const|let|var)[[:space:]]+${esc}[[:space:]=:]`,
24
+ method: `${BOUNDARY}(${MODIFIER}[[:space:]]+)+\\*?[[:space:]]*${esc}[[:space:]]*[(<]`,
25
+ get_accessor: `(^|[[:space:]])get[[:space:]]+${esc}[[:space:]]*\\(`,
26
+ set_accessor: `(^|[[:space:]])set[[:space:]]+${esc}[[:space:]]*\\(`,
27
+ };
28
+ if (kind === 'all')
29
+ return Object.values(patterns).join('|');
30
+ return patterns[kind];
31
+ }
32
+ function wholeWordIndex(line, name) {
33
+ const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
34
+ const re = new RegExp(`(?<![\\w$#])${escaped}(?![\\w$#])`);
35
+ const m = re.exec(line);
36
+ return m ? m.index : -1;
37
+ }
38
+ function inferKind(line, name) {
39
+ if (name === 'constructor')
40
+ return 'constructor';
41
+ const idx = wholeWordIndex(line, name);
42
+ const before = idx === -1 ? line : line.slice(0, idx);
43
+ const tokens = before.trim().split(/\s+/).filter(Boolean);
44
+ const last = (tokens[tokens.length - 1] ?? '').replace(/\*$/, '');
45
+ if (last === 'get')
46
+ return 'get_accessor';
47
+ if (last === 'set')
48
+ return 'set_accessor';
49
+ if (last === 'function')
50
+ return 'function';
51
+ if (last === 'class')
52
+ return 'class';
53
+ if (last === 'interface')
54
+ return 'interface';
55
+ if (last === 'type')
56
+ return 'type';
57
+ if (MODIFIERS.includes(last))
58
+ return 'method';
59
+ return 'variable';
60
+ }
@@ -1,14 +1,19 @@
1
- import { Node } from 'ts-morph';
2
1
  import type { IAstParser, DepEdge, FileAnalysis, AnalyzeProjectOpts } from '../interfaces/IAstParser';
3
2
  import type { ILogger } from '../interfaces';
3
+ import type { ResolveDeclaration } from '../ast/node-helpers';
4
4
  export interface AstParserDeps {
5
- resolveDeclaration?(identifier: Node): Node | undefined;
5
+ resolveDeclaration?: ResolveDeclaration;
6
6
  }
7
7
  export declare class AstParserService implements IAstParser {
8
8
  private logger;
9
- private deps;
10
9
  private morphProjects;
11
10
  private readonly declarationBuilder;
11
+ private readonly resolver;
12
+ private readonly edges;
13
+ private readonly topLevel;
14
+ private readonly members;
15
+ private readonly calls;
16
+ private readonly graphql;
12
17
  constructor(logger?: ILogger, deps?: AstParserDeps);
13
18
  analyzeProject(filePaths: string[], serviceName: string, projectRoot?: string, opts?: AnalyzeProjectOpts): Promise<Map<string, FileAnalysis>>;
14
19
  clearCache(projectRoot?: string): void;
@@ -17,46 +22,5 @@ export declare class AstParserService implements IAstParser {
17
22
  private analyzeSourceFile;
18
23
  private createMorphProject;
19
24
  private getMorphProject;
20
- private extractEdges;
21
- private resolveSideEffectModuleSpecifier;
22
- private resolveFromSymbol;
23
- private buildUsageMap;
24
- private getPos;
25
- private lineTextAt;
26
- private extractSymbols;
27
- private extractMembers;
28
25
  private buildDeclarations;
29
- private buildGraphqlImportMap;
30
- private static decoratorIdentifier;
31
- private recognizedDecorator;
32
- private static literalStringValue;
33
- private static checkGraphqlGrammar;
34
- private static isAbstractGraphqlType;
35
- private static findNameProperty;
36
- private static peekThroughWrapper;
37
- private deriveGraphqlName;
38
- private logGraphqlSkip;
39
- private declarationNameFor;
40
- private static extractResolverIdentifier;
41
- private defaultResolveDeclaration;
42
- private classGraphqlTypeName;
43
- private resolveResolverParentType;
44
- private extractClassTypeRows;
45
- private extractResolveFieldRow;
46
- private extractMethodOperationRows;
47
- private extractGraphqlNames;
48
- private static isValidSegment;
49
- private static memberName;
50
- private static unwrapExpr;
51
- private static unwrapParent;
52
- private isModuleOrNamespaceLevelVariable;
53
- private classExpressionRoot;
54
- private objectLiteralRootValid;
55
- private isTopLevelOrNamespaceDirect;
56
- private walkStep;
57
- private containerSegments;
58
- private describeIndexedNode;
59
- private qualifiedName;
60
- private findFromSymbol;
61
- private extractCalls;
62
26
  }