@houtini/lm 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/CHANGELOG.md +273 -0
- package/LICENSE +21 -0
- package/README.md +203 -0
- package/dist/cache/analysis-cache.d.ts +33 -0
- package/dist/cache/analysis-cache.d.ts.map +1 -0
- package/dist/cache/analysis-cache.js +56 -0
- package/dist/cache/analysis-cache.js.map +1 -0
- package/dist/cache/cache-manager.d.ts +29 -0
- package/dist/cache/cache-manager.d.ts.map +1 -0
- package/dist/cache/cache-manager.js +85 -0
- package/dist/cache/cache-manager.js.map +1 -0
- package/dist/cache/index.d.ts +16 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +17 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/prompt-cache.d.ts +33 -0
- package/dist/cache/prompt-cache.d.ts.map +1 -0
- package/dist/cache/prompt-cache.js +61 -0
- package/dist/cache/prompt-cache.js.map +1 -0
- package/dist/config.d.ts +43 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +70 -0
- package/dist/config.js.map +1 -0
- package/dist/core/ThreeStagePromptManager.d.ts +39 -0
- package/dist/core/ThreeStagePromptManager.d.ts.map +1 -0
- package/dist/core/ThreeStagePromptManager.js +176 -0
- package/dist/core/ThreeStagePromptManager.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +230 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/base-plugin.d.ts +47 -0
- package/dist/plugins/base-plugin.d.ts.map +1 -0
- package/dist/plugins/base-plugin.js +90 -0
- package/dist/plugins/base-plugin.js.map +1 -0
- package/dist/plugins/index.d.ts +58 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +161 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/types.d.ts +5 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +5 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/prompts/analyze/code-quality.d.ts +116 -0
- package/dist/prompts/analyze/code-quality.d.ts.map +1 -0
- package/dist/prompts/analyze/code-quality.js +433 -0
- package/dist/prompts/analyze/code-quality.js.map +1 -0
- package/dist/prompts/analyze/compare-integration.d.ts +130 -0
- package/dist/prompts/analyze/compare-integration.d.ts.map +1 -0
- package/dist/prompts/analyze/compare-integration.js +543 -0
- package/dist/prompts/analyze/compare-integration.js.map +1 -0
- package/dist/prompts/analyze/count-files.d.ts +109 -0
- package/dist/prompts/analyze/count-files.d.ts.map +1 -0
- package/dist/prompts/analyze/count-files.js +399 -0
- package/dist/prompts/analyze/count-files.js.map +1 -0
- package/dist/prompts/analyze/database-queries.d.ts +156 -0
- package/dist/prompts/analyze/database-queries.d.ts.map +1 -0
- package/dist/prompts/analyze/database-queries.js +759 -0
- package/dist/prompts/analyze/database-queries.js.map +1 -0
- package/dist/prompts/analyze/dependencies.d.ts +97 -0
- package/dist/prompts/analyze/dependencies.d.ts.map +1 -0
- package/dist/prompts/analyze/dependencies.js +333 -0
- package/dist/prompts/analyze/dependencies.js.map +1 -0
- package/dist/prompts/analyze/diff-signatures.d.ts +139 -0
- package/dist/prompts/analyze/diff-signatures.d.ts.map +1 -0
- package/dist/prompts/analyze/diff-signatures.js +702 -0
- package/dist/prompts/analyze/diff-signatures.js.map +1 -0
- package/dist/prompts/analyze/find-patterns.d.ts +128 -0
- package/dist/prompts/analyze/find-patterns.d.ts.map +1 -0
- package/dist/prompts/analyze/find-patterns.js +520 -0
- package/dist/prompts/analyze/find-patterns.js.map +1 -0
- package/dist/prompts/analyze/find-unused-css.d.ts +151 -0
- package/dist/prompts/analyze/find-unused-css.d.ts.map +1 -0
- package/dist/prompts/analyze/find-unused-css.js +754 -0
- package/dist/prompts/analyze/find-unused-css.js.map +1 -0
- package/dist/prompts/analyze/n8n-workflow.d.ts +137 -0
- package/dist/prompts/analyze/n8n-workflow.d.ts.map +1 -0
- package/dist/prompts/analyze/n8n-workflow.js +529 -0
- package/dist/prompts/analyze/n8n-workflow.js.map +1 -0
- package/dist/prompts/analyze/project-structure.d.ts +126 -0
- package/dist/prompts/analyze/project-structure.d.ts.map +1 -0
- package/dist/prompts/analyze/project-structure.js +569 -0
- package/dist/prompts/analyze/project-structure.js.map +1 -0
- package/dist/prompts/analyze/security-audit.d.ts +142 -0
- package/dist/prompts/analyze/security-audit.d.ts.map +1 -0
- package/dist/prompts/analyze/security-audit.js +637 -0
- package/dist/prompts/analyze/security-audit.js.map +1 -0
- package/dist/prompts/analyze/single-file.d.ts +162 -0
- package/dist/prompts/analyze/single-file.d.ts.map +1 -0
- package/dist/prompts/analyze/single-file.js +665 -0
- package/dist/prompts/analyze/single-file.js.map +1 -0
- package/dist/prompts/analyze/trace-execution.d.ts +126 -0
- package/dist/prompts/analyze/trace-execution.d.ts.map +1 -0
- package/dist/prompts/analyze/trace-execution.js +609 -0
- package/dist/prompts/analyze/trace-execution.js.map +1 -0
- package/dist/prompts/analyze/wordpress-plugin-audit.d.ts +116 -0
- package/dist/prompts/analyze/wordpress-plugin-audit.d.ts.map +1 -0
- package/dist/prompts/analyze/wordpress-plugin-audit.js +454 -0
- package/dist/prompts/analyze/wordpress-plugin-audit.js.map +1 -0
- package/dist/prompts/analyze/wordpress-security.d.ts +146 -0
- package/dist/prompts/analyze/wordpress-security.d.ts.map +1 -0
- package/dist/prompts/analyze/wordpress-security.js +698 -0
- package/dist/prompts/analyze/wordpress-security.js.map +1 -0
- package/dist/prompts/analyze/wordpress-theme-audit.d.ts +114 -0
- package/dist/prompts/analyze/wordpress-theme-audit.d.ts.map +1 -0
- package/dist/prompts/analyze/wordpress-theme-audit.js +538 -0
- package/dist/prompts/analyze/wordpress-theme-audit.js.map +1 -0
- package/dist/prompts/custom/custom-prompt.d.ts +135 -0
- package/dist/prompts/custom/custom-prompt.d.ts.map +1 -0
- package/dist/prompts/custom/custom-prompt.js +419 -0
- package/dist/prompts/custom/custom-prompt.js.map +1 -0
- package/dist/prompts/fun/arcade-game.d.ts +152 -0
- package/dist/prompts/fun/arcade-game.d.ts.map +1 -0
- package/dist/prompts/fun/arcade-game.js +653 -0
- package/dist/prompts/fun/arcade-game.js.map +1 -0
- package/dist/prompts/fun/create_text_adventure.d.ts +100 -0
- package/dist/prompts/fun/create_text_adventure.d.ts.map +1 -0
- package/dist/prompts/fun/create_text_adventure.js +397 -0
- package/dist/prompts/fun/create_text_adventure.js.map +1 -0
- package/dist/prompts/fun/css-art-generator.d.ts +168 -0
- package/dist/prompts/fun/css-art-generator.d.ts.map +1 -0
- package/dist/prompts/fun/css-art-generator.js +827 -0
- package/dist/prompts/fun/css-art-generator.js.map +1 -0
- package/dist/prompts/generate/project-documentation.d.ts +137 -0
- package/dist/prompts/generate/project-documentation.d.ts.map +1 -0
- package/dist/prompts/generate/project-documentation.js +666 -0
- package/dist/prompts/generate/project-documentation.js.map +1 -0
- package/dist/prompts/generate/refactoring.d.ts +164 -0
- package/dist/prompts/generate/refactoring.d.ts.map +1 -0
- package/dist/prompts/generate/refactoring.js +621 -0
- package/dist/prompts/generate/refactoring.js.map +1 -0
- package/dist/prompts/generate/responsive-component.d.ts +147 -0
- package/dist/prompts/generate/responsive-component.d.ts.map +1 -0
- package/dist/prompts/generate/responsive-component.js +955 -0
- package/dist/prompts/generate/responsive-component.js.map +1 -0
- package/dist/prompts/generate/typescript-conversion.d.ts +144 -0
- package/dist/prompts/generate/typescript-conversion.d.ts.map +1 -0
- package/dist/prompts/generate/typescript-conversion.js +527 -0
- package/dist/prompts/generate/typescript-conversion.js.map +1 -0
- package/dist/prompts/generate/unit-tests.d.ts +139 -0
- package/dist/prompts/generate/unit-tests.d.ts.map +1 -0
- package/dist/prompts/generate/unit-tests.js +578 -0
- package/dist/prompts/generate/unit-tests.js.map +1 -0
- package/dist/prompts/generate/wordpress-plugin.d.ts +179 -0
- package/dist/prompts/generate/wordpress-plugin.d.ts.map +1 -0
- package/dist/prompts/generate/wordpress-plugin.js +763 -0
- package/dist/prompts/generate/wordpress-plugin.js.map +1 -0
- package/dist/prompts/generate/wordpress-theme-from-static.d.ts +177 -0
- package/dist/prompts/generate/wordpress-theme-from-static.d.ts.map +1 -0
- package/dist/prompts/generate/wordpress-theme-from-static.js +695 -0
- package/dist/prompts/generate/wordpress-theme-from-static.js.map +1 -0
- package/dist/prompts/shared/cache-manager.d.ts +45 -0
- package/dist/prompts/shared/cache-manager.d.ts.map +1 -0
- package/dist/prompts/shared/cache-manager.js +129 -0
- package/dist/prompts/shared/cache-manager.js.map +1 -0
- package/dist/prompts/shared/helpers.d.ts +39 -0
- package/dist/prompts/shared/helpers.d.ts.map +1 -0
- package/dist/prompts/shared/helpers.js +151 -0
- package/dist/prompts/shared/helpers.js.map +1 -0
- package/dist/prompts/shared/templates.d.ts +35 -0
- package/dist/prompts/shared/templates.d.ts.map +1 -0
- package/dist/prompts/shared/templates.js +77 -0
- package/dist/prompts/shared/templates.js.map +1 -0
- package/dist/prompts/shared/types.d.ts +112 -0
- package/dist/prompts/shared/types.d.ts.map +1 -0
- package/dist/prompts/shared/types.js +5 -0
- package/dist/prompts/shared/types.js.map +1 -0
- package/dist/prompts/system/find-unused-files.d.ts +106 -0
- package/dist/prompts/system/find-unused-files.d.ts.map +1 -0
- package/dist/prompts/system/find-unused-files.js +353 -0
- package/dist/prompts/system/find-unused-files.js.map +1 -0
- package/dist/security/index.d.ts +39 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +46 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/integration-helpers.d.ts +121 -0
- package/dist/security/integration-helpers.d.ts.map +1 -0
- package/dist/security/integration-helpers.js +190 -0
- package/dist/security/integration-helpers.js.map +1 -0
- package/dist/security/output-encoder.d.ts +94 -0
- package/dist/security/output-encoder.d.ts.map +1 -0
- package/dist/security/output-encoder.js +295 -0
- package/dist/security/output-encoder.js.map +1 -0
- package/dist/security/prompt-injection-guard.d.ts +59 -0
- package/dist/security/prompt-injection-guard.d.ts.map +1 -0
- package/dist/security/prompt-injection-guard.js +249 -0
- package/dist/security/prompt-injection-guard.js.map +1 -0
- package/dist/security/sanitisation.d.ts +67 -0
- package/dist/security/sanitisation.d.ts.map +1 -0
- package/dist/security/sanitisation.js +398 -0
- package/dist/security/sanitisation.js.map +1 -0
- package/dist/security/security-service.d.ts +103 -0
- package/dist/security/security-service.d.ts.map +1 -0
- package/dist/security/security-service.js +303 -0
- package/dist/security/security-service.js.map +1 -0
- package/dist/security-config.d.ts +45 -0
- package/dist/security-config.d.ts.map +1 -0
- package/dist/security-config.js +63 -0
- package/dist/security-config.js.map +1 -0
- package/dist/system/function-list.d.ts +61 -0
- package/dist/system/function-list.d.ts.map +1 -0
- package/dist/system/function-list.js +111 -0
- package/dist/system/function-list.js.map +1 -0
- package/dist/system/function-registry.d.ts +23 -0
- package/dist/system/function-registry.d.ts.map +1 -0
- package/dist/system/function-registry.js +136 -0
- package/dist/system/function-registry.js.map +1 -0
- package/dist/system/health-check.d.ts +33 -0
- package/dist/system/health-check.d.ts.map +1 -0
- package/dist/system/health-check.js +98 -0
- package/dist/system/health-check.js.map +1 -0
- package/dist/system/path-resolver.d.ts +55 -0
- package/dist/system/path-resolver.d.ts.map +1 -0
- package/dist/system/path-resolver.js +90 -0
- package/dist/system/path-resolver.js.map +1 -0
- package/dist/templates/plugin-template.d.ts +121 -0
- package/dist/templates/plugin-template.d.ts.map +1 -0
- package/dist/templates/plugin-template.js +450 -0
- package/dist/templates/plugin-template.js.map +1 -0
- package/dist/types/chunking-types.d.ts +88 -0
- package/dist/types/chunking-types.d.ts.map +1 -0
- package/dist/types/chunking-types.js +18 -0
- package/dist/types/chunking-types.js.map +1 -0
- package/dist/types/prompt-stages.d.ts +42 -0
- package/dist/types/prompt-stages.d.ts.map +1 -0
- package/dist/types/prompt-stages.js +6 -0
- package/dist/types/prompt-stages.js.map +1 -0
- package/dist/types.d.ts +46 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/css-parser.d.ts +26 -0
- package/dist/utils/css-parser.d.ts.map +1 -0
- package/dist/utils/css-parser.js +117 -0
- package/dist/utils/css-parser.js.map +1 -0
- package/dist/utils/path-resolver.d.ts +13 -0
- package/dist/utils/path-resolver.d.ts.map +1 -0
- package/dist/utils/path-resolver.js +78 -0
- package/dist/utils/path-resolver.js.map +1 -0
- package/dist/utils/plugin-utilities.d.ts +171 -0
- package/dist/utils/plugin-utilities.d.ts.map +1 -0
- package/dist/utils/plugin-utilities.js +221 -0
- package/dist/utils/plugin-utilities.js.map +1 -0
- package/dist/utils/streamHandler.d.ts +3 -0
- package/dist/utils/streamHandler.d.ts.map +1 -0
- package/dist/utils/streamHandler.js +137 -0
- package/dist/utils/streamHandler.js.map +1 -0
- package/dist/validation/output-validator.d.ts +136 -0
- package/dist/validation/output-validator.d.ts.map +1 -0
- package/dist/validation/output-validator.js +262 -0
- package/dist/validation/output-validator.js.map +1 -0
- package/dist/validation/response-factory.d.ts +44 -0
- package/dist/validation/response-factory.d.ts.map +1 -0
- package/dist/validation/response-factory.js +202 -0
- package/dist/validation/response-factory.js.map +1 -0
- package/dist/validation/schemas.d.ts +519 -0
- package/dist/validation/schemas.d.ts.map +1 -0
- package/dist/validation/schemas.js +6 -0
- package/dist/validation/schemas.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,527 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript Conversion Plugin - Modern v4.3 Universal Template
|
|
3
|
+
*
|
|
4
|
+
* Converts JavaScript code to TypeScript with comprehensive type annotations
|
|
5
|
+
* Supports both individual files and entire projects
|
|
6
|
+
*/
|
|
7
|
+
import { BasePlugin } from '../../plugins/base-plugin.js';
|
|
8
|
+
import { ThreeStagePromptManager } from '../../core/ThreeStagePromptManager.js';
|
|
9
|
+
import { withSecurity } from '../../security/integration-helpers.js';
|
|
10
|
+
import { readFileContent } from '../shared/helpers.js';
|
|
11
|
+
import { ModelSetup, ResponseProcessor, ParameterValidator, ErrorHandler, MultiFileAnalysis } from '../../utils/plugin-utilities.js';
|
|
12
|
+
import { getAnalysisCache } from '../../cache/index.js';
|
|
13
|
+
// Common Node.js modules - Use these instead of require()
|
|
14
|
+
import { basename, extname, relative } from 'path';
|
|
15
|
+
export class TypeScriptConverter extends BasePlugin {
|
|
16
|
+
constructor() {
|
|
17
|
+
super();
|
|
18
|
+
this.name = 'convert_to_typescript';
|
|
19
|
+
this.category = 'generate';
|
|
20
|
+
this.description = 'Convert JavaScript code to TypeScript with comprehensive type annotations and modern best practices';
|
|
21
|
+
// Universal parameter set - supports both single and multi-file scenarios
|
|
22
|
+
this.parameters = {
|
|
23
|
+
// Single-file parameters
|
|
24
|
+
code: {
|
|
25
|
+
type: 'string',
|
|
26
|
+
description: 'JavaScript code to convert (for single-file conversion)',
|
|
27
|
+
required: false
|
|
28
|
+
},
|
|
29
|
+
filePath: {
|
|
30
|
+
type: 'string',
|
|
31
|
+
description: 'Path to single JavaScript file to convert',
|
|
32
|
+
required: false
|
|
33
|
+
},
|
|
34
|
+
// Multi-file parameters
|
|
35
|
+
projectPath: {
|
|
36
|
+
type: 'string',
|
|
37
|
+
description: 'Path to project root (for multi-file conversion)',
|
|
38
|
+
required: false
|
|
39
|
+
},
|
|
40
|
+
files: {
|
|
41
|
+
type: 'array',
|
|
42
|
+
description: 'Array of specific JavaScript file paths to convert',
|
|
43
|
+
required: false,
|
|
44
|
+
items: { type: 'string' }
|
|
45
|
+
},
|
|
46
|
+
maxDepth: {
|
|
47
|
+
type: 'number',
|
|
48
|
+
description: 'Maximum directory depth for multi-file discovery (1-5)',
|
|
49
|
+
required: false,
|
|
50
|
+
default: 3
|
|
51
|
+
},
|
|
52
|
+
// TypeScript configuration parameters
|
|
53
|
+
strict: {
|
|
54
|
+
type: 'boolean',
|
|
55
|
+
description: 'Use strict TypeScript mode',
|
|
56
|
+
required: false,
|
|
57
|
+
default: true
|
|
58
|
+
},
|
|
59
|
+
target: {
|
|
60
|
+
type: 'string',
|
|
61
|
+
description: 'TypeScript compilation target',
|
|
62
|
+
required: false,
|
|
63
|
+
default: 'ES2020'
|
|
64
|
+
},
|
|
65
|
+
module: {
|
|
66
|
+
type: 'string',
|
|
67
|
+
description: 'Module system',
|
|
68
|
+
required: false,
|
|
69
|
+
default: 'ESNext'
|
|
70
|
+
},
|
|
71
|
+
preserveComments: {
|
|
72
|
+
type: 'boolean',
|
|
73
|
+
description: 'Preserve original comments and add TSDoc',
|
|
74
|
+
required: false,
|
|
75
|
+
default: true
|
|
76
|
+
},
|
|
77
|
+
addTypeGuards: {
|
|
78
|
+
type: 'boolean',
|
|
79
|
+
description: 'Add type guard functions for runtime type checking',
|
|
80
|
+
required: false,
|
|
81
|
+
default: true
|
|
82
|
+
},
|
|
83
|
+
useInterfaces: {
|
|
84
|
+
type: 'boolean',
|
|
85
|
+
description: 'Prefer interfaces over type aliases',
|
|
86
|
+
required: false,
|
|
87
|
+
default: true
|
|
88
|
+
},
|
|
89
|
+
useEnums: {
|
|
90
|
+
type: 'boolean',
|
|
91
|
+
description: 'Use enums for fixed value sets',
|
|
92
|
+
required: false,
|
|
93
|
+
default: true
|
|
94
|
+
},
|
|
95
|
+
analysisDepth: {
|
|
96
|
+
type: 'string',
|
|
97
|
+
description: 'Level of conversion detail',
|
|
98
|
+
enum: ['basic', 'detailed', 'comprehensive'],
|
|
99
|
+
default: 'comprehensive',
|
|
100
|
+
required: false
|
|
101
|
+
},
|
|
102
|
+
analysisType: {
|
|
103
|
+
type: 'string',
|
|
104
|
+
description: 'Type of conversion to perform',
|
|
105
|
+
enum: ['type-safety', 'modern-features', 'comprehensive'],
|
|
106
|
+
default: 'comprehensive',
|
|
107
|
+
required: false
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
this.analysisCache = getAnalysisCache();
|
|
111
|
+
this.multiFileAnalysis = new MultiFileAnalysis();
|
|
112
|
+
// Cache and analysis utilities are initialized above
|
|
113
|
+
}
|
|
114
|
+
async execute(params, llmClient) {
|
|
115
|
+
return await withSecurity(this, params, llmClient, async (secureParams) => {
|
|
116
|
+
try {
|
|
117
|
+
// 1. Auto-detect analysis mode based on parameters
|
|
118
|
+
const analysisMode = this.detectAnalysisMode(secureParams);
|
|
119
|
+
// 2. Validate parameters based on detected mode
|
|
120
|
+
this.validateParameters(secureParams, analysisMode);
|
|
121
|
+
// 3. Setup model
|
|
122
|
+
const { model, contextLength } = await ModelSetup.getReadyModel(llmClient);
|
|
123
|
+
// 4. Route to appropriate analysis method
|
|
124
|
+
if (analysisMode === 'single-file') {
|
|
125
|
+
return await this.executeSingleFileAnalysis(secureParams, model, contextLength);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
return await this.executeMultiFileAnalysis(secureParams, model, contextLength);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
return ErrorHandler.createExecutionError('convert_to_typescript', error);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Auto-detect whether this is single-file or multi-file conversion
|
|
138
|
+
*/
|
|
139
|
+
detectAnalysisMode(params) {
|
|
140
|
+
// Single-file indicators take priority (JavaScript conversion is often file-by-file)
|
|
141
|
+
if (params.code || params.filePath) {
|
|
142
|
+
return 'single-file';
|
|
143
|
+
}
|
|
144
|
+
// Multi-file indicators
|
|
145
|
+
if (params.projectPath || params.files) {
|
|
146
|
+
return 'multi-file';
|
|
147
|
+
}
|
|
148
|
+
// Default to single-file for TypeScript conversion (most common use case)
|
|
149
|
+
return 'single-file';
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Validate parameters based on detected analysis mode
|
|
153
|
+
*/
|
|
154
|
+
validateParameters(params, mode) {
|
|
155
|
+
if (mode === 'single-file') {
|
|
156
|
+
ParameterValidator.validateCodeOrFile(params);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
ParameterValidator.validateProjectPath(params);
|
|
160
|
+
ParameterValidator.validateDepth(params);
|
|
161
|
+
}
|
|
162
|
+
// Universal validations
|
|
163
|
+
ParameterValidator.validateEnum(params, 'analysisType', ['type-safety', 'modern-features', 'comprehensive']);
|
|
164
|
+
ParameterValidator.validateEnum(params, 'analysisDepth', ['basic', 'detailed', 'comprehensive']);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Execute single-file analysis
|
|
168
|
+
*/
|
|
169
|
+
async executeSingleFileAnalysis(params, model, contextLength) {
|
|
170
|
+
// Process single file input
|
|
171
|
+
let codeToAnalyze = params.code;
|
|
172
|
+
if (params.filePath) {
|
|
173
|
+
codeToAnalyze = await readFileContent(params.filePath);
|
|
174
|
+
}
|
|
175
|
+
// Generate prompt stages for single file
|
|
176
|
+
const promptStages = this.getSingleFilePromptStages({
|
|
177
|
+
...params,
|
|
178
|
+
code: codeToAnalyze
|
|
179
|
+
});
|
|
180
|
+
// Execute with appropriate method
|
|
181
|
+
const promptManager = new ThreeStagePromptManager(contextLength);
|
|
182
|
+
const needsChunking = promptManager.needsChunking(promptStages);
|
|
183
|
+
if (needsChunking) {
|
|
184
|
+
const conversation = promptManager.createChunkedConversation(promptStages);
|
|
185
|
+
const messages = [
|
|
186
|
+
conversation.systemMessage,
|
|
187
|
+
...conversation.dataMessages,
|
|
188
|
+
conversation.analysisMessage
|
|
189
|
+
];
|
|
190
|
+
return await ResponseProcessor.executeChunked(messages, model, contextLength, 'convert_to_typescript', 'single');
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
return await ResponseProcessor.executeDirect(promptStages, model, contextLength, 'convert_to_typescript');
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Execute multi-file analysis
|
|
198
|
+
*/
|
|
199
|
+
async executeMultiFileAnalysis(params, model, contextLength) {
|
|
200
|
+
// Discover files
|
|
201
|
+
let filesToAnalyze = params.files ||
|
|
202
|
+
await this.discoverRelevantFiles(params.projectPath, params.maxDepth, params.analysisType);
|
|
203
|
+
// Perform multi-file analysis with caching
|
|
204
|
+
const analysisResult = await this.performMultiFileAnalysis(filesToAnalyze, params, model, contextLength);
|
|
205
|
+
// Generate prompt stages for multi-file
|
|
206
|
+
const promptStages = this.getMultiFilePromptStages({
|
|
207
|
+
...params,
|
|
208
|
+
analysisResult,
|
|
209
|
+
fileCount: filesToAnalyze.length
|
|
210
|
+
});
|
|
211
|
+
// Always use chunking for multi-file
|
|
212
|
+
const promptManager = new ThreeStagePromptManager(contextLength);
|
|
213
|
+
const conversation = promptManager.createChunkedConversation(promptStages);
|
|
214
|
+
const messages = [
|
|
215
|
+
conversation.systemMessage,
|
|
216
|
+
...conversation.dataMessages,
|
|
217
|
+
conversation.analysisMessage
|
|
218
|
+
];
|
|
219
|
+
return await ResponseProcessor.executeChunked(messages, model, contextLength, 'convert_to_typescript', 'multifile');
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Single-file TypeScript conversion prompt stages
|
|
223
|
+
*/
|
|
224
|
+
getSingleFilePromptStages(params) {
|
|
225
|
+
const { code, analysisDepth, analysisType, strict = true, target = 'ES2020', module = 'ESNext', preserveComments = true, addTypeGuards = true, useInterfaces = true, useEnums = true } = params;
|
|
226
|
+
const systemAndContext = `You are a world-class TypeScript expert and JavaScript modernization specialist with deep expertise in type system design and code transformation.
|
|
227
|
+
|
|
228
|
+
**Your Mission**: Transform JavaScript code into production-ready TypeScript that eliminates runtime errors, improves developer experience, and leverages modern language features.
|
|
229
|
+
|
|
230
|
+
**Conversion Configuration**:
|
|
231
|
+
- Strictness Level: ${strict ? 'Strict (zero any types)' : 'Relaxed (minimal any usage)'}
|
|
232
|
+
- Target: ${target}
|
|
233
|
+
- Module System: ${module}
|
|
234
|
+
- Analysis Depth: ${analysisDepth}
|
|
235
|
+
- Analysis Type: ${analysisType}
|
|
236
|
+
- Preserve Comments: ${preserveComments}
|
|
237
|
+
- Add Type Guards: ${addTypeGuards}
|
|
238
|
+
- Use Interfaces: ${useInterfaces}
|
|
239
|
+
- Use Enums: ${useEnums}
|
|
240
|
+
|
|
241
|
+
**Core Principles**:
|
|
242
|
+
1. **Type Safety First**: Every variable, parameter, and return value must be properly typed
|
|
243
|
+
2. **Modern TypeScript**: Use latest language features (4.5+) for maximum expressiveness
|
|
244
|
+
3. **Runtime Identical**: Converted code must have identical runtime behavior
|
|
245
|
+
4. **Developer Experience**: Types should make the code easier to understand and maintain
|
|
246
|
+
5. **Performance Conscious**: Use efficient TypeScript patterns that compile to optimal JavaScript`;
|
|
247
|
+
const dataPayload = `JavaScript code to convert to TypeScript:
|
|
248
|
+
|
|
249
|
+
\`\`\`javascript
|
|
250
|
+
${code}
|
|
251
|
+
\`\`\``;
|
|
252
|
+
const outputInstructions = `**Convert this JavaScript to TypeScript following these expert guidelines:**
|
|
253
|
+
|
|
254
|
+
## Type System Design
|
|
255
|
+
- **Explicit Types Everywhere**: Add comprehensive type annotations to all functions, variables, and object shapes
|
|
256
|
+
- **Smart Type Inference**: Use TypeScript's inference where it improves readability without sacrificing clarity
|
|
257
|
+
- **Union Types & Discriminated Unions**: Use union types for flexible APIs and discriminated unions for state management
|
|
258
|
+
- **Generic Programming**: Implement generics for reusable, type-safe components and utilities
|
|
259
|
+
${useInterfaces ? '- **Interface-First**: Create interfaces for all object shapes, extending and composing as needed' : '- **Type Aliases**: Use type aliases for object shapes and complex types'}
|
|
260
|
+
${useEnums ? '- **Enums for Constants**: Use const enums for performance and regular enums for runtime introspection' : '- **String Literals**: Use string literal unions instead of enums'}
|
|
261
|
+
|
|
262
|
+
## Modern TypeScript Features
|
|
263
|
+
- **Utility Types**: Leverage Partial, Required, Pick, Omit, Record, etc. for type manipulation
|
|
264
|
+
- **Template Literal Types**: Use template literals for strongly-typed string patterns
|
|
265
|
+
- **Conditional Types**: Implement conditional types for complex type relationships
|
|
266
|
+
${addTypeGuards ? '- **Type Guards**: Create custom type guards for runtime type safety' : '- **Type Assertions**: Use type assertions judiciously where type guards aren\'t needed'}
|
|
267
|
+
- **Const Assertions**: Use \`as const\` for immutable data and precise literal types
|
|
268
|
+
- **Module Imports**: Convert require() to modern ES6 imports with proper type imports
|
|
269
|
+
|
|
270
|
+
## Code Quality Enhancements
|
|
271
|
+
- **Error Handling**: Type Error objects and Promise rejections properly
|
|
272
|
+
- **Async/Await**: Ensure proper typing of async functions and their return types
|
|
273
|
+
- **Event Handling**: Type event handlers and DOM interactions correctly
|
|
274
|
+
- **API Responses**: Create strong types for external API responses and internal data structures
|
|
275
|
+
${preserveComments ? '- **Documentation**: Preserve original comments and add TSDoc for public APIs' : '- **Essential Comments**: Keep only essential comments for complex logic'}
|
|
276
|
+
|
|
277
|
+
## Configuration Integration
|
|
278
|
+
- **tsconfig.json**: The code should work with strict TypeScript compiler settings
|
|
279
|
+
- **Import Resolution**: Use proper module resolution for the ${module} module system
|
|
280
|
+
- **Target Compatibility**: Code should compile cleanly to ${target}
|
|
281
|
+
|
|
282
|
+
**Output Format:**
|
|
283
|
+
\`\`\`typescript
|
|
284
|
+
// Converted TypeScript code here
|
|
285
|
+
// Include all necessary type definitions
|
|
286
|
+
// Add comprehensive type annotations
|
|
287
|
+
// Implement modern TypeScript patterns
|
|
288
|
+
\`\`\`
|
|
289
|
+
|
|
290
|
+
**Include after the code:**
|
|
291
|
+
|
|
292
|
+
### Type Safety Improvements
|
|
293
|
+
- List specific bugs this typing would catch at compile time
|
|
294
|
+
- Explain how types improve maintainability and refactoring
|
|
295
|
+
|
|
296
|
+
### Migration Notes
|
|
297
|
+
- Any potential breaking changes during conversion
|
|
298
|
+
- Recommended IDE setup for optimal development experience
|
|
299
|
+
|
|
300
|
+
### Performance Considerations
|
|
301
|
+
- TypeScript patterns used that optimize for runtime performance
|
|
302
|
+
- Compile-time vs runtime trade-offs made`;
|
|
303
|
+
return { systemAndContext, dataPayload, outputInstructions };
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Multi-file TypeScript conversion prompt stages
|
|
307
|
+
*/
|
|
308
|
+
getMultiFilePromptStages(params) {
|
|
309
|
+
const { analysisResult, analysisType, analysisDepth, fileCount } = params;
|
|
310
|
+
const systemAndContext = `You are a senior TypeScript architect specializing in large-scale JavaScript to TypeScript migrations and codebase modernization.
|
|
311
|
+
|
|
312
|
+
**Your Mission**: Orchestrate a comprehensive TypeScript conversion across ${fileCount} files, ensuring type consistency, shared interfaces, and optimal module boundaries.
|
|
313
|
+
|
|
314
|
+
**Migration Context**:
|
|
315
|
+
- Analysis Type: ${analysisType}
|
|
316
|
+
- Analysis Depth: ${analysisDepth}
|
|
317
|
+
- Files to Convert: ${fileCount}
|
|
318
|
+
- Mode: Multi-File Project Conversion
|
|
319
|
+
|
|
320
|
+
**Architectural Considerations**:
|
|
321
|
+
1. **Shared Type Definitions**: Identify common types that should be extracted to shared modules
|
|
322
|
+
2. **Module Boundaries**: Optimize imports/exports for type safety and tree-shaking
|
|
323
|
+
3. **Dependency Resolution**: Handle circular dependencies and complex import chains
|
|
324
|
+
4. **Type Propagation**: Ensure types flow correctly through the entire application
|
|
325
|
+
5. **Migration Strategy**: Provide a phased conversion approach for minimal disruption`;
|
|
326
|
+
const dataPayload = `Multi-file JavaScript analysis results:
|
|
327
|
+
|
|
328
|
+
${JSON.stringify(analysisResult, null, 2)}`;
|
|
329
|
+
const outputInstructions = `**Provide a comprehensive multi-file TypeScript conversion strategy:**
|
|
330
|
+
|
|
331
|
+
## Conversion Strategy
|
|
332
|
+
### Phase 1: Foundation Types
|
|
333
|
+
- Extract shared interfaces and types to dedicated modules
|
|
334
|
+
- Create base types for common patterns across files
|
|
335
|
+
- Establish typing conventions for the codebase
|
|
336
|
+
|
|
337
|
+
### Phase 2: File-by-File Conversion
|
|
338
|
+
- Prioritized conversion order based on dependency graph
|
|
339
|
+
- Individual file conversion recommendations
|
|
340
|
+
- Import/export updates needed
|
|
341
|
+
|
|
342
|
+
### Phase 3: Integration & Optimization
|
|
343
|
+
- Cross-file type validation
|
|
344
|
+
- Shared utility type creation
|
|
345
|
+
- Performance optimization through type structure
|
|
346
|
+
|
|
347
|
+
## Shared Type Architecture
|
|
348
|
+
\`\`\`typescript
|
|
349
|
+
// Example: types/shared.ts
|
|
350
|
+
export interface CommonDataStructure {
|
|
351
|
+
// Shared interfaces identified across files
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
// Example: types/api.ts
|
|
355
|
+
export interface APIResponse<T> {
|
|
356
|
+
// Common API response pattern
|
|
357
|
+
}
|
|
358
|
+
\`\`\`
|
|
359
|
+
|
|
360
|
+
## File Conversion Recommendations
|
|
361
|
+
${analysisResult.findings?.slice(0, 5).map((file) => `
|
|
362
|
+
### ${file.fileName}
|
|
363
|
+
- **Conversion Priority**: High/Medium/Low
|
|
364
|
+
- **Key Types Needed**: [List main interfaces/types]
|
|
365
|
+
- **Dependencies**: Files that must be converted first
|
|
366
|
+
- **Challenges**: Specific TypeScript issues to address
|
|
367
|
+
`).join('') || 'Analysis results will determine specific file recommendations'}
|
|
368
|
+
|
|
369
|
+
## Project Configuration
|
|
370
|
+
### Recommended tsconfig.json
|
|
371
|
+
\`\`\`json
|
|
372
|
+
{
|
|
373
|
+
"compilerOptions": {
|
|
374
|
+
"target": "${params.target || 'ES2020'}",
|
|
375
|
+
"module": "${params.module || 'ESNext'}",
|
|
376
|
+
"strict": ${params.strict !== false},
|
|
377
|
+
// Additional recommended settings
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
\`\`\`
|
|
381
|
+
|
|
382
|
+
## Migration Timeline
|
|
383
|
+
- **Week 1**: Foundation types and core utilities
|
|
384
|
+
- **Week 2-3**: Main application files (dependency order)
|
|
385
|
+
- **Week 4**: Integration testing and type refinement
|
|
386
|
+
|
|
387
|
+
## Risk Mitigation
|
|
388
|
+
- Breaking changes and their workarounds
|
|
389
|
+
- Testing strategy during conversion
|
|
390
|
+
- Rollback procedures if needed`;
|
|
391
|
+
return { systemAndContext, dataPayload, outputInstructions };
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Backwards compatibility routing
|
|
395
|
+
*/
|
|
396
|
+
getPromptStages(params) {
|
|
397
|
+
const mode = this.detectAnalysisMode(params);
|
|
398
|
+
if (mode === 'single-file') {
|
|
399
|
+
return this.getSingleFilePromptStages(params);
|
|
400
|
+
}
|
|
401
|
+
else {
|
|
402
|
+
return this.getMultiFilePromptStages(params);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
// Multi-file helper methods
|
|
406
|
+
async discoverRelevantFiles(projectPath, maxDepth, analysisType) {
|
|
407
|
+
const extensions = this.getFileExtensions(analysisType);
|
|
408
|
+
return await this.multiFileAnalysis.discoverFiles(projectPath, extensions, maxDepth);
|
|
409
|
+
}
|
|
410
|
+
async performMultiFileAnalysis(files, params, model, contextLength) {
|
|
411
|
+
const cacheKey = this.analysisCache.generateKey('convert_to_typescript', params, files);
|
|
412
|
+
const cached = await this.analysisCache.get(cacheKey);
|
|
413
|
+
if (cached)
|
|
414
|
+
return cached;
|
|
415
|
+
const fileAnalysisResults = await this.multiFileAnalysis.analyzeBatch(files, (file) => this.analyzeIndividualFile(file, params, model), contextLength);
|
|
416
|
+
// Aggregate results into proper analysis result format
|
|
417
|
+
const aggregatedResult = {
|
|
418
|
+
summary: `TypeScript conversion analysis of ${files.length} JavaScript files`,
|
|
419
|
+
findings: fileAnalysisResults,
|
|
420
|
+
data: {
|
|
421
|
+
fileCount: files.length,
|
|
422
|
+
totalSize: fileAnalysisResults.reduce((sum, result) => sum + (result.size || 0), 0),
|
|
423
|
+
jsFilesByType: this.categorizeJavaScriptFiles(fileAnalysisResults),
|
|
424
|
+
conversionComplexity: this.assessConversionComplexity(fileAnalysisResults)
|
|
425
|
+
}
|
|
426
|
+
};
|
|
427
|
+
await this.analysisCache.cacheAnalysis(cacheKey, aggregatedResult, {
|
|
428
|
+
modelUsed: model.identifier || 'unknown',
|
|
429
|
+
executionTime: Date.now() - Date.now(), // TODO: Track actual execution time
|
|
430
|
+
timestamp: new Date().toISOString()
|
|
431
|
+
});
|
|
432
|
+
return aggregatedResult;
|
|
433
|
+
}
|
|
434
|
+
async analyzeIndividualFile(file, params, model) {
|
|
435
|
+
const content = await import('fs/promises').then(fs => fs.readFile(file, 'utf-8'));
|
|
436
|
+
const stats = await import('fs/promises').then(fs => fs.stat(file));
|
|
437
|
+
return {
|
|
438
|
+
filePath: file,
|
|
439
|
+
fileName: basename(file),
|
|
440
|
+
size: content.length,
|
|
441
|
+
lines: content.split('\n').length,
|
|
442
|
+
extension: extname(file),
|
|
443
|
+
relativePath: relative(params.projectPath || '', file),
|
|
444
|
+
hasJSDoc: content.includes('/**'),
|
|
445
|
+
usesModernJS: this.detectModernJSFeatures(content),
|
|
446
|
+
complexityScore: this.calculateComplexity(content)
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
getFileExtensions(analysisType) {
|
|
450
|
+
const extensionMap = {
|
|
451
|
+
'type-safety': ['.js', '.jsx'], // Focus on JavaScript files needing type safety
|
|
452
|
+
'modern-features': ['.js', '.jsx', '.mjs'], // Include modern JS variants
|
|
453
|
+
'comprehensive': ['.js', '.jsx', '.mjs', '.cjs'] // All JavaScript file types
|
|
454
|
+
};
|
|
455
|
+
return extensionMap[analysisType] || extensionMap.comprehensive;
|
|
456
|
+
}
|
|
457
|
+
categorizeJavaScriptFiles(results) {
|
|
458
|
+
const categories = {
|
|
459
|
+
'components': 0,
|
|
460
|
+
'utilities': 0,
|
|
461
|
+
'services': 0,
|
|
462
|
+
'types': 0,
|
|
463
|
+
'tests': 0,
|
|
464
|
+
'config': 0,
|
|
465
|
+
'other': 0
|
|
466
|
+
};
|
|
467
|
+
results.forEach(result => {
|
|
468
|
+
const path = result.fileName.toLowerCase();
|
|
469
|
+
if (path.includes('component') || path.includes('jsx'))
|
|
470
|
+
categories.components++;
|
|
471
|
+
else if (path.includes('util') || path.includes('helper'))
|
|
472
|
+
categories.utilities++;
|
|
473
|
+
else if (path.includes('service') || path.includes('api'))
|
|
474
|
+
categories.services++;
|
|
475
|
+
else if (path.includes('type') || path.includes('interface'))
|
|
476
|
+
categories.types++;
|
|
477
|
+
else if (path.includes('test') || path.includes('spec'))
|
|
478
|
+
categories.tests++;
|
|
479
|
+
else if (path.includes('config') || path.includes('settings'))
|
|
480
|
+
categories.config++;
|
|
481
|
+
else
|
|
482
|
+
categories.other++;
|
|
483
|
+
});
|
|
484
|
+
return categories;
|
|
485
|
+
}
|
|
486
|
+
assessConversionComplexity(results) {
|
|
487
|
+
const avgComplexity = results.reduce((sum, result) => sum + (result.complexityScore || 0), 0) / results.length;
|
|
488
|
+
if (avgComplexity > 0.8)
|
|
489
|
+
return 'High - Complex patterns, extensive refactoring needed';
|
|
490
|
+
if (avgComplexity > 0.5)
|
|
491
|
+
return 'Medium - Moderate complexity, standard conversion';
|
|
492
|
+
return 'Low - Straightforward conversion, minimal challenges';
|
|
493
|
+
}
|
|
494
|
+
detectModernJSFeatures(content) {
|
|
495
|
+
const modernFeatures = [
|
|
496
|
+
'const ', 'let ', '=>', 'async ', 'await ', 'import ', 'export ',
|
|
497
|
+
'class ', '...', 'template literal', 'destructuring'
|
|
498
|
+
];
|
|
499
|
+
return modernFeatures.some(feature => content.includes(feature));
|
|
500
|
+
}
|
|
501
|
+
calculateComplexity(content) {
|
|
502
|
+
// Simple complexity scoring based on various JavaScript patterns
|
|
503
|
+
const complexPatterns = [
|
|
504
|
+
/function\s*\(/g,
|
|
505
|
+
/=>/g,
|
|
506
|
+
/if\s*\(/g,
|
|
507
|
+
/for\s*\(/g,
|
|
508
|
+
/while\s*\(/g,
|
|
509
|
+
/try\s*{/g,
|
|
510
|
+
/catch\s*\(/g,
|
|
511
|
+
/switch\s*\(/g
|
|
512
|
+
];
|
|
513
|
+
const totalPatterns = complexPatterns.reduce((sum, pattern) => {
|
|
514
|
+
return sum + (content.match(pattern) || []).length;
|
|
515
|
+
}, 0);
|
|
516
|
+
// Normalize by file size (rough complexity per line)
|
|
517
|
+
const lines = content.split('\n').length;
|
|
518
|
+
return Math.min(totalPatterns / lines, 1);
|
|
519
|
+
}
|
|
520
|
+
generateCacheKey(files, params) {
|
|
521
|
+
const fileHash = files.join('|');
|
|
522
|
+
const paramHash = JSON.stringify(params);
|
|
523
|
+
return `${fileHash}_${paramHash}`.substring(0, 64);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
export default TypeScriptConverter;
|
|
527
|
+
//# sourceMappingURL=typescript-conversion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript-conversion.js","sourceRoot":"","sources":["../../../src/prompts/generate/typescript-conversion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAEhF,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EAClB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,0DAA0D;AAC1D,OAAO,EAAE,QAAQ,EAAW,OAAO,EAAQ,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGlE,MAAM,OAAO,mBAAoB,SAAQ,UAAU;IAoGjD;QACE,KAAK,EAAE,CAAC;QApGV,SAAI,GAAG,uBAAuB,CAAC;QAC/B,aAAQ,GAAG,UAAmB,CAAC;QAC/B,gBAAW,GAAG,qGAAqG,CAAC;QAEpH,0EAA0E;QAC1E,eAAU,GAAG;YACX,yBAAyB;YACzB,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAiB;gBACvB,WAAW,EAAE,yDAAyD;gBACtE,QAAQ,EAAE,KAAK;aAChB;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAiB;gBACvB,WAAW,EAAE,2CAA2C;gBACxD,QAAQ,EAAE,KAAK;aAChB;YAED,0BAA0B;YAC1B,WAAW,EAAE;gBACX,IAAI,EAAE,QAAiB;gBACvB,WAAW,EAAE,kDAAkD;gBAC/D,QAAQ,EAAE,KAAK;aAChB;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,OAAgB;gBACtB,WAAW,EAAE,oDAAoD;gBACjE,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;aACnC;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAiB;gBACvB,WAAW,EAAE,wDAAwD;gBACrE,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,CAAC;aACX;YAED,sCAAsC;YACtC,MAAM,EAAE;gBACN,IAAI,EAAE,SAAkB;gBACxB,WAAW,EAAE,4BAA4B;gBACzC,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,IAAI;aACd;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAiB;gBACvB,WAAW,EAAE,+BAA+B;gBAC5C,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,QAAQ;aAClB;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAiB;gBACvB,WAAW,EAAE,eAAe;gBAC5B,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,QAAQ;aAClB;YACD,gBAAgB,EAAE;gBAChB,IAAI,EAAE,SAAkB;gBACxB,WAAW,EAAE,0CAA0C;gBACvD,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,IAAI;aACd;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,SAAkB;gBACxB,WAAW,EAAE,oDAAoD;gBACjE,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,IAAI;aACd;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,SAAkB;gBACxB,WAAW,EAAE,qCAAqC;gBAClD,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,IAAI;aACd;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,SAAkB;gBACxB,WAAW,EAAE,gCAAgC;gBAC7C,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,IAAI;aACd;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,QAAiB;gBACvB,WAAW,EAAE,4BAA4B;gBACzC,IAAI,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,eAAe,CAAC;gBAC5C,OAAO,EAAE,eAAe;gBACxB,QAAQ,EAAE,KAAK;aAChB;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAiB;gBACvB,WAAW,EAAE,+BAA+B;gBAC5C,IAAI,EAAE,CAAC,aAAa,EAAE,iBAAiB,EAAE,eAAe,CAAC;gBACzD,OAAO,EAAE,eAAe;gBACxB,QAAQ,EAAE,KAAK;aAChB;SACF,CAAC;QAEM,kBAAa,GAAG,gBAAgB,EAAE,CAAC;QACnC,sBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAIlD,qDAAqD;IACvD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAW,EAAE,SAAc;QACvC,OAAO,MAAM,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE;YACxE,IAAI,CAAC;gBACH,mDAAmD;gBACnD,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;gBAE3D,gDAAgD;gBAChD,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;gBAEpD,iBAAiB;gBACjB,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;gBAE3E,0CAA0C;gBAC1C,IAAI,YAAY,KAAK,aAAa,EAAE,CAAC;oBACnC,OAAO,MAAM,IAAI,CAAC,yBAAyB,CAAC,YAAY,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;gBAClF,CAAC;qBAAM,CAAC;oBACN,OAAO,MAAM,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;gBACjF,CAAC;YAEH,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,OAAO,YAAY,CAAC,oBAAoB,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,MAAW;QACpC,qFAAqF;QACrF,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACnC,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,wBAAwB;QACxB,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACvC,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,0EAA0E;QAC1E,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,MAAW,EAAE,IAAkC;QACxE,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;YAC3B,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,kBAAkB,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAC/C,kBAAkB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;QAED,wBAAwB;QACxB,kBAAkB,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,aAAa,EAAE,iBAAiB,EAAE,eAAe,CAAC,CAAC,CAAC;QAC7G,kBAAkB,CAAC,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;IACnG,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,yBAAyB,CAAC,MAAW,EAAE,KAAU,EAAE,aAAqB;QACpF,4BAA4B;QAC5B,IAAI,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC;QAChC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,aAAa,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzD,CAAC;QAED,yCAAyC;QACzC,MAAM,YAAY,GAAG,IAAI,CAAC,yBAAyB,CAAC;YAClD,GAAG,MAAM;YACT,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC;QAEH,kCAAkC;QAClC,MAAM,aAAa,GAAG,IAAI,uBAAuB,CAAC,aAAa,CAAC,CAAC;QACjE,MAAM,aAAa,GAAG,aAAa,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAEhE,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,YAAY,GAAG,aAAa,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC;YAC3E,MAAM,QAAQ,GAAG;gBACf,YAAY,CAAC,aAAa;gBAC1B,GAAG,YAAY,CAAC,YAAY;gBAC5B,YAAY,CAAC,eAAe;aAC7B,CAAC;YAEF,OAAO,MAAM,iBAAiB,CAAC,cAAc,CAC3C,QAAQ,EACR,KAAK,EACL,aAAa,EACb,uBAAuB,EACvB,QAAQ,CACT,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,MAAM,iBAAiB,CAAC,aAAa,CAC1C,YAAY,EACZ,KAAK,EACL,aAAa,EACb,uBAAuB,CACxB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,wBAAwB,CAAC,MAAW,EAAE,KAAU,EAAE,aAAqB;QACnF,iBAAiB;QACjB,IAAI,cAAc,GAAa,MAAM,CAAC,KAAK;YACzC,MAAM,IAAI,CAAC,qBAAqB,CAC9B,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,YAAY,CACpB,CAAC;QAEJ,2CAA2C;QAC3C,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,wBAAwB,CACxD,cAAc,EACd,MAAM,EACN,KAAK,EACL,aAAa,CACd,CAAC;QAEF,wCAAwC;QACxC,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC;YACjD,GAAG,MAAM;YACT,cAAc;YACd,SAAS,EAAE,cAAc,CAAC,MAAM;SACjC,CAAC,CAAC;QAEH,qCAAqC;QACrC,MAAM,aAAa,GAAG,IAAI,uBAAuB,CAAC,aAAa,CAAC,CAAC;QACjE,MAAM,YAAY,GAAG,aAAa,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG;YACf,YAAY,CAAC,aAAa;YAC1B,GAAG,YAAY,CAAC,YAAY;YAC5B,YAAY,CAAC,eAAe;SAC7B,CAAC;QAEF,OAAO,MAAM,iBAAiB,CAAC,cAAc,CAC3C,QAAQ,EACR,KAAK,EACL,aAAa,EACb,uBAAuB,EACvB,WAAW,CACZ,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,yBAAyB,CAAC,MAAW;QAC3C,MAAM,EACJ,IAAI,EACJ,aAAa,EACb,YAAY,EACZ,MAAM,GAAG,IAAI,EACb,MAAM,GAAG,QAAQ,EACjB,MAAM,GAAG,QAAQ,EACjB,gBAAgB,GAAG,IAAI,EACvB,aAAa,GAAG,IAAI,EACpB,aAAa,GAAG,IAAI,EACpB,QAAQ,GAAG,IAAI,EAChB,GAAG,MAAM,CAAC;QAEX,MAAM,gBAAgB,GAAG;;;;;sBAKP,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,6BAA6B;YAC5E,MAAM;mBACC,MAAM;oBACL,aAAa;mBACd,YAAY;uBACR,gBAAgB;qBAClB,aAAa;oBACd,aAAa;eAClB,QAAQ;;;;;;;mGAO4E,CAAC;QAEhG,MAAM,WAAW,GAAG;;;EAGtB,IAAI;OACC,CAAC;QAEJ,MAAM,kBAAkB,GAAG;;;;;;;EAO7B,aAAa,CAAC,CAAC,CAAC,mGAAmG,CAAC,CAAC,CAAC,0EAA0E;EAChM,QAAQ,CAAC,CAAC,CAAC,wGAAwG,CAAC,CAAC,CAAC,mEAAmE;;;;;;EAMzL,aAAa,CAAC,CAAC,CAAC,sEAAsE,CAAC,CAAC,CAAC,yFAAyF;;;;;;;;;EASlL,gBAAgB,CAAC,CAAC,CAAC,+EAA+E,CAAC,CAAC,CAAC,0EAA0E;;;;gEAIjH,MAAM;6DACT,MAAM;;;;;;;;;;;;;;;;;;;;;;0CAsBzB,CAAC;QAEvC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAC/D,CAAC;IAED;;OAEG;IACK,wBAAwB,CAAC,MAAW;QAC1C,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;QAE1E,MAAM,gBAAgB,GAAG;;6EAEgD,SAAS;;;mBAGnE,YAAY;oBACX,aAAa;sBACX,SAAS;;;;;;;;uFAQwD,CAAC;QAEpF,MAAM,WAAW,GAAG;;EAEtB,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAExC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgC7B,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC;MACpD,IAAI,CAAC,QAAQ;;;;;CAKlB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,+DAA+D;;;;;;;iBAO7D,MAAM,CAAC,MAAM,IAAI,QAAQ;iBACzB,MAAM,CAAC,MAAM,IAAI,QAAQ;gBAC1B,MAAM,CAAC,MAAM,KAAK,KAAK;;;;;;;;;;;;;;gCAcP,CAAC;QAE7B,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,MAAW;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAE7C,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,4BAA4B;IACpB,KAAK,CAAC,qBAAqB,CACjC,WAAmB,EACnB,QAAgB,EAChB,YAAoB;QAEpB,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QACxD,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IACvF,CAAC;IAEO,KAAK,CAAC,wBAAwB,CACpC,KAAe,EACf,MAAW,EACX,KAAU,EACV,aAAqB;QAErB,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAC7C,uBAAuB,EACvB,MAAM,EACN,KAAK,CACN,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAE1B,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CACnE,KAAK,EACL,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EACjE,aAAa,CACd,CAAC;QAEF,uDAAuD;QACvD,MAAM,gBAAgB,GAAG;YACvB,OAAO,EAAE,qCAAqC,KAAK,CAAC,MAAM,mBAAmB;YAC7E,QAAQ,EAAE,mBAAmB;YAC7B,IAAI,EAAE;gBACJ,SAAS,EAAE,KAAK,CAAC,MAAM;gBACvB,SAAS,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,MAAW,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;gBAChG,aAAa,EAAE,IAAI,CAAC,yBAAyB,CAAC,mBAAmB,CAAC;gBAClE,oBAAoB,EAAE,IAAI,CAAC,0BAA0B,CAAC,mBAAmB,CAAC;aAC3E;SACF,CAAC;QAEF,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,QAAQ,EAAE,gBAAgB,EAAE;YACjE,SAAS,EAAE,KAAK,CAAC,UAAU,IAAI,SAAS;YACxC,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,oCAAoC;YAC5E,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;QAEH,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,IAAY,EAAE,MAAW,EAAE,KAAU;QACvE,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACnF,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpE,OAAO;YACL,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC;YACxB,IAAI,EAAE,OAAO,CAAC,MAAM;YACpB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM;YACjC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC;YACxB,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE,IAAI,CAAC;YACtD,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;YACjC,YAAY,EAAE,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;YAClD,eAAe,EAAE,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;SACnD,CAAC;IACJ,CAAC;IAEO,iBAAiB,CAAC,YAAoB;QAC5C,MAAM,YAAY,GAA6B;YAC7C,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,gDAAgD;YAChF,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,6BAA6B;YACzE,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,4BAA4B;SAC9E,CAAC;QAEF,OAAO,YAAY,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,aAAa,CAAC;IAClE,CAAC;IAEO,yBAAyB,CAAC,OAAc;QAC9C,MAAM,UAAU,GAAG;YACjB,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,CAAC;YACd,UAAU,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;SACX,CAAC;QAEF,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACvB,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,UAAU,CAAC,UAAU,EAAE,CAAC;iBAC3E,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,UAAU,CAAC,SAAS,EAAE,CAAC;iBAC7E,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,UAAU,CAAC,QAAQ,EAAE,CAAC;iBAC5E,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAAE,UAAU,CAAC,KAAK,EAAE,CAAC;iBAC5E,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,UAAU,CAAC,KAAK,EAAE,CAAC;iBACvE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAAE,UAAU,CAAC,MAAM,EAAE,CAAC;;gBAC9E,UAAU,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,0BAA0B,CAAC,OAAc;QAC/C,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QAC/G,IAAI,aAAa,GAAG,GAAG;YAAE,OAAO,uDAAuD,CAAC;QACxF,IAAI,aAAa,GAAG,GAAG;YAAE,OAAO,mDAAmD,CAAC;QACpF,OAAO,sDAAsD,CAAC;IAChE,CAAC;IAEO,sBAAsB,CAAC,OAAe;QAC5C,MAAM,cAAc,GAAG;YACrB,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;YAChE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,eAAe;SACrD,CAAC;QACF,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,CAAC;IAEO,mBAAmB,CAAC,OAAe;QACzC,iEAAiE;QACjE,MAAM,eAAe,GAAG;YACtB,gBAAgB;YAChB,KAAK;YACL,UAAU;YACV,WAAW;YACX,aAAa;YACb,UAAU;YACV,aAAa;YACb,cAAc;SACf,CAAC;QAEF,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;YAC5D,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACrD,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,qDAAqD;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QACzC,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IAEO,gBAAgB,CAAC,KAAe,EAAE,MAAW;QACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzC,OAAO,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;CACF;AAED,eAAe,mBAAmB,CAAC"}
|