@nahisaho/musubix-core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/bin/musubix.js +18 -0
  2. package/dist/__tests__/index.test.d.ts +2 -0
  3. package/dist/__tests__/index.test.d.ts.map +1 -0
  4. package/dist/__tests__/index.test.js +27 -0
  5. package/dist/__tests__/index.test.js.map +1 -0
  6. package/dist/auth/auth-manager.d.ts +320 -0
  7. package/dist/auth/auth-manager.d.ts.map +1 -0
  8. package/dist/auth/auth-manager.js +580 -0
  9. package/dist/auth/auth-manager.js.map +1 -0
  10. package/dist/cli/base.d.ts +58 -0
  11. package/dist/cli/base.d.ts.map +1 -0
  12. package/dist/cli/base.js +93 -0
  13. package/dist/cli/base.js.map +1 -0
  14. package/dist/cli/commands/help.d.ts +17 -0
  15. package/dist/cli/commands/help.d.ts.map +1 -0
  16. package/dist/cli/commands/help.js +228 -0
  17. package/dist/cli/commands/help.js.map +1 -0
  18. package/dist/cli/commands/index.d.ts +14 -0
  19. package/dist/cli/commands/index.d.ts.map +1 -0
  20. package/dist/cli/commands/index.js +25 -0
  21. package/dist/cli/commands/index.js.map +1 -0
  22. package/dist/cli/commands/init.d.ts +38 -0
  23. package/dist/cli/commands/init.d.ts.map +1 -0
  24. package/dist/cli/commands/init.js +258 -0
  25. package/dist/cli/commands/init.js.map +1 -0
  26. package/dist/cli/index.d.ts +9 -0
  27. package/dist/cli/index.d.ts.map +1 -0
  28. package/dist/cli/index.js +9 -0
  29. package/dist/cli/index.js.map +1 -0
  30. package/dist/codegen/coding-standards.d.ts +250 -0
  31. package/dist/codegen/coding-standards.d.ts.map +1 -0
  32. package/dist/codegen/coding-standards.js +976 -0
  33. package/dist/codegen/coding-standards.js.map +1 -0
  34. package/dist/codegen/coverage-reporter.d.ts +264 -0
  35. package/dist/codegen/coverage-reporter.d.ts.map +1 -0
  36. package/dist/codegen/coverage-reporter.js +697 -0
  37. package/dist/codegen/coverage-reporter.js.map +1 -0
  38. package/dist/codegen/dependency-analyzer.d.ts +271 -0
  39. package/dist/codegen/dependency-analyzer.d.ts.map +1 -0
  40. package/dist/codegen/dependency-analyzer.js +661 -0
  41. package/dist/codegen/dependency-analyzer.js.map +1 -0
  42. package/dist/codegen/generator.d.ts +275 -0
  43. package/dist/codegen/generator.d.ts.map +1 -0
  44. package/dist/codegen/generator.js +781 -0
  45. package/dist/codegen/generator.js.map +1 -0
  46. package/dist/codegen/index.d.ts +18 -0
  47. package/dist/codegen/index.d.ts.map +1 -0
  48. package/dist/codegen/index.js +27 -0
  49. package/dist/codegen/index.js.map +1 -0
  50. package/dist/codegen/integration-test-generator.d.ts +312 -0
  51. package/dist/codegen/integration-test-generator.d.ts.map +1 -0
  52. package/dist/codegen/integration-test-generator.js +765 -0
  53. package/dist/codegen/integration-test-generator.js.map +1 -0
  54. package/dist/codegen/pattern-conformance.d.ts +309 -0
  55. package/dist/codegen/pattern-conformance.d.ts.map +1 -0
  56. package/dist/codegen/pattern-conformance.js +590 -0
  57. package/dist/codegen/pattern-conformance.js.map +1 -0
  58. package/dist/codegen/quality-metrics.d.ts +235 -0
  59. package/dist/codegen/quality-metrics.d.ts.map +1 -0
  60. package/dist/codegen/quality-metrics.js +439 -0
  61. package/dist/codegen/quality-metrics.js.map +1 -0
  62. package/dist/codegen/security-scanner.d.ts +179 -0
  63. package/dist/codegen/security-scanner.d.ts.map +1 -0
  64. package/dist/codegen/security-scanner.js +495 -0
  65. package/dist/codegen/security-scanner.js.map +1 -0
  66. package/dist/codegen/static-analyzer.d.ts +188 -0
  67. package/dist/codegen/static-analyzer.d.ts.map +1 -0
  68. package/dist/codegen/static-analyzer.js +490 -0
  69. package/dist/codegen/static-analyzer.js.map +1 -0
  70. package/dist/codegen/unit-test-generator.d.ts +289 -0
  71. package/dist/codegen/unit-test-generator.d.ts.map +1 -0
  72. package/dist/codegen/unit-test-generator.js +634 -0
  73. package/dist/codegen/unit-test-generator.js.map +1 -0
  74. package/dist/design/adr-generator.d.ts +227 -0
  75. package/dist/design/adr-generator.d.ts.map +1 -0
  76. package/dist/design/adr-generator.js +423 -0
  77. package/dist/design/adr-generator.js.map +1 -0
  78. package/dist/design/c4-generator.d.ts +267 -0
  79. package/dist/design/c4-generator.d.ts.map +1 -0
  80. package/dist/design/c4-generator.js +453 -0
  81. package/dist/design/c4-generator.js.map +1 -0
  82. package/dist/design/framework-optimizer.d.ts +190 -0
  83. package/dist/design/framework-optimizer.d.ts.map +1 -0
  84. package/dist/design/framework-optimizer.js +589 -0
  85. package/dist/design/framework-optimizer.js.map +1 -0
  86. package/dist/design/index.d.ts +12 -0
  87. package/dist/design/index.d.ts.map +1 -0
  88. package/dist/design/index.js +13 -0
  89. package/dist/design/index.js.map +1 -0
  90. package/dist/design/pattern-detector.d.ts +270 -0
  91. package/dist/design/pattern-detector.d.ts.map +1 -0
  92. package/dist/design/pattern-detector.js +621 -0
  93. package/dist/design/pattern-detector.js.map +1 -0
  94. package/dist/design/solid-validator.d.ts +188 -0
  95. package/dist/design/solid-validator.d.ts.map +1 -0
  96. package/dist/design/solid-validator.js +579 -0
  97. package/dist/design/solid-validator.js.map +1 -0
  98. package/dist/error/data-persistence.d.ts +311 -0
  99. package/dist/error/data-persistence.d.ts.map +1 -0
  100. package/dist/error/data-persistence.js +586 -0
  101. package/dist/error/data-persistence.js.map +1 -0
  102. package/dist/error/graceful-degradation.d.ts +309 -0
  103. package/dist/error/graceful-degradation.d.ts.map +1 -0
  104. package/dist/error/graceful-degradation.js +510 -0
  105. package/dist/error/graceful-degradation.js.map +1 -0
  106. package/dist/error/index.d.ts +11 -0
  107. package/dist/error/index.d.ts.map +1 -0
  108. package/dist/error/index.js +19 -0
  109. package/dist/error/index.js.map +1 -0
  110. package/dist/explanation/explanation-generator.d.ts +228 -0
  111. package/dist/explanation/explanation-generator.d.ts.map +1 -0
  112. package/dist/explanation/explanation-generator.js +662 -0
  113. package/dist/explanation/explanation-generator.js.map +1 -0
  114. package/dist/explanation/index.d.ts +11 -0
  115. package/dist/explanation/index.d.ts.map +1 -0
  116. package/dist/explanation/index.js +19 -0
  117. package/dist/explanation/index.js.map +1 -0
  118. package/dist/explanation/reasoning-chain.d.ts +314 -0
  119. package/dist/explanation/reasoning-chain.d.ts.map +1 -0
  120. package/dist/explanation/reasoning-chain.js +414 -0
  121. package/dist/explanation/reasoning-chain.js.map +1 -0
  122. package/dist/explanation/visual-explanation.d.ts +315 -0
  123. package/dist/explanation/visual-explanation.d.ts.map +1 -0
  124. package/dist/explanation/visual-explanation.js +667 -0
  125. package/dist/explanation/visual-explanation.js.map +1 -0
  126. package/dist/index.d.ts +33 -0
  127. package/dist/index.d.ts.map +1 -0
  128. package/dist/index.js +47 -0
  129. package/dist/index.js.map +1 -0
  130. package/dist/requirements/decomposer.d.ts +235 -0
  131. package/dist/requirements/decomposer.d.ts.map +1 -0
  132. package/dist/requirements/decomposer.js +587 -0
  133. package/dist/requirements/decomposer.js.map +1 -0
  134. package/dist/requirements/related-finder.d.ts +261 -0
  135. package/dist/requirements/related-finder.d.ts.map +1 -0
  136. package/dist/requirements/related-finder.js +629 -0
  137. package/dist/requirements/related-finder.js.map +1 -0
  138. package/dist/traceability/impact.d.ts +196 -0
  139. package/dist/traceability/impact.d.ts.map +1 -0
  140. package/dist/traceability/impact.js +438 -0
  141. package/dist/traceability/impact.js.map +1 -0
  142. package/dist/traceability/index.d.ts +9 -0
  143. package/dist/traceability/index.d.ts.map +1 -0
  144. package/dist/traceability/index.js +10 -0
  145. package/dist/traceability/index.js.map +1 -0
  146. package/dist/traceability/manager.d.ts +266 -0
  147. package/dist/traceability/manager.d.ts.map +1 -0
  148. package/dist/traceability/manager.js +412 -0
  149. package/dist/traceability/manager.js.map +1 -0
  150. package/dist/types/common.d.ts +294 -0
  151. package/dist/types/common.d.ts.map +1 -0
  152. package/dist/types/common.js +15 -0
  153. package/dist/types/common.js.map +1 -0
  154. package/dist/types/ears.d.ts +158 -0
  155. package/dist/types/ears.d.ts.map +1 -0
  156. package/dist/types/ears.js +33 -0
  157. package/dist/types/ears.js.map +1 -0
  158. package/dist/types/errors.d.ts +176 -0
  159. package/dist/types/errors.d.ts.map +1 -0
  160. package/dist/types/errors.js +55 -0
  161. package/dist/types/errors.js.map +1 -0
  162. package/dist/types/index.d.ts +10 -0
  163. package/dist/types/index.d.ts.map +1 -0
  164. package/dist/types/index.js +10 -0
  165. package/dist/types/index.js.map +1 -0
  166. package/dist/utils/data-protector.d.ts +122 -0
  167. package/dist/utils/data-protector.d.ts.map +1 -0
  168. package/dist/utils/data-protector.js +275 -0
  169. package/dist/utils/data-protector.js.map +1 -0
  170. package/dist/utils/error-handler.d.ts +101 -0
  171. package/dist/utils/error-handler.d.ts.map +1 -0
  172. package/dist/utils/error-handler.js +324 -0
  173. package/dist/utils/error-handler.js.map +1 -0
  174. package/dist/utils/i18n-manager.d.ts +259 -0
  175. package/dist/utils/i18n-manager.d.ts.map +1 -0
  176. package/dist/utils/i18n-manager.js +554 -0
  177. package/dist/utils/i18n-manager.js.map +1 -0
  178. package/dist/utils/index.d.ts +10 -0
  179. package/dist/utils/index.d.ts.map +1 -0
  180. package/dist/utils/index.js +10 -0
  181. package/dist/utils/index.js.map +1 -0
  182. package/dist/utils/logger.d.ts +120 -0
  183. package/dist/utils/logger.d.ts.map +1 -0
  184. package/dist/utils/logger.js +237 -0
  185. package/dist/utils/logger.js.map +1 -0
  186. package/dist/utils/performance-profiler.d.ts +251 -0
  187. package/dist/utils/performance-profiler.d.ts.map +1 -0
  188. package/dist/utils/performance-profiler.js +458 -0
  189. package/dist/utils/performance-profiler.js.map +1 -0
  190. package/dist/utils/scalability-optimizer.d.ts +294 -0
  191. package/dist/utils/scalability-optimizer.d.ts.map +1 -0
  192. package/dist/utils/scalability-optimizer.js +606 -0
  193. package/dist/utils/scalability-optimizer.js.map +1 -0
  194. package/dist/utils/structured-logger.d.ts +294 -0
  195. package/dist/utils/structured-logger.d.ts.map +1 -0
  196. package/dist/utils/structured-logger.js +630 -0
  197. package/dist/utils/structured-logger.js.map +1 -0
  198. package/dist/utils/version-compatibility.d.ts +217 -0
  199. package/dist/utils/version-compatibility.d.ts.map +1 -0
  200. package/dist/utils/version-compatibility.js +443 -0
  201. package/dist/utils/version-compatibility.js.map +1 -0
  202. package/dist/validators/ears-validator.d.ts +182 -0
  203. package/dist/validators/ears-validator.d.ts.map +1 -0
  204. package/dist/validators/ears-validator.js +357 -0
  205. package/dist/validators/ears-validator.js.map +1 -0
  206. package/dist/validators/index.d.ts +8 -0
  207. package/dist/validators/index.d.ts.map +1 -0
  208. package/dist/validators/index.js +9 -0
  209. package/dist/validators/index.js.map +1 -0
  210. package/dist/version.d.ts +8 -0
  211. package/dist/version.d.ts.map +1 -0
  212. package/dist/version.js +8 -0
  213. package/dist/version.js.map +1 -0
  214. package/package.json +100 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-analyzer.d.ts","sourceRoot":"","sources":["../../src/codegen/static-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,490 @@
