@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,579 @@
1
+ /**
2
+ * SOLID Validator
3
+ *
4
+ * Validates code against SOLID principles
5
+ *
6
+ * @packageDocumentation
7
+ * @module design/solid-validator
8
+ *
9
+ * @see REQ-DES-003 - SOLID Principles Validation
10
+ * @see Article III - Design Validation
11
+ */
12
+ /**
13
+ * SOLID principles information
14
+ */
15
+ export const SOLID_PRINCIPLES = {
16
+ S: {
17
+ code: 'S',
18
+ name: 'Single Responsibility Principle',
19
+ description: 'A class should have only one reason to change',
20
+ violationIndicators: [
21
+ 'Too many methods',
22
+ 'Methods with unrelated purposes',
23
+ 'Multiple domains handled',
24
+ ],
25
+ },
26
+ O: {
27
+ code: 'O',
28
+ name: 'Open/Closed Principle',
29
+ description: 'Open for extension, closed for modification',
30
+ violationIndicators: [
31
+ 'Switch statements on type',
32
+ 'If-else chains for types',
33
+ 'Concrete class dependencies',
34
+ ],
35
+ },
36
+ L: {
37
+ code: 'L',
38
+ name: 'Liskov Substitution Principle',
39
+ description: 'Subtypes must be substitutable for base types',
40
+ violationIndicators: [
41
+ 'Override that changes behavior',
42
+ 'Throwing unexpected exceptions',
43
+ 'Empty implementations',
44
+ ],
45
+ },
46
+ I: {
47
+ code: 'I',
48
+ name: 'Interface Segregation Principle',
49
+ description: 'Clients should not depend on unused methods',
50
+ violationIndicators: [
51
+ 'Large interfaces',
52
+ 'Partial implementations',
53
+ 'Unused method implementations',
54
+ ],
55
+ },
56
+ D: {
57
+ code: 'D',
58
+ name: 'Dependency Inversion Principle',
59
+ description: 'Depend on abstractions, not concretions',
60
+ violationIndicators: [
61
+ 'Direct concrete instantiation',
62
+ 'Importing concrete classes',
63
+ 'No interface/abstract usage',
64
+ ],
65
+ },
66
+ };
67
+ /**
68
+ * Default configuration
69
+ */
70
+ export const DEFAULT_SOLID_CONFIG = {
71
+ srpMethodThreshold: 10,
72
+ ispMethodThreshold: 5,
73
+ strictMode: false,
74
+ enabledPrinciples: ['S', 'O', 'L', 'I', 'D'],
75
+ };
76
+ /**
77
+ * SOLID Validator
78
+ */
79
+ export class SOLIDValidator {
80
+ config;
81
+ constructor(config) {
82
+ this.config = { ...DEFAULT_SOLID_CONFIG, ...config };
83
+ }
84
+ /**
85
+ * Validate code structure against SOLID
86
+ */
87
+ validate(structure) {
88
+ const violations = [];
89
+ const principleScores = {
90
+ S: 100, O: 100, L: 100, I: 100, D: 100,
91
+ };
92
+ // Validate each enabled principle
93
+ if (this.config.enabledPrinciples.includes('S')) {
94
+ const srpViolations = this.validateSRP(structure);
95
+ violations.push(...srpViolations);
96
+ principleScores.S = this.calculateScore(srpViolations, structure.classes.length);
97
+ }
98
+ if (this.config.enabledPrinciples.includes('O')) {
99
+ const ocpViolations = this.validateOCP(structure);
100
+ violations.push(...ocpViolations);
101
+ principleScores.O = this.calculateScore(ocpViolations, structure.classes.length);
102
+ }
103
+ if (this.config.enabledPrinciples.includes('L')) {
104
+ const lspViolations = this.validateLSP(structure);
105
+ violations.push(...lspViolations);
106
+ principleScores.L = this.calculateScore(lspViolations, structure.classes.length);
107
+ }
108
+ if (this.config.enabledPrinciples.includes('I')) {
109
+ const ispViolations = this.validateISP(structure);
110
+ violations.push(...ispViolations);
111
+ principleScores.I = this.calculateScore(ispViolations, structure.classes.length);
112
+ }
113
+ if (this.config.enabledPrinciples.includes('D')) {
114
+ const dipViolations = this.validateDIP(structure);
115
+ violations.push(...dipViolations);
116
+ principleScores.D = this.calculateScore(dipViolations, structure.classes.length);
117
+ }
118
+ // Calculate overall score
119
+ const enabledCount = this.config.enabledPrinciples.length;
120
+ const overallScore = enabledCount > 0
121
+ ? this.config.enabledPrinciples.reduce((sum, p) => sum + principleScores[p], 0) / enabledCount
122
+ : 100;
123
+ // Generate recommendations
124
+ const recommendations = this.generateRecommendations(violations, principleScores);
125
+ // Generate summary
126
+ const summary = this.generateSummary(structure, violations);
127
+ return {
128
+ score: Math.round(overallScore),
129
+ principleScores,
130
+ violations,
131
+ recommendations,
132
+ summary,
133
+ };
134
+ }
135
+ /**
136
+ * Validate source code string
137
+ */
138
+ validateCode(code) {
139
+ const structure = this.parseCodeStructure(code);
140
+ return this.validate(structure);
141
+ }
142
+ /**
143
+ * Validate Single Responsibility Principle
144
+ */
145
+ validateSRP(structure) {
146
+ const violations = [];
147
+ for (const cls of structure.classes) {
148
+ if (cls.isInterface)
149
+ continue;
150
+ // Check method count
151
+ if (cls.methods.length > this.config.srpMethodThreshold) {
152
+ violations.push({
153
+ principle: 'S',
154
+ severity: 'high',
155
+ element: cls.name,
156
+ description: `Class has ${cls.methods.length} methods (threshold: ${this.config.srpMethodThreshold})`,
157
+ suggestion: 'Consider extracting related methods into separate classes',
158
+ });
159
+ }
160
+ // Check for god class indicators
161
+ const godClassIndicators = this.detectGodClassIndicators(cls);
162
+ if (godClassIndicators.length > 2) {
163
+ violations.push({
164
+ principle: 'S',
165
+ severity: 'medium',
166
+ element: cls.name,
167
+ description: `Class appears to handle multiple responsibilities: ${godClassIndicators.join(', ')}`,
168
+ suggestion: 'Split into smaller, focused classes',
169
+ });
170
+ }
171
+ }
172
+ return violations;
173
+ }
174
+ /**
175
+ * Validate Open/Closed Principle
176
+ */
177
+ validateOCP(structure) {
178
+ const violations = [];
179
+ for (const cls of structure.classes) {
180
+ if (cls.isInterface || cls.isAbstract)
181
+ continue;
182
+ // Check for type-checking patterns (suggests OCP violation)
183
+ for (const method of cls.methods) {
184
+ if (this.suggestsTypeChecking(method)) {
185
+ violations.push({
186
+ principle: 'O',
187
+ severity: 'medium',
188
+ element: `${cls.name}.${method}`,
189
+ description: 'Method name suggests type-checking logic',
190
+ suggestion: 'Consider using polymorphism instead of type checks',
191
+ });
192
+ }
193
+ }
194
+ // Check if class could benefit from abstraction
195
+ if (!cls.isAbstract && !cls.implements.length && cls.methods.length > 3) {
196
+ const hasVariantMethods = cls.methods.some((m) => m.includes('type') || m.includes('kind') || m.includes('mode'));
197
+ if (hasVariantMethods) {
198
+ violations.push({
199
+ principle: 'O',
200
+ severity: 'low',
201
+ element: cls.name,
202
+ description: 'Class might benefit from strategy pattern',
203
+ suggestion: 'Extract variant behavior into strategy classes',
204
+ });
205
+ }
206
+ }
207
+ }
208
+ return violations;
209
+ }
210
+ /**
211
+ * Validate Liskov Substitution Principle
212
+ */
213
+ validateLSP(structure) {
214
+ const violations = [];
215
+ // Build inheritance hierarchy
216
+ const hierarchy = this.buildHierarchy(structure);
217
+ for (const [child, parent] of hierarchy) {
218
+ const childClass = structure.classes.find((c) => c.name === child);
219
+ const parentClass = structure.classes.find((c) => c.name === parent);
220
+ if (!childClass || !parentClass)
221
+ continue;
222
+ // Check for empty/noop implementations
223
+ const parentMethods = new Set(parentClass.methods);
224
+ for (const method of childClass.methods) {
225
+ if (parentMethods.has(method)) {
226
+ // Check for potential violation indicators in method names
227
+ if (method.startsWith('throw') || method.includes('NotSupported')) {
228
+ violations.push({
229
+ principle: 'L',
230
+ severity: 'high',
231
+ element: `${child}.${method}`,
232
+ description: 'Method might throw or be unsupported, violating substitutability',
233
+ suggestion: 'Ensure subclass can fully substitute parent class',
234
+ });
235
+ }
236
+ }
237
+ }
238
+ // Check if child removes parent functionality
239
+ if (childClass.methods.length < parentClass.methods.length / 2) {
240
+ violations.push({
241
+ principle: 'L',
242
+ severity: 'medium',
243
+ element: child,
244
+ description: 'Subclass has significantly fewer methods than parent',
245
+ suggestion: 'Verify that inheritance is appropriate here',
246
+ });
247
+ }
248
+ }
249
+ return violations;
250
+ }
251
+ /**
252
+ * Validate Interface Segregation Principle
253
+ */
254
+ validateISP(structure) {
255
+ const violations = [];
256
+ for (const cls of structure.classes) {
257
+ if (!cls.isInterface)
258
+ continue;
259
+ // Check interface size
260
+ if (cls.methods.length > this.config.ispMethodThreshold) {
261
+ violations.push({
262
+ principle: 'I',
263
+ severity: 'medium',
264
+ element: cls.name,
265
+ description: `Interface has ${cls.methods.length} methods (threshold: ${this.config.ispMethodThreshold})`,
266
+ suggestion: 'Consider splitting into smaller, focused interfaces',
267
+ });
268
+ }
269
+ // Check for unrelated method groups
270
+ const methodGroups = this.groupMethodsByPurpose(cls.methods);
271
+ if (methodGroups.size > 2) {
272
+ violations.push({
273
+ principle: 'I',
274
+ severity: 'low',
275
+ element: cls.name,
276
+ description: `Interface appears to have ${methodGroups.size} distinct method groups`,
277
+ suggestion: 'Split into multiple focused interfaces',
278
+ });
279
+ }
280
+ }
281
+ // Check for fat interface implementations
282
+ for (const cls of structure.classes) {
283
+ if (cls.isInterface)
284
+ continue;
285
+ for (const impl of cls.implements) {
286
+ const iface = structure.classes.find((c) => c.name === impl && c.isInterface);
287
+ if (iface && iface.methods.length > this.config.ispMethodThreshold * 2) {
288
+ violations.push({
289
+ principle: 'I',
290
+ severity: 'medium',
291
+ element: cls.name,
292
+ description: `Implements large interface ${impl} (${iface.methods.length} methods)`,
293
+ suggestion: 'Verify all interface methods are needed',
294
+ });
295
+ }
296
+ }
297
+ }
298
+ return violations;
299
+ }
300
+ /**
301
+ * Validate Dependency Inversion Principle
302
+ */
303
+ validateDIP(structure) {
304
+ const violations = [];
305
+ // Get all interfaces/abstracts
306
+ const abstractions = new Set(structure.classes
307
+ .filter((c) => c.isInterface || c.isAbstract)
308
+ .map((c) => c.name));
309
+ for (const cls of structure.classes) {
310
+ if (cls.isInterface || cls.isAbstract)
311
+ continue;
312
+ // Check if high-level class depends on concretions
313
+ const isHighLevel = cls.name.includes('Manager') ||
314
+ cls.name.includes('Service') ||
315
+ cls.name.includes('Controller') ||
316
+ cls.name.includes('Handler');
317
+ if (isHighLevel) {
318
+ // Check relationships for concrete dependencies
319
+ const dependencies = structure.relationships
320
+ .filter((r) => r.source === cls.name && r.type === 'dependency');
321
+ for (const dep of dependencies) {
322
+ if (!abstractions.has(dep.target)) {
323
+ // Might be depending on concrete class
324
+ const targetClass = structure.classes.find((c) => c.name === dep.target);
325
+ if (targetClass && !targetClass.isInterface && !targetClass.isAbstract) {
326
+ violations.push({
327
+ principle: 'D',
328
+ severity: 'medium',
329
+ element: cls.name,
330
+ description: `High-level class depends on concrete ${dep.target}`,
331
+ suggestion: `Depend on an abstraction (interface) instead of ${dep.target}`,
332
+ });
333
+ }
334
+ }
335
+ }
336
+ // Check if using constructor injection
337
+ const usesInjection = cls.methods.some((m) => m.includes('inject') || m === 'constructor') && cls.implements.length > 0;
338
+ if (!usesInjection && dependencies.length > 0) {
339
+ violations.push({
340
+ principle: 'D',
341
+ severity: 'low',
342
+ element: cls.name,
343
+ description: 'Consider using dependency injection',
344
+ suggestion: 'Inject dependencies through constructor',
345
+ });
346
+ }
347
+ }
348
+ }
349
+ return violations;
350
+ }
351
+ /**
352
+ * Detect god class indicators
353
+ */
354
+ detectGodClassIndicators(cls) {
355
+ const indicators = [];
356
+ const methodPrefixes = new Map();
357
+ for (const method of cls.methods) {
358
+ // Extract prefix (e.g., "get", "set", "handle", "process")
359
+ const match = method.match(/^([a-z]+)/i);
360
+ if (match) {
361
+ const prefix = match[1].toLowerCase();
362
+ methodPrefixes.set(prefix, (methodPrefixes.get(prefix) ?? 0) + 1);
363
+ }
364
+ }
365
+ // Different responsibility indicators
366
+ const responsibilityPrefixes = ['handle', 'process', 'calculate', 'validate', 'render', 'save', 'load', 'send'];
367
+ for (const prefix of responsibilityPrefixes) {
368
+ if ((methodPrefixes.get(prefix) ?? 0) >= 2) {
369
+ indicators.push(`${prefix}*`);
370
+ }
371
+ }
372
+ return indicators;
373
+ }
374
+ /**
375
+ * Check if method name suggests type checking
376
+ */
377
+ suggestsTypeChecking(methodName) {
378
+ const patterns = [
379
+ /^handle\w+Type$/i,
380
+ /^process\w+Kind$/i,
381
+ /^by(Type|Kind|Mode)$/i,
382
+ ];
383
+ return patterns.some((p) => p.test(methodName));
384
+ }
385
+ /**
386
+ * Build inheritance hierarchy
387
+ */
388
+ buildHierarchy(structure) {
389
+ const hierarchy = new Map();
390
+ for (const cls of structure.classes) {
391
+ if (cls.extends) {
392
+ hierarchy.set(cls.name, cls.extends);
393
+ }
394
+ }
395
+ return hierarchy;
396
+ }
397
+ /**
398
+ * Group methods by purpose
399
+ */
400
+ groupMethodsByPurpose(methods) {
401
+ const groups = new Map();
402
+ for (const method of methods) {
403
+ // Simple grouping by prefix
404
+ const match = method.match(/^([a-z]+)/i);
405
+ const prefix = match ? match[1].toLowerCase() : 'other';
406
+ if (!groups.has(prefix)) {
407
+ groups.set(prefix, []);
408
+ }
409
+ groups.get(prefix).push(method);
410
+ }
411
+ return groups;
412
+ }
413
+ /**
414
+ * Calculate score from violations
415
+ */
416
+ calculateScore(violations, classCount) {
417
+ if (classCount === 0)
418
+ return 100;
419
+ const penaltyMap = { high: 20, medium: 10, low: 5 };
420
+ const totalPenalty = violations.reduce((sum, v) => sum + penaltyMap[v.severity], 0);
421
+ const maxPenalty = classCount * 30;
422
+ const penalty = Math.min(totalPenalty, maxPenalty);
423
+ return Math.max(0, Math.round(100 - (penalty / maxPenalty) * 100));
424
+ }
425
+ /**
426
+ * Generate recommendations
427
+ */
428
+ generateRecommendations(violations, scores) {
429
+ const recommendations = [];
430
+ // Prioritize lowest scores
431
+ const sortedPrinciples = Object.keys(scores)
432
+ .sort((a, b) => scores[a] - scores[b]);
433
+ for (const principle of sortedPrinciples.slice(0, 2)) {
434
+ if (scores[principle] < 70) {
435
+ const info = SOLID_PRINCIPLES[principle];
436
+ recommendations.push(`Focus on ${info.name} (${principle}): ${info.description}`);
437
+ }
438
+ }
439
+ // Add specific recommendations for high-severity violations
440
+ const highViolations = violations.filter((v) => v.severity === 'high');
441
+ for (const v of highViolations.slice(0, 3)) {
442
+ recommendations.push(`Fix ${v.element}: ${v.suggestion}`);
443
+ }
444
+ if (recommendations.length === 0) {
445
+ recommendations.push('Good SOLID compliance! Continue following best practices.');
446
+ }
447
+ return recommendations;
448
+ }
449
+ /**
450
+ * Generate summary
451
+ */
452
+ generateSummary(structure, violations) {
453
+ const classesAnalyzed = structure.classes.filter((c) => !c.isInterface).length;
454
+ const classesWithViolations = new Set(violations.map((v) => v.element.split('.')[0])).size;
455
+ const violationsByPrinciple = {
456
+ S: 0, O: 0, L: 0, I: 0, D: 0,
457
+ };
458
+ for (const v of violations) {
459
+ violationsByPrinciple[v.principle]++;
460
+ }
461
+ const violationRatio = classesAnalyzed > 0
462
+ ? classesWithViolations / classesAnalyzed
463
+ : 0;
464
+ let complianceLevel;
465
+ if (violationRatio < 0.1)
466
+ complianceLevel = 'excellent';
467
+ else if (violationRatio < 0.3)
468
+ complianceLevel = 'good';
469
+ else if (violationRatio < 0.5)
470
+ complianceLevel = 'moderate';
471
+ else
472
+ complianceLevel = 'poor';
473
+ return {
474
+ classesAnalyzed,
475
+ classesWithViolations,
476
+ totalViolations: violations.length,
477
+ violationsByPrinciple,
478
+ complianceLevel,
479
+ };
480
+ }
481
+ /**
482
+ * Parse code into structure (simplified)
483
+ */
484
+ parseCodeStructure(code) {
485
+ const classes = [];
486
+ const relationships = [];
487
+ // Simple regex-based parsing
488
+ const classRegex = /(?:export\s+)?(?:abstract\s+)?(class|interface)\s+(\w+)(?:\s+extends\s+(\w+))?(?:\s+implements\s+([^{]+))?/g;
489
+ let match;
490
+ while ((match = classRegex.exec(code)) !== null) {
491
+ const isInterface = match[1] === 'interface';
492
+ const isAbstract = code.substring(Math.max(0, match.index - 20), match.index).includes('abstract');
493
+ const methods = this.extractMethods(code, match[2]);
494
+ const properties = this.extractProperties(code, match[2]);
495
+ classes.push({
496
+ name: match[2],
497
+ isInterface,
498
+ isAbstract,
499
+ methods,
500
+ properties,
501
+ extends: match[3],
502
+ implements: match[4] ? match[4].split(',').map((s) => s.trim()) : [],
503
+ });
504
+ if (match[3]) {
505
+ relationships.push({
506
+ source: match[2],
507
+ target: match[3],
508
+ type: 'inheritance',
509
+ });
510
+ }
511
+ }
512
+ return { classes, functions: [], relationships };
513
+ }
514
+ /**
515
+ * Extract methods
516
+ */
517
+ extractMethods(code, className) {
518
+ const methods = [];
519
+ const classStart = code.indexOf(`class ${className}`) || code.indexOf(`interface ${className}`);
520
+ if (classStart === -1)
521
+ return methods;
522
+ let braceCount = 0;
523
+ let classEnd = classStart;
524
+ for (let i = classStart; i < code.length; i++) {
525
+ if (code[i] === '{')
526
+ braceCount++;
527
+ if (code[i] === '}')
528
+ braceCount--;
529
+ if (braceCount === 0 && code[i] === '}') {
530
+ classEnd = i;
531
+ break;
532
+ }
533
+ }
534
+ const classBody = code.substring(classStart, classEnd);
535
+ const methodRegex = /(?:public|private|protected|static|async)?\s*(\w+)\s*\([^)]*\)/g;
536
+ let match;
537
+ while ((match = methodRegex.exec(classBody)) !== null) {
538
+ if (!['constructor', 'if', 'for', 'while', 'switch'].includes(match[1])) {
539
+ methods.push(match[1]);
540
+ }
541
+ }
542
+ return methods;
543
+ }
544
+ /**
545
+ * Extract properties
546
+ */
547
+ extractProperties(code, className) {
548
+ const properties = [];
549
+ const classStart = code.indexOf(`class ${className}`);
550
+ if (classStart === -1)
551
+ return properties;
552
+ const classBody = code.substring(classStart, classStart + 1000);
553
+ const propRegex = /(?:public|private|protected|static|readonly)?\s+(\w+)\s*[;:=]/g;
554
+ let match;
555
+ while ((match = propRegex.exec(classBody)) !== null) {
556
+ properties.push(match[1]);
557
+ }
558
+ return properties;
559
+ }
560
+ /**
561
+ * Get principle information
562
+ */
563
+ static getPrincipleInfo(principle) {
564
+ return SOLID_PRINCIPLES[principle];
565
+ }
566
+ /**
567
+ * Get all principles
568
+ */
569
+ static getAllPrinciples() {
570
+ return Object.values(SOLID_PRINCIPLES);
571
+ }
572
+ }
573
+ /**
574
+ * Create SOLID validator instance
575
+ */
576
+ export function createSOLIDValidator(config) {
577
+ return new SOLIDValidator(config);
578
+ }
579
+ //# sourceMappingURL=solid-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solid-validator.js","sourceRoot":"","sources":["../../src/design/solid-validator.ts"],"names":[],"mappings":"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"}