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,306 @@
1
+ /**
2
+ * Configuration Manager
3
+ *
4
+ * Handles loading, validating, and managing Camouf configuration.
5
+ * Supports multiple configuration formats and sources.
6
+ */
7
+ import { cosmiconfig } from 'cosmiconfig';
8
+ import _Ajv from 'ajv';
9
+ import * as fs from 'fs/promises';
10
+ import * as path from 'path';
11
+ import { defaultConfig } from '../../types/config.types.js';
12
+ import { Logger } from '../logger.js';
13
+ import { configSchema } from './config-schema.js';
14
+ // ESM compatibility for Ajv
15
+ const Ajv = _Ajv;
16
+ export class ConfigurationManager {
17
+ config = null;
18
+ configPath = null;
19
+ explorer = cosmiconfig('camouf', {
20
+ searchPlaces: [
21
+ 'camouf.config.json',
22
+ 'camouf.config.js',
23
+ 'camouf.config.ts',
24
+ 'camouf.config.yaml',
25
+ 'camouf.config.yml',
26
+ '.camoufrc',
27
+ '.camoufrc.json',
28
+ '.camoufrc.yaml',
29
+ '.camoufrc.yml',
30
+ 'package.json',
31
+ ],
32
+ packageProp: 'camouf',
33
+ });
34
+ ajv;
35
+ validateSchema;
36
+ constructor() {
37
+ this.ajv = new Ajv({ allErrors: true, verbose: true });
38
+ this.validateSchema = this.ajv.compile(configSchema);
39
+ }
40
+ /**
41
+ * Load configuration from file or search for it
42
+ */
43
+ async loadConfig(configPath) {
44
+ try {
45
+ let result;
46
+ if (configPath) {
47
+ // Load from specific path
48
+ result = await this.explorer.load(configPath);
49
+ }
50
+ else {
51
+ // Search for configuration
52
+ result = await this.explorer.search();
53
+ }
54
+ if (!result || result.isEmpty) {
55
+ Logger.debug('No configuration found');
56
+ return null;
57
+ }
58
+ this.configPath = result.filepath;
59
+ const rawConfig = result.config;
60
+ // Merge with defaults
61
+ const mergedConfig = this.mergeWithDefaults(rawConfig);
62
+ // Validate configuration
63
+ if (!this.validate(mergedConfig)) {
64
+ throw new Error('Invalid configuration');
65
+ }
66
+ // Resolve paths
67
+ this.config = this.resolvePaths(mergedConfig, path.dirname(result.filepath));
68
+ Logger.debug(`Loaded configuration from ${result.filepath}`);
69
+ return this.config;
70
+ }
71
+ catch (error) {
72
+ Logger.error(`Failed to load configuration: ${error.message}`);
73
+ throw error;
74
+ }
75
+ }
76
+ /**
77
+ * Check if configuration exists in current directory
78
+ */
79
+ configExists() {
80
+ const configFiles = [
81
+ 'camouf.config.json',
82
+ 'camouf.config.js',
83
+ 'camouf.config.ts',
84
+ '.camoufrc',
85
+ '.camoufrc.json',
86
+ ];
87
+ for (const file of configFiles) {
88
+ try {
89
+ const filePath = path.join(process.cwd(), file);
90
+ fs.access(filePath);
91
+ return true;
92
+ }
93
+ catch {
94
+ // File doesn't exist, continue
95
+ }
96
+ }
97
+ return false;
98
+ }
99
+ /**
100
+ * Generate default configuration based on project detection
101
+ */
102
+ generateDefaultConfig(detection) {
103
+ const layers = this.generateLayers(detection);
104
+ return {
105
+ name: path.basename(process.cwd()),
106
+ root: '.',
107
+ languages: detection.languages,
108
+ layers,
109
+ directories: {
110
+ client: detection.directories.client,
111
+ server: detection.directories.server,
112
+ shared: detection.directories.shared,
113
+ },
114
+ rules: {
115
+ builtin: {
116
+ 'layer-dependencies': 'error',
117
+ 'circular-dependencies': 'warn',
118
+ 'performance-antipatterns': 'warn',
119
+ 'type-safety': 'warn',
120
+ },
121
+ },
122
+ patterns: {
123
+ include: this.getIncludePatterns(detection.languages),
124
+ exclude: defaultConfig.patterns.exclude,
125
+ },
126
+ };
127
+ }
128
+ /**
129
+ * Build configuration from user answers
130
+ */
131
+ buildConfigFromAnswers(answers, detection) {
132
+ const languages = answers.languages || detection.languages;
133
+ const clientDirs = answers.clientDir.split(',').map(d => d.trim()).filter(Boolean);
134
+ const serverDirs = answers.serverDir.split(',').map(d => d.trim()).filter(Boolean);
135
+ const sharedDirs = answers.sharedDir.split(',').map(d => d.trim()).filter(Boolean);
136
+ const directories = {
137
+ client: clientDirs,
138
+ server: serverDirs,
139
+ shared: sharedDirs,
140
+ };
141
+ const layers = this.generateLayers({ languages, directories, framework: detection.framework });
142
+ const builtinRules = {};
143
+ for (const rule of answers.rules) {
144
+ builtinRules[rule] = 'error';
145
+ }
146
+ return {
147
+ name: path.basename(process.cwd()),
148
+ root: '.',
149
+ languages,
150
+ layers,
151
+ directories,
152
+ rules: {
153
+ builtin: builtinRules,
154
+ },
155
+ patterns: {
156
+ include: this.getIncludePatterns(languages),
157
+ exclude: defaultConfig.patterns.exclude,
158
+ },
159
+ };
160
+ }
161
+ /**
162
+ * Write configuration to file
163
+ */
164
+ async writeConfig(config, filePath) {
165
+ const targetPath = filePath || path.join(process.cwd(), 'camouf.config.json');
166
+ const content = JSON.stringify(config, null, 2);
167
+ await fs.writeFile(targetPath, content, 'utf-8');
168
+ this.config = config;
169
+ this.configPath = targetPath;
170
+ }
171
+ /**
172
+ * Get current configuration
173
+ */
174
+ getConfig() {
175
+ return this.config;
176
+ }
177
+ /**
178
+ * Get configuration file path
179
+ */
180
+ getConfigPath() {
181
+ return this.configPath;
182
+ }
183
+ /**
184
+ * Validate configuration against schema
185
+ */
186
+ validate(config) {
187
+ const valid = this.validateSchema(config);
188
+ if (!valid && this.validateSchema.errors) {
189
+ for (const error of this.validateSchema.errors) {
190
+ Logger.error(`Config validation error: ${error.instancePath} ${error.message}`);
191
+ }
192
+ }
193
+ return valid;
194
+ }
195
+ /**
196
+ * Merge configuration with defaults
197
+ */
198
+ mergeWithDefaults(config) {
199
+ return {
200
+ ...defaultConfig,
201
+ ...config,
202
+ patterns: {
203
+ ...defaultConfig.patterns,
204
+ ...config.patterns,
205
+ },
206
+ rules: {
207
+ ...defaultConfig.rules,
208
+ ...config.rules,
209
+ builtin: {
210
+ ...defaultConfig.rules?.builtin,
211
+ ...config.rules?.builtin,
212
+ },
213
+ },
214
+ advanced: {
215
+ ...defaultConfig.advanced,
216
+ ...config.advanced,
217
+ },
218
+ };
219
+ }
220
+ /**
221
+ * Resolve relative paths in configuration
222
+ */
223
+ resolvePaths(config, basePath) {
224
+ const resolve = (p) => path.isAbsolute(p) ? p : path.resolve(basePath, p);
225
+ return {
226
+ ...config,
227
+ root: resolve(config.root),
228
+ directories: {
229
+ client: config.directories.client.map(resolve),
230
+ server: config.directories.server.map(resolve),
231
+ shared: config.directories.shared.map(resolve),
232
+ tests: config.directories.tests?.map(resolve),
233
+ },
234
+ layers: config.layers.map(layer => ({
235
+ ...layer,
236
+ directories: layer.directories.map(resolve),
237
+ })),
238
+ };
239
+ }
240
+ /**
241
+ * Generate layer configurations
242
+ */
243
+ generateLayers(detection) {
244
+ const layers = [];
245
+ if (detection.directories.client.length > 0) {
246
+ layers.push({
247
+ name: 'presentation',
248
+ type: 'presentation',
249
+ directories: detection.directories.client,
250
+ allowedDependencies: ['application', 'shared'],
251
+ });
252
+ }
253
+ if (detection.directories.server.length > 0) {
254
+ layers.push({
255
+ name: 'application',
256
+ type: 'application',
257
+ directories: detection.directories.server,
258
+ allowedDependencies: ['domain', 'infrastructure', 'shared'],
259
+ });
260
+ layers.push({
261
+ name: 'domain',
262
+ type: 'domain',
263
+ directories: detection.directories.server.map(d => `${d}/domain`),
264
+ allowedDependencies: ['shared'],
265
+ });
266
+ layers.push({
267
+ name: 'infrastructure',
268
+ type: 'infrastructure',
269
+ directories: detection.directories.server.map(d => `${d}/infrastructure`),
270
+ allowedDependencies: ['domain', 'application', 'shared'],
271
+ });
272
+ }
273
+ if (detection.directories.shared.length > 0) {
274
+ layers.push({
275
+ name: 'shared',
276
+ type: 'shared',
277
+ directories: detection.directories.shared,
278
+ allowedDependencies: [],
279
+ });
280
+ }
281
+ return layers;
282
+ }
283
+ /**
284
+ * Get file include patterns based on languages
285
+ */
286
+ getIncludePatterns(languages) {
287
+ const patterns = [];
288
+ const languagePatterns = {
289
+ typescript: ['**/*.ts', '**/*.tsx', '**/*.mts', '**/*.cts'],
290
+ javascript: ['**/*.js', '**/*.jsx', '**/*.mjs', '**/*.cjs'],
291
+ python: ['**/*.py'],
292
+ java: ['**/*.java'],
293
+ go: ['**/*.go'],
294
+ rust: ['**/*.rs'],
295
+ csharp: ['**/*.cs'],
296
+ kotlin: ['**/*.kt', '**/*.kts'],
297
+ };
298
+ for (const lang of languages) {
299
+ if (languagePatterns[lang]) {
300
+ patterns.push(...languagePatterns[lang]);
301
+ }
302
+ }
303
+ return patterns;
304
+ }
305
+ }
306
+ //# sourceMappingURL=configuration-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration-manager.js","sourceRoot":"","sources":["../../../src/core/config/configuration-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Logger - Centralized logging utility for Camouf
3
+ */
4
+ export declare enum LogLevel {
5
+ DEBUG = 0,
6
+ INFO = 1,
7
+ WARN = 2,
8
+ ERROR = 3,
9
+ SILENT = 4
10
+ }
11
+ declare class LoggerInstance {
12
+ private level;
13
+ private useColors;
14
+ setLevel(level: LogLevel): void;
15
+ setColors(enabled: boolean): void;
16
+ debug(message: string, ...args: unknown[]): void;
17
+ info(message: string, ...args: unknown[]): void;
18
+ success(message: string, ...args: unknown[]): void;
19
+ warn(message: string, ...args: unknown[]): void;
20
+ error(message: string, ...args: unknown[]): void;
21
+ violation(severity: 'error' | 'warning' | 'info', message: string, file?: string, line?: number): void;
22
+ table(data: Record<string, unknown>[]): void;
23
+ newLine(): void;
24
+ }
25
+ export declare const Logger: LoggerInstance;
26
+ export {};
27
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;IACT,MAAM,IAAI;CACX;AAED,cAAM,cAAc;IAClB,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,SAAS,CAAiB;IAElC,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIjC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAOhD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM/C,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAOlD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAQ/C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAQhD,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAyBtG,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI;IAM5C,OAAO,IAAI,IAAI;CAKhB;AAED,eAAO,MAAM,MAAM,gBAAuB,CAAC"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Logger - Centralized logging utility for Camouf
3
+ */
4
+ import chalk from 'chalk';
5
+ export var LogLevel;
6
+ (function (LogLevel) {
7
+ LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
8
+ LogLevel[LogLevel["INFO"] = 1] = "INFO";
9
+ LogLevel[LogLevel["WARN"] = 2] = "WARN";
10
+ LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
11
+ LogLevel[LogLevel["SILENT"] = 4] = "SILENT";
12
+ })(LogLevel || (LogLevel = {}));
13
+ class LoggerInstance {
14
+ level = LogLevel.INFO;
15
+ useColors = true;
16
+ setLevel(level) {
17
+ this.level = level;
18
+ }
19
+ setColors(enabled) {
20
+ this.useColors = enabled;
21
+ }
22
+ debug(message, ...args) {
23
+ if (this.level <= LogLevel.DEBUG) {
24
+ const prefix = this.useColors ? chalk.gray('[DEBUG]') : '[DEBUG]';
25
+ console.log(prefix, message, ...args);
26
+ }
27
+ }
28
+ info(message, ...args) {
29
+ if (this.level <= LogLevel.INFO) {
30
+ console.log(message, ...args);
31
+ }
32
+ }
33
+ success(message, ...args) {
34
+ if (this.level <= LogLevel.INFO) {
35
+ const formatted = this.useColors ? chalk.green(message) : message;
36
+ console.log(formatted, ...args);
37
+ }
38
+ }
39
+ warn(message, ...args) {
40
+ if (this.level <= LogLevel.WARN) {
41
+ const prefix = this.useColors ? chalk.yellow('⚠') : '[WARN]';
42
+ const formatted = this.useColors ? chalk.yellow(message) : message;
43
+ console.warn(prefix, formatted, ...args);
44
+ }
45
+ }
46
+ error(message, ...args) {
47
+ if (this.level <= LogLevel.ERROR) {
48
+ const prefix = this.useColors ? chalk.red('✖') : '[ERROR]';
49
+ const formatted = this.useColors ? chalk.red(message) : message;
50
+ console.error(prefix, formatted, ...args);
51
+ }
52
+ }
53
+ violation(severity, message, file, line) {
54
+ if (this.level <= LogLevel.INFO) {
55
+ const colors = {
56
+ error: chalk.red,
57
+ warning: chalk.yellow,
58
+ info: chalk.blue,
59
+ };
60
+ const symbols = {
61
+ error: '✖',
62
+ warning: '⚠',
63
+ info: 'ℹ',
64
+ };
65
+ const color = this.useColors ? colors[severity] : (s) => s;
66
+ const symbol = this.useColors ? color(symbols[severity]) : `[${severity.toUpperCase()}]`;
67
+ let location = '';
68
+ if (file) {
69
+ location = this.useColors ? chalk.gray(` (${file}${line ? `:${line}` : ''})`) : ` (${file}${line ? `:${line}` : ''})`;
70
+ }
71
+ console.log(` ${symbol} ${message}${location}`);
72
+ }
73
+ }
74
+ table(data) {
75
+ if (this.level <= LogLevel.INFO) {
76
+ console.table(data);
77
+ }
78
+ }
79
+ newLine() {
80
+ if (this.level <= LogLevel.INFO) {
81
+ console.log();
82
+ }
83
+ }
84
+ }
85
+ export const Logger = new LoggerInstance();
86
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Go Parser
3
+ *
4
+ * Parses Go 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 GoParser implements IParser {
9
+ readonly language = "go";
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=go-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go-parser.d.ts","sourceRoot":"","sources":["../../../src/core/parsers/go-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,QAAS,YAAW,OAAO;IACtC,QAAQ,CAAC,QAAQ,QAAQ;IACzB,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;IA0DtD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAoDjE"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Go Parser
3
+ *
4
+ * Parses Go files for import/export analysis.
5
+ */
6
+ export class GoParser {
7
+ language = 'go';
8
+ extensions = ['.go'];
9
+ canParse(file) {
10
+ return file.language === 'go' || 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
+ // Single import: import "fmt"
24
+ const singleImportPattern = /import\s+"([^"]+)"/g;
25
+ // Multi import: import ( ... )
26
+ const multiImportPattern = /import\s*\(([^)]+)\)/gs;
27
+ // Process single imports
28
+ let match;
29
+ while ((match = singleImportPattern.exec(content)) !== null) {
30
+ const importPath = match[1];
31
+ const line = content.substring(0, match.index).split('\n').length;
32
+ dependencies.push({
33
+ source: '',
34
+ target: importPath,
35
+ type: 'go-import',
36
+ line,
37
+ imports: [{
38
+ name: importPath.split('/').pop() || importPath,
39
+ }],
40
+ });
41
+ }
42
+ // Process multi imports
43
+ while ((match = multiImportPattern.exec(content)) !== null) {
44
+ const importBlock = match[1];
45
+ const blockStartLine = content.substring(0, match.index).split('\n').length;
46
+ const importLines = importBlock.split('\n');
47
+ for (let i = 0; i < importLines.length; i++) {
48
+ const line = importLines[i].trim();
49
+ if (!line)
50
+ continue;
51
+ // Match: alias "path" or just "path"
52
+ const importMatch = line.match(/(?:(\w+)\s+)?"([^"]+)"/);
53
+ if (importMatch) {
54
+ const [, alias, importPath] = importMatch;
55
+ dependencies.push({
56
+ source: '',
57
+ target: importPath,
58
+ type: 'go-import',
59
+ line: blockStartLine + i,
60
+ imports: [{
61
+ name: importPath.split('/').pop() || importPath,
62
+ alias,
63
+ }],
64
+ });
65
+ }
66
+ }
67
+ }
68
+ return dependencies;
69
+ }
70
+ async extractExports(content) {
71
+ const exports = [];
72
+ const lines = content.split('\n');
73
+ // Go exports are public if they start with uppercase
74
+ const funcPattern = /^func\s+(?:\([^)]+\)\s+)?([A-Z]\w*)\s*\(/;
75
+ const typePattern = /^type\s+([A-Z]\w*)\s+(?:struct|interface)/;
76
+ const constPattern = /^(?:const|var)\s+([A-Z]\w*)/;
77
+ for (let i = 0; i < lines.length; i++) {
78
+ const line = lines[i].trim();
79
+ // Skip comments
80
+ if (line.startsWith('//') || line.startsWith('/*'))
81
+ continue;
82
+ // Function declarations
83
+ const funcMatch = line.match(funcPattern);
84
+ if (funcMatch) {
85
+ exports.push({
86
+ name: funcMatch[1],
87
+ type: 'function',
88
+ line: i + 1,
89
+ });
90
+ continue;
91
+ }
92
+ // Type declarations
93
+ const typeMatch = line.match(typePattern);
94
+ if (typeMatch) {
95
+ const isInterface = line.includes('interface');
96
+ exports.push({
97
+ name: typeMatch[1],
98
+ type: isInterface ? 'interface' : 'class',
99
+ line: i + 1,
100
+ });
101
+ continue;
102
+ }
103
+ // Const/var declarations
104
+ const constMatch = line.match(constPattern);
105
+ if (constMatch) {
106
+ exports.push({
107
+ name: constMatch[1],
108
+ type: line.startsWith('const') ? 'constant' : 'variable',
109
+ line: i + 1,
110
+ });
111
+ continue;
112
+ }
113
+ }
114
+ return exports;
115
+ }
116
+ }
117
+ //# sourceMappingURL=go-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go-parser.js","sourceRoot":"","sources":["../../../src/core/parsers/go-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,OAAO,QAAQ;IACV,QAAQ,GAAG,IAAI,CAAC;IAChB,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC;IAE9B,QAAQ,CAAC,IAAiB;QACxB,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5E,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;QAEtC,8BAA8B;QAC9B,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;QAElD,+BAA+B;QAC/B,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;QAEpD,yBAAyB;QACzB,IAAI,KAAK,CAAC;QACV,OAAO,CAAC,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5D,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YAElE,YAAY,CAAC,IAAI,CAAC;gBAChB,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,WAAW;gBACjB,IAAI;gBACJ,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,UAAU;qBAChD,CAAC;aACH,CAAC,CAAC;QACL,CAAC;QAED,wBAAwB;QACxB,OAAO,CAAC,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3D,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YAE5E,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACnC,IAAI,CAAC,IAAI;oBAAE,SAAS;gBAEpB,qCAAqC;gBACrC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBACzD,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,WAAW,CAAC;oBAE1C,YAAY,CAAC,IAAI,CAAC;wBAChB,MAAM,EAAE,EAAE;wBACV,MAAM,EAAE,UAAU;wBAClB,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,cAAc,GAAG,CAAC;wBACxB,OAAO,EAAE,CAAC;gCACR,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,UAAU;gCAC/C,KAAK;6BACN,CAAC;qBACH,CAAC,CAAC;gBACL,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,qDAAqD;QACrD,MAAM,WAAW,GAAG,0CAA0C,CAAC;QAC/D,MAAM,WAAW,GAAG,2CAA2C,CAAC;QAChE,MAAM,YAAY,GAAG,6BAA6B,CAAC;QAEnD,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,gBAAgB;YAChB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,SAAS;YAE7D,wBAAwB;YACxB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC1C,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;oBAClB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,CAAC,GAAG,CAAC;iBACZ,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,oBAAoB;YACpB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC1C,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBAC/C,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;oBAClB,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO;oBACzC,IAAI,EAAE,CAAC,GAAG,CAAC;iBACZ,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,yBAAyB;YACzB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC5C,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;oBACnB,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;oBACxD,IAAI,EAAE,CAAC,GAAG,CAAC;iBACZ,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Java Parser
3
+ *
4
+ * Parses Java files for import/export analysis.
5
+ */
6
+ import { IParser, ParserOptions } from './parser.interface.js';
7
+ import { ProjectFile, ParsedFile, Dependency, ExportedSymbol } from '../../types/core.types.js';
8
+ interface JavaParserOptions extends ParserOptions {
9
+ sourceVersion?: string;
10
+ }
11
+ export declare class JavaParser implements IParser {
12
+ readonly language = "java";
13
+ readonly extensions: string[];
14
+ private options;
15
+ constructor(options?: JavaParserOptions);
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=java-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"java-parser.d.ts","sourceRoot":"","sources":["../../../src/core/parsers/java-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,EAAE,MAAM,2BAA2B,CAAC;AAEhG,UAAU,iBAAkB,SAAQ,aAAa;IAC/C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,UAAW,YAAW,OAAO;IACxC,QAAQ,CAAC,QAAQ,UAAU;IAC3B,QAAQ,CAAC,UAAU,WAAa;IAEhC,OAAO,CAAC,OAAO,CAAoB;gBAEvB,OAAO,GAAE,iBAAsB;IAI3C,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;IAgCtD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAuEjE"}