@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,621 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design Pattern Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects and suggests design patterns in code and design documents
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module design/pattern-detector
|
|
8
|
+
*
|
|
9
|
+
* @see REQ-DES-001 - Design Pattern Detection
|
|
10
|
+
* @see Article III - Design Validation
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Default configuration
|
|
14
|
+
*/
|
|
15
|
+
export const DEFAULT_DETECTOR_CONFIG = {
|
|
16
|
+
minConfidence: 0.6,
|
|
17
|
+
categories: ['creational', 'structural', 'behavioral', 'architectural'],
|
|
18
|
+
enableSuggestions: true,
|
|
19
|
+
customPatterns: [],
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Built-in design patterns
|
|
23
|
+
*/
|
|
24
|
+
export const DESIGN_PATTERNS = [
|
|
25
|
+
// Creational Patterns
|
|
26
|
+
{
|
|
27
|
+
id: 'singleton',
|
|
28
|
+
name: 'Singleton',
|
|
29
|
+
category: 'creational',
|
|
30
|
+
description: 'Ensure a class has only one instance and provide global access',
|
|
31
|
+
intent: 'Control object creation, limiting to a single instance',
|
|
32
|
+
applicability: [
|
|
33
|
+
'Exactly one instance of a class is needed',
|
|
34
|
+
'Global access point is required',
|
|
35
|
+
],
|
|
36
|
+
participants: [
|
|
37
|
+
{ name: 'Singleton', description: 'Class with private constructor', optional: false },
|
|
38
|
+
],
|
|
39
|
+
indicators: [
|
|
40
|
+
{ type: 'naming', pattern: 'getInstance|instance|shared', weight: 0.3 },
|
|
41
|
+
{ type: 'structure', pattern: 'private constructor', weight: 0.4 },
|
|
42
|
+
{ type: 'structure', pattern: 'static instance', weight: 0.3 },
|
|
43
|
+
],
|
|
44
|
+
relatedPatterns: ['factory-method', 'abstract-factory'],
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: 'factory-method',
|
|
48
|
+
name: 'Factory Method',
|
|
49
|
+
category: 'creational',
|
|
50
|
+
description: 'Define interface for creating objects, let subclasses decide',
|
|
51
|
+
intent: 'Delegate instantiation to subclasses',
|
|
52
|
+
applicability: [
|
|
53
|
+
'Class cannot anticipate class of objects to create',
|
|
54
|
+
'Subclasses should specify objects created',
|
|
55
|
+
],
|
|
56
|
+
participants: [
|
|
57
|
+
{ name: 'Creator', description: 'Abstract class with factory method', optional: false },
|
|
58
|
+
{ name: 'ConcreteCreator', description: 'Implements factory method', optional: false },
|
|
59
|
+
{ name: 'Product', description: 'Interface for created objects', optional: false },
|
|
60
|
+
],
|
|
61
|
+
indicators: [
|
|
62
|
+
{ type: 'naming', pattern: 'create|make|build|factory', weight: 0.3 },
|
|
63
|
+
{ type: 'method', pattern: 'returns new.*instance', weight: 0.4 },
|
|
64
|
+
{ type: 'structure', pattern: 'abstract.*create', weight: 0.3 },
|
|
65
|
+
],
|
|
66
|
+
relatedPatterns: ['abstract-factory', 'builder', 'prototype'],
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
id: 'builder',
|
|
70
|
+
name: 'Builder',
|
|
71
|
+
category: 'creational',
|
|
72
|
+
description: 'Separate construction of complex object from representation',
|
|
73
|
+
intent: 'Step-by-step construction of complex objects',
|
|
74
|
+
applicability: [
|
|
75
|
+
'Complex object construction algorithm',
|
|
76
|
+
'Different representations needed',
|
|
77
|
+
],
|
|
78
|
+
participants: [
|
|
79
|
+
{ name: 'Builder', description: 'Interface for building parts', optional: false },
|
|
80
|
+
{ name: 'ConcreteBuilder', description: 'Constructs and assembles', optional: false },
|
|
81
|
+
{ name: 'Director', description: 'Constructs using Builder', optional: true },
|
|
82
|
+
{ name: 'Product', description: 'Complex object built', optional: false },
|
|
83
|
+
],
|
|
84
|
+
indicators: [
|
|
85
|
+
{ type: 'naming', pattern: 'builder|build|with', weight: 0.3 },
|
|
86
|
+
{ type: 'method', pattern: 'set.*return this|with.*return this', weight: 0.4 },
|
|
87
|
+
{ type: 'method', pattern: 'build\\(\\)', weight: 0.3 },
|
|
88
|
+
],
|
|
89
|
+
relatedPatterns: ['abstract-factory', 'factory-method'],
|
|
90
|
+
},
|
|
91
|
+
// Structural Patterns
|
|
92
|
+
{
|
|
93
|
+
id: 'adapter',
|
|
94
|
+
name: 'Adapter',
|
|
95
|
+
category: 'structural',
|
|
96
|
+
description: 'Convert interface of a class into another interface',
|
|
97
|
+
intent: 'Allow incompatible interfaces to work together',
|
|
98
|
+
applicability: [
|
|
99
|
+
'Want to use existing class with incompatible interface',
|
|
100
|
+
'Create reusable class with unrelated classes',
|
|
101
|
+
],
|
|
102
|
+
participants: [
|
|
103
|
+
{ name: 'Target', description: 'Interface client expects', optional: false },
|
|
104
|
+
{ name: 'Adaptee', description: 'Existing interface to adapt', optional: false },
|
|
105
|
+
{ name: 'Adapter', description: 'Adapts Adaptee to Target', optional: false },
|
|
106
|
+
],
|
|
107
|
+
indicators: [
|
|
108
|
+
{ type: 'naming', pattern: 'adapter|wrapper', weight: 0.3 },
|
|
109
|
+
{ type: 'structure', pattern: 'implements.*wraps', weight: 0.4 },
|
|
110
|
+
{ type: 'relation', pattern: 'composition with different interface', weight: 0.3 },
|
|
111
|
+
],
|
|
112
|
+
relatedPatterns: ['bridge', 'decorator', 'proxy'],
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
id: 'decorator',
|
|
116
|
+
name: 'Decorator',
|
|
117
|
+
category: 'structural',
|
|
118
|
+
description: 'Attach additional responsibilities dynamically',
|
|
119
|
+
intent: 'Flexible alternative to subclassing for extending functionality',
|
|
120
|
+
applicability: [
|
|
121
|
+
'Add responsibilities transparently',
|
|
122
|
+
'Extend by subclassing is impractical',
|
|
123
|
+
],
|
|
124
|
+
participants: [
|
|
125
|
+
{ name: 'Component', description: 'Interface for objects', optional: false },
|
|
126
|
+
{ name: 'ConcreteComponent', description: 'Object to decorate', optional: false },
|
|
127
|
+
{ name: 'Decorator', description: 'Wraps Component', optional: false },
|
|
128
|
+
],
|
|
129
|
+
indicators: [
|
|
130
|
+
{ type: 'naming', pattern: 'decorator|wrapper', weight: 0.3 },
|
|
131
|
+
{ type: 'structure', pattern: 'implements.*has component', weight: 0.4 },
|
|
132
|
+
{ type: 'method', pattern: 'delegates to wrapped', weight: 0.3 },
|
|
133
|
+
],
|
|
134
|
+
relatedPatterns: ['adapter', 'composite', 'strategy'],
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
id: 'facade',
|
|
138
|
+
name: 'Facade',
|
|
139
|
+
category: 'structural',
|
|
140
|
+
description: 'Provide unified interface to subsystem interfaces',
|
|
141
|
+
intent: 'Simplify complex subsystem usage',
|
|
142
|
+
applicability: [
|
|
143
|
+
'Simple interface to complex subsystem needed',
|
|
144
|
+
'Decouple subsystem from clients',
|
|
145
|
+
],
|
|
146
|
+
participants: [
|
|
147
|
+
{ name: 'Facade', description: 'Knows subsystem classes', optional: false },
|
|
148
|
+
{ name: 'Subsystem', description: 'Implement functionality', optional: false },
|
|
149
|
+
],
|
|
150
|
+
indicators: [
|
|
151
|
+
{ type: 'naming', pattern: 'facade|service|manager', weight: 0.2 },
|
|
152
|
+
{ type: 'structure', pattern: 'aggregates multiple classes', weight: 0.4 },
|
|
153
|
+
{ type: 'method', pattern: 'simplifies complex operations', weight: 0.4 },
|
|
154
|
+
],
|
|
155
|
+
relatedPatterns: ['abstract-factory', 'mediator', 'singleton'],
|
|
156
|
+
},
|
|
157
|
+
// Behavioral Patterns
|
|
158
|
+
{
|
|
159
|
+
id: 'observer',
|
|
160
|
+
name: 'Observer',
|
|
161
|
+
category: 'behavioral',
|
|
162
|
+
description: 'Define one-to-many dependency between objects',
|
|
163
|
+
intent: 'Notify multiple objects of state changes',
|
|
164
|
+
applicability: [
|
|
165
|
+
'Abstraction has two aspects, one dependent on other',
|
|
166
|
+
'Change to one object requires changing others',
|
|
167
|
+
],
|
|
168
|
+
participants: [
|
|
169
|
+
{ name: 'Subject', description: 'Knows observers, sends notifications', optional: false },
|
|
170
|
+
{ name: 'Observer', description: 'Interface for update notification', optional: false },
|
|
171
|
+
{ name: 'ConcreteObserver', description: 'Maintains reference to Subject', optional: false },
|
|
172
|
+
],
|
|
173
|
+
indicators: [
|
|
174
|
+
{ type: 'naming', pattern: 'observer|listener|subscriber|handler', weight: 0.3 },
|
|
175
|
+
{ type: 'method', pattern: 'subscribe|attach|addListener|on', weight: 0.35 },
|
|
176
|
+
{ type: 'method', pattern: 'notify|emit|publish|dispatch', weight: 0.35 },
|
|
177
|
+
],
|
|
178
|
+
relatedPatterns: ['mediator', 'singleton'],
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
id: 'strategy',
|
|
182
|
+
name: 'Strategy',
|
|
183
|
+
category: 'behavioral',
|
|
184
|
+
description: 'Define family of algorithms, make them interchangeable',
|
|
185
|
+
intent: 'Let algorithm vary independently from clients',
|
|
186
|
+
applicability: [
|
|
187
|
+
'Many related classes differ only in behavior',
|
|
188
|
+
'Need different variants of an algorithm',
|
|
189
|
+
],
|
|
190
|
+
participants: [
|
|
191
|
+
{ name: 'Strategy', description: 'Interface for algorithm', optional: false },
|
|
192
|
+
{ name: 'ConcreteStrategy', description: 'Implements algorithm', optional: false },
|
|
193
|
+
{ name: 'Context', description: 'Uses Strategy', optional: false },
|
|
194
|
+
],
|
|
195
|
+
indicators: [
|
|
196
|
+
{ type: 'naming', pattern: 'strategy|policy|algorithm', weight: 0.3 },
|
|
197
|
+
{ type: 'structure', pattern: 'interface with multiple implementations', weight: 0.4 },
|
|
198
|
+
{ type: 'structure', pattern: 'context with strategy reference', weight: 0.3 },
|
|
199
|
+
],
|
|
200
|
+
relatedPatterns: ['flyweight', 'state', 'template-method'],
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
id: 'command',
|
|
204
|
+
name: 'Command',
|
|
205
|
+
category: 'behavioral',
|
|
206
|
+
description: 'Encapsulate request as an object',
|
|
207
|
+
intent: 'Parameterize objects with operations',
|
|
208
|
+
applicability: [
|
|
209
|
+
'Parameterize objects with actions',
|
|
210
|
+
'Support undo operations',
|
|
211
|
+
'Support logging changes',
|
|
212
|
+
],
|
|
213
|
+
participants: [
|
|
214
|
+
{ name: 'Command', description: 'Interface for executing', optional: false },
|
|
215
|
+
{ name: 'ConcreteCommand', description: 'Binds receiver with action', optional: false },
|
|
216
|
+
{ name: 'Invoker', description: 'Asks command to execute', optional: false },
|
|
217
|
+
{ name: 'Receiver', description: 'Knows how to perform', optional: false },
|
|
218
|
+
],
|
|
219
|
+
indicators: [
|
|
220
|
+
{ type: 'naming', pattern: 'command|action|request|handler', weight: 0.3 },
|
|
221
|
+
{ type: 'method', pattern: 'execute|run|handle|perform', weight: 0.35 },
|
|
222
|
+
{ type: 'method', pattern: 'undo|rollback|revert', weight: 0.35 },
|
|
223
|
+
],
|
|
224
|
+
relatedPatterns: ['composite', 'memento', 'prototype'],
|
|
225
|
+
},
|
|
226
|
+
// Architectural Patterns
|
|
227
|
+
{
|
|
228
|
+
id: 'mvc',
|
|
229
|
+
name: 'Model-View-Controller',
|
|
230
|
+
category: 'architectural',
|
|
231
|
+
description: 'Separate application into Model, View, Controller',
|
|
232
|
+
intent: 'Separate concerns in UI applications',
|
|
233
|
+
applicability: [
|
|
234
|
+
'UI applications',
|
|
235
|
+
'Need to support multiple views',
|
|
236
|
+
],
|
|
237
|
+
participants: [
|
|
238
|
+
{ name: 'Model', description: 'Application data and logic', optional: false },
|
|
239
|
+
{ name: 'View', description: 'Visual representation', optional: false },
|
|
240
|
+
{ name: 'Controller', description: 'Handles user input', optional: false },
|
|
241
|
+
],
|
|
242
|
+
indicators: [
|
|
243
|
+
{ type: 'naming', pattern: 'model|view|controller', weight: 0.4 },
|
|
244
|
+
{ type: 'structure', pattern: 'separate model/view/controller files', weight: 0.4 },
|
|
245
|
+
{ type: 'relation', pattern: 'view observes model', weight: 0.2 },
|
|
246
|
+
],
|
|
247
|
+
relatedPatterns: ['observer', 'strategy', 'mvvm'],
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
id: 'repository',
|
|
251
|
+
name: 'Repository',
|
|
252
|
+
category: 'architectural',
|
|
253
|
+
description: 'Mediate between domain and data mapping layers',
|
|
254
|
+
intent: 'Abstract data access with collection-like interface',
|
|
255
|
+
applicability: [
|
|
256
|
+
'Complex domain model',
|
|
257
|
+
'Need to test data access independently',
|
|
258
|
+
],
|
|
259
|
+
participants: [
|
|
260
|
+
{ name: 'Repository', description: 'Interface for data access', optional: false },
|
|
261
|
+
{ name: 'ConcreteRepository', description: 'Implements data access', optional: false },
|
|
262
|
+
],
|
|
263
|
+
indicators: [
|
|
264
|
+
{ type: 'naming', pattern: 'repository|repo|store|dao', weight: 0.3 },
|
|
265
|
+
{ type: 'method', pattern: 'find|get|save|delete|update', weight: 0.4 },
|
|
266
|
+
{ type: 'structure', pattern: 'abstracts data source', weight: 0.3 },
|
|
267
|
+
],
|
|
268
|
+
relatedPatterns: ['unit-of-work', 'data-mapper'],
|
|
269
|
+
},
|
|
270
|
+
];
|
|
271
|
+
/**
|
|
272
|
+
* Design Pattern Detector
|
|
273
|
+
*/
|
|
274
|
+
export class PatternDetector {
|
|
275
|
+
config;
|
|
276
|
+
patterns;
|
|
277
|
+
constructor(config) {
|
|
278
|
+
this.config = { ...DEFAULT_DETECTOR_CONFIG, ...config };
|
|
279
|
+
this.patterns = [
|
|
280
|
+
...DESIGN_PATTERNS.filter((p) => this.config.categories.includes(p.category)),
|
|
281
|
+
...this.config.customPatterns,
|
|
282
|
+
];
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Detect patterns in code structure
|
|
286
|
+
*/
|
|
287
|
+
detectPatterns(structure) {
|
|
288
|
+
const results = [];
|
|
289
|
+
for (const pattern of this.patterns) {
|
|
290
|
+
const detection = this.detectPattern(pattern, structure);
|
|
291
|
+
if (detection && detection.confidence >= this.config.minConfidence) {
|
|
292
|
+
results.push(detection);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
// Sort by confidence
|
|
296
|
+
results.sort((a, b) => b.confidence - a.confidence);
|
|
297
|
+
return results;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Detect patterns in source code text
|
|
301
|
+
*/
|
|
302
|
+
detectInCode(code, fileName) {
|
|
303
|
+
const structure = this.parseCodeStructure(code);
|
|
304
|
+
const results = this.detectPatterns(structure);
|
|
305
|
+
// Add file info
|
|
306
|
+
if (fileName) {
|
|
307
|
+
for (const result of results) {
|
|
308
|
+
result.location.file = fileName;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return results;
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Suggest patterns for a problem context
|
|
315
|
+
*/
|
|
316
|
+
suggestPatterns(context) {
|
|
317
|
+
if (!this.config.enableSuggestions) {
|
|
318
|
+
return [];
|
|
319
|
+
}
|
|
320
|
+
const suggestions = [];
|
|
321
|
+
const problemLower = context.problem.toLowerCase();
|
|
322
|
+
for (const pattern of this.patterns) {
|
|
323
|
+
let applicability = 0;
|
|
324
|
+
const reasons = [];
|
|
325
|
+
// Check intent match
|
|
326
|
+
if (this.textMatch(problemLower, pattern.intent.toLowerCase())) {
|
|
327
|
+
applicability += 0.3;
|
|
328
|
+
reasons.push(`Intent matches: ${pattern.intent}`);
|
|
329
|
+
}
|
|
330
|
+
// Check applicability match
|
|
331
|
+
for (const app of pattern.applicability) {
|
|
332
|
+
if (this.textMatch(problemLower, app.toLowerCase())) {
|
|
333
|
+
applicability += 0.2;
|
|
334
|
+
reasons.push(`Applicable: ${app}`);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
// Skip if already using this pattern
|
|
338
|
+
if (context.existing?.includes(pattern.id)) {
|
|
339
|
+
continue;
|
|
340
|
+
}
|
|
341
|
+
if (applicability > 0.2) {
|
|
342
|
+
suggestions.push({
|
|
343
|
+
pattern,
|
|
344
|
+
reason: reasons.join('; '),
|
|
345
|
+
applicability,
|
|
346
|
+
benefits: pattern.applicability,
|
|
347
|
+
implementationHints: this.generateHints(pattern),
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
// Sort by applicability
|
|
352
|
+
suggestions.sort((a, b) => b.applicability - a.applicability);
|
|
353
|
+
return suggestions.slice(0, 5);
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Detect a specific pattern
|
|
357
|
+
*/
|
|
358
|
+
detectPattern(pattern, structure) {
|
|
359
|
+
const matchedIndicators = [];
|
|
360
|
+
let totalWeight = 0;
|
|
361
|
+
let matchedWeight = 0;
|
|
362
|
+
for (const indicator of pattern.indicators) {
|
|
363
|
+
totalWeight += indicator.weight;
|
|
364
|
+
const match = this.matchIndicator(indicator, structure);
|
|
365
|
+
if (match) {
|
|
366
|
+
matchedIndicators.push(match);
|
|
367
|
+
matchedWeight += indicator.weight;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
const confidence = totalWeight > 0 ? matchedWeight / totalWeight : 0;
|
|
371
|
+
if (confidence < this.config.minConfidence) {
|
|
372
|
+
return null;
|
|
373
|
+
}
|
|
374
|
+
return {
|
|
375
|
+
pattern,
|
|
376
|
+
confidence,
|
|
377
|
+
location: this.findLocation(structure, matchedIndicators),
|
|
378
|
+
matchedIndicators,
|
|
379
|
+
missingElements: this.findMissing(pattern, matchedIndicators),
|
|
380
|
+
suggestions: this.generateImprovements(pattern, confidence),
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Match an indicator against structure
|
|
385
|
+
*/
|
|
386
|
+
matchIndicator(indicator, structure) {
|
|
387
|
+
const regex = new RegExp(indicator.pattern, 'i');
|
|
388
|
+
switch (indicator.type) {
|
|
389
|
+
case 'naming':
|
|
390
|
+
for (const cls of structure.classes) {
|
|
391
|
+
if (regex.test(cls.name)) {
|
|
392
|
+
return { indicator, matchedText: cls.name, location: `class ${cls.name}` };
|
|
393
|
+
}
|
|
394
|
+
for (const method of cls.methods) {
|
|
395
|
+
if (regex.test(method)) {
|
|
396
|
+
return { indicator, matchedText: method, location: `${cls.name}.${method}` };
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
for (const fn of structure.functions) {
|
|
401
|
+
if (regex.test(fn.name)) {
|
|
402
|
+
return { indicator, matchedText: fn.name, location: `function ${fn.name}` };
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
break;
|
|
406
|
+
case 'method':
|
|
407
|
+
for (const cls of structure.classes) {
|
|
408
|
+
for (const method of cls.methods) {
|
|
409
|
+
if (regex.test(method)) {
|
|
410
|
+
return { indicator, matchedText: method, location: `${cls.name}.${method}` };
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
break;
|
|
415
|
+
case 'structure':
|
|
416
|
+
// Check for structural patterns
|
|
417
|
+
if (indicator.pattern.includes('abstract')) {
|
|
418
|
+
const abstracts = structure.classes.filter((c) => c.isAbstract);
|
|
419
|
+
if (abstracts.length > 0) {
|
|
420
|
+
return { indicator, matchedText: abstracts[0].name, location: `abstract ${abstracts[0].name}` };
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
if (indicator.pattern.includes('interface')) {
|
|
424
|
+
const interfaces = structure.classes.filter((c) => c.isInterface);
|
|
425
|
+
if (interfaces.length > 0) {
|
|
426
|
+
return { indicator, matchedText: interfaces[0].name, location: `interface ${interfaces[0].name}` };
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
if (indicator.pattern.includes('static')) {
|
|
430
|
+
for (const cls of structure.classes) {
|
|
431
|
+
for (const prop of cls.properties) {
|
|
432
|
+
if (prop.includes('static')) {
|
|
433
|
+
return { indicator, matchedText: prop, location: `${cls.name}.${prop}` };
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
break;
|
|
439
|
+
case 'relation':
|
|
440
|
+
for (const rel of structure.relationships) {
|
|
441
|
+
if (regex.test(`${rel.type} ${rel.source} ${rel.target}`)) {
|
|
442
|
+
return { indicator, matchedText: `${rel.source}->${rel.target}`, location: rel.type };
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
break;
|
|
446
|
+
}
|
|
447
|
+
return null;
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Parse code into structure (simplified)
|
|
451
|
+
*/
|
|
452
|
+
parseCodeStructure(code) {
|
|
453
|
+
const classes = [];
|
|
454
|
+
const functions = [];
|
|
455
|
+
const relationships = [];
|
|
456
|
+
// Simple regex-based parsing (production would use proper AST)
|
|
457
|
+
// Detect classes
|
|
458
|
+
const classRegex = /(?:export\s+)?(?:abstract\s+)?(class|interface)\s+(\w+)(?:\s+extends\s+(\w+))?(?:\s+implements\s+([^{]+))?/g;
|
|
459
|
+
let match;
|
|
460
|
+
while ((match = classRegex.exec(code)) !== null) {
|
|
461
|
+
const isInterface = match[1] === 'interface';
|
|
462
|
+
const isAbstract = code.substring(Math.max(0, match.index - 20), match.index).includes('abstract');
|
|
463
|
+
classes.push({
|
|
464
|
+
name: match[2],
|
|
465
|
+
isInterface,
|
|
466
|
+
isAbstract,
|
|
467
|
+
methods: this.extractMethods(code, match[2]),
|
|
468
|
+
properties: this.extractProperties(code, match[2]),
|
|
469
|
+
extends: match[3],
|
|
470
|
+
implements: match[4] ? match[4].split(',').map((s) => s.trim()) : [],
|
|
471
|
+
});
|
|
472
|
+
// Add relationships
|
|
473
|
+
if (match[3]) {
|
|
474
|
+
relationships.push({
|
|
475
|
+
source: match[2],
|
|
476
|
+
target: match[3],
|
|
477
|
+
type: 'inheritance',
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
// Detect standalone functions
|
|
482
|
+
const funcRegex = /(?:export\s+)?(?:async\s+)?function\s+(\w+)\s*\(([^)]*)\)/g;
|
|
483
|
+
while ((match = funcRegex.exec(code)) !== null) {
|
|
484
|
+
functions.push({
|
|
485
|
+
name: match[1],
|
|
486
|
+
parameters: match[2].split(',').map((s) => s.trim()).filter(Boolean),
|
|
487
|
+
isStatic: false,
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
return { classes, functions, relationships };
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Extract methods from class
|
|
494
|
+
*/
|
|
495
|
+
extractMethods(code, className) {
|
|
496
|
+
const methods = [];
|
|
497
|
+
const classStart = code.indexOf(`class ${className}`);
|
|
498
|
+
if (classStart === -1)
|
|
499
|
+
return methods;
|
|
500
|
+
// Find class body
|
|
501
|
+
let braceCount = 0;
|
|
502
|
+
let classEnd = classStart;
|
|
503
|
+
for (let i = classStart; i < code.length; i++) {
|
|
504
|
+
if (code[i] === '{')
|
|
505
|
+
braceCount++;
|
|
506
|
+
if (code[i] === '}')
|
|
507
|
+
braceCount--;
|
|
508
|
+
if (braceCount === 0 && code[i] === '}') {
|
|
509
|
+
classEnd = i;
|
|
510
|
+
break;
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
const classBody = code.substring(classStart, classEnd);
|
|
514
|
+
const methodRegex = /(?:public|private|protected|static|async)?\s*(\w+)\s*\([^)]*\)\s*(?::\s*\w+)?\s*{/g;
|
|
515
|
+
let match;
|
|
516
|
+
while ((match = methodRegex.exec(classBody)) !== null) {
|
|
517
|
+
if (match[1] !== 'constructor' && match[1] !== 'if' && match[1] !== 'for') {
|
|
518
|
+
methods.push(match[1]);
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
return methods;
|
|
522
|
+
}
|
|
523
|
+
/**
|
|
524
|
+
* Extract properties from class
|
|
525
|
+
*/
|
|
526
|
+
extractProperties(code, className) {
|
|
527
|
+
const properties = [];
|
|
528
|
+
const classStart = code.indexOf(`class ${className}`);
|
|
529
|
+
if (classStart === -1)
|
|
530
|
+
return properties;
|
|
531
|
+
const classBody = code.substring(classStart, classStart + 1000);
|
|
532
|
+
const propRegex = /(?:public|private|protected|static|readonly)?\s+(\w+)\s*(?::\s*\w+)?\s*[;=]/g;
|
|
533
|
+
let match;
|
|
534
|
+
while ((match = propRegex.exec(classBody)) !== null) {
|
|
535
|
+
properties.push(match[1]);
|
|
536
|
+
}
|
|
537
|
+
return properties;
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* Find location in structure
|
|
541
|
+
*/
|
|
542
|
+
findLocation(_structure, matches) {
|
|
543
|
+
const classes = new Set();
|
|
544
|
+
const methods = new Set();
|
|
545
|
+
for (const match of matches) {
|
|
546
|
+
const parts = match.location.split('.');
|
|
547
|
+
if (parts.length > 1) {
|
|
548
|
+
classes.add(parts[0].replace('class ', ''));
|
|
549
|
+
methods.add(parts[1]);
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
return {
|
|
553
|
+
className: Array.from(classes)[0],
|
|
554
|
+
methods: Array.from(methods),
|
|
555
|
+
};
|
|
556
|
+
}
|
|
557
|
+
/**
|
|
558
|
+
* Find missing pattern elements
|
|
559
|
+
*/
|
|
560
|
+
findMissing(pattern, matches) {
|
|
561
|
+
const missing = [];
|
|
562
|
+
const matchedTypes = new Set(matches.map((m) => m.indicator.type));
|
|
563
|
+
for (const indicator of pattern.indicators) {
|
|
564
|
+
if (!matchedTypes.has(indicator.type)) {
|
|
565
|
+
missing.push(`Missing ${indicator.type}: ${indicator.pattern}`);
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
return missing;
|
|
569
|
+
}
|
|
570
|
+
/**
|
|
571
|
+
* Generate improvement suggestions
|
|
572
|
+
*/
|
|
573
|
+
generateImprovements(pattern, confidence) {
|
|
574
|
+
const suggestions = [];
|
|
575
|
+
if (confidence < 0.8) {
|
|
576
|
+
suggestions.push(`Consider fully implementing ${pattern.name} pattern`);
|
|
577
|
+
}
|
|
578
|
+
for (const participant of pattern.participants) {
|
|
579
|
+
if (!participant.optional) {
|
|
580
|
+
suggestions.push(`Ensure ${participant.name} is properly defined`);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
return suggestions;
|
|
584
|
+
}
|
|
585
|
+
/**
|
|
586
|
+
* Generate implementation hints
|
|
587
|
+
*/
|
|
588
|
+
generateHints(pattern) {
|
|
589
|
+
const hints = [];
|
|
590
|
+
for (const participant of pattern.participants) {
|
|
591
|
+
hints.push(`Create ${participant.name}: ${participant.description}`);
|
|
592
|
+
}
|
|
593
|
+
return hints;
|
|
594
|
+
}
|
|
595
|
+
/**
|
|
596
|
+
* Simple text matching
|
|
597
|
+
*/
|
|
598
|
+
textMatch(text, pattern) {
|
|
599
|
+
const words = pattern.split(/\s+/);
|
|
600
|
+
return words.some((word) => text.includes(word) && word.length > 3);
|
|
601
|
+
}
|
|
602
|
+
/**
|
|
603
|
+
* Get all available patterns
|
|
604
|
+
*/
|
|
605
|
+
getPatterns() {
|
|
606
|
+
return [...this.patterns];
|
|
607
|
+
}
|
|
608
|
+
/**
|
|
609
|
+
* Get patterns by category
|
|
610
|
+
*/
|
|
611
|
+
getPatternsByCategory(category) {
|
|
612
|
+
return this.patterns.filter((p) => p.category === category);
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
/**
|
|
616
|
+
* Create pattern detector instance
|
|
617
|
+
*/
|
|
618
|
+
export function createPatternDetector(config) {
|
|
619
|
+
return new PatternDetector(config);
|
|
620
|
+
}
|
|
621
|
+
//# sourceMappingURL=pattern-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-detector.js","sourceRoot":"","sources":["../../src/design/pattern-detector.ts"],"names":[],"mappings":"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"}
|