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 @@
1
+ {"version":3,"file":"security-context.rule.js","sourceRoot":"","sources":["../../../../src/core/rules/builtin/security-context.rule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Type Safety Rule
3
+ *
4
+ * Validates type safety practices and detects unsafe type patterns.
5
+ */
6
+ import { IRule, RuleContext, RuleConfig, RuleResult } from '../rule.interface.js';
7
+ interface TypeSafetyConfig extends RuleConfig {
8
+ strictNullChecks?: boolean;
9
+ noExplicitAny?: boolean;
10
+ noTypeAssertions?: boolean;
11
+ allowedAnyPatterns?: string[];
12
+ }
13
+ export declare class TypeSafetyRule implements IRule {
14
+ readonly id = "type-safety";
15
+ readonly name = "Type Safety";
16
+ readonly description = "Validates type safety practices and detects unsafe type patterns";
17
+ readonly severity: "warning";
18
+ readonly tags: string[];
19
+ private config;
20
+ configure(options: Partial<TypeSafetyConfig>): void;
21
+ check(context: RuleContext): Promise<RuleResult>;
22
+ private checkExplicitAny;
23
+ private checkTypeAssertions;
24
+ private checkNullSafety;
25
+ private checkUnsafeOperations;
26
+ private isAllowedAnyFile;
27
+ private hasNullCheckAbove;
28
+ private isInTryCatch;
29
+ private createViolation;
30
+ }
31
+ export {};
32
+ //# sourceMappingURL=type-safety.rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-safety.rule.d.ts","sourceRoot":"","sources":["../../../../src/core/rules/builtin/type-safety.rule.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlF,UAAU,gBAAiB,SAAQ,UAAU;IAC3C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,qBAAa,cAAe,YAAW,KAAK;IAC1C,QAAQ,CAAC,EAAE,iBAAiB;IAC5B,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,WAAW,sEAAsE;IAC1F,QAAQ,CAAC,QAAQ,EAAG,SAAS,CAAU;IACvC,QAAQ,CAAC,IAAI,WAA4C;IAEzD,OAAO,CAAC,MAAM,CAOZ;IAEF,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAI7C,KAAK,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IA8BtD,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,eAAe;IAmCvB,OAAO,CAAC,qBAAqB;IAyC7B,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,eAAe;CAYxB"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Type Safety Rule
3
+ *
4
+ * Validates type safety practices and detects unsafe type patterns.
5
+ */
6
+ export class TypeSafetyRule {
7
+ id = 'type-safety';
8
+ name = 'Type Safety';
9
+ description = 'Validates type safety practices and detects unsafe type patterns';
10
+ severity = 'warning';
11
+ tags = ['typescript', 'type-safety', 'quality'];
12
+ config = {
13
+ enabled: true,
14
+ severity: 'warning',
15
+ strictNullChecks: true,
16
+ noExplicitAny: true,
17
+ noTypeAssertions: false,
18
+ allowedAnyPatterns: ['catch', 'test', 'spec', '.d.ts'],
19
+ };
20
+ configure(options) {
21
+ this.config = { ...this.config, ...options };
22
+ }
23
+ async check(context) {
24
+ const violations = [];
25
+ for (const nodeId of context.graph.nodes()) {
26
+ const node = context.getNodeData(nodeId);
27
+ if (!node)
28
+ continue;
29
+ const filePath = node.data.relativePath;
30
+ // Only check TypeScript files
31
+ if (!filePath.endsWith('.ts') && !filePath.endsWith('.tsx'))
32
+ continue;
33
+ const content = context.fileContents?.get(filePath);
34
+ if (!content)
35
+ continue;
36
+ if (this.config.noExplicitAny) {
37
+ this.checkExplicitAny(filePath, content, violations);
38
+ }
39
+ if (this.config.noTypeAssertions) {
40
+ this.checkTypeAssertions(filePath, content, violations);
41
+ }
42
+ if (this.config.strictNullChecks) {
43
+ this.checkNullSafety(filePath, content, violations);
44
+ }
45
+ this.checkUnsafeOperations(filePath, content, violations);
46
+ }
47
+ return { violations };
48
+ }
49
+ checkExplicitAny(filePath, content, violations) {
50
+ // Skip if file matches allowed patterns
51
+ if (this.isAllowedAnyFile(filePath))
52
+ return;
53
+ const lines = content.split('\n');
54
+ const anyPatterns = [
55
+ /:\s*any\b/,
56
+ /as\s+any\b/,
57
+ /<any>/,
58
+ ];
59
+ for (let i = 0; i < lines.length; i++) {
60
+ const line = lines[i];
61
+ // Skip comments
62
+ if (line.trim().startsWith('//') || line.trim().startsWith('*'))
63
+ continue;
64
+ for (const pattern of anyPatterns) {
65
+ if (pattern.test(line)) {
66
+ violations.push(this.createViolation(filePath, 'Explicit any type detected', i + 1, 'Use specific types or unknown instead of any'));
67
+ break;
68
+ }
69
+ }
70
+ }
71
+ }
72
+ checkTypeAssertions(filePath, content, violations) {
73
+ const lines = content.split('\n');
74
+ const assertionPatterns = [
75
+ /as\s+\w+(?:<[^>]+>)?(?!\s*;?\s*$)/, // as SomeType (not at end of statement)
76
+ /<\w+(?:<[^>]+>)?>\s*\(/, // <SomeType>value
77
+ ];
78
+ for (let i = 0; i < lines.length; i++) {
79
+ const line = lines[i];
80
+ // Skip type definitions and imports
81
+ if (/^import|^export\s+type|^type\s+/.test(line.trim()))
82
+ continue;
83
+ for (const pattern of assertionPatterns) {
84
+ if (pattern.test(line) && !line.includes('as const')) {
85
+ violations.push(this.createViolation(filePath, 'Type assertion detected', i + 1, 'Consider using type guards or proper type inference'));
86
+ break;
87
+ }
88
+ }
89
+ }
90
+ }
91
+ checkNullSafety(filePath, content, violations) {
92
+ const lines = content.split('\n');
93
+ for (let i = 0; i < lines.length; i++) {
94
+ const line = lines[i];
95
+ // Check for non-null assertions
96
+ if (/\w+!\s*[.\[]/.test(line) && !line.includes('!==') && !line.includes('!=')) {
97
+ violations.push(this.createViolation(filePath, 'Non-null assertion operator (!) used', i + 1, 'Use optional chaining (?.) or null checks instead'));
98
+ }
99
+ // Check for potentially unsafe property access
100
+ if (/\w+\.\w+\.\w+/.test(line) && !line.includes('?.')) {
101
+ const hasNullCheck = this.hasNullCheckAbove(lines, i, line);
102
+ if (!hasNullCheck) {
103
+ // This is a heuristic - might produce false positives
104
+ // Only flag if it looks like accessing optional data
105
+ if (/response\.|data\.|result\.|user\.|params\.|query\./.test(line)) {
106
+ violations.push(this.createViolation(filePath, 'Potential unsafe deep property access', i + 1, 'Consider using optional chaining (?.) for potentially undefined values'));
107
+ }
108
+ }
109
+ }
110
+ }
111
+ }
112
+ checkUnsafeOperations(filePath, content, violations) {
113
+ const lines = content.split('\n');
114
+ for (let i = 0; i < lines.length; i++) {
115
+ const line = lines[i];
116
+ // Check for JSON.parse without try-catch
117
+ if (/JSON\.parse\s*\(/.test(line)) {
118
+ const hasTryCatch = this.isInTryCatch(lines, i);
119
+ if (!hasTryCatch) {
120
+ violations.push(this.createViolation(filePath, 'JSON.parse without error handling', i + 1, 'Wrap JSON.parse in try-catch or use a safe parsing utility'));
121
+ }
122
+ }
123
+ // Check for eval usage
124
+ if (/\beval\s*\(/.test(line)) {
125
+ violations.push(this.createViolation(filePath, 'Unsafe eval() usage detected', i + 1, 'Avoid eval() - use safer alternatives'));
126
+ }
127
+ // Check for Function constructor
128
+ if (/new\s+Function\s*\(/.test(line)) {
129
+ violations.push(this.createViolation(filePath, 'Unsafe Function constructor usage', i + 1, 'Avoid Function constructor - use regular functions'));
130
+ }
131
+ }
132
+ }
133
+ isAllowedAnyFile(filePath) {
134
+ return this.config.allowedAnyPatterns?.some(p => filePath.includes(p)) || false;
135
+ }
136
+ hasNullCheckAbove(lines, currentIndex, currentLine) {
137
+ // Simple heuristic: look for null/undefined checks in previous lines
138
+ const start = Math.max(0, currentIndex - 5);
139
+ const context = lines.slice(start, currentIndex).join('\n');
140
+ // Extract the base object being accessed
141
+ const match = currentLine.match(/(\w+)\./);
142
+ if (!match)
143
+ return true;
144
+ const varName = match[1];
145
+ return new RegExp(`${varName}\\s*(!==?|===?)\\s*(null|undefined)|\\?\\.|if\\s*\\(\\s*${varName}\\s*\\)`).test(context);
146
+ }
147
+ isInTryCatch(lines, currentIndex) {
148
+ // Look backwards for try block
149
+ for (let i = currentIndex; i >= Math.max(0, currentIndex - 20); i--) {
150
+ if (/\btry\s*\{/.test(lines[i])) {
151
+ // Check if we're still in the try block
152
+ let braceCount = 0;
153
+ for (let j = i; j <= currentIndex; j++) {
154
+ braceCount += (lines[j].match(/{/g) || []).length;
155
+ braceCount -= (lines[j].match(/}/g) || []).length;
156
+ }
157
+ return braceCount > 0;
158
+ }
159
+ }
160
+ return false;
161
+ }
162
+ createViolation(file, message, line, suggestion) {
163
+ return {
164
+ id: `${this.id}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
165
+ ruleId: this.id,
166
+ ruleName: this.name,
167
+ severity: 'warning',
168
+ message,
169
+ file,
170
+ line,
171
+ suggestion,
172
+ };
173
+ }
174
+ }
175
+ //# sourceMappingURL=type-safety.rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-safety.rule.js","sourceRoot":"","sources":["../../../../src/core/rules/builtin/type-safety.rule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Rule Engine
3
+ *
4
+ * Manages and executes architecture rules.
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
+ import { IRule } from './rule.interface.js';
10
+ export declare class RuleEngine {
11
+ private config;
12
+ private rules;
13
+ private enabledRules;
14
+ constructor(config: CamoufConfig);
15
+ /**
16
+ * Initialize built-in rules based on configuration
17
+ */
18
+ private initializeRules;
19
+ /**
20
+ * Register a rule
21
+ */
22
+ registerRule(rule: IRule): void;
23
+ /**
24
+ * Unregister a rule
25
+ */
26
+ unregisterRule(ruleId: string): void;
27
+ /**
28
+ * Enable a specific rule
29
+ */
30
+ enableRule(ruleId: string): void;
31
+ /**
32
+ * Disable a specific rule
33
+ */
34
+ disableRule(ruleId: string): void;
35
+ /**
36
+ * Filter rules to only run specified ones
37
+ */
38
+ filterRules(ruleIds: string[]): void;
39
+ /**
40
+ * Validate the entire project
41
+ */
42
+ validate(graph: DependencyGraph): Promise<Violation[]>;
43
+ /**
44
+ * Validate a single file
45
+ */
46
+ validateFile(filePath: string, graph: DependencyGraph): Promise<Violation[]>;
47
+ /**
48
+ * Attempt to auto-fix violations
49
+ */
50
+ autoFix(violations: Violation[]): Promise<number>;
51
+ /**
52
+ * Get all registered rules
53
+ */
54
+ getRules(): IRule[];
55
+ /**
56
+ * Get enabled rules
57
+ */
58
+ getEnabledRules(): IRule[];
59
+ /**
60
+ * Create rule context
61
+ */
62
+ private createContext;
63
+ /**
64
+ * Check if a rule level means enabled
65
+ */
66
+ private isRuleEnabled;
67
+ /**
68
+ * Get the severity for a rule
69
+ */
70
+ private getRuleSeverity;
71
+ }
72
+ //# sourceMappingURL=rule-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-engine.d.ts","sourceRoot":"","sources":["../../../src/core/rules/rule-engine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAA8B,MAAM,6BAA6B,CAAC;AACvF,OAAO,EAAE,SAAS,EAAqB,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,KAAK,EAA2B,MAAM,qBAAqB,CAAC;AAcrE,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,YAAY,CAA0B;gBAElC,MAAM,EAAE,YAAY;IAKhC;;OAEG;IACH,OAAO,CAAC,eAAe;IA+BvB;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI;IAI/B;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKpC;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAMhC;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIjC;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAWpC;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA4B5D;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA8BlF;;OAEG;IACG,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBvD;;OAEG;IACH,QAAQ,IAAI,KAAK,EAAE;IAInB;;OAEG;IACH,eAAe,IAAI,KAAK,EAAE;IAM1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,OAAO,CAAC,eAAe;CASxB"}
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Rule Engine
3
+ *
4
+ * Manages and executes architecture rules.
5
+ */
6
+ import { Logger } from '../logger.js';
7
+ // Import built-in rules
8
+ import { LayerDependenciesRule } from './builtin/layer-dependencies.rule.js';
9
+ import { CircularDependenciesRule } from './builtin/circular-dependencies.rule.js';
10
+ import { PerformanceAntipatternsRule } from './builtin/performance-antipatterns.rule.js';
11
+ import { TypeSafetyRule } from './builtin/type-safety.rule.js';
12
+ import { DataFlowIntegrityRule } from './builtin/data-flow-integrity.rule.js';
13
+ import { DistributedTransactionsRule } from './builtin/distributed-transactions.rule.js';
14
+ import { ApiVersioningEvolutionRule } from './builtin/api-versioning.rule.js';
15
+ import { SecurityContextRule } from './builtin/security-context.rule.js';
16
+ import { ResiliencePatternsRule } from './builtin/resilience-patterns.rule.js';
17
+ import { DddBoundariesRule } from './builtin/ddd-boundaries.rule.js';
18
+ export class RuleEngine {
19
+ config;
20
+ rules = new Map();
21
+ enabledRules = new Set();
22
+ constructor(config) {
23
+ this.config = config;
24
+ this.initializeRules();
25
+ }
26
+ /**
27
+ * Initialize built-in rules based on configuration
28
+ */
29
+ initializeRules() {
30
+ // Register built-in rules
31
+ const builtinRules = [
32
+ new LayerDependenciesRule(),
33
+ new CircularDependenciesRule(),
34
+ new PerformanceAntipatternsRule(),
35
+ new TypeSafetyRule(),
36
+ new DataFlowIntegrityRule(),
37
+ new DistributedTransactionsRule(),
38
+ new ApiVersioningEvolutionRule(),
39
+ new SecurityContextRule(),
40
+ new ResiliencePatternsRule(),
41
+ new DddBoundariesRule(),
42
+ ];
43
+ for (const rule of builtinRules) {
44
+ this.registerRule(rule);
45
+ }
46
+ // Enable rules based on configuration
47
+ const builtinConfig = this.config.rules?.builtin || {};
48
+ for (const [ruleId, level] of Object.entries(builtinConfig)) {
49
+ if (this.isRuleEnabled(level)) {
50
+ this.enabledRules.add(ruleId);
51
+ }
52
+ }
53
+ Logger.debug(`Initialized ${this.rules.size} rules, ${this.enabledRules.size} enabled`);
54
+ }
55
+ /**
56
+ * Register a rule
57
+ */
58
+ registerRule(rule) {
59
+ this.rules.set(rule.id, rule);
60
+ }
61
+ /**
62
+ * Unregister a rule
63
+ */
64
+ unregisterRule(ruleId) {
65
+ this.rules.delete(ruleId);
66
+ this.enabledRules.delete(ruleId);
67
+ }
68
+ /**
69
+ * Enable a specific rule
70
+ */
71
+ enableRule(ruleId) {
72
+ if (this.rules.has(ruleId)) {
73
+ this.enabledRules.add(ruleId);
74
+ }
75
+ }
76
+ /**
77
+ * Disable a specific rule
78
+ */
79
+ disableRule(ruleId) {
80
+ this.enabledRules.delete(ruleId);
81
+ }
82
+ /**
83
+ * Filter rules to only run specified ones
84
+ */
85
+ filterRules(ruleIds) {
86
+ this.enabledRules.clear();
87
+ for (const ruleId of ruleIds) {
88
+ if (this.rules.has(ruleId)) {
89
+ this.enabledRules.add(ruleId);
90
+ }
91
+ else {
92
+ Logger.warn(`Rule '${ruleId}' not found`);
93
+ }
94
+ }
95
+ }
96
+ /**
97
+ * Validate the entire project
98
+ */
99
+ async validate(graph) {
100
+ const violations = [];
101
+ const context = this.createContext(graph);
102
+ for (const ruleId of this.enabledRules) {
103
+ const rule = this.rules.get(ruleId);
104
+ if (!rule || !rule.check)
105
+ continue;
106
+ try {
107
+ Logger.debug(`Running rule: ${rule.name}`);
108
+ const result = await rule.check(context);
109
+ if (result.violations.length > 0) {
110
+ const severity = this.getRuleSeverity(ruleId);
111
+ const processedViolations = result.violations.map(v => ({
112
+ ...v,
113
+ severity,
114
+ }));
115
+ violations.push(...processedViolations);
116
+ }
117
+ }
118
+ catch (error) {
119
+ Logger.error(`Rule '${ruleId}' failed: ${error.message}`);
120
+ }
121
+ }
122
+ return violations;
123
+ }
124
+ /**
125
+ * Validate a single file
126
+ */
127
+ async validateFile(filePath, graph) {
128
+ const violations = [];
129
+ const context = this.createContext(graph, filePath);
130
+ for (const ruleId of this.enabledRules) {
131
+ const rule = this.rules.get(ruleId);
132
+ if (!rule)
133
+ continue;
134
+ // Skip rules that don't support incremental validation
135
+ if (!rule.supportsIncremental || !rule.checkFile)
136
+ continue;
137
+ try {
138
+ const result = await rule.checkFile(filePath, context);
139
+ if (result.violations.length > 0) {
140
+ const severity = this.getRuleSeverity(ruleId);
141
+ const processedViolations = result.violations.map(v => ({
142
+ ...v,
143
+ severity,
144
+ }));
145
+ violations.push(...processedViolations);
146
+ }
147
+ }
148
+ catch (error) {
149
+ Logger.error(`Rule '${ruleId}' failed for file ${filePath}: ${error.message}`);
150
+ }
151
+ }
152
+ return violations;
153
+ }
154
+ /**
155
+ * Attempt to auto-fix violations
156
+ */
157
+ async autoFix(violations) {
158
+ let fixedCount = 0;
159
+ for (const violation of violations) {
160
+ if (!violation.fixable || !violation.fix)
161
+ continue;
162
+ try {
163
+ // Apply the fix
164
+ // This would need implementation based on the fix type
165
+ fixedCount++;
166
+ Logger.debug(`Fixed violation: ${violation.message}`);
167
+ }
168
+ catch (error) {
169
+ Logger.warn(`Could not auto-fix: ${violation.message}`);
170
+ }
171
+ }
172
+ return fixedCount;
173
+ }
174
+ /**
175
+ * Get all registered rules
176
+ */
177
+ getRules() {
178
+ return Array.from(this.rules.values());
179
+ }
180
+ /**
181
+ * Get enabled rules
182
+ */
183
+ getEnabledRules() {
184
+ return Array.from(this.enabledRules)
185
+ .map(id => this.rules.get(id))
186
+ .filter((rule) => rule !== undefined);
187
+ }
188
+ /**
189
+ * Create rule context
190
+ */
191
+ createContext(graph, focusFile) {
192
+ return {
193
+ config: this.config,
194
+ graph,
195
+ focusFile,
196
+ getNodeData: (id) => graph.node(id),
197
+ getEdgeData: (source, target) => graph.edge(source, target),
198
+ getIncomingEdges: (id) => graph.inEdges(id) || [],
199
+ getOutgoingEdges: (id) => graph.outEdges(id) || [],
200
+ };
201
+ }
202
+ /**
203
+ * Check if a rule level means enabled
204
+ */
205
+ isRuleEnabled(level) {
206
+ if (!level || level === 'off')
207
+ return false;
208
+ if (typeof level === 'string')
209
+ return true;
210
+ return level.level !== 'off';
211
+ }
212
+ /**
213
+ * Get the severity for a rule
214
+ */
215
+ getRuleSeverity(ruleId) {
216
+ const level = this.config.rules?.builtin?.[ruleId];
217
+ if (!level)
218
+ return 'warning';
219
+ if (typeof level === 'string') {
220
+ return level === 'error' ? 'error' : 'warning';
221
+ }
222
+ return level.level === 'error' ? 'error' : 'warning';
223
+ }
224
+ }
225
+ //# sourceMappingURL=rule-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-engine.js","sourceRoot":"","sources":["../../../src/core/rules/rule-engine.ts"],"names":[],"mappings":"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"}