1
+ /**
2
+ * Static Analyzer
3
+ *
4
+ * Performs static code analysis
5
+ *
6
+ * @packageDocumentation
7
+ * @module codegen/static-analyzer
8
+ *
9
+ * @see REQ-COD-002 - Static Analysis
10
+ * @see Article V - Code Quality Standards
11
+ */
12
+ /**
13
+ * Default configuration
14
+ */
15
+ export const DEFAULT_ANALYZER_CONFIG = {
16
+ maxErrors: 100,
17
+ severityThreshold: 'warning',
18
+ categories: [
19
+ 'syntax',
20
+ 'type',
21
+ 'style',
22
+ 'complexity',
23
+ 'maintainability',
24
+ 'performance',
25
+ 'security',
26
+ 'best-practice',
27
+ ],
28
+ };
29
+ /**
30
+ * Built-in rules
31
+ */
32
+ const BUILTIN_RULES = [
33
+ {
34
+ id: 'no-console',
35
+ name: 'No console statements',
36
+ category: 'best-practice',
37
+ severity: 'warning',
38
+ description: 'Disallow console statements in production code',
39
+ enabled: true,
40
+ detect: (code, context) => {
41
+ const issues = [];
42
+ const regex = /console\.(log|warn|error|info|debug)\s*\(/g;
43
+ let match;
44
+ const lines = code.split('\n');
45
+ while ((match = regex.exec(code)) !== null) {
46
+ const line = code.substring(0, match.index).split('\n').length;
47
+ issues.push({
48
+ id: `${context.file}:${line}:no-console`,
49
+ ruleId: 'no-console',
50
+ severity: 'warning',
51
+ category: 'best-practice',
52
+ message: `Unexpected console.${match[1]} statement`,
53
+ file: context.file,
54
+ line,
55
+ snippet: lines[line - 1]?.trim(),
56
+ });
57
+ }
58
+ return issues;
59
+ },
60
+ },
61
+ {
62
+ id: 'no-debugger',
63
+ name: 'No debugger statements',
64
+ category: 'best-practice',
65
+ severity: 'error',
66
+ description: 'Disallow debugger statements',
67
+ enabled: true,
68
+ detect: (code, context) => {
69
+ const issues = [];
70
+ const regex = /\bdebugger\b/g;
71
+ let match;
72
+ while ((match = regex.exec(code)) !== null) {
73
+ const line = code.substring(0, match.index).split('\n').length;
74
+ issues.push({
75
+ id: `${context.file}:${line}:no-debugger`,
76
+ ruleId: 'no-debugger',
77
+ severity: 'error',
78
+ category: 'best-practice',
79
+ message: 'Unexpected debugger statement',
80
+ file: context.file,
81
+ line,
82
+ });
83
+ }
84
+ return issues;
85
+ },
86
+ },
87
+ {
88
+ id: 'no-var',
89
+ name: 'No var declarations',
90
+ category: 'style',
91
+ severity: 'warning',
92
+ description: 'Require let or const instead of var',
93
+ enabled: true,
94
+ detect: (code, context) => {
95
+ const issues = [];
96
+ const regex = /\bvar\s+\w+/g;
97
+ let match;
98
+ while ((match = regex.exec(code)) !== null) {
99
+ const line = code.substring(0, match.index).split('\n').length;
100
+ issues.push({
101
+ id: `${context.file}:${line}:no-var`,
102
+ ruleId: 'no-var',
103
+ severity: 'warning',
104
+ category: 'style',
105
+ message: 'Unexpected var, use let or const instead',
106
+ file: context.file,
107
+ line,
108
+ fix: {
109
+ description: 'Replace var with const',
110
+ replacement: match[0].replace('var', 'const'),
111
+ range: {
112
+ start: { line, column: 0 },
113
+ end: { line, column: match[0].length },
114
+ },
115
+ },
116
+ });
117
+ }
118
+ return issues;
119
+ },
120
+ },
121
+ {
122
+ id: 'no-any',
123
+ name: 'No explicit any',
124
+ category: 'type',
125
+ severity: 'warning',
126
+ description: 'Disallow explicit any type',
127
+ enabled: true,
128
+ detect: (code, context) => {
129
+ if (context.language !== 'typescript')
130
+ return [];
131
+ const issues = [];
132
+ const regex = /:\s*any\b/g;
133
+ let match;
134
+ while ((match = regex.exec(code)) !== null) {
135
+ const line = code.substring(0, match.index).split('\n').length;
136
+ issues.push({
137
+ id: `${context.file}:${line}:no-any`,
138
+ ruleId: 'no-any',
139
+ severity: 'warning',
140
+ category: 'type',
141
+ message: 'Unexpected any type, specify a more precise type',
142
+ file: context.file,
143
+ line,
144
+ });
145
+ }
146
+ return issues;
147
+ },
148
+ },
149
+ {
150
+ id: 'max-lines',
151
+ name: 'Maximum file lines',
152
+ category: 'maintainability',
153
+ severity: 'warning',
154
+ description: 'Enforce a maximum number of lines per file',
155
+ enabled: true,
156
+ detect: (code, context) => {
157
+ const issues = [];
158
+ const lines = code.split('\n').length;
159
+ const maxLines = 500;
160
+ if (lines > maxLines) {
161
+ issues.push({
162
+ id: `${context.file}:max-lines`,
163
+ ruleId: 'max-lines',
164
+ severity: 'warning',
165
+ category: 'maintainability',
166
+ message: `File has ${lines} lines, exceeds maximum of ${maxLines}`,
167
+ file: context.file,
168
+ line: maxLines,
169
+ });
170
+ }
171
+ return issues;
172
+ },
173
+ },
174
+ {
175
+ id: 'max-line-length',
176
+ name: 'Maximum line length',
177
+ category: 'style',
178
+ severity: 'info',
179
+ description: 'Enforce a maximum line length',
180
+ enabled: true,
181
+ detect: (code, context) => {
182
+ const issues = [];
183
+ const maxLength = 120;
184
+ const lines = code.split('\n');
185
+ lines.forEach((line, index) => {
186
+ if (line.length > maxLength) {
187
+ issues.push({
188
+ id: `${context.file}:${index + 1}:max-line-length`,
189
+ ruleId: 'max-line-length',
190
+ severity: 'info',
191
+ category: 'style',
192
+ message: `Line ${index + 1} exceeds ${maxLength} characters (${line.length})`,
193
+ file: context.file,
194
+ line: index + 1,
195
+ });
196
+ }
197
+ });
198
+ return issues;
199
+ },
200
+ },
201
+ {
202
+ id: 'complexity',
203
+ name: 'Cyclomatic complexity',
204
+ category: 'complexity',
205
+ severity: 'warning',
206
+ description: 'Enforce a maximum cyclomatic complexity',
207
+ enabled: true,
208
+ detect: (code, context) => {
209
+ const issues = [];
210
+ const maxComplexity = 10;
211
+ // Simple complexity estimation based on control flow keywords
212
+ const functionRegex = /(?:function\s+\w+|(?:async\s+)?(?:\w+)\s*(?:=|:)\s*(?:async\s+)?(?:function|\([^)]*\)\s*=>))/g;
213
+ let funcMatch;
214
+ while ((funcMatch = functionRegex.exec(code)) !== null) {
215
+ const startIndex = funcMatch.index;
216
+ const line = code.substring(0, startIndex).split('\n').length;
217
+ // Find function body (simple heuristic)
218
+ let braceCount = 0;
219
+ let endIndex = startIndex;
220
+ let started = false;
221
+ for (let i = startIndex; i < code.length; i++) {
222
+ if (code[i] === '{') {
223
+ braceCount++;
224
+ started = true;
225
+ }
226
+ else if (code[i] === '}') {
227
+ braceCount--;
228
+ if (started && braceCount === 0) {
229
+ endIndex = i;
230
+ break;
231
+ }
232
+ }
233
+ }
234
+ const funcBody = code.substring(startIndex, endIndex);
235
+ // Count complexity indicators
236
+ let complexity = 1;
237
+ const keywords = ['if', 'else', 'for', 'while', 'case', 'catch', '\\?', '&&', '\\|\\|'];
238
+ for (const kw of keywords) {
239
+ const matches = funcBody.match(new RegExp(`\\b${kw}\\b`, 'g'));
240
+ complexity += matches?.length ?? 0;
241
+ }
242
+ if (complexity > maxComplexity) {
243
+ issues.push({
244
+ id: `${context.file}:${line}:complexity`,
245
+ ruleId: 'complexity',
246
+ severity: 'warning',
247
+ category: 'complexity',
248
+ message: `Function has complexity of ${complexity}, exceeds maximum of ${maxComplexity}`,
249
+ file: context.file,
250
+ line,
251
+ });
252
+ }
253
+ }
254
+ return issues;
255
+ },
256
+ },
257
+ {
258
+ id: 'no-eval',
259
+ name: 'No eval',
260
+ category: 'security',
261
+ severity: 'error',
262
+ description: 'Disallow eval() and similar constructs',
263
+ enabled: true,
264
+ detect: (code, context) => {
265
+ const issues = [];
266
+ const regex = /\beval\s*\(|\bnew\s+Function\s*\(/g;
267
+ let match;
268
+ while ((match = regex.exec(code)) !== null) {
269
+ const line = code.substring(0, match.index).split('\n').length;
270
+ issues.push({
271
+ id: `${context.file}:${line}:no-eval`,
272
+ ruleId: 'no-eval',
273
+ severity: 'error',
274
+ category: 'security',
275
+ message: 'eval() or Function() is a security risk',
276
+ file: context.file,
277
+ line,
278
+ });
279
+ }
280
+ return issues;
281
+ },
282
+ },
283
+ {
284
+ id: 'no-unused-vars',
285
+ name: 'No unused variables',
286
+ category: 'maintainability',
287
+ severity: 'warning',
288
+ description: 'Disallow unused variables',
289
+ enabled: true,
290
+ detect: (code, context) => {
291
+ const issues = [];
292
+ // Simple unused variable detection
293
+ const declarations = code.matchAll(/(?:const|let|var)\s+(\w+)(?:\s*:\s*[^=]+)?\s*=/g);
294
+ for (const match of declarations) {
295
+ const varName = match[1];
296
+ // Skip if variable name starts with underscore (intentionally unused)
297
+ if (varName.startsWith('_'))
298
+ continue;
299
+ // Check if used elsewhere (simple check)
300
+ const usageRegex = new RegExp(`\\b${varName}\\b`, 'g');
301
+ const usages = code.match(usageRegex);
302
+ // If only appears once (the declaration), it's unused
303
+ if (usages && usages.length === 1) {
304
+ const line = code.substring(0, match.index).split('\n').length;
305
+ issues.push({
306
+ id: `${context.file}:${line}:no-unused-vars`,
307
+ ruleId: 'no-unused-vars',
308
+ severity: 'warning',
309
+ category: 'maintainability',
310
+ message: `'${varName}' is declared but never used`,
311
+ file: context.file,
312
+ line,
313
+ });
314
+ }
315
+ }
316
+ return issues;
317
+ },
318
+ },
319
+ {
320
+ id: 'prefer-const',
321
+ name: 'Prefer const',
322
+ category: 'style',
323
+ severity: 'info',
324
+ description: 'Prefer const over let when variable is not reassigned',
325
+ enabled: true,
326
+ detect: (code, context) => {
327
+ const issues = [];
328
+ const letDeclarations = code.matchAll(/\blet\s+(\w+)/g);
329
+ for (const match of letDeclarations) {
330
+ const varName = match[1];
331
+ const afterDecl = code.substring((match.index ?? 0) + match[0].length);
332
+ // Check if variable is reassigned
333
+ const reassignRegex = new RegExp(`\\b${varName}\\s*=(?!=)`, 'g');
334
+ const reassignments = afterDecl.match(reassignRegex);
335
+ if (!reassignments || reassignments.length === 0) {
336
+ const line = code.substring(0, match.index).split('\n').length;
337
+ issues.push({
338
+ id: `${context.file}:${line}:prefer-const`,
339
+ ruleId: 'prefer-const',
340
+ severity: 'info',
341
+ category: 'style',
342
+ message: `'${varName}' is never reassigned, use const instead`,
343
+ file: context.file,
344
+ line,
345
+ fix: {
346
+ description: 'Replace let with const',
347
+ replacement: `const ${varName}`,
348
+ range: {
349
+ start: { line, column: 0 },
350
+ end: { line, column: match[0].length },
351
+ },
352
+ },
353
+ });
354
+ }
355
+ }
356
+ return issues;
357
+ },
358
+ },
359
+ ];
360
+ /**
361
+ * Static Analyzer
362
+ */
363
+ export class StaticAnalyzer {
364
+ config;
365
+ rules;
366
+ constructor(config) {
367
+ this.config = { ...DEFAULT_ANALYZER_CONFIG, ...config };
368
+ this.rules = [...BUILTIN_RULES];
369
+ // Add custom rules
370
+ if (this.config.customRules) {
371
+ this.rules.push(...this.config.customRules);
372
+ }
373
+ }
374
+ /**
375
+ * Analyze code
376
+ */
377
+ analyze(code, file, language = 'typescript') {
378
+ const startTime = Date.now();
379
+ const issues = [];
380
+ const context = {
381
+ file,
382
+ language,
383
+ options: this.config,
384
+ };
385
+ // Run enabled rules
386
+ for (const rule of this.rules) {
387
+ if (!rule.enabled)
388
+ continue;
389
+ if (!this.config.categories.includes(rule.category))
390
+ continue;
391
+ try {
392
+ const ruleIssues = rule.detect(code, context);
393
+ issues.push(...ruleIssues);
394
+ }
395
+ catch (error) {
396
+ // Rule failed, continue with others
397
+ console.warn(`Rule ${rule.id} failed:`, error);
398
+ }
399
+ }
400
+ // Filter by severity threshold
401
+ const filteredIssues = this.filterBySeverity(issues);
402
+ // Limit to max errors
403
+ const limitedIssues = filteredIssues.slice(0, this.config.maxErrors);
404
+ const analysisTime = Date.now() - startTime;
405
+ const summary = this.createSummary(limitedIssues);
406
+ return {
407
+ file,
408
+ issues: limitedIssues,
409
+ analysisTime,
410
+ summary,
411
+ };
412
+ }
413
+ /**
414
+ * Analyze multiple files
415
+ */
416
+ analyzeFiles(files) {
417
+ return files.map((f) => this.analyze(f.content, f.path, f.language));
418
+ }
419
+ /**
420
+ * Filter issues by severity threshold
421
+ */
422
+ filterBySeverity(issues) {
423
+ const severityOrder = ['error', 'warning', 'info', 'hint'];
424
+ const thresholdIndex = severityOrder.indexOf(this.config.severityThreshold);
425
+ return issues.filter((issue) => {
426
+ const issueIndex = severityOrder.indexOf(issue.severity);
427
+ return issueIndex <= thresholdIndex;
428
+ });
429
+ }
430
+ /**
431
+ * Create analysis summary
432
+ */
433
+ createSummary(issues) {
434
+ const bySeverity = {
435
+ error: 0,
436
+ warning: 0,
437
+ info: 0,
438
+ hint: 0,
439
+ };
440
+ const byCategory = {
441
+ syntax: 0,
442
+ type: 0,
443
+ style: 0,
444
+ complexity: 0,
445
+ maintainability: 0,
446
+ performance: 0,
447
+ security: 0,
448
+ 'best-practice': 0,
449
+ deprecated: 0,
450
+ };
451
+ for (const issue of issues) {
452
+ bySeverity[issue.severity]++;
453
+ byCategory[issue.category]++;
454
+ }
455
+ return {
456
+ totalIssues: issues.length,
457
+ bySeverity,
458
+ byCategory,
459
+ passed: bySeverity.error === 0,
460
+ };
461
+ }
462
+ /**
463
+ * Get available rules
464
+ */
465
+ getRules() {
466
+ return [...this.rules];
467
+ }
468
+ /**
469
+ * Enable/disable rule
470
+ */
471
+ setRuleEnabled(ruleId, enabled) {
472
+ const rule = this.rules.find((r) => r.id === ruleId);
473
+ if (rule) {
474
+ rule.enabled = enabled;
475
+ }
476
+ }
477
+ /**
478
+ * Add custom rule
479
+ */
480
+ addRule(rule) {
481
+ this.rules.push(rule);
482
+ }
483
+ }
484
+ /**
485
+ * Create static analyzer instance
486
+ */
487
+ export function createStaticAnalyzer(config) {
488
+ return new StaticAnalyzer(config);
489
+ }
490
+ //# sourceMappingURL=static-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-analyzer.js","sourceRoot":"","sources":["../../src/codegen/static-analyzer.ts"],"names":[],"mappings":"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"}