@andrebuzeli/git-mcp 4.0.21 → 5.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/README.md +59 -32
- package/dist/config.d.ts +0 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -27
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +54 -3
- package/dist/index.js.map +1 -1
- package/dist/providers/gitea-provider.d.ts +5 -5
- package/dist/providers/gitea-provider.d.ts.map +1 -1
- package/dist/providers/gitea-provider.js +75 -220
- package/dist/providers/gitea-provider.js.map +1 -1
- package/dist/providers/github-provider.d.ts +0 -48
- package/dist/providers/github-provider.d.ts.map +1 -1
- package/dist/providers/github-provider.js +805 -849
- package/dist/providers/github-provider.js.map +1 -1
- package/dist/providers/provider-factory.d.ts +1 -1
- package/dist/providers/provider-factory.d.ts.map +1 -1
- package/dist/providers/provider-factory.js +4 -14
- package/dist/providers/provider-factory.js.map +1 -1
- package/dist/providers/types.d.ts +1 -1
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +91 -37
- package/dist/server.js.map +1 -1
- package/dist/tools/git-files.d.ts.map +1 -1
- package/dist/tools/git-files.js +103 -5
- package/dist/tools/git-files.js.map +1 -1
- package/dist/tools/git-sync.d.ts.map +1 -1
- package/dist/tools/git-sync.js +104 -6
- package/dist/tools/git-sync.js.map +1 -1
- package/dist/tools/git-workflow.d.ts +55 -0
- package/dist/tools/git-workflow.d.ts.map +1 -1
- package/dist/tools/git-workflow.js +660 -7
- package/dist/tools/git-workflow.js.map +1 -1
- package/dist/utils/auto-detection.js +1 -1
- package/dist/utils/auto-detection.js.map +1 -1
- package/dist/utils/configuration-error-generator.d.ts +41 -0
- package/dist/utils/configuration-error-generator.d.ts.map +1 -0
- package/dist/utils/configuration-error-generator.js +168 -0
- package/dist/utils/configuration-error-generator.js.map +1 -0
- package/dist/utils/configuration-validator.d.ts +67 -0
- package/dist/utils/configuration-validator.d.ts.map +1 -0
- package/dist/utils/configuration-validator.js +257 -0
- package/dist/utils/configuration-validator.js.map +1 -0
- package/dist/utils/multi-provider-error-handler.d.ts +75 -0
- package/dist/utils/multi-provider-error-handler.d.ts.map +1 -0
- package/dist/utils/multi-provider-error-handler.js +276 -0
- package/dist/utils/multi-provider-error-handler.js.map +1 -0
- package/dist/utils/multi-provider-operation-handler.d.ts +113 -0
- package/dist/utils/multi-provider-operation-handler.d.ts.map +1 -0
- package/dist/utils/multi-provider-operation-handler.js +303 -0
- package/dist/utils/multi-provider-operation-handler.js.map +1 -0
- package/dist/utils/operation-error-handler.d.ts +69 -0
- package/dist/utils/operation-error-handler.d.ts.map +1 -0
- package/dist/utils/operation-error-handler.js +277 -0
- package/dist/utils/operation-error-handler.js.map +1 -0
- package/dist/utils/provider-operation-handler.d.ts +80 -0
- package/dist/utils/provider-operation-handler.d.ts.map +1 -0
- package/dist/utils/provider-operation-handler.js +201 -0
- package/dist/utils/provider-operation-handler.js.map +1 -0
- package/dist/utils/response-helper.js +1 -1
- package/dist/utils/response-helper.js.map +1 -1
- package/package.json +60 -60
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConfigurationValidator = void 0;
|
|
4
|
+
const config_js_1 = require("../config.js");
|
|
5
|
+
const configuration_error_generator_js_1 = require("./configuration-error-generator.js");
|
|
6
|
+
/**
|
|
7
|
+
* Configuration validator for Git MCP providers
|
|
8
|
+
* Validates provider parameters and configurations
|
|
9
|
+
*/
|
|
10
|
+
class ConfigurationValidator {
|
|
11
|
+
static VALID_PROVIDERS = ['github', 'gitea', 'both'];
|
|
12
|
+
/**
|
|
13
|
+
* Validate provider parameter value
|
|
14
|
+
*/
|
|
15
|
+
static validateProvider(provider) {
|
|
16
|
+
if (!this.VALID_PROVIDERS.includes(provider)) {
|
|
17
|
+
return {
|
|
18
|
+
valid: false,
|
|
19
|
+
error: {
|
|
20
|
+
code: 'INVALID_PROVIDER',
|
|
21
|
+
message: `Provider '${provider}' is not valid`,
|
|
22
|
+
suggestion: 'Use one of: github, gitea, both',
|
|
23
|
+
availableProviders: [...this.VALID_PROVIDERS]
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
return { valid: true };
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Validate GitHub provider configuration
|
|
31
|
+
*/
|
|
32
|
+
static validateGitHubConfiguration() {
|
|
33
|
+
const githubToken = config_js_1.config.getGitHubToken();
|
|
34
|
+
if (!githubToken) {
|
|
35
|
+
const configError = configuration_error_generator_js_1.ConfigurationErrorGenerator.generateGitHubError();
|
|
36
|
+
return {
|
|
37
|
+
valid: false,
|
|
38
|
+
error: {
|
|
39
|
+
code: 'GITHUB_NOT_CONFIGURED',
|
|
40
|
+
message: 'GitHub provider is not configured',
|
|
41
|
+
provider: 'github',
|
|
42
|
+
configuration: configError,
|
|
43
|
+
suggestion: 'Configure GITHUB_TOKEN environment variable to use GitHub provider'
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// Validate token format (GitHub tokens start with specific prefixes)
|
|
48
|
+
if (!this.isValidGitHubTokenFormat(githubToken)) {
|
|
49
|
+
const configError = configuration_error_generator_js_1.ConfigurationErrorGenerator.generateAuthenticationError('github');
|
|
50
|
+
return {
|
|
51
|
+
valid: false,
|
|
52
|
+
error: {
|
|
53
|
+
code: 'INVALID_GITHUB_TOKEN_FORMAT',
|
|
54
|
+
message: 'GitHub token format is invalid',
|
|
55
|
+
provider: 'github',
|
|
56
|
+
configuration: configError,
|
|
57
|
+
suggestion: 'GitHub tokens should start with ghp_, gho_, ghu_, ghs_, or ghr_'
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
return { valid: true };
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Validate Gitea provider configuration
|
|
65
|
+
*/
|
|
66
|
+
static validateGiteaConfiguration() {
|
|
67
|
+
const giteaUrl = config_js_1.config.getGiteaUrl();
|
|
68
|
+
const giteaToken = config_js_1.config.getGiteaToken();
|
|
69
|
+
const missing = [];
|
|
70
|
+
if (!giteaUrl)
|
|
71
|
+
missing.push('GITEA_URL');
|
|
72
|
+
if (!giteaToken)
|
|
73
|
+
missing.push('GITEA_TOKEN');
|
|
74
|
+
if (missing.length > 0) {
|
|
75
|
+
const configError = configuration_error_generator_js_1.ConfigurationErrorGenerator.generateMissingVariablesError('gitea', missing);
|
|
76
|
+
return {
|
|
77
|
+
valid: false,
|
|
78
|
+
error: {
|
|
79
|
+
code: 'GITEA_NOT_CONFIGURED',
|
|
80
|
+
message: 'Gitea provider is not configured',
|
|
81
|
+
provider: 'gitea',
|
|
82
|
+
configuration: configError,
|
|
83
|
+
suggestion: `Configure ${missing.join(' and ')} environment variable${missing.length > 1 ? 's' : ''} to use Gitea provider`
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// Validate URL format
|
|
88
|
+
if (!this.isValidUrl(giteaUrl)) {
|
|
89
|
+
const configError = configuration_error_generator_js_1.ConfigurationErrorGenerator.generateGiteaError();
|
|
90
|
+
return {
|
|
91
|
+
valid: false,
|
|
92
|
+
error: {
|
|
93
|
+
code: 'INVALID_GITEA_URL',
|
|
94
|
+
message: 'Gitea URL format is invalid',
|
|
95
|
+
provider: 'gitea',
|
|
96
|
+
configuration: configError,
|
|
97
|
+
suggestion: 'GITEA_URL should be a valid URL ending with /api/v1 (e.g., https://your-gitea.com/api/v1)'
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
return { valid: true };
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Validate provider configuration based on provider parameter
|
|
105
|
+
*/
|
|
106
|
+
static validateProviderConfiguration(provider) {
|
|
107
|
+
switch (provider) {
|
|
108
|
+
case 'github':
|
|
109
|
+
return this.validateGitHubConfiguration();
|
|
110
|
+
case 'gitea':
|
|
111
|
+
return this.validateGiteaConfiguration();
|
|
112
|
+
case 'both':
|
|
113
|
+
return this.validateBothProvidersConfiguration();
|
|
114
|
+
default:
|
|
115
|
+
return {
|
|
116
|
+
valid: false,
|
|
117
|
+
error: {
|
|
118
|
+
code: 'UNKNOWN_PROVIDER',
|
|
119
|
+
message: `Unknown provider: ${provider}`,
|
|
120
|
+
suggestion: 'This should not happen - please report this as a bug'
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Validate both providers configuration
|
|
127
|
+
*/
|
|
128
|
+
static validateBothProvidersConfiguration() {
|
|
129
|
+
const githubValidation = this.validateGitHubConfiguration();
|
|
130
|
+
const giteaValidation = this.validateGiteaConfiguration();
|
|
131
|
+
// If both are invalid, return combined error
|
|
132
|
+
if (!githubValidation.valid && !giteaValidation.valid) {
|
|
133
|
+
const configError = configuration_error_generator_js_1.ConfigurationErrorGenerator.generateBothProvidersError();
|
|
134
|
+
return {
|
|
135
|
+
valid: false,
|
|
136
|
+
error: {
|
|
137
|
+
code: 'BOTH_PROVIDERS_NOT_CONFIGURED',
|
|
138
|
+
message: 'Neither GitHub nor Gitea providers are configured',
|
|
139
|
+
provider: 'both',
|
|
140
|
+
configuration: configError,
|
|
141
|
+
suggestion: 'Configure both GITHUB_TOKEN and GITEA_URL/GITEA_TOKEN to use both providers'
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
// If only one is invalid, return warning but allow operation
|
|
146
|
+
if (!githubValidation.valid) {
|
|
147
|
+
return {
|
|
148
|
+
valid: true, // Allow operation but with warning
|
|
149
|
+
error: {
|
|
150
|
+
code: 'GITHUB_NOT_CONFIGURED_WARNING',
|
|
151
|
+
message: 'GitHub provider not configured - operations will only run on Gitea',
|
|
152
|
+
provider: 'github',
|
|
153
|
+
configuration: githubValidation.error?.configuration,
|
|
154
|
+
suggestion: 'Configure GITHUB_TOKEN to enable GitHub operations'
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
if (!giteaValidation.valid) {
|
|
159
|
+
return {
|
|
160
|
+
valid: true, // Allow operation but with warning
|
|
161
|
+
error: {
|
|
162
|
+
code: 'GITEA_NOT_CONFIGURED_WARNING',
|
|
163
|
+
message: 'Gitea provider not configured - operations will only run on GitHub',
|
|
164
|
+
provider: 'gitea',
|
|
165
|
+
configuration: giteaValidation.error?.configuration,
|
|
166
|
+
suggestion: 'Configure GITEA_URL and GITEA_TOKEN to enable Gitea operations'
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
return { valid: true };
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Get missing configuration for a provider
|
|
174
|
+
*/
|
|
175
|
+
static getMissingConfiguration(provider) {
|
|
176
|
+
const missing = [];
|
|
177
|
+
if (provider === 'github') {
|
|
178
|
+
if (!config_js_1.config.getGitHubToken())
|
|
179
|
+
missing.push('GITHUB_TOKEN');
|
|
180
|
+
}
|
|
181
|
+
else if (provider === 'gitea') {
|
|
182
|
+
if (!config_js_1.config.getGiteaUrl())
|
|
183
|
+
missing.push('GITEA_URL');
|
|
184
|
+
if (!config_js_1.config.getGiteaToken())
|
|
185
|
+
missing.push('GITEA_TOKEN');
|
|
186
|
+
}
|
|
187
|
+
return missing;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Check if any provider is configured
|
|
191
|
+
*/
|
|
192
|
+
static hasAnyProviderConfigured() {
|
|
193
|
+
const githubConfigured = !!config_js_1.config.getGitHubToken();
|
|
194
|
+
const giteaConfigured = !!(config_js_1.config.getGiteaUrl() && config_js_1.config.getGiteaToken());
|
|
195
|
+
return githubConfigured || giteaConfigured;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Get list of configured providers
|
|
199
|
+
*/
|
|
200
|
+
static getConfiguredProviders() {
|
|
201
|
+
const configured = [];
|
|
202
|
+
if (config_js_1.config.getGitHubToken()) {
|
|
203
|
+
configured.push('github');
|
|
204
|
+
}
|
|
205
|
+
if (config_js_1.config.getGiteaUrl() && config_js_1.config.getGiteaToken()) {
|
|
206
|
+
configured.push('gitea');
|
|
207
|
+
}
|
|
208
|
+
return configured;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Validate GitHub token format
|
|
212
|
+
*/
|
|
213
|
+
static isValidGitHubTokenFormat(token) {
|
|
214
|
+
// GitHub token prefixes: ghp_ (personal), gho_ (OAuth), ghu_ (user), ghs_ (server), ghr_ (refresh)
|
|
215
|
+
const validPrefixes = ['ghp_', 'gho_', 'ghu_', 'ghs_', 'ghr_'];
|
|
216
|
+
return validPrefixes.some(prefix => token.startsWith(prefix));
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Validate URL format
|
|
220
|
+
*/
|
|
221
|
+
static isValidUrl(url) {
|
|
222
|
+
try {
|
|
223
|
+
new URL(url);
|
|
224
|
+
return true;
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Generate helpful error message for validation failure
|
|
232
|
+
*/
|
|
233
|
+
static formatValidationError(validationResult) {
|
|
234
|
+
if (validationResult.valid || !validationResult.error) {
|
|
235
|
+
return '';
|
|
236
|
+
}
|
|
237
|
+
const error = validationResult.error;
|
|
238
|
+
const lines = [
|
|
239
|
+
`❌ ${error.code}: ${error.message}`,
|
|
240
|
+
''
|
|
241
|
+
];
|
|
242
|
+
if (error.configuration) {
|
|
243
|
+
lines.push(configuration_error_generator_js_1.ConfigurationErrorGenerator.formatErrorMessage(error.configuration));
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
lines.push(`💡 Suggestion: ${error.suggestion}`);
|
|
247
|
+
if (error.availableProviders) {
|
|
248
|
+
lines.push('');
|
|
249
|
+
lines.push('Available providers:');
|
|
250
|
+
lines.push(...error.availableProviders.map(provider => ` • ${provider}`));
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return lines.join('\n');
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
exports.ConfigurationValidator = ConfigurationValidator;
|
|
257
|
+
//# sourceMappingURL=configuration-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configuration-validator.js","sourceRoot":"","sources":["../../src/utils/configuration-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { MultiProviderConfiguration, ProviderOperationResult } from './multi-provider-operation-handler.js';
|
|
2
|
+
/**
|
|
3
|
+
* Error response for multi-provider operations
|
|
4
|
+
*/
|
|
5
|
+
export interface MultiProviderErrorResponse {
|
|
6
|
+
success: false;
|
|
7
|
+
error: {
|
|
8
|
+
code: string;
|
|
9
|
+
message: string;
|
|
10
|
+
type: 'configuration' | 'operation' | 'partial_failure';
|
|
11
|
+
providers: {
|
|
12
|
+
github?: {
|
|
13
|
+
configured: boolean;
|
|
14
|
+
error?: string;
|
|
15
|
+
configurationHelp?: any;
|
|
16
|
+
};
|
|
17
|
+
gitea?: {
|
|
18
|
+
configured: boolean;
|
|
19
|
+
error?: string;
|
|
20
|
+
configurationHelp?: any;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
suggestions: string[];
|
|
24
|
+
warnings: string[];
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Multi-Provider Error Handler
|
|
29
|
+
* Handles error scenarios specific to multi-provider operations
|
|
30
|
+
*/
|
|
31
|
+
export declare class MultiProviderErrorHandler {
|
|
32
|
+
/**
|
|
33
|
+
* Handle scenarios where only one provider is configured
|
|
34
|
+
*/
|
|
35
|
+
static handleSingleProviderScenario(configuredProvider: 'github' | 'gitea', config: MultiProviderConfiguration): {
|
|
36
|
+
warnings: string[];
|
|
37
|
+
suggestions: string[];
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Handle scenarios where no providers are configured
|
|
41
|
+
*/
|
|
42
|
+
static handleNoProvidersConfigured(): MultiProviderErrorResponse;
|
|
43
|
+
/**
|
|
44
|
+
* Handle partial failure scenarios
|
|
45
|
+
*/
|
|
46
|
+
static handlePartialFailure<T>(githubResult?: ProviderOperationResult<T>, giteaResult?: ProviderOperationResult<T>): {
|
|
47
|
+
warnings: string[];
|
|
48
|
+
suggestions: string[];
|
|
49
|
+
errorDetails: {
|
|
50
|
+
github?: string;
|
|
51
|
+
gitea?: string;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Create comprehensive error response for multi-provider operations
|
|
56
|
+
*/
|
|
57
|
+
static createMultiProviderErrorResponse<T>(config: MultiProviderConfiguration, githubResult?: ProviderOperationResult<T>, giteaResult?: ProviderOperationResult<T>): MultiProviderErrorResponse;
|
|
58
|
+
/**
|
|
59
|
+
* Generate warnings for missing provider configurations
|
|
60
|
+
*/
|
|
61
|
+
static generateMissingProviderWarnings(config: MultiProviderConfiguration): string[];
|
|
62
|
+
/**
|
|
63
|
+
* Provide configuration guidance for specific provider
|
|
64
|
+
*/
|
|
65
|
+
static getProviderConfigurationGuidance(provider: 'github' | 'gitea'): {
|
|
66
|
+
steps: string[];
|
|
67
|
+
environmentVariables: Record<string, string>;
|
|
68
|
+
troubleshooting: string[];
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Format error message for display
|
|
72
|
+
*/
|
|
73
|
+
static formatMultiProviderError(error: MultiProviderErrorResponse): string;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=multi-provider-error-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-provider-error-handler.d.ts","sourceRoot":"","sources":["../../src/utils/multi-provider-error-handler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAE5G;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,eAAe,GAAG,WAAW,GAAG,iBAAiB,CAAC;QACxD,SAAS,EAAE;YACT,MAAM,CAAC,EAAE;gBACP,UAAU,EAAE,OAAO,CAAC;gBACpB,KAAK,CAAC,EAAE,MAAM,CAAC;gBACf,iBAAiB,CAAC,EAAE,GAAG,CAAC;aACzB,CAAC;YACF,KAAK,CAAC,EAAE;gBACN,UAAU,EAAE,OAAO,CAAC;gBACpB,KAAK,CAAC,EAAE,MAAM,CAAC;gBACf,iBAAiB,CAAC,EAAE,GAAG,CAAC;aACzB,CAAC;SACH,CAAC;QACF,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH;AAED;;;GAGG;AACH,qBAAa,yBAAyB;IAEpC;;OAEG;IACH,MAAM,CAAC,4BAA4B,CACjC,kBAAkB,EAAE,QAAQ,GAAG,OAAO,EACtC,MAAM,EAAE,0BAA0B,GACjC;QACD,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB;IAqBD;;OAEG;IACH,MAAM,CAAC,2BAA2B,IAAI,0BAA0B;IAoChE;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,CAAC,EAC3B,YAAY,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,EACzC,WAAW,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,GACvC;QACD,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,YAAY,EAAE;YACZ,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,KAAK,CAAC,EAAE,MAAM,CAAC;SAChB,CAAC;KACH;IAiDD;;OAEG;IACH,MAAM,CAAC,gCAAgC,CAAC,CAAC,EACvC,MAAM,EAAE,0BAA0B,EAClC,YAAY,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,EACzC,WAAW,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,GACvC,0BAA0B;IA4D7B;;OAEG;IACH,MAAM,CAAC,+BAA+B,CAAC,MAAM,EAAE,0BAA0B,GAAG,MAAM,EAAE;IAoBpF;;OAEG;IACH,MAAM,CAAC,gCAAgC,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,GAAG;QACrE,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B;IA6CD;;OAEG;IACH,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,0BAA0B,GAAG,MAAM;CAqC3E"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MultiProviderErrorHandler = void 0;
|
|
4
|
+
const configuration_error_generator_js_1 = require("./configuration-error-generator.js");
|
|
5
|
+
/**
|
|
6
|
+
* Multi-Provider Error Handler
|
|
7
|
+
* Handles error scenarios specific to multi-provider operations
|
|
8
|
+
*/
|
|
9
|
+
class MultiProviderErrorHandler {
|
|
10
|
+
/**
|
|
11
|
+
* Handle scenarios where only one provider is configured
|
|
12
|
+
*/
|
|
13
|
+
static handleSingleProviderScenario(configuredProvider, config) {
|
|
14
|
+
const warnings = [];
|
|
15
|
+
const suggestions = [];
|
|
16
|
+
const unconfiguredProvider = configuredProvider === 'github' ? 'gitea' : 'github';
|
|
17
|
+
warnings.push(`Only ${configuredProvider} is configured. Multi-provider operation will execute on ${configuredProvider} only.`);
|
|
18
|
+
if (unconfiguredProvider === 'github') {
|
|
19
|
+
suggestions.push('Configure GitHub by setting GITHUB_TOKEN environment variable to enable GitHub operations.');
|
|
20
|
+
suggestions.push('Visit https://github.com/settings/tokens to generate a personal access token.');
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
suggestions.push('Configure Gitea by setting GITEA_URL and GITEA_TOKEN environment variables to enable Gitea operations.');
|
|
24
|
+
suggestions.push('Contact your Gitea administrator for API access token generation instructions.');
|
|
25
|
+
}
|
|
26
|
+
return { warnings, suggestions };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Handle scenarios where no providers are configured
|
|
30
|
+
*/
|
|
31
|
+
static handleNoProvidersConfigured() {
|
|
32
|
+
const githubConfig = configuration_error_generator_js_1.ConfigurationErrorGenerator.generateGitHubError();
|
|
33
|
+
const giteaConfig = configuration_error_generator_js_1.ConfigurationErrorGenerator.generateGiteaError();
|
|
34
|
+
return {
|
|
35
|
+
success: false,
|
|
36
|
+
error: {
|
|
37
|
+
code: 'NO_PROVIDERS_CONFIGURED',
|
|
38
|
+
message: 'No providers are configured for multi-provider operation',
|
|
39
|
+
type: 'configuration',
|
|
40
|
+
providers: {
|
|
41
|
+
github: {
|
|
42
|
+
configured: false,
|
|
43
|
+
error: 'GitHub provider is not configured',
|
|
44
|
+
configurationHelp: githubConfig
|
|
45
|
+
},
|
|
46
|
+
gitea: {
|
|
47
|
+
configured: false,
|
|
48
|
+
error: 'Gitea provider is not configured',
|
|
49
|
+
configurationHelp: giteaConfig
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
suggestions: [
|
|
53
|
+
'Configure at least one provider (GitHub or Gitea) to use multi-provider operations',
|
|
54
|
+
'For GitHub: Set GITHUB_TOKEN environment variable',
|
|
55
|
+
'For Gitea: Set GITEA_URL and GITEA_TOKEN environment variables',
|
|
56
|
+
'You can configure both providers to enable true multi-provider functionality'
|
|
57
|
+
],
|
|
58
|
+
warnings: [
|
|
59
|
+
'Multi-provider operations require at least one configured provider',
|
|
60
|
+
'Consider configuring both providers for maximum flexibility'
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Handle partial failure scenarios
|
|
67
|
+
*/
|
|
68
|
+
static handlePartialFailure(githubResult, giteaResult) {
|
|
69
|
+
const warnings = [];
|
|
70
|
+
const suggestions = [];
|
|
71
|
+
const errorDetails = {};
|
|
72
|
+
const githubSuccess = githubResult?.success ?? false;
|
|
73
|
+
const giteaSuccess = giteaResult?.success ?? false;
|
|
74
|
+
if (!githubSuccess && githubResult) {
|
|
75
|
+
errorDetails.github = githubResult.error || 'Unknown GitHub error';
|
|
76
|
+
warnings.push(`GitHub operation failed: ${githubResult.error}`);
|
|
77
|
+
// Provide specific suggestions based on error type
|
|
78
|
+
if (githubResult.error?.includes('401') || githubResult.error?.includes('authentication')) {
|
|
79
|
+
suggestions.push('Check your GitHub token permissions and expiration date');
|
|
80
|
+
suggestions.push('Regenerate GitHub token if necessary');
|
|
81
|
+
}
|
|
82
|
+
else if (githubResult.error?.includes('404')) {
|
|
83
|
+
suggestions.push('Verify the repository exists on GitHub and you have access');
|
|
84
|
+
}
|
|
85
|
+
else if (githubResult.error?.includes('403')) {
|
|
86
|
+
suggestions.push('Check GitHub API rate limits and token permissions');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (!giteaSuccess && giteaResult) {
|
|
90
|
+
errorDetails.gitea = giteaResult.error || 'Unknown Gitea error';
|
|
91
|
+
warnings.push(`Gitea operation failed: ${giteaResult.error}`);
|
|
92
|
+
// Provide specific suggestions based on error type
|
|
93
|
+
if (giteaResult.error?.includes('401') || giteaResult.error?.includes('authentication')) {
|
|
94
|
+
suggestions.push('Check your Gitea token permissions and validity');
|
|
95
|
+
suggestions.push('Verify GITEA_URL is correct and accessible');
|
|
96
|
+
}
|
|
97
|
+
else if (giteaResult.error?.includes('404')) {
|
|
98
|
+
suggestions.push('Verify the repository exists on Gitea and you have access');
|
|
99
|
+
}
|
|
100
|
+
else if (giteaResult.error?.includes('connection')) {
|
|
101
|
+
suggestions.push('Check network connectivity to your Gitea instance');
|
|
102
|
+
suggestions.push('Verify GITEA_URL is correct and the server is running');
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// General suggestions for partial failures
|
|
106
|
+
if (githubSuccess && !giteaSuccess) {
|
|
107
|
+
suggestions.push('Consider using provider="github" for this operation if Gitea issues persist');
|
|
108
|
+
}
|
|
109
|
+
else if (!githubSuccess && giteaSuccess) {
|
|
110
|
+
suggestions.push('Consider using provider="gitea" for this operation if GitHub issues persist');
|
|
111
|
+
}
|
|
112
|
+
return { warnings, suggestions, errorDetails };
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Create comprehensive error response for multi-provider operations
|
|
116
|
+
*/
|
|
117
|
+
static createMultiProviderErrorResponse(config, githubResult, giteaResult) {
|
|
118
|
+
const githubSuccess = githubResult?.success ?? false;
|
|
119
|
+
const giteaSuccess = giteaResult?.success ?? false;
|
|
120
|
+
// Handle complete failure (both providers failed)
|
|
121
|
+
if (!githubSuccess && !giteaSuccess) {
|
|
122
|
+
const partialFailure = this.handlePartialFailure(githubResult, giteaResult);
|
|
123
|
+
return {
|
|
124
|
+
success: false,
|
|
125
|
+
error: {
|
|
126
|
+
code: 'MULTI_PROVIDER_COMPLETE_FAILURE',
|
|
127
|
+
message: 'Operation failed on all configured providers',
|
|
128
|
+
type: 'operation',
|
|
129
|
+
providers: {
|
|
130
|
+
github: config.github.configured ? {
|
|
131
|
+
configured: true,
|
|
132
|
+
error: githubResult?.error || 'Unknown error'
|
|
133
|
+
} : {
|
|
134
|
+
configured: false,
|
|
135
|
+
error: 'GitHub provider is not configured',
|
|
136
|
+
configurationHelp: configuration_error_generator_js_1.ConfigurationErrorGenerator.generateGitHubError()
|
|
137
|
+
},
|
|
138
|
+
gitea: config.gitea.configured ? {
|
|
139
|
+
configured: true,
|
|
140
|
+
error: giteaResult?.error || 'Unknown error'
|
|
141
|
+
} : {
|
|
142
|
+
configured: false,
|
|
143
|
+
error: 'Gitea provider is not configured',
|
|
144
|
+
configurationHelp: configuration_error_generator_js_1.ConfigurationErrorGenerator.generateGiteaError()
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
suggestions: [
|
|
148
|
+
'Check provider configurations and network connectivity',
|
|
149
|
+
'Verify API tokens are valid and have necessary permissions',
|
|
150
|
+
'Try executing operations on individual providers to isolate issues',
|
|
151
|
+
...partialFailure.suggestions
|
|
152
|
+
],
|
|
153
|
+
warnings: partialFailure.warnings
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
// This shouldn't be called for successful operations, but handle gracefully
|
|
158
|
+
return {
|
|
159
|
+
success: false,
|
|
160
|
+
error: {
|
|
161
|
+
code: 'UNEXPECTED_ERROR_STATE',
|
|
162
|
+
message: 'Unexpected error state in multi-provider operation',
|
|
163
|
+
type: 'operation',
|
|
164
|
+
providers: {
|
|
165
|
+
github: { configured: config.github.configured },
|
|
166
|
+
gitea: { configured: config.gitea.configured }
|
|
167
|
+
},
|
|
168
|
+
suggestions: ['This appears to be an internal error. Please report this issue.'],
|
|
169
|
+
warnings: []
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Generate warnings for missing provider configurations
|
|
175
|
+
*/
|
|
176
|
+
static generateMissingProviderWarnings(config) {
|
|
177
|
+
const warnings = [];
|
|
178
|
+
if (!config.github.configured && !config.gitea.configured) {
|
|
179
|
+
warnings.push('No providers are configured. Multi-provider operations will fail.');
|
|
180
|
+
}
|
|
181
|
+
else if (config.totalConfigured === 1) {
|
|
182
|
+
const configuredProvider = config.github.configured ? 'GitHub' : 'Gitea';
|
|
183
|
+
const missingProvider = config.github.configured ? 'Gitea' : 'GitHub';
|
|
184
|
+
warnings.push(`Only ${configuredProvider} is configured. Multi-provider operations will execute on ${configuredProvider} only.`);
|
|
185
|
+
warnings.push(`Configure ${missingProvider} to enable true multi-provider functionality.`);
|
|
186
|
+
}
|
|
187
|
+
return warnings;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Provide configuration guidance for specific provider
|
|
191
|
+
*/
|
|
192
|
+
static getProviderConfigurationGuidance(provider) {
|
|
193
|
+
if (provider === 'github') {
|
|
194
|
+
return {
|
|
195
|
+
steps: [
|
|
196
|
+
'1. Go to GitHub Settings > Developer settings > Personal access tokens',
|
|
197
|
+
'2. Click "Generate new token (classic)"',
|
|
198
|
+
'3. Select appropriate scopes (repo, user, etc.)',
|
|
199
|
+
'4. Copy the generated token',
|
|
200
|
+
'5. Set environment variable: GITHUB_TOKEN=your_token'
|
|
201
|
+
],
|
|
202
|
+
environmentVariables: {
|
|
203
|
+
'GITHUB_TOKEN': 'ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
|
|
204
|
+
'GITHUB_USERNAME': 'your-username (optional)'
|
|
205
|
+
},
|
|
206
|
+
troubleshooting: [
|
|
207
|
+
'Ensure token has not expired',
|
|
208
|
+
'Verify token has necessary permissions (repo scope for repository operations)',
|
|
209
|
+
'Check if your organization has SSO requirements',
|
|
210
|
+
'Test token with: curl -H "Authorization: token YOUR_TOKEN" https://api.github.com/user'
|
|
211
|
+
]
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
return {
|
|
216
|
+
steps: [
|
|
217
|
+
'1. Log in to your Gitea instance',
|
|
218
|
+
'2. Go to Settings > Applications',
|
|
219
|
+
'3. Generate new access token',
|
|
220
|
+
'4. Copy the generated token',
|
|
221
|
+
'5. Set environment variables: GITEA_URL and GITEA_TOKEN'
|
|
222
|
+
],
|
|
223
|
+
environmentVariables: {
|
|
224
|
+
'GITEA_URL': 'https://your-gitea.com/api/v1',
|
|
225
|
+
'GITEA_TOKEN': 'your_gitea_token_here',
|
|
226
|
+
'GITEA_USERNAME': 'your-username (optional)'
|
|
227
|
+
},
|
|
228
|
+
troubleshooting: [
|
|
229
|
+
'Ensure GITEA_URL includes the full API path (/api/v1)',
|
|
230
|
+
'Verify your Gitea instance is accessible',
|
|
231
|
+
'Check if token has necessary permissions',
|
|
232
|
+
'Test connection with: curl -H "Authorization: token YOUR_TOKEN" YOUR_GITEA_URL/user'
|
|
233
|
+
]
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Format error message for display
|
|
239
|
+
*/
|
|
240
|
+
static formatMultiProviderError(error) {
|
|
241
|
+
let message = `${error.error.message}\n\n`;
|
|
242
|
+
// Add provider status
|
|
243
|
+
message += 'Provider Status:\n';
|
|
244
|
+
if (error.error.providers.github) {
|
|
245
|
+
const github = error.error.providers.github;
|
|
246
|
+
message += ` GitHub: ${github.configured ? 'Configured' : 'Not Configured'}`;
|
|
247
|
+
if (github.error)
|
|
248
|
+
message += ` (${github.error})`;
|
|
249
|
+
message += '\n';
|
|
250
|
+
}
|
|
251
|
+
if (error.error.providers.gitea) {
|
|
252
|
+
const gitea = error.error.providers.gitea;
|
|
253
|
+
message += ` Gitea: ${gitea.configured ? 'Configured' : 'Not Configured'}`;
|
|
254
|
+
if (gitea.error)
|
|
255
|
+
message += ` (${gitea.error})`;
|
|
256
|
+
message += '\n';
|
|
257
|
+
}
|
|
258
|
+
// Add suggestions
|
|
259
|
+
if (error.error.suggestions.length > 0) {
|
|
260
|
+
message += '\nSuggestions:\n';
|
|
261
|
+
error.error.suggestions.forEach((suggestion, index) => {
|
|
262
|
+
message += ` ${index + 1}. ${suggestion}\n`;
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
// Add warnings
|
|
266
|
+
if (error.error.warnings.length > 0) {
|
|
267
|
+
message += '\nWarnings:\n';
|
|
268
|
+
error.error.warnings.forEach(warning => {
|
|
269
|
+
message += ` ⚠️ ${warning}\n`;
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
return message.trim();
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
exports.MultiProviderErrorHandler = MultiProviderErrorHandler;
|
|
276
|
+
//# sourceMappingURL=multi-provider-error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-provider-error-handler.js","sourceRoot":"","sources":["../../src/utils/multi-provider-error-handler.ts"],"names":[],"mappings":";;;AAAA,yFAAiF;AA8BjF;;;GAGG;AACH,MAAa,yBAAyB;IAEpC;;OAEG;IACH,MAAM,CAAC,4BAA4B,CACjC,kBAAsC,EACtC,MAAkC;QAKlC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,MAAM,oBAAoB,GAAG,kBAAkB,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;QAElF,QAAQ,CAAC,IAAI,CACX,QAAQ,kBAAkB,4DAA4D,kBAAkB,QAAQ,CACjH,CAAC;QAEF,IAAI,oBAAoB,KAAK,QAAQ,EAAE,CAAC;YACtC,WAAW,CAAC,IAAI,CAAC,4FAA4F,CAAC,CAAC;YAC/G,WAAW,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;QACpG,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,wGAAwG,CAAC,CAAC;YAC3H,WAAW,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAC;QACrG,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,2BAA2B;QAChC,MAAM,YAAY,GAAG,8DAA2B,CAAC,mBAAmB,EAAE,CAAC;QACvE,MAAM,WAAW,GAAG,8DAA2B,CAAC,kBAAkB,EAAE,CAAC;QAErE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACL,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,0DAA0D;gBACnE,IAAI,EAAE,eAAe;gBACrB,SAAS,EAAE;oBACT,MAAM,EAAE;wBACN,UAAU,EAAE,KAAK;wBACjB,KAAK,EAAE,mCAAmC;wBAC1C,iBAAiB,EAAE,YAAY;qBAChC;oBACD,KAAK,EAAE;wBACL,UAAU,EAAE,KAAK;wBACjB,KAAK,EAAE,kCAAkC;wBACzC,iBAAiB,EAAE,WAAW;qBAC/B;iBACF;gBACD,WAAW,EAAE;oBACX,oFAAoF;oBACpF,mDAAmD;oBACnD,gEAAgE;oBAChE,8EAA8E;iBAC/E;gBACD,QAAQ,EAAE;oBACR,oEAAoE;oBACpE,6DAA6D;iBAC9D;aACF;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,oBAAoB,CACzB,YAAyC,EACzC,WAAwC;QASxC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,MAAM,YAAY,GAAwC,EAAE,CAAC;QAE7D,MAAM,aAAa,GAAG,YAAY,EAAE,OAAO,IAAI,KAAK,CAAC;QACrD,MAAM,YAAY,GAAG,WAAW,EAAE,OAAO,IAAI,KAAK,CAAC;QAEnD,IAAI,CAAC,aAAa,IAAI,YAAY,EAAE,CAAC;YACnC,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,IAAI,sBAAsB,CAAC;YACnE,QAAQ,CAAC,IAAI,CAAC,4BAA4B,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC;YAEhE,mDAAmD;YACnD,IAAI,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC1F,WAAW,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;gBAC5E,WAAW,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YAC3D,CAAC;iBAAM,IAAI,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/C,WAAW,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;YACjF,CAAC;iBAAM,IAAI,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/C,WAAW,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,IAAI,WAAW,EAAE,CAAC;YACjC,YAAY,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,IAAI,qBAAqB,CAAC;YAChE,QAAQ,CAAC,IAAI,CAAC,2BAA2B,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;YAE9D,mDAAmD;YACnD,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACxF,WAAW,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;gBACpE,WAAW,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;YACjE,CAAC;iBAAM,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9C,WAAW,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;YAChF,CAAC;iBAAM,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACrD,WAAW,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;gBACtE,WAAW,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAED,2CAA2C;QAC3C,IAAI,aAAa,IAAI,CAAC,YAAY,EAAE,CAAC;YACnC,WAAW,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;QAClG,CAAC;aAAM,IAAI,CAAC,aAAa,IAAI,YAAY,EAAE,CAAC;YAC1C,WAAW,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;QAClG,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gCAAgC,CACrC,MAAkC,EAClC,YAAyC,EACzC,WAAwC;QAExC,MAAM,aAAa,GAAG,YAAY,EAAE,OAAO,IAAI,KAAK,CAAC;QACrD,MAAM,YAAY,GAAG,WAAW,EAAE,OAAO,IAAI,KAAK,CAAC;QAEnD,kDAAkD;QAClD,IAAI,CAAC,aAAa,IAAI,CAAC,YAAY,EAAE,CAAC;YACpC,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YAE5E,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,iCAAiC;oBACvC,OAAO,EAAE,8CAA8C;oBACvD,IAAI,EAAE,WAAW;oBACjB,SAAS,EAAE;wBACT,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;4BACjC,UAAU,EAAE,IAAI;4BAChB,KAAK,EAAE,YAAY,EAAE,KAAK,IAAI,eAAe;yBAC9C,CAAC,CAAC,CAAC;4BACF,UAAU,EAAE,KAAK;4BACjB,KAAK,EAAE,mCAAmC;4BAC1C,iBAAiB,EAAE,8DAA2B,CAAC,mBAAmB,EAAE;yBACrE;wBACD,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;4BAC/B,UAAU,EAAE,IAAI;4BAChB,KAAK,EAAE,WAAW,EAAE,KAAK,IAAI,eAAe;yBAC7C,CAAC,CAAC,CAAC;4BACF,UAAU,EAAE,KAAK;4BACjB,KAAK,EAAE,kCAAkC;4BACzC,iBAAiB,EAAE,8DAA2B,CAAC,kBAAkB,EAAE;yBACpE;qBACF;oBACD,WAAW,EAAE;wBACX,wDAAwD;wBACxD,4DAA4D;wBAC5D,oEAAoE;wBACpE,GAAG,cAAc,CAAC,WAAW;qBAC9B;oBACD,QAAQ,EAAE,cAAc,CAAC,QAAQ;iBAClC;aACF,CAAC;QACJ,CAAC;QAED,4EAA4E;QAC5E,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACL,IAAI,EAAE,wBAAwB;gBAC9B,OAAO,EAAE,oDAAoD;gBAC7D,IAAI,EAAE,WAAW;gBACjB,SAAS,EAAE;oBACT,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE;oBAChD,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE;iBAC/C;gBACD,WAAW,EAAE,CAAC,iEAAiE,CAAC;gBAChF,QAAQ,EAAE,EAAE;aACb;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,+BAA+B,CAAC,MAAkC;QACvE,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YAC1D,QAAQ,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;QACrF,CAAC;aAAM,IAAI,MAAM,CAAC,eAAe,KAAK,CAAC,EAAE,CAAC;YACxC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;YACzE,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;YAEtE,QAAQ,CAAC,IAAI,CACX,QAAQ,kBAAkB,6DAA6D,kBAAkB,QAAQ,CAClH,CAAC;YACF,QAAQ,CAAC,IAAI,CACX,aAAa,eAAe,+CAA+C,CAC5E,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gCAAgC,CAAC,QAA4B;QAKlE,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO;gBACL,KAAK,EAAE;oBACL,wEAAwE;oBACxE,yCAAyC;oBACzC,iDAAiD;oBACjD,6BAA6B;oBAC7B,sDAAsD;iBACvD;gBACD,oBAAoB,EAAE;oBACpB,cAAc,EAAE,0CAA0C;oBAC1D,iBAAiB,EAAE,0BAA0B;iBAC9C;gBACD,eAAe,EAAE;oBACf,8BAA8B;oBAC9B,+EAA+E;oBAC/E,iDAAiD;oBACjD,wFAAwF;iBACzF;aACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,KAAK,EAAE;oBACL,kCAAkC;oBAClC,kCAAkC;oBAClC,8BAA8B;oBAC9B,6BAA6B;oBAC7B,yDAAyD;iBAC1D;gBACD,oBAAoB,EAAE;oBACpB,WAAW,EAAE,+BAA+B;oBAC5C,aAAa,EAAE,uBAAuB;oBACtC,gBAAgB,EAAE,0BAA0B;iBAC7C;gBACD,eAAe,EAAE;oBACf,uDAAuD;oBACvD,0CAA0C;oBAC1C,0CAA0C;oBAC1C,qFAAqF;iBACtF;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,wBAAwB,CAAC,KAAiC;QAC/D,IAAI,OAAO,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC;QAE3C,sBAAsB;QACtB,OAAO,IAAI,oBAAoB,CAAC;QAChC,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;YAC5C,OAAO,IAAI,aAAa,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAC9E,IAAI,MAAM,CAAC,KAAK;gBAAE,OAAO,IAAI,KAAK,MAAM,CAAC,KAAK,GAAG,CAAC;YAClD,OAAO,IAAI,IAAI,CAAC;QAClB,CAAC;QAED,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;YAC1C,OAAO,IAAI,YAAY,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAC5E,IAAI,KAAK,CAAC,KAAK;gBAAE,OAAO,IAAI,KAAK,KAAK,CAAC,KAAK,GAAG,CAAC;YAChD,OAAO,IAAI,IAAI,CAAC;QAClB,CAAC;QAED,kBAAkB;QAClB,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,OAAO,IAAI,kBAAkB,CAAC;YAC9B,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE;gBACpD,OAAO,IAAI,KAAK,KAAK,GAAG,CAAC,KAAK,UAAU,IAAI,CAAC;YAC/C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,eAAe;QACf,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,eAAe,CAAC;YAC3B,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACrC,OAAO,IAAI,SAAS,OAAO,IAAI,CAAC;YAClC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;CACF;AA3TD,8DA2TC"}
|