camouf 0.1.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 (167) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +346 -0
  3. package/dist/cli/commands/analyze.d.ts +8 -0
  4. package/dist/cli/commands/analyze.d.ts.map +1 -0
  5. package/dist/cli/commands/analyze.js +81 -0
  6. package/dist/cli/commands/analyze.js.map +1 -0
  7. package/dist/cli/commands/init.d.ts +9 -0
  8. package/dist/cli/commands/init.d.ts.map +1 -0
  9. package/dist/cli/commands/init.js +104 -0
  10. package/dist/cli/commands/init.js.map +1 -0
  11. package/dist/cli/commands/report.d.ts +8 -0
  12. package/dist/cli/commands/report.d.ts.map +1 -0
  13. package/dist/cli/commands/report.js +63 -0
  14. package/dist/cli/commands/report.js.map +1 -0
  15. package/dist/cli/commands/validate.d.ts +9 -0
  16. package/dist/cli/commands/validate.d.ts.map +1 -0
  17. package/dist/cli/commands/validate.js +87 -0
  18. package/dist/cli/commands/validate.js.map +1 -0
  19. package/dist/cli/commands/watch.d.ts +9 -0
  20. package/dist/cli/commands/watch.d.ts.map +1 -0
  21. package/dist/cli/commands/watch.js +93 -0
  22. package/dist/cli/commands/watch.js.map +1 -0
  23. package/dist/cli/index.d.ts +9 -0
  24. package/dist/cli/index.d.ts.map +1 -0
  25. package/dist/cli/index.js +48 -0
  26. package/dist/cli/index.js.map +1 -0
  27. package/dist/cli/version.d.ts +16 -0
  28. package/dist/cli/version.d.ts.map +1 -0
  29. package/dist/cli/version.js +16 -0
  30. package/dist/cli/version.js.map +1 -0
  31. package/dist/core/analyzer/architecture-visualizer.d.ts +25 -0
  32. package/dist/core/analyzer/architecture-visualizer.d.ts.map +1 -0
  33. package/dist/core/analyzer/architecture-visualizer.js +333 -0
  34. package/dist/core/analyzer/architecture-visualizer.js.map +1 -0
  35. package/dist/core/analyzer/dependency-analyzer.d.ts +49 -0
  36. package/dist/core/analyzer/dependency-analyzer.d.ts.map +1 -0
  37. package/dist/core/analyzer/dependency-analyzer.js +242 -0
  38. package/dist/core/analyzer/dependency-analyzer.js.map +1 -0
  39. package/dist/core/config/config-schema.d.ts +280 -0
  40. package/dist/core/config/config-schema.d.ts.map +1 -0
  41. package/dist/core/config/config-schema.js +199 -0
  42. package/dist/core/config/config-schema.js.map +1 -0
  43. package/dist/core/config/configuration-manager.d.ts +82 -0
  44. package/dist/core/config/configuration-manager.d.ts.map +1 -0
  45. package/dist/core/config/configuration-manager.js +306 -0
  46. package/dist/core/config/configuration-manager.js.map +1 -0
  47. package/dist/core/logger.d.ts +27 -0
  48. package/dist/core/logger.d.ts.map +1 -0
  49. package/dist/core/logger.js +86 -0
  50. package/dist/core/logger.js.map +1 -0
  51. package/dist/core/parsers/go-parser.d.ts +16 -0
  52. package/dist/core/parsers/go-parser.d.ts.map +1 -0
  53. package/dist/core/parsers/go-parser.js +117 -0
  54. package/dist/core/parsers/go-parser.js.map +1 -0
  55. package/dist/core/parsers/java-parser.d.ts +22 -0
  56. package/dist/core/parsers/java-parser.d.ts.map +1 -0
  57. package/dist/core/parsers/java-parser.js +114 -0
  58. package/dist/core/parsers/java-parser.js.map +1 -0
  59. package/dist/core/parsers/javascript-parser.d.ts +14 -0
  60. package/dist/core/parsers/javascript-parser.d.ts.map +1 -0
  61. package/dist/core/parsers/javascript-parser.js +19 -0
  62. package/dist/core/parsers/javascript-parser.js.map +1 -0
  63. package/dist/core/parsers/parser-registry.d.ts +45 -0
  64. package/dist/core/parsers/parser-registry.d.ts.map +1 -0
  65. package/dist/core/parsers/parser-registry.js +121 -0
  66. package/dist/core/parsers/parser-registry.js.map +1 -0
  67. package/dist/core/parsers/parser.interface.d.ts +49 -0
  68. package/dist/core/parsers/parser.interface.d.ts.map +1 -0
  69. package/dist/core/parsers/parser.interface.js +7 -0
  70. package/dist/core/parsers/parser.interface.js.map +1 -0
  71. package/dist/core/parsers/python-parser.d.ts +22 -0
  72. package/dist/core/parsers/python-parser.d.ts.map +1 -0
  73. package/dist/core/parsers/python-parser.js +136 -0
  74. package/dist/core/parsers/python-parser.js.map +1 -0
  75. package/dist/core/parsers/rust-parser.d.ts +16 -0
  76. package/dist/core/parsers/rust-parser.d.ts.map +1 -0
  77. package/dist/core/parsers/rust-parser.js +176 -0
  78. package/dist/core/parsers/rust-parser.js.map +1 -0
  79. package/dist/core/parsers/typescript-parser.d.ts +29 -0
  80. package/dist/core/parsers/typescript-parser.d.ts.map +1 -0
  81. package/dist/core/parsers/typescript-parser.js +251 -0
  82. package/dist/core/parsers/typescript-parser.js.map +1 -0
  83. package/dist/core/reporter/report-generator.d.ts +31 -0
  84. package/dist/core/reporter/report-generator.d.ts.map +1 -0
  85. package/dist/core/reporter/report-generator.js +417 -0
  86. package/dist/core/reporter/report-generator.js.map +1 -0
  87. package/dist/core/reporter/violation-reporter.d.ts +62 -0
  88. package/dist/core/reporter/violation-reporter.d.ts.map +1 -0
  89. package/dist/core/reporter/violation-reporter.js +265 -0
  90. package/dist/core/reporter/violation-reporter.js.map +1 -0
  91. package/dist/core/rules/builtin/api-versioning.rule.d.ts +28 -0
  92. package/dist/core/rules/builtin/api-versioning.rule.d.ts.map +1 -0
  93. package/dist/core/rules/builtin/api-versioning.rule.js +103 -0
  94. package/dist/core/rules/builtin/api-versioning.rule.js.map +1 -0
  95. package/dist/core/rules/builtin/circular-dependencies.rule.d.ts +26 -0
  96. package/dist/core/rules/builtin/circular-dependencies.rule.d.ts.map +1 -0
  97. package/dist/core/rules/builtin/circular-dependencies.rule.js +99 -0
  98. package/dist/core/rules/builtin/circular-dependencies.rule.js.map +1 -0
  99. package/dist/core/rules/builtin/data-flow-integrity.rule.d.ts +27 -0
  100. package/dist/core/rules/builtin/data-flow-integrity.rule.d.ts.map +1 -0
  101. package/dist/core/rules/builtin/data-flow-integrity.rule.js +111 -0
  102. package/dist/core/rules/builtin/data-flow-integrity.rule.js.map +1 -0
  103. package/dist/core/rules/builtin/ddd-boundaries.rule.d.ts +31 -0
  104. package/dist/core/rules/builtin/ddd-boundaries.rule.d.ts.map +1 -0
  105. package/dist/core/rules/builtin/ddd-boundaries.rule.js +141 -0
  106. package/dist/core/rules/builtin/ddd-boundaries.rule.js.map +1 -0
  107. package/dist/core/rules/builtin/distributed-transactions.rule.d.ts +27 -0
  108. package/dist/core/rules/builtin/distributed-transactions.rule.d.ts.map +1 -0
  109. package/dist/core/rules/builtin/distributed-transactions.rule.js +134 -0
  110. package/dist/core/rules/builtin/distributed-transactions.rule.js.map +1 -0
  111. package/dist/core/rules/builtin/index.d.ts +16 -0
  112. package/dist/core/rules/builtin/index.d.ts.map +1 -0
  113. package/dist/core/rules/builtin/index.js +16 -0
  114. package/dist/core/rules/builtin/index.js.map +1 -0
  115. package/dist/core/rules/builtin/layer-dependencies.rule.d.ts +30 -0
  116. package/dist/core/rules/builtin/layer-dependencies.rule.d.ts.map +1 -0
  117. package/dist/core/rules/builtin/layer-dependencies.rule.js +102 -0
  118. package/dist/core/rules/builtin/layer-dependencies.rule.js.map +1 -0
  119. package/dist/core/rules/builtin/performance-antipatterns.rule.d.ts +29 -0
  120. package/dist/core/rules/builtin/performance-antipatterns.rule.d.ts.map +1 -0
  121. package/dist/core/rules/builtin/performance-antipatterns.rule.js +148 -0
  122. package/dist/core/rules/builtin/performance-antipatterns.rule.js.map +1 -0
  123. package/dist/core/rules/builtin/resilience-patterns.rule.d.ts +29 -0
  124. package/dist/core/rules/builtin/resilience-patterns.rule.d.ts.map +1 -0
  125. package/dist/core/rules/builtin/resilience-patterns.rule.js +123 -0
  126. package/dist/core/rules/builtin/resilience-patterns.rule.js.map +1 -0
  127. package/dist/core/rules/builtin/security-context.rule.d.ts +32 -0
  128. package/dist/core/rules/builtin/security-context.rule.d.ts.map +1 -0
  129. package/dist/core/rules/builtin/security-context.rule.js +145 -0
  130. package/dist/core/rules/builtin/security-context.rule.js.map +1 -0
  131. package/dist/core/rules/builtin/type-safety.rule.d.ts +32 -0
  132. package/dist/core/rules/builtin/type-safety.rule.d.ts.map +1 -0
  133. package/dist/core/rules/builtin/type-safety.rule.js +175 -0
  134. package/dist/core/rules/builtin/type-safety.rule.js.map +1 -0
  135. package/dist/core/rules/rule-engine.d.ts +72 -0
  136. package/dist/core/rules/rule-engine.d.ts.map +1 -0
  137. package/dist/core/rules/rule-engine.js +225 -0
  138. package/dist/core/rules/rule-engine.js.map +1 -0
  139. package/dist/core/rules/rule.interface.d.ts +169 -0
  140. package/dist/core/rules/rule.interface.d.ts.map +1 -0
  141. package/dist/core/rules/rule.interface.js +38 -0
  142. package/dist/core/rules/rule.interface.js.map +1 -0
  143. package/dist/core/scanner/project-detector.d.ts +51 -0
  144. package/dist/core/scanner/project-detector.d.ts.map +1 -0
  145. package/dist/core/scanner/project-detector.js +310 -0
  146. package/dist/core/scanner/project-detector.js.map +1 -0
  147. package/dist/core/scanner/project-scanner.d.ts +101 -0
  148. package/dist/core/scanner/project-scanner.d.ts.map +1 -0
  149. package/dist/core/scanner/project-scanner.js +321 -0
  150. package/dist/core/scanner/project-scanner.js.map +1 -0
  151. package/dist/core/watcher/file-watcher.d.ts +48 -0
  152. package/dist/core/watcher/file-watcher.d.ts.map +1 -0
  153. package/dist/core/watcher/file-watcher.js +124 -0
  154. package/dist/core/watcher/file-watcher.js.map +1 -0
  155. package/dist/types/config.types.d.ts +163 -0
  156. package/dist/types/config.types.d.ts.map +1 -0
  157. package/dist/types/config.types.js +36 -0
  158. package/dist/types/config.types.js.map +1 -0
  159. package/dist/types/core.types.d.ts +247 -0
  160. package/dist/types/core.types.d.ts.map +1 -0
  161. package/dist/types/core.types.js +7 -0
  162. package/dist/types/core.types.js.map +1 -0
  163. package/dist/types/index.d.ts +7 -0
  164. package/dist/types/index.d.ts.map +1 -0
  165. package/dist/types/index.js +7 -0
  166. package/dist/types/index.js.map +1 -0
  167. package/package.json +90 -0
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Java Parser
3
+ *
4
+ * Parses Java files for import/export analysis.
5
+ */
6
+ export class JavaParser {
7
+ language = 'java';
8
+ extensions = ['.java'];
9
+ options;
10
+ constructor(options = {}) {
11
+ this.options = options;
12
+ }
13
+ canParse(file) {
14
+ return file.language === 'java' || this.extensions.includes(file.extension);
15
+ }
16
+ async parse(file, content) {
17
+ const dependencies = await this.extractImports(content);
18
+ const exports = await this.extractExports(content);
19
+ return {
20
+ file,
21
+ dependencies,
22
+ exports,
23
+ };
24
+ }
25
+ async extractImports(content) {
26
+ const dependencies = [];
27
+ const lines = content.split('\n');
28
+ // Java import pattern
29
+ const importPattern = /^import\s+(static\s+)?([\w.]+)(?:\.\*)?;/;
30
+ for (let i = 0; i < lines.length; i++) {
31
+ const line = lines[i].trim();
32
+ // Skip comments
33
+ if (line.startsWith('//') || line.startsWith('/*') || line.startsWith('*'))
34
+ continue;
35
+ const match = line.match(importPattern);
36
+ if (match) {
37
+ const [, isStatic, importPath] = match;
38
+ dependencies.push({
39
+ source: '',
40
+ target: importPath,
41
+ type: 'java-import',
42
+ line: i + 1,
43
+ imports: [{
44
+ name: importPath.split('.').pop() || importPath,
45
+ }],
46
+ });
47
+ }
48
+ }
49
+ return dependencies;
50
+ }
51
+ async extractExports(content) {
52
+ const exports = [];
53
+ const lines = content.split('\n');
54
+ // Patterns for Java declarations
55
+ const classPattern = /^(?:public\s+)?(?:abstract\s+)?(?:final\s+)?class\s+(\w+)/;
56
+ const interfacePattern = /^(?:public\s+)?interface\s+(\w+)/;
57
+ const enumPattern = /^(?:public\s+)?enum\s+(\w+)/;
58
+ const methodPattern = /^(?:public\s+)(?:static\s+)?(?:final\s+)?(?:\w+(?:<[^>]+>)?)\s+(\w+)\s*\(/;
59
+ let inClass = false;
60
+ let braceCount = 0;
61
+ for (let i = 0; i < lines.length; i++) {
62
+ const line = lines[i].trim();
63
+ // Track brace depth
64
+ braceCount += (line.match(/{/g) || []).length;
65
+ braceCount -= (line.match(/}/g) || []).length;
66
+ // Skip if inside class body (except for public methods)
67
+ if (inClass && braceCount > 1) {
68
+ // Check for public methods
69
+ const methodMatch = line.match(methodPattern);
70
+ if (methodMatch) {
71
+ exports.push({
72
+ name: methodMatch[1],
73
+ type: 'function',
74
+ line: i + 1,
75
+ });
76
+ }
77
+ continue;
78
+ }
79
+ // Class definitions
80
+ const classMatch = line.match(classPattern);
81
+ if (classMatch) {
82
+ exports.push({
83
+ name: classMatch[1],
84
+ type: 'class',
85
+ line: i + 1,
86
+ });
87
+ inClass = true;
88
+ continue;
89
+ }
90
+ // Interface definitions
91
+ const interfaceMatch = line.match(interfacePattern);
92
+ if (interfaceMatch) {
93
+ exports.push({
94
+ name: interfaceMatch[1],
95
+ type: 'interface',
96
+ line: i + 1,
97
+ });
98
+ continue;
99
+ }
100
+ // Enum definitions
101
+ const enumMatch = line.match(enumPattern);
102
+ if (enumMatch) {
103
+ exports.push({
104
+ name: enumMatch[1],
105
+ type: 'enum',
106
+ line: i + 1,
107
+ });
108
+ continue;
109
+ }
110
+ }
111
+ return exports;
112
+ }
113
+ }
114
+ //# sourceMappingURL=java-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"java-parser.js","sourceRoot":"","sources":["../../../src/core/parsers/java-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * JavaScript Parser
3
+ *
4
+ * Parses JavaScript files. Extends TypeScript parser since TS can parse JS.
5
+ */
6
+ import { TypeScriptParser } from './typescript-parser.js';
7
+ import { ProjectFile } from '../../types/core.types.js';
8
+ export declare class JavaScriptParser extends TypeScriptParser {
9
+ readonly language: string;
10
+ readonly extensions: string[];
11
+ constructor();
12
+ canParse(file: ProjectFile): boolean;
13
+ }
14
+ //# sourceMappingURL=javascript-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"javascript-parser.d.ts","sourceRoot":"","sources":["../../../src/core/parsers/javascript-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,qBAAa,gBAAiB,SAAQ,gBAAgB;IACpD,SAAkB,QAAQ,EAAE,MAAM,CAAgB;IAClD,SAAkB,UAAU,WAAmC;;IAQtD,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO;CAG9C"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * JavaScript Parser
3
+ *
4
+ * Parses JavaScript files. Extends TypeScript parser since TS can parse JS.
5
+ */
6
+ import { TypeScriptParser } from './typescript-parser.js';
7
+ export class JavaScriptParser extends TypeScriptParser {
8
+ language = 'javascript';
9
+ extensions = ['.js', '.jsx', '.mjs', '.cjs'];
10
+ constructor() {
11
+ super({
12
+ strict: false,
13
+ });
14
+ }
15
+ canParse(file) {
16
+ return file.language === 'javascript' || this.extensions.includes(file.extension);
17
+ }
18
+ }
19
+ //# sourceMappingURL=javascript-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"javascript-parser.js","sourceRoot":"","sources":["../../../src/core/parsers/javascript-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,MAAM,OAAO,gBAAiB,SAAQ,gBAAgB;IAClC,QAAQ,GAAW,YAAY,CAAC;IAChC,UAAU,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAE/D;QACE,KAAK,CAAC;YACJ,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;IACL,CAAC;IAEQ,QAAQ,CAAC,IAAiB;QACjC,OAAO,IAAI,CAAC,QAAQ,KAAK,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpF,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Parser Registry
3
+ *
4
+ * Manages language parsers and provides access to them.
5
+ */
6
+ import { CamoufConfig, SupportedLanguage } from '../../types/config.types.js';
7
+ import { IParser } from './parser.interface.js';
8
+ export declare class ParserRegistry {
9
+ private parsers;
10
+ private config;
11
+ constructor(config: CamoufConfig);
12
+ /**
13
+ * Initialize parsers for configured languages
14
+ */
15
+ private initializeParsers;
16
+ /**
17
+ * Create a parser for a specific language
18
+ */
19
+ private createParser;
20
+ /**
21
+ * Get parser for a language
22
+ */
23
+ getParser(language: SupportedLanguage): IParser | undefined;
24
+ /**
25
+ * Get parser that can handle a file extension
26
+ */
27
+ getParserForExtension(extension: string): IParser | undefined;
28
+ /**
29
+ * Check if a language is supported
30
+ */
31
+ isSupported(language: SupportedLanguage): boolean;
32
+ /**
33
+ * Get all supported languages
34
+ */
35
+ getSupportedLanguages(): SupportedLanguage[];
36
+ /**
37
+ * Register a custom parser
38
+ */
39
+ registerParser(language: SupportedLanguage, parser: IParser): void;
40
+ /**
41
+ * Dispose all parsers
42
+ */
43
+ dispose(): void;
44
+ }
45
+ //# sourceMappingURL=parser-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-registry.d.ts","sourceRoot":"","sources":["../../../src/core/parsers/parser-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAShD,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAA8C;IAC7D,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY;IAKhC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAczB;;OAEG;IACH,OAAO,CAAC,YAAY;IA0CpB;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,GAAG,SAAS;IAI3D;;OAEG;IACH,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAS7D;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO;IAIjD;;OAEG;IACH,qBAAqB,IAAI,iBAAiB,EAAE;IAI5C;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAKlE;;OAEG;IACH,OAAO,IAAI,IAAI;CAQhB"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Parser Registry
3
+ *
4
+ * Manages language parsers and provides access to them.
5
+ */
6
+ import { TypeScriptParser } from './typescript-parser.js';
7
+ import { JavaScriptParser } from './javascript-parser.js';
8
+ import { PythonParser } from './python-parser.js';
9
+ import { JavaParser } from './java-parser.js';
10
+ import { GoParser } from './go-parser.js';
11
+ import { RustParser } from './rust-parser.js';
12
+ import { Logger } from '../logger.js';
13
+ export class ParserRegistry {
14
+ parsers = new Map();
15
+ config;
16
+ constructor(config) {
17
+ this.config = config;
18
+ this.initializeParsers();
19
+ }
20
+ /**
21
+ * Initialize parsers for configured languages
22
+ */
23
+ initializeParsers() {
24
+ for (const language of this.config.languages) {
25
+ try {
26
+ const parser = this.createParser(language);
27
+ if (parser) {
28
+ this.parsers.set(language, parser);
29
+ Logger.debug(`Initialized parser for ${language}`);
30
+ }
31
+ }
32
+ catch (error) {
33
+ Logger.warn(`Failed to initialize parser for ${language}: ${error.message}`);
34
+ }
35
+ }
36
+ }
37
+ /**
38
+ * Create a parser for a specific language
39
+ */
40
+ createParser(language) {
41
+ const tsOptions = this.config.parsers?.typescript;
42
+ const pyOptions = this.config.parsers?.python;
43
+ const javaOptions = this.config.parsers?.java;
44
+ switch (language) {
45
+ case 'typescript':
46
+ return new TypeScriptParser({
47
+ tsConfigPath: tsOptions?.tsConfigPath,
48
+ strict: tsOptions?.strict,
49
+ });
50
+ case 'javascript':
51
+ return new JavaScriptParser();
52
+ case 'python':
53
+ return new PythonParser({
54
+ version: pyOptions?.version,
55
+ });
56
+ case 'java':
57
+ return new JavaParser({
58
+ sourceVersion: javaOptions?.sourceVersion,
59
+ });
60
+ case 'go':
61
+ return new GoParser();
62
+ case 'rust':
63
+ return new RustParser();
64
+ case 'csharp':
65
+ case 'kotlin':
66
+ // These will be implemented later
67
+ Logger.debug(`Parser for ${language} is not yet implemented`);
68
+ return null;
69
+ default:
70
+ return null;
71
+ }
72
+ }
73
+ /**
74
+ * Get parser for a language
75
+ */
76
+ getParser(language) {
77
+ return this.parsers.get(language);
78
+ }
79
+ /**
80
+ * Get parser that can handle a file extension
81
+ */
82
+ getParserForExtension(extension) {
83
+ for (const parser of this.parsers.values()) {
84
+ if (parser.extensions.includes(extension)) {
85
+ return parser;
86
+ }
87
+ }
88
+ return undefined;
89
+ }
90
+ /**
91
+ * Check if a language is supported
92
+ */
93
+ isSupported(language) {
94
+ return this.parsers.has(language);
95
+ }
96
+ /**
97
+ * Get all supported languages
98
+ */
99
+ getSupportedLanguages() {
100
+ return Array.from(this.parsers.keys());
101
+ }
102
+ /**
103
+ * Register a custom parser
104
+ */
105
+ registerParser(language, parser) {
106
+ this.parsers.set(language, parser);
107
+ Logger.debug(`Registered custom parser for ${language}`);
108
+ }
109
+ /**
110
+ * Dispose all parsers
111
+ */
112
+ dispose() {
113
+ for (const parser of this.parsers.values()) {
114
+ if (parser.dispose) {
115
+ parser.dispose();
116
+ }
117
+ }
118
+ this.parsers.clear();
119
+ }
120
+ }
121
+ //# sourceMappingURL=parser-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-registry.js","sourceRoot":"","sources":["../../../src/core/parsers/parser-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Parser Interface
3
+ *
4
+ * Defines the contract for language-specific parsers.
5
+ */
6
+ import { ProjectFile, ParsedFile, Dependency, ExportedSymbol } from '../../types/core.types.js';
7
+ /**
8
+ * Interface for language parsers
9
+ */
10
+ export interface IParser {
11
+ /** Language this parser handles */
12
+ readonly language: string;
13
+ /** File extensions this parser can handle */
14
+ readonly extensions: string[];
15
+ /**
16
+ * Parse a file and extract dependencies and exports
17
+ */
18
+ parse(file: ProjectFile, content: string): Promise<ParsedFile>;
19
+ /**
20
+ * Check if this parser can handle a file
21
+ */
22
+ canParse(file: ProjectFile): boolean;
23
+ /**
24
+ * Get import statements from content
25
+ */
26
+ extractImports(content: string): Promise<Dependency[]>;
27
+ /**
28
+ * Get export statements from content
29
+ */
30
+ extractExports(content: string): Promise<ExportedSymbol[]>;
31
+ /**
32
+ * Dispose of any resources
33
+ */
34
+ dispose?(): void;
35
+ }
36
+ /**
37
+ * Base parser options
38
+ */
39
+ export interface ParserOptions {
40
+ /** Enable strict mode */
41
+ strict?: boolean;
42
+ /** Additional options passed to the parser */
43
+ parserOptions?: Record<string, unknown>;
44
+ }
45
+ /**
46
+ * Parser factory function type
47
+ */
48
+ export type ParserFactory = (options?: ParserOptions) => IParser;
49
+ //# sourceMappingURL=parser.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.interface.d.ts","sourceRoot":"","sources":["../../../src/core/parsers/parser.interface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhG;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,mCAAmC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAE9B;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAE/D;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC;IAErC;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAEvD;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAE3D;;OAEG;IACH,OAAO,CAAC,IAAI,IAAI,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Parser Interface
3
+ *
4
+ * Defines the contract for language-specific parsers.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=parser.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.interface.js","sourceRoot":"","sources":["../../../src/core/parsers/parser.interface.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Python Parser
3
+ *
4
+ * Parses Python files using tree-sitter for AST analysis.
5
+ */
6
+ import { IParser, ParserOptions } from './parser.interface.js';
7
+ import { ProjectFile, ParsedFile, Dependency, ExportedSymbol } from '../../types/core.types.js';
8
+ interface PythonParserOptions extends ParserOptions {
9
+ version?: '2' | '3';
10
+ }
11
+ export declare class PythonParser implements IParser {
12
+ readonly language = "python";
13
+ readonly extensions: string[];
14
+ private options;
15
+ constructor(options?: PythonParserOptions);
16
+ canParse(file: ProjectFile): boolean;
17
+ parse(file: ProjectFile, content: string): Promise<ParsedFile>;
18
+ extractImports(content: string): Promise<Dependency[]>;
19
+ extractExports(content: string): Promise<ExportedSymbol[]>;
20
+ }
21
+ export {};
22
+ //# sourceMappingURL=python-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-parser.d.ts","sourceRoot":"","sources":["../../../src/core/parsers/python-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAkB,MAAM,2BAA2B,CAAC;AAEhH,UAAU,mBAAoB,SAAQ,aAAa;IACjD,OAAO,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;CACrB;AAED,qBAAa,YAAa,YAAW,OAAO;IAC1C,QAAQ,CAAC,QAAQ,YAAY;IAC7B,QAAQ,CAAC,UAAU,WAAW;IAE9B,OAAO,CAAC,OAAO,CAAsB;gBAEzB,OAAO,GAAE,mBAAwB;IAI7C,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO;IAI9B,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAW9D,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAsDtD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAsEjE"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Python Parser
3
+ *
4
+ * Parses Python files using tree-sitter for AST analysis.
5
+ */
6
+ export class PythonParser {
7
+ language = 'python';
8
+ extensions = ['.py'];
9
+ options;
10
+ constructor(options = {}) {
11
+ this.options = options;
12
+ }
13
+ canParse(file) {
14
+ return file.language === 'python' || this.extensions.includes(file.extension);
15
+ }
16
+ async parse(file, content) {
17
+ const dependencies = await this.extractImports(content);
18
+ const exports = await this.extractExports(content);
19
+ return {
20
+ file,
21
+ dependencies,
22
+ exports,
23
+ };
24
+ }
25
+ async extractImports(content) {
26
+ const dependencies = [];
27
+ const lines = content.split('\n');
28
+ // Regex patterns for Python imports
29
+ const importPattern = /^(?:from\s+([\w.]+)\s+)?import\s+(.+)$/;
30
+ for (let i = 0; i < lines.length; i++) {
31
+ const line = lines[i].trim();
32
+ // Skip comments and empty lines
33
+ if (line.startsWith('#') || line === '')
34
+ continue;
35
+ const match = line.match(importPattern);
36
+ if (match) {
37
+ const [, fromModule, imports] = match;
38
+ if (fromModule) {
39
+ // from X import Y, Z
40
+ const importedNames = imports.split(',').map(s => s.trim().split(/\s+as\s+/));
41
+ dependencies.push({
42
+ source: '',
43
+ target: fromModule,
44
+ type: 'python-import',
45
+ line: i + 1,
46
+ imports: importedNames.map(([name, alias]) => ({
47
+ name: name.trim(),
48
+ alias: alias?.trim(),
49
+ })),
50
+ });
51
+ }
52
+ else {
53
+ // import X, Y, Z
54
+ const modules = imports.split(',').map(s => s.trim().split(/\s+as\s+/));
55
+ for (const [moduleName, alias] of modules) {
56
+ dependencies.push({
57
+ source: '',
58
+ target: moduleName.trim(),
59
+ type: 'python-import',
60
+ line: i + 1,
61
+ imports: [{
62
+ name: moduleName.trim(),
63
+ alias: alias?.trim(),
64
+ }],
65
+ });
66
+ }
67
+ }
68
+ }
69
+ }
70
+ return dependencies;
71
+ }
72
+ async extractExports(content) {
73
+ const exports = [];
74
+ const lines = content.split('\n');
75
+ // Patterns for Python definitions
76
+ const classPattern = /^class\s+(\w+)/;
77
+ const functionPattern = /^def\s+(\w+)/;
78
+ const variablePattern = /^(\w+)\s*=/;
79
+ const allPattern = /__all__\s*=\s*\[([^\]]+)\]/;
80
+ // Check for __all__ definition
81
+ const allMatch = content.match(allPattern);
82
+ const explicitExports = allMatch
83
+ ? allMatch[1].split(',').map(s => s.trim().replace(/['"]/g, ''))
84
+ : null;
85
+ for (let i = 0; i < lines.length; i++) {
86
+ const line = lines[i];
87
+ // Skip indented lines (they're inside a class/function)
88
+ if (line.startsWith(' ') || line.startsWith('\t'))
89
+ continue;
90
+ // Class definitions
91
+ const classMatch = line.match(classPattern);
92
+ if (classMatch) {
93
+ const name = classMatch[1];
94
+ if (!name.startsWith('_') || (explicitExports && explicitExports.includes(name))) {
95
+ exports.push({
96
+ name,
97
+ type: 'class',
98
+ line: i + 1,
99
+ });
100
+ }
101
+ continue;
102
+ }
103
+ // Function definitions
104
+ const funcMatch = line.match(functionPattern);
105
+ if (funcMatch) {
106
+ const name = funcMatch[1];
107
+ if (!name.startsWith('_') || (explicitExports && explicitExports.includes(name))) {
108
+ exports.push({
109
+ name,
110
+ type: 'function',
111
+ line: i + 1,
112
+ });
113
+ }
114
+ continue;
115
+ }
116
+ // Top-level variables (constants)
117
+ const varMatch = line.match(variablePattern);
118
+ if (varMatch) {
119
+ const name = varMatch[1];
120
+ if (!name.startsWith('_') || (explicitExports && explicitExports.includes(name))) {
121
+ // Check if it's uppercase (constant) or in __all__
122
+ const isConstant = name === name.toUpperCase();
123
+ if (isConstant || (explicitExports && explicitExports.includes(name))) {
124
+ exports.push({
125
+ name,
126
+ type: isConstant ? 'constant' : 'variable',
127
+ line: i + 1,
128
+ });
129
+ }
130
+ }
131
+ }
132
+ }
133
+ return exports;
134
+ }
135
+ }
136
+ //# sourceMappingURL=python-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-parser.js","sourceRoot":"","sources":["../../../src/core/parsers/python-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,MAAM,OAAO,YAAY;IACd,QAAQ,GAAG,QAAQ,CAAC;IACpB,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC;IAEtB,OAAO,CAAsB;IAErC,YAAY,UAA+B,EAAE;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,QAAQ,CAAC,IAAiB;QACxB,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChF,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAiB,EAAE,OAAe;QAC5C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAEnD,OAAO;YACL,IAAI;YACJ,YAAY;YACZ,OAAO;SACR,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAe;QAClC,MAAM,YAAY,GAAiB,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,oCAAoC;QACpC,MAAM,aAAa,GAAG,wCAAwC,CAAC;QAE/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAE7B,gCAAgC;YAChC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,EAAE;gBAAE,SAAS;YAElD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACxC,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;gBAEtC,IAAI,UAAU,EAAE,CAAC;oBACf,qBAAqB;oBACrB,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;oBAE9E,YAAY,CAAC,IAAI,CAAC;wBAChB,MAAM,EAAE,EAAE;wBACV,MAAM,EAAE,UAAU;wBAClB,IAAI,EAAE,eAAe;wBACrB,IAAI,EAAE,CAAC,GAAG,CAAC;wBACX,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;4BAC7C,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;4BACjB,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;yBACrB,CAAC,CAAC;qBACJ,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,iBAAiB;oBACjB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;oBAExE,KAAK,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;wBAC1C,YAAY,CAAC,IAAI,CAAC;4BAChB,MAAM,EAAE,EAAE;4BACV,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE;4BACzB,IAAI,EAAE,eAAe;4BACrB,IAAI,EAAE,CAAC,GAAG,CAAC;4BACX,OAAO,EAAE,CAAC;oCACR,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE;oCACvB,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;iCACrB,CAAC;yBACH,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAe;QAClC,MAAM,OAAO,GAAqB,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,kCAAkC;QAClC,MAAM,YAAY,GAAG,gBAAgB,CAAC;QACtC,MAAM,eAAe,GAAG,cAAc,CAAC;QACvC,MAAM,eAAe,GAAG,YAAY,CAAC;QACrC,MAAM,UAAU,GAAG,4BAA4B,CAAC;QAEhD,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,eAAe,GAAG,QAAQ;YAC9B,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAChE,CAAC,CAAC,IAAI,CAAC;QAET,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAEtB,wDAAwD;YACxD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,SAAS;YAE5D,oBAAoB;YACpB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC5C,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;oBACjF,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI;wBACJ,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,CAAC,GAAG,CAAC;qBACZ,CAAC,CAAC;gBACL,CAAC;gBACD,SAAS;YACX,CAAC;YAED,uBAAuB;YACvB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC9C,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;oBACjF,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI;wBACJ,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,CAAC,GAAG,CAAC;qBACZ,CAAC,CAAC;gBACL,CAAC;gBACD,SAAS;YACX,CAAC;YAED,kCAAkC;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC7C,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;oBACjF,mDAAmD;oBACnD,MAAM,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;oBAC/C,IAAI,UAAU,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;wBACtE,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI;4BACJ,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;4BAC1C,IAAI,EAAE,CAAC,GAAG,CAAC;yBACZ,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Rust Parser
3
+ *
4
+ * Parses Rust files for import/export analysis.
5
+ */
6
+ import { IParser } from './parser.interface.js';
7
+ import { ProjectFile, ParsedFile, Dependency, ExportedSymbol } from '../../types/core.types.js';
8
+ export declare class RustParser implements IParser {
9
+ readonly language = "rust";
10
+ readonly extensions: string[];
11
+ canParse(file: ProjectFile): boolean;
12
+ parse(file: ProjectFile, content: string): Promise<ParsedFile>;
13
+ extractImports(content: string): Promise<Dependency[]>;
14
+ extractExports(content: string): Promise<ExportedSymbol[]>;
15
+ }
16
+ //# sourceMappingURL=rust-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust-parser.d.ts","sourceRoot":"","sources":["../../../src/core/parsers/rust-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAiB,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhG,qBAAa,UAAW,YAAW,OAAO;IACxC,QAAQ,CAAC,QAAQ,UAAU;IAC3B,QAAQ,CAAC,UAAU,WAAW;IAE9B,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO;IAI9B,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAW9D,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAwEtD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAmGjE"}