code-auditor-mcp 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.
Files changed (85) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +362 -0
  3. package/configs/hhra-compat.json +168 -0
  4. package/dist/analyzers/analyzerUtils.d.ts +69 -0
  5. package/dist/analyzers/analyzerUtils.d.ts.map +1 -0
  6. package/dist/analyzers/analyzerUtils.js +188 -0
  7. package/dist/analyzers/analyzerUtils.js.map +1 -0
  8. package/dist/analyzers/dataAccessAnalyzer.d.ts +46 -0
  9. package/dist/analyzers/dataAccessAnalyzer.d.ts.map +1 -0
  10. package/dist/analyzers/dataAccessAnalyzer.js +448 -0
  11. package/dist/analyzers/dataAccessAnalyzer.js.map +1 -0
  12. package/dist/analyzers/dryAnalyzer.d.ts +30 -0
  13. package/dist/analyzers/dryAnalyzer.d.ts.map +1 -0
  14. package/dist/analyzers/dryAnalyzer.js +537 -0
  15. package/dist/analyzers/dryAnalyzer.js.map +1 -0
  16. package/dist/analyzers/solidAnalyzer.d.ts +23 -0
  17. package/dist/analyzers/solidAnalyzer.d.ts.map +1 -0
  18. package/dist/analyzers/solidAnalyzer.js +355 -0
  19. package/dist/analyzers/solidAnalyzer.js.map +1 -0
  20. package/dist/auditRunner.d.ts +20 -0
  21. package/dist/auditRunner.d.ts.map +1 -0
  22. package/dist/auditRunner.js +214 -0
  23. package/dist/auditRunner.js.map +1 -0
  24. package/dist/cli.d.ts +6 -0
  25. package/dist/cli.d.ts.map +1 -0
  26. package/dist/cli.js +38 -0
  27. package/dist/cli.js.map +1 -0
  28. package/dist/config/configLoader.d.ts +19 -0
  29. package/dist/config/configLoader.d.ts.map +1 -0
  30. package/dist/config/configLoader.js +124 -0
  31. package/dist/config/configLoader.js.map +1 -0
  32. package/dist/config/defaults.d.ts +69 -0
  33. package/dist/config/defaults.d.ts.map +1 -0
  34. package/dist/config/defaults.js +142 -0
  35. package/dist/config/defaults.js.map +1 -0
  36. package/dist/index.d.ts +44 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +66 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/mcp-standalone.d.ts +3 -0
  41. package/dist/mcp-standalone.d.ts.map +1 -0
  42. package/dist/mcp-standalone.js +171 -0
  43. package/dist/mcp-standalone.js.map +1 -0
  44. package/dist/mcp.d.ts +3 -0
  45. package/dist/mcp.d.ts.map +1 -0
  46. package/dist/mcp.js +340 -0
  47. package/dist/mcp.js.map +1 -0
  48. package/dist/reporting/csvReportGenerator.d.ts +29 -0
  49. package/dist/reporting/csvReportGenerator.d.ts.map +1 -0
  50. package/dist/reporting/csvReportGenerator.js +182 -0
  51. package/dist/reporting/csvReportGenerator.js.map +1 -0
  52. package/dist/reporting/htmlReportGenerator.d.ts +18 -0
  53. package/dist/reporting/htmlReportGenerator.d.ts.map +1 -0
  54. package/dist/reporting/htmlReportGenerator.js +352 -0
  55. package/dist/reporting/htmlReportGenerator.js.map +1 -0
  56. package/dist/reporting/jsonReportGenerator.d.ts +23 -0
  57. package/dist/reporting/jsonReportGenerator.d.ts.map +1 -0
  58. package/dist/reporting/jsonReportGenerator.js +103 -0
  59. package/dist/reporting/jsonReportGenerator.js.map +1 -0
  60. package/dist/reporting/reportGenerator.d.ts +21 -0
  61. package/dist/reporting/reportGenerator.d.ts.map +1 -0
  62. package/dist/reporting/reportGenerator.js +53 -0
  63. package/dist/reporting/reportGenerator.js.map +1 -0
  64. package/dist/types.d.ts +246 -0
  65. package/dist/types.d.ts.map +1 -0
  66. package/dist/types.js +6 -0
  67. package/dist/types.js.map +1 -0
  68. package/dist/utils/astParser.d.ts +71 -0
  69. package/dist/utils/astParser.d.ts.map +1 -0
  70. package/dist/utils/astParser.js +244 -0
  71. package/dist/utils/astParser.js.map +1 -0
  72. package/dist/utils/astUtils.d.ts +89 -0
  73. package/dist/utils/astUtils.d.ts.map +1 -0
  74. package/dist/utils/astUtils.js +289 -0
  75. package/dist/utils/astUtils.js.map +1 -0
  76. package/dist/utils/fileDiscovery.d.ts +58 -0
  77. package/dist/utils/fileDiscovery.d.ts.map +1 -0
  78. package/dist/utils/fileDiscovery.js +203 -0
  79. package/dist/utils/fileDiscovery.js.map +1 -0
  80. package/examples/.auditrc.example.json +61 -0
  81. package/examples/.auditrc.json +201 -0
  82. package/examples/nextjs.auditrc.json +65 -0
  83. package/examples/node-api.auditrc.json +82 -0
  84. package/examples/react.auditrc.json +59 -0
  85. package/package.json +62 -0
