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,176 @@
1
+ /**
2
+ * Rust Parser
3
+ *
4
+ * Parses Rust files for import/export analysis.
5
+ */
6
+ export class RustParser {
7
+ language = 'rust';
8
+ extensions = ['.rs'];
9
+ canParse(file) {
10
+ return file.language === 'rust' || this.extensions.includes(file.extension);
11
+ }
12
+ async parse(file, content) {
13
+ const dependencies = await this.extractImports(content);
14
+ const exports = await this.extractExports(content);
15
+ return {
16
+ file,
17
+ dependencies,
18
+ exports,
19
+ };
20
+ }
21
+ async extractImports(content) {
22
+ const dependencies = [];
23
+ const lines = content.split('\n');
24
+ // Rust use statements: use std::collections::HashMap;
25
+ const usePattern = /^use\s+([\w:]+)(?:::\{([^}]+)\})?(?:\s+as\s+(\w+))?;/;
26
+ // Extern crate (older style)
27
+ const externPattern = /^extern\s+crate\s+(\w+)(?:\s+as\s+(\w+))?;/;
28
+ for (let i = 0; i < lines.length; i++) {
29
+ const line = lines[i].trim();
30
+ // Skip comments
31
+ if (line.startsWith('//') || line.startsWith('/*'))
32
+ continue;
33
+ // Use statements
34
+ const useMatch = line.match(usePattern);
35
+ if (useMatch) {
36
+ const [, path, names, alias] = useMatch;
37
+ if (names) {
38
+ // use path::{A, B, C}
39
+ const importedNames = names.split(',').map(n => n.trim());
40
+ dependencies.push({
41
+ source: '',
42
+ target: path,
43
+ type: 'rust-use',
44
+ line: i + 1,
45
+ imports: importedNames.map(name => ({
46
+ name: name.split(' as ')[0].trim(),
47
+ alias: name.includes(' as ') ? name.split(' as ')[1].trim() : undefined,
48
+ })),
49
+ });
50
+ }
51
+ else {
52
+ // use path::Item or use path::*
53
+ const name = path.split('::').pop() || path;
54
+ dependencies.push({
55
+ source: '',
56
+ target: path.replace(/::\*$/, ''),
57
+ type: 'rust-use',
58
+ line: i + 1,
59
+ imports: [{
60
+ name: name === '*' ? '*' : name,
61
+ alias,
62
+ isNamespace: name === '*',
63
+ }],
64
+ });
65
+ }
66
+ continue;
67
+ }
68
+ // Extern crate
69
+ const externMatch = line.match(externPattern);
70
+ if (externMatch) {
71
+ const [, crateName, alias] = externMatch;
72
+ dependencies.push({
73
+ source: '',
74
+ target: crateName,
75
+ type: 'rust-use',
76
+ line: i + 1,
77
+ imports: [{
78
+ name: crateName,
79
+ alias,
80
+ }],
81
+ });
82
+ }
83
+ }
84
+ return dependencies;
85
+ }
86
+ async extractExports(content) {
87
+ const exports = [];
88
+ const lines = content.split('\n');
89
+ // Rust public items
90
+ const pubFnPattern = /^pub(?:\([^)]+\))?\s+(?:async\s+)?fn\s+(\w+)/;
91
+ const pubStructPattern = /^pub(?:\([^)]+\))?\s+struct\s+(\w+)/;
92
+ const pubEnumPattern = /^pub(?:\([^)]+\))?\s+enum\s+(\w+)/;
93
+ const pubTraitPattern = /^pub(?:\([^)]+\))?\s+trait\s+(\w+)/;
94
+ const pubTypePattern = /^pub(?:\([^)]+\))?\s+type\s+(\w+)/;
95
+ const pubConstPattern = /^pub(?:\([^)]+\))?\s+(?:const|static)\s+(\w+)/;
96
+ const pubModPattern = /^pub(?:\([^)]+\))?\s+mod\s+(\w+)/;
97
+ for (let i = 0; i < lines.length; i++) {
98
+ const line = lines[i].trim();
99
+ // Skip comments
100
+ if (line.startsWith('//') || line.startsWith('/*'))
101
+ continue;
102
+ // Public functions
103
+ const fnMatch = line.match(pubFnPattern);
104
+ if (fnMatch) {
105
+ exports.push({
106
+ name: fnMatch[1],
107
+ type: 'function',
108
+ line: i + 1,
109
+ });
110
+ continue;
111
+ }
112
+ // Public structs
113
+ const structMatch = line.match(pubStructPattern);
114
+ if (structMatch) {
115
+ exports.push({
116
+ name: structMatch[1],
117
+ type: 'class',
118
+ line: i + 1,
119
+ });
120
+ continue;
121
+ }
122
+ // Public enums
123
+ const enumMatch = line.match(pubEnumPattern);
124
+ if (enumMatch) {
125
+ exports.push({
126
+ name: enumMatch[1],
127
+ type: 'enum',
128
+ line: i + 1,
129
+ });
130
+ continue;
131
+ }
132
+ // Public traits
133
+ const traitMatch = line.match(pubTraitPattern);
134
+ if (traitMatch) {
135
+ exports.push({
136
+ name: traitMatch[1],
137
+ type: 'interface',
138
+ line: i + 1,
139
+ });
140
+ continue;
141
+ }
142
+ // Public type aliases
143
+ const typeMatch = line.match(pubTypePattern);
144
+ if (typeMatch) {
145
+ exports.push({
146
+ name: typeMatch[1],
147
+ type: 'type',
148
+ line: i + 1,
149
+ });
150
+ continue;
151
+ }
152
+ // Public constants
153
+ const constMatch = line.match(pubConstPattern);
154
+ if (constMatch) {
155
+ exports.push({
156
+ name: constMatch[1],
157
+ type: 'constant',
158
+ line: i + 1,
159
+ });
160
+ continue;
161
+ }
162
+ // Public modules
163
+ const modMatch = line.match(pubModPattern);
164
+ if (modMatch) {
165
+ exports.push({
166
+ name: modMatch[1],
167
+ type: 'module',
168
+ line: i + 1,
169
+ });
170
+ continue;
171
+ }
172
+ }
173
+ return exports;
174
+ }
175
+ }
176
+ //# sourceMappingURL=rust-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust-parser.js","sourceRoot":"","sources":["../../../src/core/parsers/rust-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * TypeScript Parser
3
+ *
4
+ * Parses TypeScript files using ts-morph for deep analysis.
5
+ */
6
+ import { Project, SourceFile } from 'ts-morph';
7
+ import { IParser, ParserOptions } from './parser.interface.js';
8
+ import { ProjectFile, ParsedFile, Dependency, ExportedSymbol } from '../../types/core.types.js';
9
+ interface TypeScriptParserOptions extends ParserOptions {
10
+ tsConfigPath?: string;
11
+ }
12
+ export declare class TypeScriptParser implements IParser {
13
+ readonly language: string;
14
+ readonly extensions: string[];
15
+ protected project: Project;
16
+ constructor(options?: TypeScriptParserOptions);
17
+ canParse(file: ProjectFile): boolean;
18
+ parse(file: ProjectFile, content: string): Promise<ParsedFile>;
19
+ extractImports(content: string, sourceFile?: SourceFile): Promise<Dependency[]>;
20
+ extractExports(content: string, sourceFile?: SourceFile): Promise<ExportedSymbol[]>;
21
+ private parseImportDeclaration;
22
+ private findDynamicImports;
23
+ private findRequireStatements;
24
+ private getExportedNames;
25
+ private parseExportedDeclaration;
26
+ dispose(): void;
27
+ }
28
+ export {};
29
+ //# sourceMappingURL=typescript-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-parser.d.ts","sourceRoot":"","sources":["../../../src/core/parsers/typescript-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,UAAU,EAA8C,MAAM,UAAU,CAAC;AAC3F,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAA8C,MAAM,2BAA2B,CAAC;AAE5I,UAAU,uBAAwB,SAAQ,aAAa;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,gBAAiB,YAAW,OAAO;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAgB;IACzC,QAAQ,CAAC,UAAU,WAAmC;IAEtD,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;gBAEf,OAAO,GAAE,uBAA4B;IAcjD,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO;IAI9B,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAqB9D,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IA0C/E,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAiCzF,OAAO,CAAC,sBAAsB;IAmD9B,OAAO,CAAC,kBAAkB;IA2B1B,OAAO,CAAC,qBAAqB;IA0B7B,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,wBAAwB;IAsChC,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,251 @@
1
+ /**
2
+ * TypeScript Parser
3
+ *
4
+ * Parses TypeScript files using ts-morph for deep analysis.
5
+ */
6
+ import { Project, Node } from 'ts-morph';
7
+ export class TypeScriptParser {
8
+ language = 'typescript';
9
+ extensions = ['.ts', '.tsx', '.mts', '.cts'];
10
+ project;
11
+ constructor(options = {}) {
12
+ this.project = new Project({
13
+ tsConfigFilePath: options.tsConfigPath,
14
+ skipAddingFilesFromTsConfig: true,
15
+ skipFileDependencyResolution: true,
16
+ compilerOptions: {
17
+ allowJs: true,
18
+ checkJs: false,
19
+ noEmit: true,
20
+ skipLibCheck: true,
21
+ },
22
+ });
23
+ }
24
+ canParse(file) {
25
+ return file.language === 'typescript' || this.extensions.includes(file.extension);
26
+ }
27
+ async parse(file, content) {
28
+ // Create or get source file
29
+ let sourceFile = this.project.getSourceFile(file.path);
30
+ if (sourceFile) {
31
+ sourceFile.replaceWithText(content);
32
+ }
33
+ else {
34
+ sourceFile = this.project.createSourceFile(file.path, content, { overwrite: true });
35
+ }
36
+ const dependencies = await this.extractImports(content, sourceFile);
37
+ const exports = await this.extractExports(content, sourceFile);
38
+ return {
39
+ file,
40
+ dependencies,
41
+ exports,
42
+ ast: sourceFile,
43
+ };
44
+ }
45
+ async extractImports(content, sourceFile) {
46
+ const dependencies = [];
47
+ if (!sourceFile) {
48
+ sourceFile = this.project.createSourceFile('__temp__.ts', content, { overwrite: true });
49
+ }
50
+ // Regular imports
51
+ const importDeclarations = sourceFile.getImportDeclarations();
52
+ for (const importDecl of importDeclarations) {
53
+ const dependency = this.parseImportDeclaration(importDecl);
54
+ if (dependency) {
55
+ dependencies.push(dependency);
56
+ }
57
+ }
58
+ // Dynamic imports
59
+ const dynamicImports = this.findDynamicImports(sourceFile);
60
+ dependencies.push(...dynamicImports);
61
+ // Require statements
62
+ const requires = this.findRequireStatements(sourceFile);
63
+ dependencies.push(...requires);
64
+ // Export from statements
65
+ const exportFroms = sourceFile.getExportDeclarations();
66
+ for (const exportDecl of exportFroms) {
67
+ const moduleSpecifier = exportDecl.getModuleSpecifier();
68
+ if (moduleSpecifier) {
69
+ dependencies.push({
70
+ source: sourceFile.getFilePath(),
71
+ target: moduleSpecifier.getLiteralText(),
72
+ type: 're-export',
73
+ line: exportDecl.getStartLineNumber(),
74
+ imports: this.getExportedNames(exportDecl),
75
+ });
76
+ }
77
+ }
78
+ return dependencies;
79
+ }
80
+ async extractExports(content, sourceFile) {
81
+ const exports = [];
82
+ if (!sourceFile) {
83
+ sourceFile = this.project.createSourceFile('__temp__.ts', content, { overwrite: true });
84
+ }
85
+ // Get all exported declarations
86
+ const exportedDeclarations = sourceFile.getExportedDeclarations();
87
+ for (const [name, declarations] of exportedDeclarations) {
88
+ for (const declaration of declarations) {
89
+ const exportedSymbol = this.parseExportedDeclaration(name, declaration);
90
+ if (exportedSymbol) {
91
+ exports.push(exportedSymbol);
92
+ }
93
+ }
94
+ }
95
+ // Check for default export
96
+ const defaultExport = sourceFile.getDefaultExportSymbol();
97
+ if (defaultExport) {
98
+ exports.push({
99
+ name: 'default',
100
+ type: 'variable',
101
+ isDefault: true,
102
+ line: defaultExport.getDeclarations()[0]?.getStartLineNumber(),
103
+ });
104
+ }
105
+ return exports;
106
+ }
107
+ parseImportDeclaration(importDecl) {
108
+ const moduleSpecifier = importDecl.getModuleSpecifierValue();
109
+ const importedSymbols = [];
110
+ // Default import
111
+ const defaultImport = importDecl.getDefaultImport();
112
+ if (defaultImport) {
113
+ importedSymbols.push({
114
+ name: 'default',
115
+ alias: defaultImport.getText(),
116
+ isDefault: true,
117
+ });
118
+ }
119
+ // Namespace import
120
+ const namespaceImport = importDecl.getNamespaceImport();
121
+ if (namespaceImport) {
122
+ importedSymbols.push({
123
+ name: '*',
124
+ alias: namespaceImport.getText(),
125
+ isNamespace: true,
126
+ });
127
+ }
128
+ // Named imports
129
+ const namedImports = importDecl.getNamedImports();
130
+ for (const namedImport of namedImports) {
131
+ importedSymbols.push({
132
+ name: namedImport.getName(),
133
+ alias: namedImport.getAliasNode()?.getText(),
134
+ });
135
+ }
136
+ // Determine import type
137
+ let importType = 'import';
138
+ if (importDecl.isTypeOnly()) {
139
+ importType = 'type-import';
140
+ }
141
+ else if (importedSymbols.length === 0) {
142
+ importType = 'side-effect';
143
+ }
144
+ return {
145
+ source: importDecl.getSourceFile().getFilePath(),
146
+ target: moduleSpecifier,
147
+ type: importType,
148
+ line: importDecl.getStartLineNumber(),
149
+ imports: importedSymbols,
150
+ isTypeOnly: importDecl.isTypeOnly(),
151
+ };
152
+ }
153
+ findDynamicImports(sourceFile) {
154
+ const dependencies = [];
155
+ sourceFile.forEachDescendant((node) => {
156
+ if (Node.isCallExpression(node)) {
157
+ const expression = node.getExpression();
158
+ if (expression.getText() === 'import') {
159
+ const args = node.getArguments();
160
+ if (args.length > 0) {
161
+ const arg = args[0];
162
+ if (Node.isStringLiteral(arg)) {
163
+ dependencies.push({
164
+ source: sourceFile.getFilePath(),
165
+ target: arg.getLiteralText(),
166
+ type: 'dynamic-import',
167
+ line: node.getStartLineNumber(),
168
+ isDynamic: true,
169
+ });
170
+ }
171
+ }
172
+ }
173
+ }
174
+ });
175
+ return dependencies;
176
+ }
177
+ findRequireStatements(sourceFile) {
178
+ const dependencies = [];
179
+ sourceFile.forEachDescendant((node) => {
180
+ if (Node.isCallExpression(node)) {
181
+ const expression = node.getExpression();
182
+ if (Node.isIdentifier(expression) && expression.getText() === 'require') {
183
+ const args = node.getArguments();
184
+ if (args.length > 0) {
185
+ const arg = args[0];
186
+ if (Node.isStringLiteral(arg)) {
187
+ dependencies.push({
188
+ source: sourceFile.getFilePath(),
189
+ target: arg.getLiteralText(),
190
+ type: 'require',
191
+ line: node.getStartLineNumber(),
192
+ });
193
+ }
194
+ }
195
+ }
196
+ }
197
+ });
198
+ return dependencies;
199
+ }
200
+ getExportedNames(exportDecl) {
201
+ const namedExports = exportDecl.getNamedExports();
202
+ return namedExports.map((exp) => ({
203
+ name: exp.getName(),
204
+ alias: exp.getAliasNode()?.getText(),
205
+ }));
206
+ }
207
+ parseExportedDeclaration(name, declaration) {
208
+ let symbolType = 'variable';
209
+ let typeAnnotation;
210
+ if (Node.isFunctionDeclaration(declaration) || Node.isFunctionExpression(declaration)) {
211
+ symbolType = 'function';
212
+ }
213
+ else if (Node.isClassDeclaration(declaration) || Node.isClassExpression(declaration)) {
214
+ symbolType = 'class';
215
+ }
216
+ else if (Node.isInterfaceDeclaration(declaration)) {
217
+ symbolType = 'interface';
218
+ }
219
+ else if (Node.isTypeAliasDeclaration(declaration)) {
220
+ symbolType = 'type';
221
+ }
222
+ else if (Node.isEnumDeclaration(declaration)) {
223
+ symbolType = 'enum';
224
+ }
225
+ else if (Node.isVariableDeclaration(declaration)) {
226
+ const initializer = declaration.getInitializer();
227
+ if (initializer) {
228
+ if (Node.isFunctionExpression(initializer) || Node.isArrowFunction(initializer)) {
229
+ symbolType = 'function';
230
+ }
231
+ }
232
+ const typeNode = declaration.getTypeNode();
233
+ if (typeNode) {
234
+ typeAnnotation = typeNode.getText();
235
+ }
236
+ }
237
+ else if (Node.isModuleDeclaration(declaration)) {
238
+ symbolType = 'namespace';
239
+ }
240
+ return {
241
+ name,
242
+ type: symbolType,
243
+ line: declaration.getStartLineNumber(),
244
+ typeAnnotation,
245
+ };
246
+ }
247
+ dispose() {
248
+ // Clean up project resources
249
+ }
250
+ }
251
+ //# sourceMappingURL=typescript-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-parser.js","sourceRoot":"","sources":["../../../src/core/parsers/typescript-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Report Generator
3
+ *
4
+ * Generates comprehensive HTML/PDF reports of architecture analysis.
5
+ */
6
+ import { CamoufConfig } from '../../types/config.types.js';
7
+ import { Violation } from '../../types/core.types.js';
8
+ import { DependencyGraph } from '../scanner/project-scanner.js';
9
+ interface ReportOptions {
10
+ graph: DependencyGraph;
11
+ violations: Violation[];
12
+ format: 'html' | 'pdf' | 'json' | 'markdown';
13
+ outputPath: string;
14
+ includeCode?: boolean;
15
+ includeGraphs?: boolean;
16
+ template?: string;
17
+ }
18
+ export declare class ReportGenerator {
19
+ private config;
20
+ constructor(config: CamoufConfig);
21
+ generate(options: ReportOptions): Promise<void>;
22
+ private generateHtmlReport;
23
+ private generateJsonReport;
24
+ private generateMarkdownReport;
25
+ private calculateSummary;
26
+ private groupViolationsByRule;
27
+ private groupViolationsByFile;
28
+ private escapeHtml;
29
+ }
30
+ export {};
31
+ //# sourceMappingURL=report-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-generator.d.ts","sourceRoot":"","sources":["../../../src/core/reporter/report-generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGhE,UAAU,aAAa;IACrB,KAAK,EAAE,eAAe,CAAC;IACvB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY;IAI1B,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YAsBvC,kBAAkB;YAuRlB,kBAAkB;YAsClB,sBAAsB;IA4CpC,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,UAAU;CAQnB"}