@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.
- package/bin/musubix.js +18 -0
- package/dist/__tests__/index.test.d.ts +2 -0
- package/dist/__tests__/index.test.d.ts.map +1 -0
- package/dist/__tests__/index.test.js +27 -0
- package/dist/__tests__/index.test.js.map +1 -0
- package/dist/auth/auth-manager.d.ts +320 -0
- package/dist/auth/auth-manager.d.ts.map +1 -0
- package/dist/auth/auth-manager.js +580 -0
- package/dist/auth/auth-manager.js.map +1 -0
- package/dist/cli/base.d.ts +58 -0
- package/dist/cli/base.d.ts.map +1 -0
- package/dist/cli/base.js +93 -0
- package/dist/cli/base.js.map +1 -0
- package/dist/cli/commands/help.d.ts +17 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +228 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/index.d.ts +14 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +25 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +38 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +258 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +9 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/codegen/coding-standards.d.ts +250 -0
- package/dist/codegen/coding-standards.d.ts.map +1 -0
- package/dist/codegen/coding-standards.js +976 -0
- package/dist/codegen/coding-standards.js.map +1 -0
- package/dist/codegen/coverage-reporter.d.ts +264 -0
- package/dist/codegen/coverage-reporter.d.ts.map +1 -0
- package/dist/codegen/coverage-reporter.js +697 -0
- package/dist/codegen/coverage-reporter.js.map +1 -0
- package/dist/codegen/dependency-analyzer.d.ts +271 -0
- package/dist/codegen/dependency-analyzer.d.ts.map +1 -0
- package/dist/codegen/dependency-analyzer.js +661 -0
- package/dist/codegen/dependency-analyzer.js.map +1 -0
- package/dist/codegen/generator.d.ts +275 -0
- package/dist/codegen/generator.d.ts.map +1 -0
- package/dist/codegen/generator.js +781 -0
- package/dist/codegen/generator.js.map +1 -0
- package/dist/codegen/index.d.ts +18 -0
- package/dist/codegen/index.d.ts.map +1 -0
- package/dist/codegen/index.js +27 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/codegen/integration-test-generator.d.ts +312 -0
- package/dist/codegen/integration-test-generator.d.ts.map +1 -0
- package/dist/codegen/integration-test-generator.js +765 -0
- package/dist/codegen/integration-test-generator.js.map +1 -0
- package/dist/codegen/pattern-conformance.d.ts +309 -0
- package/dist/codegen/pattern-conformance.d.ts.map +1 -0
- package/dist/codegen/pattern-conformance.js +590 -0
- package/dist/codegen/pattern-conformance.js.map +1 -0
- package/dist/codegen/quality-metrics.d.ts +235 -0
- package/dist/codegen/quality-metrics.d.ts.map +1 -0
- package/dist/codegen/quality-metrics.js +439 -0
- package/dist/codegen/quality-metrics.js.map +1 -0
- package/dist/codegen/security-scanner.d.ts +179 -0
- package/dist/codegen/security-scanner.d.ts.map +1 -0
- package/dist/codegen/security-scanner.js +495 -0
- package/dist/codegen/security-scanner.js.map +1 -0
- package/dist/codegen/static-analyzer.d.ts +188 -0
- package/dist/codegen/static-analyzer.d.ts.map +1 -0
- package/dist/codegen/static-analyzer.js +490 -0
- package/dist/codegen/static-analyzer.js.map +1 -0
- package/dist/codegen/unit-test-generator.d.ts +289 -0
- package/dist/codegen/unit-test-generator.d.ts.map +1 -0
- package/dist/codegen/unit-test-generator.js +634 -0
- package/dist/codegen/unit-test-generator.js.map +1 -0
- package/dist/design/adr-generator.d.ts +227 -0
- package/dist/design/adr-generator.d.ts.map +1 -0
- package/dist/design/adr-generator.js +423 -0
- package/dist/design/adr-generator.js.map +1 -0
- package/dist/design/c4-generator.d.ts +267 -0
- package/dist/design/c4-generator.d.ts.map +1 -0
- package/dist/design/c4-generator.js +453 -0
- package/dist/design/c4-generator.js.map +1 -0
- package/dist/design/framework-optimizer.d.ts +190 -0
- package/dist/design/framework-optimizer.d.ts.map +1 -0
- package/dist/design/framework-optimizer.js +589 -0
- package/dist/design/framework-optimizer.js.map +1 -0
- package/dist/design/index.d.ts +12 -0
- package/dist/design/index.d.ts.map +1 -0
- package/dist/design/index.js +13 -0
- package/dist/design/index.js.map +1 -0
- package/dist/design/pattern-detector.d.ts +270 -0
- package/dist/design/pattern-detector.d.ts.map +1 -0
- package/dist/design/pattern-detector.js +621 -0
- package/dist/design/pattern-detector.js.map +1 -0
- package/dist/design/solid-validator.d.ts +188 -0
- package/dist/design/solid-validator.d.ts.map +1 -0
- package/dist/design/solid-validator.js +579 -0
- package/dist/design/solid-validator.js.map +1 -0
- package/dist/error/data-persistence.d.ts +311 -0
- package/dist/error/data-persistence.d.ts.map +1 -0
- package/dist/error/data-persistence.js +586 -0
- package/dist/error/data-persistence.js.map +1 -0
- package/dist/error/graceful-degradation.d.ts +309 -0
- package/dist/error/graceful-degradation.d.ts.map +1 -0
- package/dist/error/graceful-degradation.js +510 -0
- package/dist/error/graceful-degradation.js.map +1 -0
- package/dist/error/index.d.ts +11 -0
- package/dist/error/index.d.ts.map +1 -0
- package/dist/error/index.js +19 -0
- package/dist/error/index.js.map +1 -0
- package/dist/explanation/explanation-generator.d.ts +228 -0
- package/dist/explanation/explanation-generator.d.ts.map +1 -0
- package/dist/explanation/explanation-generator.js +662 -0
- package/dist/explanation/explanation-generator.js.map +1 -0
- package/dist/explanation/index.d.ts +11 -0
- package/dist/explanation/index.d.ts.map +1 -0
- package/dist/explanation/index.js +19 -0
- package/dist/explanation/index.js.map +1 -0
- package/dist/explanation/reasoning-chain.d.ts +314 -0
- package/dist/explanation/reasoning-chain.d.ts.map +1 -0
- package/dist/explanation/reasoning-chain.js +414 -0
- package/dist/explanation/reasoning-chain.js.map +1 -0
- package/dist/explanation/visual-explanation.d.ts +315 -0
- package/dist/explanation/visual-explanation.d.ts.map +1 -0
- package/dist/explanation/visual-explanation.js +667 -0
- package/dist/explanation/visual-explanation.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/requirements/decomposer.d.ts +235 -0
- package/dist/requirements/decomposer.d.ts.map +1 -0
- package/dist/requirements/decomposer.js +587 -0
- package/dist/requirements/decomposer.js.map +1 -0
- package/dist/requirements/related-finder.d.ts +261 -0
- package/dist/requirements/related-finder.d.ts.map +1 -0
- package/dist/requirements/related-finder.js +629 -0
- package/dist/requirements/related-finder.js.map +1 -0
- package/dist/traceability/impact.d.ts +196 -0
- package/dist/traceability/impact.d.ts.map +1 -0
- package/dist/traceability/impact.js +438 -0
- package/dist/traceability/impact.js.map +1 -0
- package/dist/traceability/index.d.ts +9 -0
- package/dist/traceability/index.d.ts.map +1 -0
- package/dist/traceability/index.js +10 -0
- package/dist/traceability/index.js.map +1 -0
- package/dist/traceability/manager.d.ts +266 -0
- package/dist/traceability/manager.d.ts.map +1 -0
- package/dist/traceability/manager.js +412 -0
- package/dist/traceability/manager.js.map +1 -0
- package/dist/types/common.d.ts +294 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +15 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/ears.d.ts +158 -0
- package/dist/types/ears.d.ts.map +1 -0
- package/dist/types/ears.js +33 -0
- package/dist/types/ears.js.map +1 -0
- package/dist/types/errors.d.ts +176 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +55 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/data-protector.d.ts +122 -0
- package/dist/utils/data-protector.d.ts.map +1 -0
- package/dist/utils/data-protector.js +275 -0
- package/dist/utils/data-protector.js.map +1 -0
- package/dist/utils/error-handler.d.ts +101 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +324 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/i18n-manager.d.ts +259 -0
- package/dist/utils/i18n-manager.d.ts.map +1 -0
- package/dist/utils/i18n-manager.js +554 -0
- package/dist/utils/i18n-manager.js.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +10 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +120 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +237 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/performance-profiler.d.ts +251 -0
- package/dist/utils/performance-profiler.d.ts.map +1 -0
- package/dist/utils/performance-profiler.js +458 -0
- package/dist/utils/performance-profiler.js.map +1 -0
- package/dist/utils/scalability-optimizer.d.ts +294 -0
- package/dist/utils/scalability-optimizer.d.ts.map +1 -0
- package/dist/utils/scalability-optimizer.js +606 -0
- package/dist/utils/scalability-optimizer.js.map +1 -0
- package/dist/utils/structured-logger.d.ts +294 -0
- package/dist/utils/structured-logger.d.ts.map +1 -0
- package/dist/utils/structured-logger.js +630 -0
- package/dist/utils/structured-logger.js.map +1 -0
- package/dist/utils/version-compatibility.d.ts +217 -0
- package/dist/utils/version-compatibility.d.ts.map +1 -0
- package/dist/utils/version-compatibility.js +443 -0
- package/dist/utils/version-compatibility.js.map +1 -0
- package/dist/validators/ears-validator.d.ts +182 -0
- package/dist/validators/ears-validator.d.ts.map +1 -0
- package/dist/validators/ears-validator.js +357 -0
- package/dist/validators/ears-validator.js.map +1 -0
- package/dist/validators/index.d.ts +8 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/dist/validators/index.js +9 -0
- package/dist/validators/index.js.map +1 -0
- package/dist/version.d.ts +8 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +8 -0
- package/dist/version.js.map +1 -0
- package/package.json +100 -0
|
@@ -0,0 +1,589 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Framework Optimizer
|
|
3
|
+
*
|
|
4
|
+
* Provides framework-specific optimizations and best practices
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module design/framework-optimizer
|
|
8
|
+
*
|
|
9
|
+
* @see REQ-DES-002 - Framework Optimization
|
|
10
|
+
* @see Article III - Design Validation
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Framework definitions
|
|
14
|
+
*/
|
|
15
|
+
export const FRAMEWORKS = {
|
|
16
|
+
react: {
|
|
17
|
+
id: 'react',
|
|
18
|
+
name: 'React',
|
|
19
|
+
category: 'frontend',
|
|
20
|
+
patterns: ['component', 'hooks', 'jsx', 'virtual-dom'],
|
|
21
|
+
detectionPatterns: ['import.*react', 'useState|useEffect|useCallback', 'React\\.Component'],
|
|
22
|
+
bestPractices: [
|
|
23
|
+
{
|
|
24
|
+
id: 'react-memo',
|
|
25
|
+
name: 'Use React.memo for expensive components',
|
|
26
|
+
description: 'Wrap expensive components with React.memo to prevent unnecessary re-renders',
|
|
27
|
+
rationale: 'Improves performance by avoiding re-renders when props haven\'t changed',
|
|
28
|
+
priority: 'high',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
id: 'react-keys',
|
|
32
|
+
name: 'Use stable keys in lists',
|
|
33
|
+
description: 'Use unique, stable IDs as keys instead of array indices',
|
|
34
|
+
rationale: 'Prevents reconciliation issues and improves performance',
|
|
35
|
+
priority: 'high',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: 'react-hooks-deps',
|
|
39
|
+
name: 'Correct dependency arrays',
|
|
40
|
+
description: 'Include all dependencies in useEffect, useCallback, useMemo',
|
|
41
|
+
rationale: 'Prevents stale closures and unexpected behavior',
|
|
42
|
+
priority: 'high',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
id: 'react-suspense',
|
|
46
|
+
name: 'Use Suspense for code splitting',
|
|
47
|
+
description: 'Implement React.lazy and Suspense for large components',
|
|
48
|
+
rationale: 'Reduces initial bundle size and improves loading performance',
|
|
49
|
+
priority: 'medium',
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
antiPatterns: [
|
|
53
|
+
{
|
|
54
|
+
id: 'react-inline-func',
|
|
55
|
+
name: 'Inline function in render',
|
|
56
|
+
description: 'Creating new function references in render causes unnecessary re-renders',
|
|
57
|
+
detection: /onClick=\{\s*\(\)\s*=>/,
|
|
58
|
+
severity: 'medium',
|
|
59
|
+
fix: 'Use useCallback or define handler outside render',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
id: 'react-index-key',
|
|
63
|
+
name: 'Using index as key',
|
|
64
|
+
description: 'Using array index as key can cause rendering issues',
|
|
65
|
+
detection: /key=\{(?:index|i|idx)\}/,
|
|
66
|
+
severity: 'medium',
|
|
67
|
+
fix: 'Use unique item IDs as keys',
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
id: 'react-direct-state',
|
|
71
|
+
name: 'Direct state mutation',
|
|
72
|
+
description: 'Mutating state directly instead of using setState',
|
|
73
|
+
detection: /this\.state\.\w+\s*=/,
|
|
74
|
+
severity: 'high',
|
|
75
|
+
fix: 'Use setState or useState setter function',
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
},
|
|
79
|
+
vue: {
|
|
80
|
+
id: 'vue',
|
|
81
|
+
name: 'Vue.js',
|
|
82
|
+
category: 'frontend',
|
|
83
|
+
patterns: ['component', 'reactive', 'single-file-component', 'composition-api'],
|
|
84
|
+
detectionPatterns: ['import.*vue', 'defineComponent', 'ref\\(|reactive\\(', '\\.vue$'],
|
|
85
|
+
bestPractices: [
|
|
86
|
+
{
|
|
87
|
+
id: 'vue-composition',
|
|
88
|
+
name: 'Use Composition API',
|
|
89
|
+
description: 'Prefer Composition API for complex component logic',
|
|
90
|
+
rationale: 'Better code organization and TypeScript support',
|
|
91
|
+
priority: 'medium',
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
id: 'vue-computed',
|
|
95
|
+
name: 'Use computed for derived state',
|
|
96
|
+
description: 'Use computed properties instead of methods for derived values',
|
|
97
|
+
rationale: 'Caching improves performance for expensive calculations',
|
|
98
|
+
priority: 'high',
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
antiPatterns: [
|
|
102
|
+
{
|
|
103
|
+
id: 'vue-v-if-v-for',
|
|
104
|
+
name: 'v-if with v-for',
|
|
105
|
+
description: 'Using v-if and v-for on the same element',
|
|
106
|
+
detection: /v-for.*v-if|v-if.*v-for/,
|
|
107
|
+
severity: 'high',
|
|
108
|
+
fix: 'Use computed property to filter list before rendering',
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
},
|
|
112
|
+
express: {
|
|
113
|
+
id: 'express',
|
|
114
|
+
name: 'Express.js',
|
|
115
|
+
category: 'backend',
|
|
116
|
+
patterns: ['middleware', 'routing', 'rest-api'],
|
|
117
|
+
detectionPatterns: ['require.*express|import.*express', 'app\\.get|app\\.post|app\\.use'],
|
|
118
|
+
bestPractices: [
|
|
119
|
+
{
|
|
120
|
+
id: 'express-helmet',
|
|
121
|
+
name: 'Use Helmet for security',
|
|
122
|
+
description: 'Add Helmet middleware for security headers',
|
|
123
|
+
rationale: 'Protects against common web vulnerabilities',
|
|
124
|
+
priority: 'high',
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
id: 'express-error-handler',
|
|
128
|
+
name: 'Centralized error handling',
|
|
129
|
+
description: 'Implement error handling middleware',
|
|
130
|
+
rationale: 'Consistent error responses and logging',
|
|
131
|
+
priority: 'high',
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
id: 'express-validation',
|
|
135
|
+
name: 'Request validation',
|
|
136
|
+
description: 'Validate request body, params, and query',
|
|
137
|
+
rationale: 'Prevents invalid data and security issues',
|
|
138
|
+
priority: 'high',
|
|
139
|
+
},
|
|
140
|
+
],
|
|
141
|
+
antiPatterns: [
|
|
142
|
+
{
|
|
143
|
+
id: 'express-sync-code',
|
|
144
|
+
name: 'Synchronous blocking code',
|
|
145
|
+
description: 'Using synchronous operations in routes',
|
|
146
|
+
detection: /readFileSync|writeFileSync|execSync/,
|
|
147
|
+
severity: 'high',
|
|
148
|
+
fix: 'Use async alternatives',
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
id: 'express-uncaught',
|
|
152
|
+
name: 'Uncaught async errors',
|
|
153
|
+
description: 'Async route handlers without try-catch or error middleware',
|
|
154
|
+
detection: /async.*\(req.*res.*\)\s*=>\s*\{(?!.*try)/,
|
|
155
|
+
severity: 'high',
|
|
156
|
+
fix: 'Wrap async handlers with try-catch or use express-async-errors',
|
|
157
|
+
},
|
|
158
|
+
],
|
|
159
|
+
},
|
|
160
|
+
nestjs: {
|
|
161
|
+
id: 'nestjs',
|
|
162
|
+
name: 'NestJS',
|
|
163
|
+
category: 'backend',
|
|
164
|
+
patterns: ['dependency-injection', 'decorator', 'module', 'controller'],
|
|
165
|
+
detectionPatterns: ['@nestjs', '@Module|@Controller|@Injectable', 'NestFactory'],
|
|
166
|
+
bestPractices: [
|
|
167
|
+
{
|
|
168
|
+
id: 'nest-dto',
|
|
169
|
+
name: 'Use DTOs for validation',
|
|
170
|
+
description: 'Define DTOs with class-validator decorators',
|
|
171
|
+
rationale: 'Type-safe validation and documentation',
|
|
172
|
+
priority: 'high',
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
id: 'nest-guards',
|
|
176
|
+
name: 'Use Guards for authorization',
|
|
177
|
+
description: 'Implement Guards instead of inline auth checks',
|
|
178
|
+
rationale: 'Separation of concerns and reusability',
|
|
179
|
+
priority: 'high',
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
id: 'nest-interceptors',
|
|
183
|
+
name: 'Use Interceptors for cross-cutting concerns',
|
|
184
|
+
description: 'Implement interceptors for logging, caching, transformation',
|
|
185
|
+
rationale: 'AOP-style code organization',
|
|
186
|
+
priority: 'medium',
|
|
187
|
+
},
|
|
188
|
+
],
|
|
189
|
+
antiPatterns: [
|
|
190
|
+
{
|
|
191
|
+
id: 'nest-circular-dep',
|
|
192
|
+
name: 'Circular dependency',
|
|
193
|
+
description: 'Modules or services depending on each other',
|
|
194
|
+
detection: /forwardRef/,
|
|
195
|
+
severity: 'medium',
|
|
196
|
+
fix: 'Refactor to remove circular dependency or use forwardRef carefully',
|
|
197
|
+
},
|
|
198
|
+
],
|
|
199
|
+
},
|
|
200
|
+
nextjs: {
|
|
201
|
+
id: 'nextjs',
|
|
202
|
+
name: 'Next.js',
|
|
203
|
+
category: 'fullstack',
|
|
204
|
+
patterns: ['ssr', 'ssg', 'api-routes', 'file-routing'],
|
|
205
|
+
detectionPatterns: ['next\\/|from.*next', 'getServerSideProps|getStaticProps', 'pages\\/|app\\/'],
|
|
206
|
+
bestPractices: [
|
|
207
|
+
{
|
|
208
|
+
id: 'next-image',
|
|
209
|
+
name: 'Use Next Image component',
|
|
210
|
+
description: 'Use next/image for optimized images',
|
|
211
|
+
rationale: 'Automatic image optimization and lazy loading',
|
|
212
|
+
priority: 'high',
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
id: 'next-data-fetching',
|
|
216
|
+
name: 'Choose correct data fetching',
|
|
217
|
+
description: 'Use getStaticProps for static, getServerSideProps for dynamic',
|
|
218
|
+
rationale: 'Optimal performance based on data requirements',
|
|
219
|
+
priority: 'high',
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
id: 'next-link',
|
|
223
|
+
name: 'Use Next Link for navigation',
|
|
224
|
+
description: 'Use next/link instead of anchor tags',
|
|
225
|
+
rationale: 'Client-side navigation with prefetching',
|
|
226
|
+
priority: 'medium',
|
|
227
|
+
},
|
|
228
|
+
],
|
|
229
|
+
antiPatterns: [
|
|
230
|
+
{
|
|
231
|
+
id: 'next-client-only',
|
|
232
|
+
name: 'Client-only code in pages',
|
|
233
|
+
description: 'Using browser APIs without checking environment',
|
|
234
|
+
detection: /window\.|document\./,
|
|
235
|
+
severity: 'medium',
|
|
236
|
+
fix: 'Check typeof window !== "undefined" or use useEffect',
|
|
237
|
+
},
|
|
238
|
+
],
|
|
239
|
+
},
|
|
240
|
+
node: {
|
|
241
|
+
id: 'node',
|
|
242
|
+
name: 'Node.js',
|
|
243
|
+
category: 'runtime',
|
|
244
|
+
patterns: ['event-loop', 'streams', 'modules'],
|
|
245
|
+
detectionPatterns: ['require\\(|import\\s+', 'process\\.', 'Buffer|Stream'],
|
|
246
|
+
bestPractices: [
|
|
247
|
+
{
|
|
248
|
+
id: 'node-async',
|
|
249
|
+
name: 'Use async/await',
|
|
250
|
+
description: 'Prefer async/await over callbacks',
|
|
251
|
+
rationale: 'Cleaner code and better error handling',
|
|
252
|
+
priority: 'high',
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
id: 'node-streams',
|
|
256
|
+
name: 'Use streams for large data',
|
|
257
|
+
description: 'Process large files with streams',
|
|
258
|
+
rationale: 'Memory efficiency for large data',
|
|
259
|
+
priority: 'medium',
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
id: 'node-env-vars',
|
|
263
|
+
name: 'Use environment variables',
|
|
264
|
+
description: 'Store configuration in environment variables',
|
|
265
|
+
rationale: 'Security and deployment flexibility',
|
|
266
|
+
priority: 'high',
|
|
267
|
+
},
|
|
268
|
+
],
|
|
269
|
+
antiPatterns: [
|
|
270
|
+
{
|
|
271
|
+
id: 'node-callback-hell',
|
|
272
|
+
name: 'Callback hell',
|
|
273
|
+
description: 'Deeply nested callbacks',
|
|
274
|
+
detection: /\)\s*=>\s*\{[^}]*\)\s*=>\s*\{[^}]*\)\s*=>/,
|
|
275
|
+
severity: 'medium',
|
|
276
|
+
fix: 'Use async/await or Promises',
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
id: 'node-sync-io',
|
|
280
|
+
name: 'Synchronous I/O',
|
|
281
|
+
description: 'Using synchronous I/O operations',
|
|
282
|
+
detection: /Sync\(/,
|
|
283
|
+
severity: 'high',
|
|
284
|
+
fix: 'Use async versions of I/O functions',
|
|
285
|
+
},
|
|
286
|
+
],
|
|
287
|
+
},
|
|
288
|
+
angular: {
|
|
289
|
+
id: 'angular',
|
|
290
|
+
name: 'Angular',
|
|
291
|
+
category: 'frontend',
|
|
292
|
+
patterns: ['component', 'service', 'module', 'dependency-injection'],
|
|
293
|
+
detectionPatterns: ['@angular', '@Component|@Injectable|@NgModule', 'ngOnInit'],
|
|
294
|
+
bestPractices: [],
|
|
295
|
+
antiPatterns: [],
|
|
296
|
+
},
|
|
297
|
+
fastify: {
|
|
298
|
+
id: 'fastify',
|
|
299
|
+
name: 'Fastify',
|
|
300
|
+
category: 'backend',
|
|
301
|
+
patterns: ['plugin', 'schema-validation', 'hooks'],
|
|
302
|
+
detectionPatterns: ['fastify', 'fastify\\.register|fastify\\.route'],
|
|
303
|
+
bestPractices: [],
|
|
304
|
+
antiPatterns: [],
|
|
305
|
+
},
|
|
306
|
+
nuxt: {
|
|
307
|
+
id: 'nuxt',
|
|
308
|
+
name: 'Nuxt.js',
|
|
309
|
+
category: 'fullstack',
|
|
310
|
+
patterns: ['ssr', 'auto-imports', 'file-routing'],
|
|
311
|
+
detectionPatterns: ['nuxt', 'useNuxtApp|useFetch'],
|
|
312
|
+
bestPractices: [],
|
|
313
|
+
antiPatterns: [],
|
|
314
|
+
},
|
|
315
|
+
svelte: {
|
|
316
|
+
id: 'svelte',
|
|
317
|
+
name: 'Svelte',
|
|
318
|
+
category: 'frontend',
|
|
319
|
+
patterns: ['reactive', 'compile-time', 'stores'],
|
|
320
|
+
detectionPatterns: ['\\.svelte$', '\\$:', 'svelte/store'],
|
|
321
|
+
bestPractices: [],
|
|
322
|
+
antiPatterns: [],
|
|
323
|
+
},
|
|
324
|
+
generic: {
|
|
325
|
+
id: 'generic',
|
|
326
|
+
name: 'Generic TypeScript/JavaScript',
|
|
327
|
+
category: 'runtime',
|
|
328
|
+
patterns: ['modules', 'classes', 'async'],
|
|
329
|
+
detectionPatterns: [],
|
|
330
|
+
bestPractices: [
|
|
331
|
+
{
|
|
332
|
+
id: 'gen-error-handling',
|
|
333
|
+
name: 'Proper error handling',
|
|
334
|
+
description: 'Use try-catch for async operations',
|
|
335
|
+
rationale: 'Prevents unhandled rejections',
|
|
336
|
+
priority: 'high',
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
id: 'gen-typing',
|
|
340
|
+
name: 'Use TypeScript types',
|
|
341
|
+
description: 'Define interfaces and types for all data',
|
|
342
|
+
rationale: 'Type safety and documentation',
|
|
343
|
+
priority: 'high',
|
|
344
|
+
},
|
|
345
|
+
],
|
|
346
|
+
antiPatterns: [
|
|
347
|
+
{
|
|
348
|
+
id: 'gen-any',
|
|
349
|
+
name: 'Using any type',
|
|
350
|
+
description: 'Excessive use of any type',
|
|
351
|
+
detection: /:\s*any\b/,
|
|
352
|
+
severity: 'medium',
|
|
353
|
+
fix: 'Define proper types or use unknown',
|
|
354
|
+
},
|
|
355
|
+
],
|
|
356
|
+
},
|
|
357
|
+
};
|
|
358
|
+
/**
|
|
359
|
+
* Default configuration
|
|
360
|
+
*/
|
|
361
|
+
export const DEFAULT_OPTIMIZER_CONFIG = {
|
|
362
|
+
strictMode: false,
|
|
363
|
+
detectionThreshold: 0.6,
|
|
364
|
+
};
|
|
365
|
+
/**
|
|
366
|
+
* Framework Optimizer
|
|
367
|
+
*/
|
|
368
|
+
export class FrameworkOptimizer {
|
|
369
|
+
config;
|
|
370
|
+
frameworks;
|
|
371
|
+
constructor(config) {
|
|
372
|
+
this.config = { ...DEFAULT_OPTIMIZER_CONFIG, ...config };
|
|
373
|
+
this.frameworks = new Map(Object.entries(FRAMEWORKS));
|
|
374
|
+
// Add custom frameworks
|
|
375
|
+
if (this.config.customFrameworks) {
|
|
376
|
+
for (const fw of this.config.customFrameworks) {
|
|
377
|
+
this.frameworks.set(fw.id, fw);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Detect framework from code
|
|
383
|
+
*/
|
|
384
|
+
detectFramework(code) {
|
|
385
|
+
const scores = new Map();
|
|
386
|
+
for (const [id, info] of this.frameworks) {
|
|
387
|
+
let matches = 0;
|
|
388
|
+
for (const pattern of info.detectionPatterns) {
|
|
389
|
+
const regex = new RegExp(pattern, 'i');
|
|
390
|
+
if (regex.test(code)) {
|
|
391
|
+
matches++;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
if (matches > 0) {
|
|
395
|
+
const confidence = matches / info.detectionPatterns.length;
|
|
396
|
+
scores.set(id, confidence);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
// Find best match
|
|
400
|
+
let bestFramework = null;
|
|
401
|
+
let bestConfidence = 0;
|
|
402
|
+
for (const [id, confidence] of scores) {
|
|
403
|
+
if (confidence > bestConfidence) {
|
|
404
|
+
bestConfidence = confidence;
|
|
405
|
+
bestFramework = id;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
if (bestFramework && bestConfidence >= this.config.detectionThreshold) {
|
|
409
|
+
return { framework: bestFramework, confidence: bestConfidence };
|
|
410
|
+
}
|
|
411
|
+
return null;
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Analyze code for framework-specific issues
|
|
415
|
+
*/
|
|
416
|
+
analyze(code, framework) {
|
|
417
|
+
// Detect framework if not provided
|
|
418
|
+
let detectedFramework = framework;
|
|
419
|
+
let confidence = 1.0;
|
|
420
|
+
if (!detectedFramework) {
|
|
421
|
+
const detection = this.detectFramework(code);
|
|
422
|
+
if (detection) {
|
|
423
|
+
detectedFramework = detection.framework;
|
|
424
|
+
confidence = detection.confidence;
|
|
425
|
+
}
|
|
426
|
+
else {
|
|
427
|
+
detectedFramework = 'generic';
|
|
428
|
+
confidence = 0.5;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
const frameworkInfo = this.frameworks.get(detectedFramework);
|
|
432
|
+
// Find anti-patterns
|
|
433
|
+
const antiPatternsFound = this.findAntiPatterns(code, frameworkInfo);
|
|
434
|
+
// Check best practices
|
|
435
|
+
const missingBestPractices = this.checkBestPractices(code, frameworkInfo);
|
|
436
|
+
// Generate suggestions
|
|
437
|
+
const suggestions = this.generateSuggestions(frameworkInfo, antiPatternsFound, missingBestPractices);
|
|
438
|
+
// Calculate score
|
|
439
|
+
const score = this.calculateScore(antiPatternsFound, missingBestPractices);
|
|
440
|
+
return {
|
|
441
|
+
framework: frameworkInfo,
|
|
442
|
+
confidence,
|
|
443
|
+
antiPatternsFound,
|
|
444
|
+
missingBestPractices,
|
|
445
|
+
suggestions,
|
|
446
|
+
score,
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Find anti-patterns in code
|
|
451
|
+
*/
|
|
452
|
+
findAntiPatterns(code, framework) {
|
|
453
|
+
const matches = [];
|
|
454
|
+
for (const antiPattern of framework.antiPatterns) {
|
|
455
|
+
const regex = typeof antiPattern.detection === 'string'
|
|
456
|
+
? new RegExp(antiPattern.detection, 'gi')
|
|
457
|
+
: antiPattern.detection;
|
|
458
|
+
let match;
|
|
459
|
+
while ((match = regex.exec(code)) !== null) {
|
|
460
|
+
matches.push({
|
|
461
|
+
antiPattern,
|
|
462
|
+
location: `Position ${match.index}`,
|
|
463
|
+
matchedText: match[0].substring(0, 50),
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
return matches;
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* Check for missing best practices
|
|
471
|
+
*/
|
|
472
|
+
checkBestPractices(code, framework) {
|
|
473
|
+
const missing = [];
|
|
474
|
+
// Simple heuristic checks
|
|
475
|
+
for (const practice of framework.bestPractices) {
|
|
476
|
+
let implemented = false;
|
|
477
|
+
switch (practice.id) {
|
|
478
|
+
case 'react-memo':
|
|
479
|
+
implemented = /React\.memo|memo\(/.test(code);
|
|
480
|
+
break;
|
|
481
|
+
case 'react-suspense':
|
|
482
|
+
implemented = /Suspense|React\.lazy/.test(code);
|
|
483
|
+
break;
|
|
484
|
+
case 'express-helmet':
|
|
485
|
+
implemented = /helmet/.test(code);
|
|
486
|
+
break;
|
|
487
|
+
case 'express-error-handler':
|
|
488
|
+
implemented = /app\.use\([^)]*err[^)]*\)/.test(code);
|
|
489
|
+
break;
|
|
490
|
+
case 'nest-dto':
|
|
491
|
+
implemented = /@IsString|@IsNumber|class-validator/.test(code);
|
|
492
|
+
break;
|
|
493
|
+
case 'next-image':
|
|
494
|
+
implemented = /next\/image|Image.*from.*next/.test(code);
|
|
495
|
+
break;
|
|
496
|
+
default:
|
|
497
|
+
// Cannot determine, assume implemented
|
|
498
|
+
implemented = true;
|
|
499
|
+
}
|
|
500
|
+
if (!implemented && practice.priority === 'high') {
|
|
501
|
+
missing.push(practice);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
return missing;
|
|
505
|
+
}
|
|
506
|
+
/**
|
|
507
|
+
* Generate optimization suggestions
|
|
508
|
+
*/
|
|
509
|
+
generateSuggestions(_framework, antiPatterns, missingPractices) {
|
|
510
|
+
const suggestions = [];
|
|
511
|
+
// Suggestions from anti-patterns
|
|
512
|
+
for (const match of antiPatterns) {
|
|
513
|
+
suggestions.push({
|
|
514
|
+
id: match.antiPattern.id,
|
|
515
|
+
category: 'maintainability',
|
|
516
|
+
title: `Fix: ${match.antiPattern.name}`,
|
|
517
|
+
description: match.antiPattern.description,
|
|
518
|
+
priority: match.antiPattern.severity,
|
|
519
|
+
impact: 'Code quality and maintainability',
|
|
520
|
+
implementation: match.antiPattern.fix,
|
|
521
|
+
});
|
|
522
|
+
}
|
|
523
|
+
// Suggestions from missing practices
|
|
524
|
+
for (const practice of missingPractices) {
|
|
525
|
+
suggestions.push({
|
|
526
|
+
id: practice.id,
|
|
527
|
+
category: practice.id.includes('security') ? 'security' : 'performance',
|
|
528
|
+
title: `Implement: ${practice.name}`,
|
|
529
|
+
description: practice.description,
|
|
530
|
+
priority: practice.priority,
|
|
531
|
+
impact: practice.rationale,
|
|
532
|
+
implementation: practice.example ?? 'See framework documentation',
|
|
533
|
+
});
|
|
534
|
+
}
|
|
535
|
+
// Sort by priority
|
|
536
|
+
suggestions.sort((a, b) => {
|
|
537
|
+
const priorityOrder = { high: 0, medium: 1, low: 2 };
|
|
538
|
+
return priorityOrder[a.priority] - priorityOrder[b.priority];
|
|
539
|
+
});
|
|
540
|
+
return suggestions;
|
|
541
|
+
}
|
|
542
|
+
/**
|
|
543
|
+
* Calculate optimization score
|
|
544
|
+
*/
|
|
545
|
+
calculateScore(antiPatterns, missingPractices) {
|
|
546
|
+
let score = 100;
|
|
547
|
+
// Deduct for anti-patterns
|
|
548
|
+
for (const match of antiPatterns) {
|
|
549
|
+
const penalty = match.antiPattern.severity === 'high' ? 15
|
|
550
|
+
: match.antiPattern.severity === 'medium' ? 10
|
|
551
|
+
: 5;
|
|
552
|
+
score -= penalty;
|
|
553
|
+
}
|
|
554
|
+
// Deduct for missing practices
|
|
555
|
+
for (const practice of missingPractices) {
|
|
556
|
+
const penalty = practice.priority === 'high' ? 10
|
|
557
|
+
: practice.priority === 'medium' ? 5
|
|
558
|
+
: 2;
|
|
559
|
+
score -= penalty;
|
|
560
|
+
}
|
|
561
|
+
return Math.max(0, score);
|
|
562
|
+
}
|
|
563
|
+
/**
|
|
564
|
+
* Get framework info
|
|
565
|
+
*/
|
|
566
|
+
getFrameworkInfo(framework) {
|
|
567
|
+
return this.frameworks.get(framework);
|
|
568
|
+
}
|
|
569
|
+
/**
|
|
570
|
+
* Get all frameworks
|
|
571
|
+
*/
|
|
572
|
+
getAllFrameworks() {
|
|
573
|
+
return Array.from(this.frameworks.values());
|
|
574
|
+
}
|
|
575
|
+
/**
|
|
576
|
+
* Get frameworks by category
|
|
577
|
+
*/
|
|
578
|
+
getFrameworksByCategory(category) {
|
|
579
|
+
return Array.from(this.frameworks.values())
|
|
580
|
+
.filter((fw) => fw.category === category);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
/**
|
|
584
|
+
* Create framework optimizer instance
|
|
585
|
+
*/
|
|
586
|
+
export function createFrameworkOptimizer(config) {
|
|
587
|
+
return new FrameworkOptimizer(config);
|
|
588
|
+
}
|
|
589
|
+
//# sourceMappingURL=framework-optimizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-optimizer.js","sourceRoot":"","sources":["../../src/design/framework-optimizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design module
|
|
3
|
+
*
|
|
4
|
+
* Design validation and optimization tools
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module design
|
|
8
|
+
*/
|
|
9
|
+
export { PatternDetector, createPatternDetector, DESIGN_PATTERNS, DEFAULT_DETECTOR_CONFIG, type DesignPattern, type PatternIndicator, type PatternParticipant, type PatternDetectionResult, type PatternSuggestion, type PatternLocation, type MatchedIndicator, type CodeStructure, type ClassInfo, type FunctionInfo, type RelationshipInfo, type PatternDetectorConfig, } from './pattern-detector.js';
|
|
10
|
+
export * from './solid-validator.js';
|
|
11
|
+
export * from './framework-optimizer.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/design/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,eAAe,EACf,uBAAuB,EACvB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAI/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design module
|
|
3
|
+
*
|
|
4
|
+
* Design validation and optimization tools
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module design
|
|
8
|
+
*/
|
|
9
|
+
export { PatternDetector, createPatternDetector, DESIGN_PATTERNS, DEFAULT_DETECTOR_CONFIG, } from './pattern-detector.js';
|
|
10
|
+
// Note: PatternCategory is exported from types module
|
|
11
|
+
export * from './solid-validator.js';
|
|
12
|
+
export * from './framework-optimizer.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/design/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,eAAe,EACf,uBAAuB,GAaxB,MAAM,uBAAuB,CAAC;AAE/B,sDAAsD;AAEtD,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC"}
|