@@ -0,0 +1,244 @@
1
+ /**
2
+ * AST Parser Utilities
3
+ * Provides TypeScript AST parsing and analysis utilities
4
+ *
5
+ * Core functionality for parsing TypeScript/JavaScript files and
6
+ * extracting information for code analysis
7
+ */
8
+ import * as ts from 'typescript';
9
+ import { promises as fs } from 'fs';
10
+ /**
11
+ * Parse options for TypeScript compiler
12
+ */
13
+ const PARSE_OPTIONS = {
14
+ target: ts.ScriptTarget.Latest,
15
+ module: ts.ModuleKind.ESNext,
16
+ jsx: ts.JsxEmit.React,
17
+ allowJs: true,
18
+ esModuleInterop: true,
19
+ skipLibCheck: true,
20
+ strict: false,
21
+ moduleResolution: ts.ModuleResolutionKind.NodeJs,
22
+ noResolve: true,
23
+ isolatedModules: true,
24
+ allowSyntheticDefaultImports: true,
25
+ lib: ['lib.es2022.d.ts']
26
+ };
27
+ /**
28
+ * Parse a TypeScript file and return AST
29
+ */
30
+ export async function parseTypeScriptFile(filePath) {
31
+ try {
32
+ const content = await fs.readFile(filePath, 'utf-8');
33
+ // Determine script kind based on file extension
34
+ let scriptKind = ts.ScriptKind.TS;
35
+ if (filePath.endsWith('.tsx')) {
36
+ scriptKind = ts.ScriptKind.TSX;
37
+ }
38
+ else if (filePath.endsWith('.jsx')) {
39
+ scriptKind = ts.ScriptKind.JSX;
40
+ }
41
+ else if (filePath.endsWith('.js')) {
42
+ scriptKind = ts.ScriptKind.JS;
43
+ }
44
+ // Create source file without type checking
45
+ const sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true, // setParentNodes
46
+ scriptKind);
47
+ // No errors for pure AST parsing
48
+ const errors = [];
49
+ return {
50
+ sourceFile,
51
+ program: undefined,
52
+ errors
53
+ };
54
+ }
55
+ catch (error) {
56
+ // Return error as diagnostic
57
+ const diagnostic = {
58
+ file: undefined,
59
+ start: 0,
60
+ length: 0,
61
+ messageText: `Failed to read file: ${error}`,
62
+ category: ts.DiagnosticCategory.Error,
63
+ code: 9999
64
+ };
65
+ // Create empty source file for consistency
66
+ const sourceFile = ts.createSourceFile(filePath, '', ts.ScriptTarget.Latest, true);
67
+ return {
68
+ sourceFile,
69
+ errors: [diagnostic]
70
+ };
71
+ }
72
+ }
73
+ /**
74
+ * Extract import statements from AST
75
+ */
76
+ export function getImports(sourceFile) {
77
+ const imports = [];
78
+ function visit(node) {
79
+ if (ts.isImportDeclaration(node)) {
80
+ const moduleSpecifier = node.moduleSpecifier.text;
81
+ const importClause = node.importClause;
82
+ const line = sourceFile.getLineAndCharacterOfPosition(node.getStart()).line + 1;
83
+ const importInfo = {
84
+ moduleSpecifier,
85
+ importedNames: [],
86
+ isDefaultImport: false,
87
+ isNamespaceImport: false,
88
+ line
89
+ };
90
+ if (importClause) {
91
+ // Default import
92
+ if (importClause.name) {
93
+ importInfo.isDefaultImport = true;
94
+ importInfo.importedNames.push(importClause.name.text);
95
+ }
96
+ // Named imports
97
+ if (importClause.namedBindings) {
98
+ if (ts.isNamespaceImport(importClause.namedBindings)) {
99
+ importInfo.isNamespaceImport = true;
100
+ importInfo.importedNames.push(importClause.namedBindings.name.text);
101
+ }
102
+ else if (ts.isNamedImports(importClause.namedBindings)) {
103
+ importClause.namedBindings.elements.forEach(element => {
104
+ importInfo.importedNames.push(element.name.text);
105
+ });
106
+ }
107
+ }
108
+ }
109
+ imports.push(importInfo);
110
+ }
111
+ ts.forEachChild(node, visit);
112
+ }
113
+ visit(sourceFile);
114
+ return imports;
115
+ }
116
+ /**
117
+ * Extract export statements from AST
118
+ */
119
+ export function getExports(sourceFile) {
120
+ const exports = [];
121
+ function visit(node) {
122
+ const line = sourceFile.getLineAndCharacterOfPosition(node.getStart()).line + 1;
123
+ // Export declarations
124
+ if (ts.isExportDeclaration(node)) {
125
+ if (node.exportClause && ts.isNamedExports(node.exportClause)) {
126
+ node.exportClause.elements.forEach(element => {
127
+ exports.push({
128
+ name: element.name.text,
129
+ type: 'const', // Generic type for re-exports
130
+ isDefault: false,
131
+ line
132
+ });
133
+ });
134
+ }
135
+ }
136
+ // Function/const/class/interface with export keyword
137
+ const modifiers = ts.canHaveModifiers(node) ? ts.getModifiers(node) : undefined;
138
+ if (modifiers?.some(m => m.kind === ts.SyntaxKind.ExportKeyword)) {
139
+ let name = '';
140
+ let type = 'const';
141
+ let isDefault = modifiers.some(m => m.kind === ts.SyntaxKind.DefaultKeyword);
142
+ if (ts.isFunctionDeclaration(node)) {
143
+ name = node.name?.text || (isDefault ? 'default' : 'anonymous');
144
+ type = 'function';
145
+ }
146
+ else if (ts.isClassDeclaration(node)) {
147
+ name = node.name?.text || (isDefault ? 'default' : 'anonymous');
148
+ type = 'class';
149
+ }
150
+ else if (ts.isInterfaceDeclaration(node)) {
151
+ name = node.name.text;
152
+ type = 'interface';
153
+ }
154
+ else if (ts.isTypeAliasDeclaration(node)) {
155
+ name = node.name.text;
156
+ type = 'type';
157
+ }
158
+ else if (ts.isEnumDeclaration(node)) {
159
+ name = node.name.text;
160
+ type = 'enum';
161
+ }
162
+ else if (ts.isVariableStatement(node)) {
163
+ const declaration = node.declarationList.declarations[0];
164
+ if (declaration.name && ts.isIdentifier(declaration.name)) {
165
+ name = declaration.name.text;
166
+ type = node.declarationList.flags & ts.NodeFlags.Const ? 'const' :
167
+ node.declarationList.flags & ts.NodeFlags.Let ? 'let' : 'var';
168
+ }
169
+ }
170
+ if (name) {
171
+ exports.push({ name, type, isDefault, line });
172
+ }
173
+ }
174
+ ts.forEachChild(node, visit);
175
+ }
176
+ visit(sourceFile);
177
+ return exports;
178
+ }
179
+ /**
180
+ * Find nodes by kind in AST
181
+ */
182
+ export function findNodesByKind(sourceFile, kind) {
183
+ const nodes = [];
184
+ function visit(node) {
185
+ if (node.kind === kind) {
186
+ nodes.push(node);
187
+ }
188
+ ts.forEachChild(node, visit);
189
+ }
190
+ visit(sourceFile);
191
+ return nodes;
192
+ }
193
+ /**
194
+ * Get the text content of a node
195
+ */
196
+ export function getNodeText(node, sourceFile) {
197
+ return node.getText(sourceFile);
198
+ }
199
+ /**
200
+ * Get line and column for a position
201
+ */
202
+ export function getLineAndColumn(sourceFile, position) {
203
+ const { line, character } = sourceFile.getLineAndCharacterOfPosition(position);
204
+ return { line: line + 1, column: character + 1 };
205
+ }
206
+ /**
207
+ * Check if a node has a specific modifier
208
+ */
209
+ export function hasModifier(node, modifier) {
210
+ const modifiers = ts.canHaveModifiers(node) ? ts.getModifiers(node) : undefined;
211
+ return modifiers?.some(m => m.kind === modifier) || false;
212
+ }
213
+ /**
214
+ * Get function/method complexity (simplified cyclomatic complexity)
215
+ */
216
+ export function calculateComplexity(node) {
217
+ let complexity = 1; // Base complexity
218
+ function visit(node) {
219
+ switch (node.kind) {
220
+ case ts.SyntaxKind.IfStatement:
221
+ case ts.SyntaxKind.ConditionalExpression:
222
+ case ts.SyntaxKind.WhileStatement:
223
+ case ts.SyntaxKind.ForStatement:
224
+ case ts.SyntaxKind.ForInStatement:
225
+ case ts.SyntaxKind.ForOfStatement:
226
+ case ts.SyntaxKind.CaseClause:
227
+ complexity++;
228
+ break;
229
+ case ts.SyntaxKind.BinaryExpression:
230
+ const binaryExpr = node;
231
+ if (binaryExpr.operatorToken.kind === ts.SyntaxKind.AmpersandAmpersandToken ||
232
+ binaryExpr.operatorToken.kind === ts.SyntaxKind.BarBarToken) {
233
+ complexity++;
234
+ }
235
+ break;
236
+ }
237
+ ts.forEachChild(node, visit);
238
+ }
239
+ if (node.body) {
240
+ visit(node.body);
241
+ }
242
+ return complexity;
243
+ }
244
+ //# sourceMappingURL=astParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astParser.js","sourceRoot":"","sources":["../../src/utils/astParser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AAEpC;;GAEG;AACH,MAAM,aAAa,GAAuB;IACxC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM;IAC9B,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM;IAC5B,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK;IACrB,OAAO,EAAE,IAAI;IACb,eAAe,EAAE,IAAI;IACrB,YAAY,EAAE,IAAI;IAClB,MAAM,EAAE,KAAK;IACb,gBAAgB,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM;IAChD,SAAS,EAAE,IAAI;IACf,eAAe,EAAE,IAAI;IACrB,4BAA4B,EAAE,IAAI;IAClC,GAAG,EAAE,CAAC,iBAAiB,CAAC;CACzB,CAAC;AAgCF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAAgB;IACxD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAErD,gDAAgD;QAChD,IAAI,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QACjC,CAAC;aAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QACjC,CAAC;aAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,CAAC;QAED,2CAA2C;QAC3C,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CACpC,QAAQ,EACR,OAAO,EACP,EAAE,CAAC,YAAY,CAAC,MAAM,EACtB,IAAI,EAAE,iBAAiB;QACvB,UAAU,CACX,CAAC;QAEF,iCAAiC;QACjC,MAAM,MAAM,GAAoB,EAAE,CAAC;QAEnC,OAAO;YACL,UAAU;YACV,OAAO,EAAE,SAAS;YAClB,MAAM;SACP,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,6BAA6B;QAC7B,MAAM,UAAU,GAAkB;YAChC,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,WAAW,EAAE,wBAAwB,KAAK,EAAE;YAC5C,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK;YACrC,IAAI,EAAE,IAAI;SACX,CAAC;QAEF,2CAA2C;QAC3C,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CACpC,QAAQ,EACR,EAAE,EACF,EAAE,CAAC,YAAY,CAAC,MAAM,EACtB,IAAI,CACL,CAAC;QAEF,OAAO;YACL,UAAU;YACV,MAAM,EAAE,CAAC,UAAU,CAAC;SACrB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,UAAyB;IAClD,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,SAAS,KAAK,CAAC,IAAa;QAC1B,IAAI,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,eAAe,GAAI,IAAI,CAAC,eAAoC,CAAC,IAAI,CAAC;YACxE,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YACvC,MAAM,IAAI,GAAG,UAAU,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;YAEhF,MAAM,UAAU,GAAe;gBAC7B,eAAe;gBACf,aAAa,EAAE,EAAE;gBACjB,eAAe,EAAE,KAAK;gBACtB,iBAAiB,EAAE,KAAK;gBACxB,IAAI;aACL,CAAC;YAEF,IAAI,YAAY,EAAE,CAAC;gBACjB,iBAAiB;gBACjB,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC;oBACtB,UAAU,CAAC,eAAe,GAAG,IAAI,CAAC;oBAClC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxD,CAAC;gBAED,gBAAgB;gBAChB,IAAI,YAAY,CAAC,aAAa,EAAE,CAAC;oBAC/B,IAAI,EAAE,CAAC,iBAAiB,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC;wBACrD,UAAU,CAAC,iBAAiB,GAAG,IAAI,CAAC;wBACpC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACtE,CAAC;yBAAM,IAAI,EAAE,CAAC,cAAc,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC;wBACzD,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;4BACpD,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACnD,CAAC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3B,CAAC;QAED,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,CAAC;IAClB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,UAAyB;IAClD,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,SAAS,KAAK,CAAC,IAAa;QAC1B,MAAM,IAAI,GAAG,UAAU,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QAEhF,sBAAsB;QACtB,IAAI,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC9D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBAC3C,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI;wBACvB,IAAI,EAAE,OAAO,EAAE,8BAA8B;wBAC7C,SAAS,EAAE,KAAK;wBAChB,IAAI;qBACL,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,qDAAqD;QACrD,MAAM,SAAS,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChF,IAAI,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACjE,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,IAAI,GAAuB,OAAO,CAAC;YACvC,IAAI,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YAE7E,IAAI,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;gBAChE,IAAI,GAAG,UAAU,CAAC;YACpB,CAAC;iBAAM,IAAI,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;gBAChE,IAAI,GAAG,OAAO,CAAC;YACjB,CAAC;iBAAM,IAAI,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBACtB,IAAI,GAAG,WAAW,CAAC;YACrB,CAAC;iBAAM,IAAI,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBACtB,IAAI,GAAG,MAAM,CAAC;YAChB,CAAC;iBAAM,IAAI,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBACtB,IAAI,GAAG,MAAM,CAAC;YAChB,CAAC;iBAAM,IAAI,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACzD,IAAI,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1D,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC7B,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;wBAC3D,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;gBACvE,CAAC;YACH,CAAC;YAED,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,CAAC;IAClB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,UAAyB,EACzB,IAAmB;IAEnB,MAAM,KAAK,GAAQ,EAAE,CAAC;IAEtB,SAAS,KAAK,CAAC,IAAa;QAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,IAAS,CAAC,CAAC;QACxB,CAAC;QACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,CAAC;IAClB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAa,EAAE,UAAyB;IAClE,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAyB,EACzB,QAAgB;IAEhB,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC;IAC/E,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,GAAG,CAAC,EAAE,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAa,EAAE,QAAuB;IAChE,MAAM,SAAS,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,OAAO,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,KAAK,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAgC;IAClE,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,kBAAkB;IAEtC,SAAS,KAAK,CAAC,IAAa;QAC1B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;YAC/B,KAAK,EAAE,CAAC,UAAU,CAAC,qBAAqB,CAAC;YACzC,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;YAClC,KAAK,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;YAChC,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;YAClC,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;YAClC,KAAK,EAAE,CAAC,UAAU,CAAC,UAAU;gBAC3B,UAAU,EAAE,CAAC;gBACb,MAAM;YACR,KAAK,EAAE,CAAC,UAAU,CAAC,gBAAgB;gBACjC,MAAM,UAAU,GAAG,IAA2B,CAAC;gBAC/C,IAAI,UAAU,CAAC,aAAa,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,uBAAuB;oBACvE,UAAU,CAAC,aAAa,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;oBAChE,UAAU,EAAE,CAAC;gBACf,CAAC;gBACD,MAAM;QACV,CAAC;QACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * AST Utility Functions
3
+ * Provides helper functions for working with TypeScript AST nodes
4
+ */
5
+ import * as ts from 'typescript';
6
+ import { ImportInfo, ExportInfo } from '../types.js';
7
+ /**
8
+ * Find all nodes of a specific kind in the AST
9
+ */
10
+ export declare function findNodesByKind<T extends ts.Node>(node: ts.Node, kind: ts.SyntaxKind): T[];
11
+ /**
12
+ * Get the text content of a node
13
+ */
14
+ export declare function getNodeText(node: ts.Node, sourceFile: ts.SourceFile): string;
15
+ /**
16
+ * Get line and column number for a position
17
+ */
18
+ export declare function getLineAndColumn(sourceFile: ts.SourceFile, position: number): {
19
+ line: number;
20
+ column: number;
21
+ };
22
+ /**
23
+ * Extract import statements from a source file
24
+ */
25
+ export declare function getImports(sourceFile: ts.SourceFile): ImportInfo[];
26
+ /**
27
+ * Extract export statements from a source file
28
+ */
29
+ export declare function getExports(sourceFile: ts.SourceFile): ExportInfo[];
30
+ /**
31
+ * Check if a node is exported
32
+ */
33
+ export declare function isExported(node: ts.Node): boolean;
34
+ /**
35
+ * Find all function declarations
36
+ */
37
+ export declare function findFunctions(sourceFile: ts.SourceFile): ts.FunctionDeclaration[];
38
+ /**
39
+ * Find all class declarations
40
+ */
41
+ export declare function findClasses(sourceFile: ts.SourceFile): ts.ClassDeclaration[];
42
+ /**
43
+ * Get AST node for inspection
44
+ */
45
+ export declare function getASTNode(node: ts.Node): any;
46
+ /**
47
+ * Calculate cyclomatic complexity of a function/method
48
+ */
49
+ export declare function calculateComplexity(node: ts.FunctionLikeDeclaration): number;
50
+ /**
51
+ * Check if a node has a specific decorator
52
+ */
53
+ export declare function hasDecorator(node: ts.Node, decoratorName: string): boolean;
54
+ /**
55
+ * Get method names from a class
56
+ */
57
+ export declare function getClassMethods(classNode: ts.ClassDeclaration): string[];
58
+ /**
59
+ * Count lines of code (excluding comments and empty lines)
60
+ */
61
+ export declare function countLinesOfCode(sourceFile: ts.SourceFile): number;
62
+ /**
63
+ * Find all variable declarations
64
+ */
65
+ export declare function findVariableDeclarations(sourceFile: ts.SourceFile): ts.VariableDeclaration[];
66
+ /**
67
+ * Check if a function is async
68
+ */
69
+ export declare function isAsyncFunction(node: ts.FunctionLikeDeclaration): boolean;
70
+ /**
71
+ * Get parameter count for a function
72
+ */
73
+ export declare function getParameterCount(node: ts.FunctionLikeDeclaration): number;
74
+ /**
75
+ * Find all type aliases
76
+ */
77
+ export declare function findTypeAliases(sourceFile: ts.SourceFile): ts.TypeAliasDeclaration[];
78
+ /**
79
+ * Find all interfaces
80
+ */
81
+ export declare function findInterfaces(sourceFile: ts.SourceFile): ts.InterfaceDeclaration[];
82
+ /**
83
+ * Parse a TypeScript file
84
+ */
85
+ export declare function parseTypeScriptFile(filePath: string): Promise<{
86
+ sourceFile: ts.SourceFile;
87
+ errors: ts.Diagnostic[];
88
+ }>;
89
+ //# sourceMappingURL=astUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astUtils.d.ts","sourceRoot":"","sources":["../../src/utils/astUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErD;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,EAAE,CAAC,IAAI,EAC/C,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,IAAI,EAAE,EAAE,CAAC,UAAU,GAClB,CAAC,EAAE,CAYL;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,MAAM,CAE5E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,QAAQ,EAAE,MAAM,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAGlC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,UAAU,EAAE,CAsClE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,UAAU,EAAE,CA8BlE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,OAAO,CAIjD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAKjF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAK5E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAM7C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,GAAG,MAAM,CAiC5E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAkB1E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,GAAG,MAAM,EAAE,CAUxE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,MAAM,CAalE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,EAAE,CAAC,UAAU,GACxB,EAAE,CAAC,mBAAmB,EAAE,CAY1B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,GAAG,OAAO,CAIzE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,GAAG,MAAM,CAE1E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,oBAAoB,EAAE,CAKpF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,oBAAoB,EAAE,CAKnF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IAAC,MAAM,EAAE,EAAE,CAAC,UAAU,EAAE,CAAA;CAAE,CAAC,CAgDjE"}
@@ -0,0 +1,289 @@
1
+ /**
2
+ * AST Utility Functions
3
+ * Provides helper functions for working with TypeScript AST nodes
4
+ */
5
+ import * as ts from 'typescript';
6
+ /**
7
+ * Find all nodes of a specific kind in the AST
8
+ */
9
+ export function findNodesByKind(node, kind) {
10
+ const results = [];
11
+ function visit(node) {
12
+ if (node.kind === kind) {
13
+ results.push(node);
14
+ }
15
+ ts.forEachChild(node, visit);
16
+ }
17
+ visit(node);
18
+ return results;
19
+ }
20
+ /**
21
+ * Get the text content of a node
22
+ */
23
+ export function getNodeText(node, sourceFile) {
24
+ return node.getText(sourceFile);
25
+ }
26
+ /**
27
+ * Get line and column number for a position
28
+ */
29
+ export function getLineAndColumn(sourceFile, position) {
30
+ const { line, character } = sourceFile.getLineAndCharacterOfPosition(position);
31
+ return { line: line + 1, column: character + 1 };
32
+ }
33
+ /**
34
+ * Extract import statements from a source file
35
+ */
36
+ export function getImports(sourceFile) {
37
+ const imports = [];
38
+ ts.forEachChild(sourceFile, node => {
39
+ if (ts.isImportDeclaration(node)) {
40
+ const moduleSpecifier = node.moduleSpecifier.text;
41
+ const importedNames = [];
42
+ const isTypeOnly = node.importClause?.isTypeOnly || false;
43
+ if (node.importClause) {
44
+ // Default import
45
+ if (node.importClause.name) {
46
+ importedNames.push(node.importClause.name.text);
47
+ }
48
+ // Named imports
49
+ if (node.importClause.namedBindings) {
50
+ if (ts.isNamespaceImport(node.importClause.namedBindings)) {
51
+ importedNames.push(`* as ${node.importClause.namedBindings.name.text}`);
52
+ }
53
+ else if (ts.isNamedImports(node.importClause.namedBindings)) {
54
+ node.importClause.namedBindings.elements.forEach(element => {
55
+ importedNames.push(element.name.text);
56
+ });
57
+ }
58
+ }
59
+ }
60
+ const { line } = getLineAndColumn(sourceFile, node.getStart());
61
+ imports.push({
62
+ moduleSpecifier,
63
+ importedNames,
64
+ isTypeOnly,
65
+ line
66
+ });
67
+ }
68
+ });
69
+ return imports;
70
+ }
71
+ /**
72
+ * Extract export statements from a source file
73
+ */
74
+ export function getExports(sourceFile) {
75
+ const exports = [];
76
+ ts.forEachChild(sourceFile, node => {
77
+ if (ts.isExportDeclaration(node)) {
78
+ const isTypeOnly = node.isTypeOnly || false;
79
+ const { line } = getLineAndColumn(sourceFile, node.getStart());
80
+ if (node.exportClause && ts.isNamedExports(node.exportClause)) {
81
+ node.exportClause.elements.forEach(element => {
82
+ exports.push({
83
+ name: element.name.text,
84
+ isDefault: false,
85
+ isTypeOnly,
86
+ line
87
+ });
88
+ });
89
+ }
90
+ }
91
+ else if (ts.isExportAssignment(node)) {
92
+ const { line } = getLineAndColumn(sourceFile, node.getStart());
93
+ exports.push({
94
+ name: 'default',
95
+ isDefault: true,
96
+ isTypeOnly: false,
97
+ line
98
+ });
99
+ }
100
+ });
101
+ return exports;
102
+ }
103
+ /**
104
+ * Check if a node is exported
105
+ */
106
+ export function isExported(node) {
107
+ return ((ts.getCombinedModifierFlags(node) & ts.ModifierFlags.Export) !== 0);
108
+ }
109
+ /**
110
+ * Find all function declarations
111
+ */
112
+ export function findFunctions(sourceFile) {
113
+ return findNodesByKind(sourceFile, ts.SyntaxKind.FunctionDeclaration);
114
+ }
115
+ /**
116
+ * Find all class declarations
117
+ */
118
+ export function findClasses(sourceFile) {
119
+ return findNodesByKind(sourceFile, ts.SyntaxKind.ClassDeclaration);
120
+ }
121
+ /**
122
+ * Get AST node for inspection
123
+ */
124
+ export function getASTNode(node) {
125
+ return {
126
+ kind: ts.SyntaxKind[node.kind],
127
+ text: node.getText?.() || '',
128
+ children: node.getChildren?.().map(child => getASTNode(child)) || []
129
+ };
130
+ }
131
+ /**
132
+ * Calculate cyclomatic complexity of a function/method
133
+ */
134
+ export function calculateComplexity(node) {
135
+ let complexity = 1; // Base complexity
136
+ function visit(node) {
137
+ switch (node.kind) {
138
+ case ts.SyntaxKind.IfStatement:
139
+ case ts.SyntaxKind.WhileStatement:
140
+ case ts.SyntaxKind.ForStatement:
141
+ case ts.SyntaxKind.ForInStatement:
142
+ case ts.SyntaxKind.ForOfStatement:
143
+ case ts.SyntaxKind.ConditionalExpression:
144
+ case ts.SyntaxKind.CatchClause:
145
+ case ts.SyntaxKind.CaseClause:
146
+ complexity++;
147
+ break;
148
+ case ts.SyntaxKind.BinaryExpression:
149
+ const binary = node;
150
+ if (binary.operatorToken.kind === ts.SyntaxKind.AmpersandAmpersandToken ||
151
+ binary.operatorToken.kind === ts.SyntaxKind.BarBarToken) {
152
+ complexity++;
153
+ }
154
+ break;
155
+ }
156
+ ts.forEachChild(node, visit);
157
+ }
158
+ if (node.body) {
159
+ visit(node.body);
160
+ }
161
+ return complexity;
162
+ }
163
+ /**
164
+ * Check if a node has a specific decorator
165
+ */
166
+ export function hasDecorator(node, decoratorName) {
167
+ if (!ts.canHaveDecorators(node)) {
168
+ return false;
169
+ }
170
+ const decorators = ts.getDecorators(node);
171
+ if (!decorators) {
172
+ return false;
173
+ }
174
+ return decorators.some(decorator => {
175
+ if (ts.isCallExpression(decorator.expression)) {
176
+ const expression = decorator.expression.expression;
177
+ return ts.isIdentifier(expression) && expression.text === decoratorName;
178
+ }
179
+ return ts.isIdentifier(decorator.expression) &&
180
+ decorator.expression.text === decoratorName;
181
+ });
182
+ }
183
+ /**
184
+ * Get method names from a class
185
+ */
186
+ export function getClassMethods(classNode) {
187
+ const methods = [];
188
+ classNode.members.forEach(member => {
189
+ if (ts.isMethodDeclaration(member) && member.name && ts.isIdentifier(member.name)) {
190
+ methods.push(member.name.text);
191
+ }
192
+ });
193
+ return methods;
194
+ }
195
+ /**
196
+ * Count lines of code (excluding comments and empty lines)
197
+ */
198
+ export function countLinesOfCode(sourceFile) {
199
+ const text = sourceFile.getFullText();
200
+ const lines = text.split('\n');
201
+ let count = 0;
202
+ for (const line of lines) {
203
+ const trimmed = line.trim();
204
+ if (trimmed && !trimmed.startsWith('//') && !trimmed.startsWith('/*')) {
205
+ count++;
206
+ }
207
+ }
208
+ return count;
209
+ }
210
+ /**
211
+ * Find all variable declarations
212
+ */
213
+ export function findVariableDeclarations(sourceFile) {
214
+ const declarations = [];
215
+ function visit(node) {
216
+ if (ts.isVariableDeclaration(node)) {
217
+ declarations.push(node);
218
+ }
219
+ ts.forEachChild(node, visit);
220
+ }
221
+ visit(sourceFile);
222
+ return declarations;
223
+ }
224
+ /**
225
+ * Check if a function is async
226
+ */
227
+ export function isAsyncFunction(node) {
228
+ return !!(node.modifiers?.some(modifier => modifier.kind === ts.SyntaxKind.AsyncKeyword));
229
+ }
230
+ /**
231
+ * Get parameter count for a function
232
+ */
233
+ export function getParameterCount(node) {
234
+ return node.parameters.length;
235
+ }
236
+ /**
237
+ * Find all type aliases
238
+ */
239
+ export function findTypeAliases(sourceFile) {
240
+ return findNodesByKind(sourceFile, ts.SyntaxKind.TypeAliasDeclaration);
241
+ }
242
+ /**
243
+ * Find all interfaces
244
+ */
245
+ export function findInterfaces(sourceFile) {
246
+ return findNodesByKind(sourceFile, ts.SyntaxKind.InterfaceDeclaration);
247
+ }
248
+ /**
249
+ * Parse a TypeScript file
250
+ */
251
+ export async function parseTypeScriptFile(filePath) {
252
+ const fs = await import('fs').then(m => m.promises);
253
+ const content = await fs.readFile(filePath, 'utf-8');
254
+ const compilerOptions = {
255
+ target: ts.ScriptTarget.Latest,
256
+ module: ts.ModuleKind.ESNext,
257
+ jsx: ts.JsxEmit.React,
258
+ lib: ['es2020', 'dom'],
259
+ skipLibCheck: true,
260
+ skipDefaultLibCheck: true,
261
+ allowJs: true,
262
+ checkJs: false,
263
+ strict: false,
264
+ noResolve: true,
265
+ noLib: false,
266
+ moduleResolution: ts.ModuleResolutionKind.NodeJs
267
+ };
268
+ const sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true);
269
+ // For now, just return the source file without full type checking
270
+ // This avoids the need for a full TypeScript compiler host setup
271
+ const errors = [];
272
+ // Check for basic syntax errors by walking the AST
273
+ function checkSyntax(node) {
274
+ if (node.kind === ts.SyntaxKind.Unknown) {
275
+ errors.push({
276
+ file: sourceFile,
277
+ start: node.getStart(),
278
+ length: node.getWidth(),
279
+ messageText: 'Syntax error',
280
+ category: ts.DiagnosticCategory.Error,
281
+ code: 1000
282
+ });
283
+ }
284
+ ts.forEachChild(node, checkSyntax);
285
+ }
286
+ checkSyntax(sourceFile);
287
+ return { sourceFile, errors };
288
+ }
289
+ //# sourceMappingURL=astUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astUtils.js","sourceRoot":"","sources":["../../src/utils/astUtils.ts"],"names":[],"mappings":"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"}