@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,590 @@
1
+ /**
2
+ * Pattern Conformance Checker
3
+ *
4
+ * Checks code conformance to design patterns
5
+ *
6
+ * @packageDocumentation
7
+ * @module codegen/pattern-conformance
8
+ *
9
+ * @see REQ-COD-003 - Pattern Conformance
10
+ * @see Article V - Design Standards
11
+ */
12
+ /**
13
+ * Default configuration
14
+ */
15
+ export const DEFAULT_CONFORMANCE_CONFIG = {
16
+ minScore: 70,
17
+ strictMode: false,
18
+ };
19
+ /**
20
+ * Built-in pattern specifications
21
+ */
22
+ const PATTERN_SPECIFICATIONS = [
23
+ {
24
+ id: 'singleton',
25
+ name: 'Singleton',
26
+ category: 'creational',
27
+ participants: [
28
+ {
29
+ role: 'Singleton',
30
+ type: 'class',
31
+ required: true,
32
+ requiredMethods: ['getInstance'],
33
+ requiredProperties: ['instance'],
34
+ },
35
+ ],
36
+ relationships: [],
37
+ constraints: [
38
+ {
39
+ id: 'private-constructor',
40
+ description: 'Constructor should be private',
41
+ severity: 'warning',
42
+ check: (ctx) => {
43
+ return ctx.code.includes('private constructor') ||
44
+ ctx.code.includes('private static instance');
45
+ },
46
+ },
47
+ ],
48
+ },
49
+ {
50
+ id: 'factory-method',
51
+ name: 'Factory Method',
52
+ category: 'creational',
53
+ participants: [
54
+ {
55
+ role: 'Creator',
56
+ type: 'abstract',
57
+ required: true,
58
+ requiredMethods: ['create', 'factoryMethod', 'make'],
59
+ },
60
+ {
61
+ role: 'ConcreteCreator',
62
+ type: 'class',
63
+ required: true,
64
+ },
65
+ {
66
+ role: 'Product',
67
+ type: 'interface',
68
+ required: true,
69
+ },
70
+ {
71
+ role: 'ConcreteProduct',
72
+ type: 'class',
73
+ required: true,
74
+ },
75
+ ],
76
+ relationships: [
77
+ { from: 'ConcreteCreator', to: 'Creator', type: 'extends', required: true },
78
+ { from: 'ConcreteProduct', to: 'Product', type: 'implements', required: true },
79
+ { from: 'Creator', to: 'Product', type: 'creates', required: true },
80
+ ],
81
+ },
82
+ {
83
+ id: 'observer',
84
+ name: 'Observer',
85
+ category: 'behavioral',
86
+ participants: [
87
+ {
88
+ role: 'Subject',
89
+ type: 'interface',
90
+ required: true,
91
+ requiredMethods: ['attach', 'detach', 'notify', 'subscribe', 'unsubscribe'],
92
+ },
93
+ {
94
+ role: 'Observer',
95
+ type: 'interface',
96
+ required: true,
97
+ requiredMethods: ['update', 'notify', 'onEvent'],
98
+ },
99
+ {
100
+ role: 'ConcreteSubject',
101
+ type: 'class',
102
+ required: true,
103
+ },
104
+ {
105
+ role: 'ConcreteObserver',
106
+ type: 'class',
107
+ required: true,
108
+ },
109
+ ],
110
+ relationships: [
111
+ { from: 'ConcreteSubject', to: 'Subject', type: 'implements', required: true },
112
+ { from: 'ConcreteObserver', to: 'Observer', type: 'implements', required: true },
113
+ { from: 'Subject', to: 'Observer', type: 'aggregates', required: true },
114
+ ],
115
+ },
116
+ {
117
+ id: 'strategy',
118
+ name: 'Strategy',
119
+ category: 'behavioral',
120
+ participants: [
121
+ {
122
+ role: 'Strategy',
123
+ type: 'interface',
124
+ required: true,
125
+ requiredMethods: ['execute', 'apply', 'run'],
126
+ },
127
+ {
128
+ role: 'ConcreteStrategy',
129
+ type: 'class',
130
+ required: true,
131
+ },
132
+ {
133
+ role: 'Context',
134
+ type: 'class',
135
+ required: true,
136
+ requiredMethods: ['setStrategy', 'executeStrategy'],
137
+ },
138
+ ],
139
+ relationships: [
140
+ { from: 'ConcreteStrategy', to: 'Strategy', type: 'implements', required: true },
141
+ { from: 'Context', to: 'Strategy', type: 'composes', required: true },
142
+ ],
143
+ },
144
+ {
145
+ id: 'decorator',
146
+ name: 'Decorator',
147
+ category: 'structural',
148
+ participants: [
149
+ {
150
+ role: 'Component',
151
+ type: 'interface',
152
+ required: true,
153
+ },
154
+ {
155
+ role: 'ConcreteComponent',
156
+ type: 'class',
157
+ required: true,
158
+ },
159
+ {
160
+ role: 'Decorator',
161
+ type: 'abstract',
162
+ required: true,
163
+ },
164
+ {
165
+ role: 'ConcreteDecorator',
166
+ type: 'class',
167
+ required: true,
168
+ },
169
+ ],
170
+ relationships: [
171
+ { from: 'ConcreteComponent', to: 'Component', type: 'implements', required: true },
172
+ { from: 'Decorator', to: 'Component', type: 'implements', required: true },
173
+ { from: 'Decorator', to: 'Component', type: 'composes', required: true },
174
+ { from: 'ConcreteDecorator', to: 'Decorator', type: 'extends', required: true },
175
+ ],
176
+ },
177
+ {
178
+ id: 'adapter',
179
+ name: 'Adapter',
180
+ category: 'structural',
181
+ participants: [
182
+ {
183
+ role: 'Target',
184
+ type: 'interface',
185
+ required: true,
186
+ },
187
+ {
188
+ role: 'Adapter',
189
+ type: 'class',
190
+ required: true,
191
+ },
192
+ {
193
+ role: 'Adaptee',
194
+ type: 'class',
195
+ required: true,
196
+ },
197
+ ],
198
+ relationships: [
199
+ { from: 'Adapter', to: 'Target', type: 'implements', required: true },
200
+ { from: 'Adapter', to: 'Adaptee', type: 'composes', required: true },
201
+ ],
202
+ },
203
+ {
204
+ id: 'repository',
205
+ name: 'Repository',
206
+ category: 'architectural',
207
+ participants: [
208
+ {
209
+ role: 'Repository',
210
+ type: 'interface',
211
+ required: true,
212
+ requiredMethods: ['find', 'findById', 'save', 'delete', 'findAll'],
213
+ },
214
+ {
215
+ role: 'ConcreteRepository',
216
+ type: 'class',
217
+ required: true,
218
+ },
219
+ {
220
+ role: 'Entity',
221
+ type: 'class',
222
+ required: true,
223
+ },
224
+ ],
225
+ relationships: [
226
+ { from: 'ConcreteRepository', to: 'Repository', type: 'implements', required: true },
227
+ ],
228
+ },
229
+ ];
230
+ /**
231
+ * Pattern Conformance Checker
232
+ */
233
+ export class PatternConformanceChecker {
234
+ config;
235
+ patterns;
236
+ constructor(config) {
237
+ this.config = { ...DEFAULT_CONFORMANCE_CONFIG, ...config };
238
+ this.patterns = [...PATTERN_SPECIFICATIONS];
239
+ if (this.config.customPatterns) {
240
+ this.patterns.push(...this.config.customPatterns);
241
+ }
242
+ }
243
+ /**
244
+ * Check conformance to a specific pattern
245
+ */
246
+ checkPattern(code, patternId, file = 'unknown') {
247
+ const pattern = this.patterns.find((p) => p.id === patternId);
248
+ if (!pattern)
249
+ return null;
250
+ const context = this.buildContext(code, file);
251
+ return this.evaluateConformance(pattern, context);
252
+ }
253
+ /**
254
+ * Check conformance to all patterns
255
+ */
256
+ checkAllPatterns(code, file = 'unknown') {
257
+ const context = this.buildContext(code, file);
258
+ const results = [];
259
+ for (const pattern of this.patterns) {
260
+ const result = this.evaluateConformance(pattern, context);
261
+ if (result.score > 0) {
262
+ results.push(result);
263
+ }
264
+ }
265
+ return results.sort((a, b) => b.score - a.score);
266
+ }
267
+ /**
268
+ * Check if code meets minimum conformance
269
+ */
270
+ meetsMinimumConformance(result) {
271
+ return result.score >= this.config.minScore;
272
+ }
273
+ /**
274
+ * Build conformance context from code
275
+ */
276
+ buildContext(code, file) {
277
+ return {
278
+ code,
279
+ file,
280
+ classes: this.extractClasses(code),
281
+ interfaces: this.extractInterfaces(code),
282
+ relationships: this.extractRelationships(code),
283
+ };
284
+ }
285
+ /**
286
+ * Extract classes from code
287
+ */
288
+ extractClasses(code) {
289
+ const classes = [];
290
+ const regex = /(?:abstract\s+)?class\s+(\w+)(?:\s+extends\s+(\w+))?(?:\s+implements\s+([^{]+))?\s*\{/g;
291
+ let match;
292
+ while ((match = regex.exec(code)) !== null) {
293
+ const name = match[1];
294
+ const line = code.substring(0, match.index).split('\n').length;
295
+ const extendsClass = match[2];
296
+ const implementsStr = match[3];
297
+ const isAbstract = match[0].startsWith('abstract');
298
+ // Find class body
299
+ const startIndex = match.index + match[0].length - 1;
300
+ const body = this.extractBody(code, startIndex);
301
+ // Extract methods and properties
302
+ const methods = this.extractMethodNames(body);
303
+ const properties = this.extractPropertyNames(body);
304
+ const implements_ = implementsStr
305
+ ? implementsStr.split(',').map((s) => s.trim())
306
+ : [];
307
+ classes.push({
308
+ name,
309
+ line,
310
+ methods,
311
+ properties,
312
+ extends: extendsClass,
313
+ implements: implements_,
314
+ isAbstract,
315
+ });
316
+ }
317
+ return classes;
318
+ }
319
+ /**
320
+ * Extract interfaces from code
321
+ */
322
+ extractInterfaces(code) {
323
+ const interfaces = [];
324
+ const regex = /interface\s+(\w+)(?:\s+extends\s+([^{]+))?\s*\{/g;
325
+ let match;
326
+ while ((match = regex.exec(code)) !== null) {
327
+ const name = match[1];
328
+ const line = code.substring(0, match.index).split('\n').length;
329
+ const extendsStr = match[2];
330
+ const startIndex = match.index + match[0].length - 1;
331
+ const body = this.extractBody(code, startIndex);
332
+ const methods = this.extractMethodNames(body);
333
+ const properties = this.extractPropertyNames(body);
334
+ const extends_ = extendsStr
335
+ ? extendsStr.split(',').map((s) => s.trim())
336
+ : [];
337
+ interfaces.push({
338
+ name,
339
+ line,
340
+ methods,
341
+ properties,
342
+ extends: extends_,
343
+ });
344
+ }
345
+ return interfaces;
346
+ }
347
+ /**
348
+ * Extract relationships from code
349
+ */
350
+ extractRelationships(code) {
351
+ const relationships = [];
352
+ const classes = this.extractClasses(code);
353
+ for (const cls of classes) {
354
+ // Extends relationship
355
+ if (cls.extends) {
356
+ relationships.push({
357
+ from: cls.name,
358
+ to: cls.extends,
359
+ type: 'extends',
360
+ });
361
+ }
362
+ // Implements relationships
363
+ for (const impl of cls.implements) {
364
+ relationships.push({
365
+ from: cls.name,
366
+ to: impl,
367
+ type: 'implements',
368
+ });
369
+ }
370
+ // Composition/aggregation (check for property types)
371
+ for (const prop of cls.properties) {
372
+ const propMatch = code.match(new RegExp(`${prop}\\s*[?:]\\s*(\\w+)`));
373
+ if (propMatch && propMatch[1]) {
374
+ const targetType = propMatch[1];
375
+ // Check if it's a known class or interface
376
+ const isKnown = classes.some((c) => c.name === targetType);
377
+ if (isKnown) {
378
+ relationships.push({
379
+ from: cls.name,
380
+ to: targetType,
381
+ type: 'composes',
382
+ });
383
+ }
384
+ }
385
+ }
386
+ }
387
+ return relationships;
388
+ }
389
+ /**
390
+ * Extract body between braces
391
+ */
392
+ extractBody(code, startIndex) {
393
+ let braceCount = 1;
394
+ let endIndex = startIndex + 1;
395
+ while (braceCount > 0 && endIndex < code.length) {
396
+ if (code[endIndex] === '{')
397
+ braceCount++;
398
+ else if (code[endIndex] === '}')
399
+ braceCount--;
400
+ endIndex++;
401
+ }
402
+ return code.substring(startIndex, endIndex);
403
+ }
404
+ /**
405
+ * Extract method names from body
406
+ */
407
+ extractMethodNames(body) {
408
+ const methods = [];
409
+ const regex = /(?:async\s+)?(?:static\s+)?(\w+)\s*\([^)]*\)\s*[:{]/g;
410
+ let match;
411
+ while ((match = regex.exec(body)) !== null) {
412
+ if (!['constructor', 'if', 'for', 'while', 'switch'].includes(match[1])) {
413
+ methods.push(match[1]);
414
+ }
415
+ }
416
+ return methods;
417
+ }
418
+ /**
419
+ * Extract property names from body
420
+ */
421
+ extractPropertyNames(body) {
422
+ const properties = [];
423
+ const regex = /(?:private|public|protected|readonly)?\s*(\w+)\s*[?:]?\s*:/g;
424
+ let match;
425
+ while ((match = regex.exec(body)) !== null) {
426
+ properties.push(match[1]);
427
+ }
428
+ return properties;
429
+ }
430
+ /**
431
+ * Evaluate conformance
432
+ */
433
+ evaluateConformance(pattern, context) {
434
+ const matchedElements = [];
435
+ const missingElements = [];
436
+ const violations = [];
437
+ const recommendations = [];
438
+ // Check participants
439
+ for (const participant of pattern.participants) {
440
+ const matched = this.findParticipant(participant, context);
441
+ if (matched) {
442
+ matchedElements.push({
443
+ type: participant.type === 'abstract' ? 'class' : participant.type,
444
+ name: matched,
445
+ role: participant.role,
446
+ location: this.getLocation(matched, context),
447
+ });
448
+ // Check required methods
449
+ if (participant.requiredMethods) {
450
+ const entity = context.classes.find((c) => c.name === matched) ||
451
+ context.interfaces.find((i) => i.name === matched);
452
+ for (const method of participant.requiredMethods) {
453
+ const hasMethod = entity?.methods.some((m) => m.toLowerCase().includes(method.toLowerCase()));
454
+ if (!hasMethod) {
455
+ violations.push({
456
+ id: `missing-method-${participant.role}-${method}`,
457
+ severity: 'warning',
458
+ message: `${participant.role} should have method: ${method}`,
459
+ element: matched,
460
+ fix: `Add method ${method}() to ${matched}`,
461
+ });
462
+ }
463
+ }
464
+ }
465
+ }
466
+ else if (participant.required) {
467
+ missingElements.push({
468
+ type: participant.type === 'abstract' ? 'class' : participant.type,
469
+ name: 'Unknown',
470
+ role: participant.role,
471
+ });
472
+ recommendations.push(`Create ${participant.type} for role: ${participant.role}`);
473
+ }
474
+ }
475
+ // Check relationships
476
+ for (const rel of pattern.relationships) {
477
+ const hasRel = context.relationships.some((r) => this.matchesRole(r.from, rel.from, pattern, context) &&
478
+ this.matchesRole(r.to, rel.to, pattern, context) &&
479
+ r.type === rel.type);
480
+ if (!hasRel && rel.required) {
481
+ violations.push({
482
+ id: `missing-relationship-${rel.from}-${rel.to}`,
483
+ severity: this.config.strictMode ? 'error' : 'warning',
484
+ message: `Missing ${rel.type} relationship from ${rel.from} to ${rel.to}`,
485
+ fix: `Add ${rel.type} relationship`,
486
+ });
487
+ }
488
+ }
489
+ // Check constraints
490
+ for (const constraint of pattern.constraints ?? []) {
491
+ if (!constraint.check(context)) {
492
+ violations.push({
493
+ id: constraint.id,
494
+ severity: constraint.severity,
495
+ message: constraint.description,
496
+ });
497
+ }
498
+ }
499
+ // Calculate score
500
+ const totalRequired = pattern.participants.filter((p) => p.required).length +
501
+ pattern.relationships.filter((r) => r.required).length;
502
+ const matched = matchedElements.length;
503
+ const score = totalRequired > 0
504
+ ? Math.round((matched / totalRequired) * 100 - violations.length * 5)
505
+ : 0;
506
+ return {
507
+ patternId: pattern.id,
508
+ patternName: pattern.name,
509
+ category: pattern.category,
510
+ conformance: this.getConformanceLevel(Math.max(0, score)),
511
+ score: Math.max(0, score),
512
+ matchedElements,
513
+ missingElements,
514
+ violations,
515
+ recommendations,
516
+ };
517
+ }
518
+ /**
519
+ * Find participant in context
520
+ */
521
+ findParticipant(participant, context) {
522
+ const candidates = participant.type === 'interface'
523
+ ? context.interfaces.map((i) => i.name)
524
+ : context.classes.filter((c) => participant.type === 'abstract' ? c.isAbstract : !c.isAbstract).map((c) => c.name);
525
+ // Check by name pattern
526
+ if (participant.namePattern) {
527
+ const match = candidates.find((c) => participant.namePattern.test(c));
528
+ if (match)
529
+ return match;
530
+ }
531
+ // Check by role name similarity
532
+ const roleLower = participant.role.toLowerCase();
533
+ const match = candidates.find((c) => c.toLowerCase().includes(roleLower) ||
534
+ roleLower.includes(c.toLowerCase()));
535
+ return match ?? null;
536
+ }
537
+ /**
538
+ * Check if name matches role
539
+ */
540
+ matchesRole(name, role, pattern, context) {
541
+ const participant = pattern.participants.find((p) => p.role === role);
542
+ if (!participant)
543
+ return false;
544
+ const found = this.findParticipant(participant, context);
545
+ return found === name;
546
+ }
547
+ /**
548
+ * Get location for entity
549
+ */
550
+ getLocation(name, context) {
551
+ const cls = context.classes.find((c) => c.name === name);
552
+ if (cls)
553
+ return { file: context.file, line: cls.line };
554
+ const iface = context.interfaces.find((i) => i.name === name);
555
+ if (iface)
556
+ return { file: context.file, line: iface.line };
557
+ return { file: context.file };
558
+ }
559
+ /**
560
+ * Get conformance level from score
561
+ */
562
+ getConformanceLevel(score) {
563
+ if (score >= 90)
564
+ return 'full';
565
+ if (score >= 70)
566
+ return 'partial';
567
+ if (score >= 40)
568
+ return 'minimal';
569
+ return 'none';
570
+ }
571
+ /**
572
+ * Get available patterns
573
+ */
574
+ getPatterns() {
575
+ return [...this.patterns];
576
+ }
577
+ /**
578
+ * Add custom pattern
579
+ */
580
+ addPattern(pattern) {
581
+ this.patterns.push(pattern);
582
+ }
583
+ }
584
+ /**
585
+ * Create pattern conformance checker instance
586
+ */
587
+ export function createPatternConformanceChecker(config) {
588
+ return new PatternConformanceChecker(config);
589
+ }
590
+ //# sourceMappingURL=pattern-conformance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-conformance.js","sourceRoot":"","sources":["../../src/codegen/pattern-conformance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAsOH;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAA6B;IAClE,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,KAAK;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,sBAAsB,GAA2B;IACrD;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,YAAY;QACtB,YAAY,EAAE;YACZ;gBACE,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,IAAI;gBACd,eAAe,EAAE,CAAC,aAAa,CAAC;gBAChC,kBAAkB,EAAE,CAAC,UAAU,CAAC;aACjC;SACF;QACD,aAAa,EAAE,EAAE;QACjB,WAAW,EAAE;YACX;gBACE,EAAE,EAAE,qBAAqB;gBACzB,WAAW,EAAE,+BAA+B;gBAC5C,QAAQ,EAAE,SAAS;gBACnB,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;oBACb,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC;wBACxC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;gBACtD,CAAC;aACF;SACF;KACF;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,YAAY;QACtB,YAAY,EAAE;YACZ;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,IAAI;gBACd,eAAe,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,CAAC;aACrD;YACD;gBACE,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,IAAI;aACf;SACF;QACD,aAAa,EAAE;YACb,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC3E,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9E,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;SACpE;KACF;IACD;QACE,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,YAAY;QACtB,YAAY,EAAE;YACZ;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,IAAI;gBACd,eAAe,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,CAAC;aAC5E;YACD;gBACE,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,IAAI;gBACd,eAAe,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC;aACjD;YACD;gBACE,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,IAAI;aACf;SACF;QACD,aAAa,EAAE;YACb,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9E,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE;YAChF,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE;SACxE;KACF;IACD;QACE,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,YAAY;QACtB,YAAY,EAAE;YACZ;gBACE,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,IAAI;gBACd,eAAe,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC;aAC7C;YACD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,IAAI;gBACd,eAAe,EAAE,CAAC,aAAa,EAAE,iBAAiB,CAAC;aACpD;SACF;QACD,aAAa,EAAE;YACb,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE;YAChF,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;SACtE;KACF;IACD;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,YAAY;QACtB,YAAY,EAAE;YACZ;gBACE,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,IAAI;aACf;SACF;QACD,aAAa,EAAE;YACb,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE;YAClF,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC1E,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;YACxE,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;SAChF;KACF;IACD;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,YAAY;QACtB,YAAY,EAAE;YACZ;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,IAAI;aACf;SACF;QACD,aAAa,EAAE;YACb,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE;YACrE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;SACrE;KACF;IACD;QACE,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,eAAe;QACzB,YAAY,EAAE;YACZ;gBACE,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,IAAI;gBACd,eAAe,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC;aACnE;YACD;gBACE,IAAI,EAAE,oBAAoB;gBAC1B,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,IAAI;aACf;SACF;QACD,aAAa,EAAE;YACb,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE;SACrF;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,yBAAyB;IAC5B,MAAM,CAA2B;IACjC,QAAQ,CAAyB;IAEzC,YAAY,MAA0C;QACpD,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,0BAA0B,EAAE,GAAG,MAAM,EAAE,CAAC;QAC3D,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,sBAAsB,CAAC,CAAC;QAE5C,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY,CACV,IAAY,EACZ,SAAiB,EACjB,IAAI,GAAG,SAAS;QAEhB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QAC9D,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE1B,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,gBAAgB,CACd,IAAY,EACZ,IAAI,GAAG,SAAS;QAEhB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,OAAO,GAA+B,EAAE,CAAC;QAE/C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1D,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,MAAgC;QACtD,OAAO,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC9C,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,IAAY,EAAE,IAAY;QAC7C,OAAO;YACL,IAAI;YACJ,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAClC,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YACxC,aAAa,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;SAC/C,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,IAAY;QACjC,MAAM,OAAO,GAAgB,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,wFAAwF,CAAC;QACvG,IAAI,KAAK,CAAC;QAEV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YAC/D,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAEnD,kBAAkB;YAClB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAEhD,iCAAiC;YACjC,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,WAAW,GAAG,aAAa;gBAC/B,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC/C,CAAC,CAAC,EAAE,CAAC;YAEP,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI;gBACJ,IAAI;gBACJ,OAAO;gBACP,UAAU;gBACV,OAAO,EAAE,YAAY;gBACrB,UAAU,EAAE,WAAW;gBACvB,UAAU;aACX,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,IAAY;QACpC,MAAM,UAAU,GAAoB,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,kDAAkD,CAAC;QACjE,IAAI,KAAK,CAAC;QAEV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YAC/D,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAE5B,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAEhD,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,UAAU;gBACzB,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC5C,CAAC,CAAC,EAAE,CAAC;YAEP,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI;gBACJ,IAAI;gBACJ,OAAO;gBACP,UAAU;gBACV,OAAO,EAAE,QAAQ;aAClB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,IAAY;QACvC,MAAM,aAAa,GAAuB,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAE1C,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,uBAAuB;YACvB,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,aAAa,CAAC,IAAI,CAAC;oBACjB,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,EAAE,EAAE,GAAG,CAAC,OAAO;oBACf,IAAI,EAAE,SAAS;iBAChB,CAAC,CAAC;YACL,CAAC;YAED,2BAA2B;YAC3B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBAClC,aAAa,CAAC,IAAI,CAAC;oBACjB,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,YAAY;iBACnB,CAAC,CAAC;YACL,CAAC;YAED,qDAAqD;YACrD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBAClC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,IAAI,oBAAoB,CAAC,CAAC,CAAC;gBACtE,IAAI,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9B,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;oBAChC,2CAA2C;oBAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;oBAC3D,IAAI,OAAO,EAAE,CAAC;wBACZ,aAAa,CAAC,IAAI,CAAC;4BACjB,IAAI,EAAE,GAAG,CAAC,IAAI;4BACd,EAAE,EAAE,UAAU;4BACd,IAAI,EAAE,UAAU;yBACjB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,IAAY,EAAE,UAAkB;QAClD,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,QAAQ,GAAG,UAAU,GAAG,CAAC,CAAC;QAE9B,OAAO,UAAU,GAAG,CAAC,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAChD,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG;gBAAE,UAAU,EAAE,CAAC;iBACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG;gBAAE,UAAU,EAAE,CAAC;YAC9C,QAAQ,EAAE,CAAC;QACb,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,IAAY;QACrC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,sDAAsD,CAAC;QACrE,IAAI,KAAK,CAAC;QAEV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3C,IAAI,CAAC,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,IAAY;QACvC,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,6DAA6D,CAAC;QAC5E,IAAI,KAAK,CAAC;QAEV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3C,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,mBAAmB,CACzB,OAA6B,EAC7B,OAA2B;QAE3B,MAAM,eAAe,GAAyB,EAAE,CAAC;QACjD,MAAM,eAAe,GAAyB,EAAE,CAAC;QACjD,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,MAAM,eAAe,GAAa,EAAE,CAAC;QAErC,qBAAqB;QACrB,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAE3D,IAAI,OAAO,EAAE,CAAC;gBACZ,eAAe,CAAC,IAAI,CAAC;oBACnB,IAAI,EAAE,WAAW,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI;oBAClE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,WAAW,CAAC,IAAI;oBACtB,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC;iBAC7C,CAAC,CAAC;gBAEH,yBAAyB;gBACzB,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC;oBAChC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;wBAChD,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;oBAEjE,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC;wBACjD,MAAM,SAAS,GAAG,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3C,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAC/C,CAAC;wBACF,IAAI,CAAC,SAAS,EAAE,CAAC;4BACf,UAAU,CAAC,IAAI,CAAC;gCACd,EAAE,EAAE,kBAAkB,WAAW,CAAC,IAAI,IAAI,MAAM,EAAE;gCAClD,QAAQ,EAAE,SAAS;gCACnB,OAAO,EAAE,GAAG,WAAW,CAAC,IAAI,wBAAwB,MAAM,EAAE;gCAC5D,OAAO,EAAE,OAAO;gCAChB,GAAG,EAAE,cAAc,MAAM,SAAS,OAAO,EAAE;6BAC5C,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;gBAChC,eAAe,CAAC,IAAI,CAAC;oBACnB,IAAI,EAAE,WAAW,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI;oBAClE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,WAAW,CAAC,IAAI;iBACvB,CAAC,CAAC;gBACH,eAAe,CAAC,IAAI,CAAC,UAAU,WAAW,CAAC,IAAI,cAAc,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CACvC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC;gBACpD,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC;gBAChD,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAC3B,CAAC;YAEF,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAC5B,UAAU,CAAC,IAAI,CAAC;oBACd,EAAE,EAAE,wBAAwB,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,EAAE;oBAChD,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;oBACtD,OAAO,EAAE,WAAW,GAAG,CAAC,IAAI,sBAAsB,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,EAAE;oBACzE,GAAG,EAAE,OAAO,GAAG,CAAC,IAAI,eAAe;iBACpC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;YACnD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/B,UAAU,CAAC,IAAI,CAAC;oBACd,EAAE,EAAE,UAAU,CAAC,EAAE;oBACjB,QAAQ,EAAE,UAAU,CAAC,QAAQ;oBAC7B,OAAO,EAAE,UAAU,CAAC,WAAW;iBAChC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM;YACtD,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;QAC5E,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC;QACvC,MAAM,KAAK,GAAG,aAAa,GAAG,CAAC;YAC7B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,aAAa,CAAC,GAAG,GAAG,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;YACrE,CAAC,CAAC,CAAC,CAAC;QAEN,OAAO;YACL,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,WAAW,EAAE,OAAO,CAAC,IAAI;YACzB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACzD,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;YACzB,eAAe;YACf,eAAe;YACf,UAAU;YACV,eAAe;SAChB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,eAAe,CACrB,WAA4B,EAC5B,OAA2B;QAE3B,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,KAAK,WAAW;YACjD,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACvC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3B,WAAW,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAC/D,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAEzB,wBAAwB;QACxB,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,WAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;QAC1B,CAAC;QAED,gCAAgC;QAChC,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAClC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;YACnC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CACpC,CAAC;QAEF,OAAO,KAAK,IAAI,IAAI,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,WAAW,CACjB,IAAY,EACZ,IAAY,EACZ,OAA6B,EAC7B,OAA2B;QAE3B,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACtE,IAAI,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC;QAE/B,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACzD,OAAO,KAAK,KAAK,IAAI,CAAC;IACxB,CAAC;IAED;;OAEG;IACK,WAAW,CACjB,IAAY,EACZ,OAA2B;QAE3B,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACzD,IAAI,GAAG;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QAEvD,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC9D,IAAI,KAAK;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QAE3D,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,KAAa;QACvC,IAAI,KAAK,IAAI,EAAE;YAAE,OAAO,MAAM,CAAC;QAC/B,IAAI,KAAK,IAAI,EAAE;YAAE,OAAO,SAAS,CAAC;QAClC,IAAI,KAAK,IAAI,EAAE;YAAE,OAAO,SAAS,CAAC;QAClC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,OAA6B;QACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,+BAA+B,CAC7C,MAA0C;IAE1C,OAAO,IAAI,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC"}