@eui/mcp 1.0.3
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 +846 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +27 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +224 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +171 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +100 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/loader/cache-manager.d.ts +74 -0
- package/dist/loader/cache-manager.d.ts.map +1 -0
- package/dist/loader/cache-manager.js +107 -0
- package/dist/loader/cache-manager.js.map +1 -0
- package/dist/loader/documentation-loader.d.ts +57 -0
- package/dist/loader/documentation-loader.d.ts.map +1 -0
- package/dist/loader/documentation-loader.js +81 -0
- package/dist/loader/documentation-loader.js.map +1 -0
- package/dist/loader/documentation-source.d.ts +37 -0
- package/dist/loader/documentation-source.d.ts.map +1 -0
- package/dist/loader/documentation-source.js +2 -0
- package/dist/loader/documentation-source.js.map +1 -0
- package/dist/loader/errors.d.ts +34 -0
- package/dist/loader/errors.d.ts.map +1 -0
- package/dist/loader/errors.js +65 -0
- package/dist/loader/errors.js.map +1 -0
- package/dist/loader/http-client.d.ts +43 -0
- package/dist/loader/http-client.d.ts.map +1 -0
- package/dist/loader/http-client.js +144 -0
- package/dist/loader/http-client.js.map +1 -0
- package/dist/loader/index.d.ts +6 -0
- package/dist/loader/index.d.ts.map +1 -0
- package/dist/loader/index.js +5 -0
- package/dist/loader/index.js.map +1 -0
- package/dist/loader/local-documentation-source.d.ts +62 -0
- package/dist/loader/local-documentation-source.d.ts.map +1 -0
- package/dist/loader/local-documentation-source.js +190 -0
- package/dist/loader/local-documentation-source.js.map +1 -0
- package/dist/loader/path-type-detector.d.ts +34 -0
- package/dist/loader/path-type-detector.d.ts.map +1 -0
- package/dist/loader/path-type-detector.js +78 -0
- package/dist/loader/path-type-detector.js.map +1 -0
- package/dist/loader/remote-documentation-source.d.ts +112 -0
- package/dist/loader/remote-documentation-source.d.ts.map +1 -0
- package/dist/loader/remote-documentation-source.js +252 -0
- package/dist/loader/remote-documentation-source.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +211 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +5 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +65 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +224 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/publish/index.d.ts +8 -0
- package/dist/publish/index.d.ts.map +1 -0
- package/dist/publish/index.js +8 -0
- package/dist/publish/index.js.map +1 -0
- package/dist/publish/publish-utils.d.ts +74 -0
- package/dist/publish/publish-utils.d.ts.map +1 -0
- package/dist/publish/publish-utils.js +170 -0
- package/dist/publish/publish-utils.js.map +1 -0
- package/dist/query/component-query.d.ts +33 -0
- package/dist/query/component-query.d.ts.map +1 -0
- package/dist/query/component-query.js +63 -0
- package/dist/query/component-query.js.map +1 -0
- package/dist/query/index-builder.d.ts +79 -0
- package/dist/query/index-builder.d.ts.map +1 -0
- package/dist/query/index-builder.js +217 -0
- package/dist/query/index-builder.js.map +1 -0
- package/dist/query/index.d.ts +5 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +6 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/result-formatter.d.ts +108 -0
- package/dist/query/result-formatter.d.ts.map +1 -0
- package/dist/query/result-formatter.js +165 -0
- package/dist/query/result-formatter.js.map +1 -0
- package/dist/query/search-engine.d.ts +54 -0
- package/dist/query/search-engine.d.ts.map +1 -0
- package/dist/query/search-engine.js +178 -0
- package/dist/query/search-engine.js.map +1 -0
- package/dist/test-error.ts +1 -0
- package/dist/tools/get-component-docs.d.ts +43 -0
- package/dist/tools/get-component-docs.d.ts.map +1 -0
- package/dist/tools/get-component-docs.js +55 -0
- package/dist/tools/get-component-docs.js.map +1 -0
- package/dist/tools/get-component-examples.d.ts +45 -0
- package/dist/tools/get-component-examples.d.ts.map +1 -0
- package/dist/tools/get-component-examples.js +56 -0
- package/dist/tools/get-component-examples.js.map +1 -0
- package/dist/tools/get-component-inputs.d.ts +44 -0
- package/dist/tools/get-component-inputs.d.ts.map +1 -0
- package/dist/tools/get-component-inputs.js +55 -0
- package/dist/tools/get-component-inputs.js.map +1 -0
- package/dist/tools/get-component-outputs.d.ts +44 -0
- package/dist/tools/get-component-outputs.d.ts.map +1 -0
- package/dist/tools/get-component-outputs.js +55 -0
- package/dist/tools/get-component-outputs.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +8 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list-components.d.ts +69 -0
- package/dist/tools/list-components.d.ts.map +1 -0
- package/dist/tools/list-components.js +84 -0
- package/dist/tools/list-components.js.map +1 -0
- package/dist/tools/search-components.d.ts +69 -0
- package/dist/tools/search-components.d.ts.map +1 -0
- package/dist/tools/search-components.js +98 -0
- package/dist/tools/search-components.js.map +1 -0
- package/dist/types/compodoc.d.ts +261 -0
- package/dist/types/compodoc.d.ts.map +1 -0
- package/dist/types/compodoc.js +5 -0
- package/dist/types/compodoc.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/circuit-breaker.d.ts +91 -0
- package/dist/utils/circuit-breaker.d.ts.map +1 -0
- package/dist/utils/circuit-breaker.js +186 -0
- package/dist/utils/circuit-breaker.js.map +1 -0
- package/dist/utils/credential-masking.d.ts +90 -0
- package/dist/utils/credential-masking.d.ts.map +1 -0
- package/dist/utils/credential-masking.js +202 -0
- package/dist/utils/credential-masking.js.map +1 -0
- package/dist/utils/error-handler.d.ts +68 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +184 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/errors.d.ts +156 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +242 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +16 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +76 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +150 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/retry.d.ts +19 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +81 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/version/changelog-file-utils.d.ts +69 -0
- package/dist/version/changelog-file-utils.d.ts.map +1 -0
- package/dist/version/changelog-file-utils.js +161 -0
- package/dist/version/changelog-file-utils.js.map +1 -0
- package/dist/version/changelog-utils.d.ts +98 -0
- package/dist/version/changelog-utils.d.ts.map +1 -0
- package/dist/version/changelog-utils.js +198 -0
- package/dist/version/changelog-utils.js.map +1 -0
- package/dist/version/dry-run-utils.d.ts +108 -0
- package/dist/version/dry-run-utils.d.ts.map +1 -0
- package/dist/version/dry-run-utils.js +126 -0
- package/dist/version/dry-run-utils.js.map +1 -0
- package/dist/version/git-tag-utils.d.ts +50 -0
- package/dist/version/git-tag-utils.d.ts.map +1 -0
- package/dist/version/git-tag-utils.js +66 -0
- package/dist/version/git-tag-utils.js.map +1 -0
- package/dist/version/index.d.ts +11 -0
- package/dist/version/index.d.ts.map +1 -0
- package/dist/version/index.js +11 -0
- package/dist/version/index.js.map +1 -0
- package/dist/version/release-utils.d.ts +94 -0
- package/dist/version/release-utils.d.ts.map +1 -0
- package/dist/version/release-utils.js +170 -0
- package/dist/version/release-utils.js.map +1 -0
- package/dist/version/rollback-utils.d.ts +47 -0
- package/dist/version/rollback-utils.d.ts.map +1 -0
- package/dist/version/rollback-utils.js +73 -0
- package/dist/version/rollback-utils.js.map +1 -0
- package/dist/version/version-manager.d.ts +98 -0
- package/dist/version/version-manager.d.ts.map +1 -0
- package/dist/version/version-manager.js +158 -0
- package/dist/version/version-manager.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom error classes for different error types
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Base error class for all application errors
|
|
6
|
+
*/
|
|
7
|
+
export class AppError extends Error {
|
|
8
|
+
code;
|
|
9
|
+
statusCode;
|
|
10
|
+
isOperational;
|
|
11
|
+
details;
|
|
12
|
+
constructor(message, code, statusCode = 500, isOperational = true, details) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.name = this.constructor.name;
|
|
15
|
+
this.code = code;
|
|
16
|
+
this.statusCode = statusCode;
|
|
17
|
+
this.isOperational = isOperational;
|
|
18
|
+
this.details = details;
|
|
19
|
+
// Maintains proper stack trace for where our error was thrown
|
|
20
|
+
Error.captureStackTrace(this, this.constructor);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Converts error to JSON format for MCP responses
|
|
24
|
+
*/
|
|
25
|
+
toJSON() {
|
|
26
|
+
return {
|
|
27
|
+
error: {
|
|
28
|
+
code: this.code,
|
|
29
|
+
message: this.message,
|
|
30
|
+
details: this.details,
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* File system related errors
|
|
37
|
+
*/
|
|
38
|
+
export class FileSystemError extends AppError {
|
|
39
|
+
constructor(message, details) {
|
|
40
|
+
super(message, 'FILE_SYSTEM_ERROR', 500, true, details);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* File not found error
|
|
45
|
+
*/
|
|
46
|
+
export class FileNotFoundError extends FileSystemError {
|
|
47
|
+
constructor(filePath) {
|
|
48
|
+
super(`File not found: ${filePath}`, { filePath });
|
|
49
|
+
this.code = 'FILE_NOT_FOUND';
|
|
50
|
+
this.statusCode = 404;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Permission denied error
|
|
55
|
+
*/
|
|
56
|
+
export class PermissionDeniedError extends FileSystemError {
|
|
57
|
+
constructor(filePath) {
|
|
58
|
+
super(`Permission denied: ${filePath}`, { filePath });
|
|
59
|
+
this.code = 'PERMISSION_DENIED';
|
|
60
|
+
this.statusCode = 403;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Parsing related errors
|
|
65
|
+
*/
|
|
66
|
+
export class ParsingError extends AppError {
|
|
67
|
+
constructor(message, details) {
|
|
68
|
+
super(message, 'PARSING_ERROR', 400, true, details);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Invalid JSON error
|
|
73
|
+
*/
|
|
74
|
+
export class InvalidJsonError extends ParsingError {
|
|
75
|
+
constructor(message, details) {
|
|
76
|
+
super(`Invalid JSON: ${message}`, details);
|
|
77
|
+
this.code = 'INVALID_JSON';
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Invalid structure error
|
|
82
|
+
*/
|
|
83
|
+
export class InvalidStructureError extends ParsingError {
|
|
84
|
+
constructor(message, details) {
|
|
85
|
+
super(`Invalid structure: ${message}`, details);
|
|
86
|
+
this.code = 'INVALID_STRUCTURE';
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Validation related errors
|
|
91
|
+
*/
|
|
92
|
+
export class ValidationError extends AppError {
|
|
93
|
+
constructor(message, details) {
|
|
94
|
+
super(message, 'VALIDATION_ERROR', 400, true, details);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Duplicate name error
|
|
99
|
+
*/
|
|
100
|
+
export class DuplicateNameError extends ValidationError {
|
|
101
|
+
constructor(name, types) {
|
|
102
|
+
super(`Duplicate name '${name}' found across types: ${types.join(', ')}`, { name, types });
|
|
103
|
+
this.code = 'DUPLICATE_NAME';
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Invalid component structure error
|
|
108
|
+
*/
|
|
109
|
+
export class InvalidComponentError extends ValidationError {
|
|
110
|
+
constructor(message, details) {
|
|
111
|
+
super(`Invalid component: ${message}`, details);
|
|
112
|
+
this.code = 'INVALID_COMPONENT';
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Query related errors
|
|
117
|
+
*/
|
|
118
|
+
export class QueryError extends AppError {
|
|
119
|
+
constructor(message, details) {
|
|
120
|
+
super(message, 'QUERY_ERROR', 400, true, details);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Component not found error
|
|
125
|
+
*/
|
|
126
|
+
export class ComponentNotFoundError extends QueryError {
|
|
127
|
+
constructor(name) {
|
|
128
|
+
super(`Component not found: ${name}`, { name });
|
|
129
|
+
this.code = 'COMPONENT_NOT_FOUND';
|
|
130
|
+
this.statusCode = 404;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Invalid search query error
|
|
135
|
+
*/
|
|
136
|
+
export class InvalidSearchQueryError extends QueryError {
|
|
137
|
+
constructor(message, details) {
|
|
138
|
+
super(`Invalid search query: ${message}`, details);
|
|
139
|
+
this.code = 'INVALID_SEARCH_QUERY';
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Invalid pagination parameters error
|
|
144
|
+
*/
|
|
145
|
+
export class InvalidPaginationError extends QueryError {
|
|
146
|
+
constructor(message, details) {
|
|
147
|
+
super(`Invalid pagination: ${message}`, details);
|
|
148
|
+
this.code = 'INVALID_PAGINATION';
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* MCP protocol related errors
|
|
153
|
+
*/
|
|
154
|
+
export class McpError extends AppError {
|
|
155
|
+
constructor(message, details) {
|
|
156
|
+
super(message, 'MCP_ERROR', 400, true, details);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Invalid tool name error
|
|
161
|
+
*/
|
|
162
|
+
export class InvalidToolError extends McpError {
|
|
163
|
+
constructor(toolName) {
|
|
164
|
+
super(`Invalid tool: ${toolName}`, { toolName });
|
|
165
|
+
this.code = 'INVALID_TOOL';
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Missing required parameter error
|
|
170
|
+
*/
|
|
171
|
+
export class MissingParameterError extends McpError {
|
|
172
|
+
constructor(parameterName, toolName) {
|
|
173
|
+
super(`Missing required parameter '${parameterName}' for tool '${toolName}'`, { parameterName, toolName });
|
|
174
|
+
this.code = 'MISSING_PARAMETER';
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Invalid parameter type error
|
|
179
|
+
*/
|
|
180
|
+
export class InvalidParameterError extends McpError {
|
|
181
|
+
constructor(parameterName, expectedType, actualType) {
|
|
182
|
+
super(`Invalid parameter '${parameterName}': expected ${expectedType}, got ${actualType}`, { parameterName, expectedType, actualType });
|
|
183
|
+
this.code = 'INVALID_PARAMETER';
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Runtime errors
|
|
188
|
+
*/
|
|
189
|
+
export class RuntimeError extends AppError {
|
|
190
|
+
constructor(message, details) {
|
|
191
|
+
super(message, 'RUNTIME_ERROR', 500, false, details);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Out of memory error
|
|
196
|
+
*/
|
|
197
|
+
export class OutOfMemoryError extends RuntimeError {
|
|
198
|
+
constructor(details) {
|
|
199
|
+
super('Out of memory', details);
|
|
200
|
+
this.code = 'OUT_OF_MEMORY';
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Unexpected error
|
|
205
|
+
*/
|
|
206
|
+
export class UnexpectedError extends RuntimeError {
|
|
207
|
+
constructor(message, details) {
|
|
208
|
+
super(`Unexpected error: ${message}`, details);
|
|
209
|
+
this.code = 'UNEXPECTED_ERROR';
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Type guard to check if an error is an AppError
|
|
214
|
+
*/
|
|
215
|
+
export function isAppError(error) {
|
|
216
|
+
return error instanceof AppError;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Type guard to check if an error is operational
|
|
220
|
+
*/
|
|
221
|
+
export function isOperationalError(error) {
|
|
222
|
+
if (isAppError(error)) {
|
|
223
|
+
return error.isOperational;
|
|
224
|
+
}
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Converts any error to an AppError
|
|
229
|
+
*/
|
|
230
|
+
export function toAppError(error) {
|
|
231
|
+
if (isAppError(error)) {
|
|
232
|
+
return error;
|
|
233
|
+
}
|
|
234
|
+
if (error instanceof Error) {
|
|
235
|
+
return new UnexpectedError(error.message, {
|
|
236
|
+
originalError: error.name,
|
|
237
|
+
stack: error.stack,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
return new UnexpectedError('Unknown error occurred', { error });
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility module exports
|
|
3
|
+
*/
|
|
4
|
+
export { Logger, LogLevel, LogFormat, LogEntry, LoggerOptions, initLogger, getLogger, } from './logger.js';
|
|
5
|
+
export { AppError, FileSystemError, FileNotFoundError, PermissionDeniedError, ParsingError, InvalidJsonError, InvalidStructureError, ValidationError, DuplicateNameError, InvalidComponentError, QueryError, ComponentNotFoundError, InvalidSearchQueryError, InvalidPaginationError, McpError, InvalidToolError, MissingParameterError, InvalidParameterError, RuntimeError, OutOfMemoryError, UnexpectedError, isAppError, isOperationalError, toAppError, } from './errors.js';
|
|
6
|
+
export { RetryOptions, retry, isRetryableError, } from './retry.js';
|
|
7
|
+
export { CircuitBreaker, CircuitBreakerOptions, CircuitBreakerRegistry, CircuitState, circuitBreakerRegistry, } from './circuit-breaker.js';
|
|
8
|
+
export { ErrorHandler, ErrorHandlerOptions, initErrorHandler, getErrorHandler, safeAsync, safeSync, } from './error-handler.js';
|
|
9
|
+
export { maskCredentials, sanitizeErrorMessage, sanitizeError, maskLogArguments, createAuthErrorMessage, containsCredentials, } from './credential-masking.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,MAAM,EACN,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,aAAa,EACb,UAAU,EACV,SAAS,GACV,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,QAAQ,EACR,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,UAAU,EACV,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,QAAQ,EACR,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,kBAAkB,EAClB,UAAU,GACX,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,YAAY,EACZ,KAAK,EACL,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,SAAS,EACT,QAAQ,GACT,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility module exports
|
|
3
|
+
*/
|
|
4
|
+
// Logger
|
|
5
|
+
export { Logger, initLogger, getLogger, } from './logger.js';
|
|
6
|
+
// Errors
|
|
7
|
+
export { AppError, FileSystemError, FileNotFoundError, PermissionDeniedError, ParsingError, InvalidJsonError, InvalidStructureError, ValidationError, DuplicateNameError, InvalidComponentError, QueryError, ComponentNotFoundError, InvalidSearchQueryError, InvalidPaginationError, McpError, InvalidToolError, MissingParameterError, InvalidParameterError, RuntimeError, OutOfMemoryError, UnexpectedError, isAppError, isOperationalError, toAppError, } from './errors.js';
|
|
8
|
+
// Retry
|
|
9
|
+
export { retry, isRetryableError, } from './retry.js';
|
|
10
|
+
// Circuit Breaker
|
|
11
|
+
export { CircuitBreaker, CircuitBreakerRegistry, CircuitState, circuitBreakerRegistry, } from './circuit-breaker.js';
|
|
12
|
+
// Error Handler
|
|
13
|
+
export { ErrorHandler, initErrorHandler, getErrorHandler, safeAsync, safeSync, } from './error-handler.js';
|
|
14
|
+
// Credential Masking
|
|
15
|
+
export { maskCredentials, sanitizeErrorMessage, sanitizeError, maskLogArguments, createAuthErrorMessage, containsCredentials, } from './credential-masking.js';
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,SAAS;AACT,OAAO,EACL,MAAM,EAKN,UAAU,EACV,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,SAAS;AACT,OAAO,EACL,QAAQ,EACR,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,UAAU,EACV,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,QAAQ,EACR,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,kBAAkB,EAClB,UAAU,GACX,MAAM,aAAa,CAAC;AAErB,QAAQ;AACR,OAAO,EAEL,KAAK,EACL,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,kBAAkB;AAClB,OAAO,EACL,cAAc,EAEd,sBAAsB,EACtB,YAAY,EACZ,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B,gBAAgB;AAChB,OAAO,EACL,YAAY,EAEZ,gBAAgB,EAChB,eAAe,EACf,SAAS,EACT,QAAQ,GACT,MAAM,oBAAoB,CAAC;AAE5B,qBAAqB;AACrB,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger utility with configurable log levels and structured logging
|
|
3
|
+
*/
|
|
4
|
+
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
5
|
+
export type LogFormat = 'json' | 'text';
|
|
6
|
+
export interface LogEntry {
|
|
7
|
+
timestamp: string;
|
|
8
|
+
level: LogLevel;
|
|
9
|
+
message: string;
|
|
10
|
+
context?: string;
|
|
11
|
+
data?: unknown;
|
|
12
|
+
error?: {
|
|
13
|
+
name: string;
|
|
14
|
+
message: string;
|
|
15
|
+
stack?: string;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export interface LoggerOptions {
|
|
19
|
+
level: LogLevel;
|
|
20
|
+
format: LogFormat;
|
|
21
|
+
context?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Logger class for structured logging with configurable levels
|
|
25
|
+
*/
|
|
26
|
+
export declare class Logger {
|
|
27
|
+
private level;
|
|
28
|
+
private format;
|
|
29
|
+
private context?;
|
|
30
|
+
constructor(options: LoggerOptions);
|
|
31
|
+
/**
|
|
32
|
+
* Creates a child logger with a specific context
|
|
33
|
+
*/
|
|
34
|
+
child(context: string): Logger;
|
|
35
|
+
/**
|
|
36
|
+
* Updates the log level
|
|
37
|
+
*/
|
|
38
|
+
setLevel(level: LogLevel): void;
|
|
39
|
+
/**
|
|
40
|
+
* Checks if a log level is enabled
|
|
41
|
+
*/
|
|
42
|
+
private isLevelEnabled;
|
|
43
|
+
/**
|
|
44
|
+
* Formats a log entry based on the configured format
|
|
45
|
+
*/
|
|
46
|
+
private formatEntry;
|
|
47
|
+
/**
|
|
48
|
+
* Writes a log entry
|
|
49
|
+
*/
|
|
50
|
+
private log;
|
|
51
|
+
/**
|
|
52
|
+
* Logs a debug message
|
|
53
|
+
*/
|
|
54
|
+
debug(message: string, data?: unknown): void;
|
|
55
|
+
/**
|
|
56
|
+
* Logs an info message
|
|
57
|
+
*/
|
|
58
|
+
info(message: string, data?: unknown): void;
|
|
59
|
+
/**
|
|
60
|
+
* Logs a warning message
|
|
61
|
+
*/
|
|
62
|
+
warn(message: string, data?: unknown): void;
|
|
63
|
+
/**
|
|
64
|
+
* Logs an error message
|
|
65
|
+
*/
|
|
66
|
+
error(message: string, error?: Error, data?: unknown): void;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Initializes the global logger
|
|
70
|
+
*/
|
|
71
|
+
export declare function initLogger(options: LoggerOptions): Logger;
|
|
72
|
+
/**
|
|
73
|
+
* Gets the global logger instance
|
|
74
|
+
*/
|
|
75
|
+
export declare function getLogger(): Logger;
|
|
76
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAC3D,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAExC,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AASD;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,OAAO,CAAC,CAAS;gBAEb,OAAO,EAAE,aAAa;IAMlC;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAQ9B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,WAAW;IA+BnB;;OAEG;IACH,OAAO,CAAC,GAAG;IA+BX;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI5C;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI3C;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI3C;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;CAG5D;AAOD;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAGzD;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CASlC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger utility with configurable log levels and structured logging
|
|
3
|
+
*/
|
|
4
|
+
const LOG_LEVELS = {
|
|
5
|
+
debug: 0,
|
|
6
|
+
info: 1,
|
|
7
|
+
warn: 2,
|
|
8
|
+
error: 3,
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Logger class for structured logging with configurable levels
|
|
12
|
+
*/
|
|
13
|
+
export class Logger {
|
|
14
|
+
level;
|
|
15
|
+
format;
|
|
16
|
+
context;
|
|
17
|
+
constructor(options) {
|
|
18
|
+
this.level = options.level;
|
|
19
|
+
this.format = options.format;
|
|
20
|
+
this.context = options.context;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Creates a child logger with a specific context
|
|
24
|
+
*/
|
|
25
|
+
child(context) {
|
|
26
|
+
return new Logger({
|
|
27
|
+
level: this.level,
|
|
28
|
+
format: this.format,
|
|
29
|
+
context: this.context ? `${this.context}:${context}` : context,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Updates the log level
|
|
34
|
+
*/
|
|
35
|
+
setLevel(level) {
|
|
36
|
+
this.level = level;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Checks if a log level is enabled
|
|
40
|
+
*/
|
|
41
|
+
isLevelEnabled(level) {
|
|
42
|
+
return LOG_LEVELS[level] >= LOG_LEVELS[this.level];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Formats a log entry based on the configured format
|
|
46
|
+
*/
|
|
47
|
+
formatEntry(entry) {
|
|
48
|
+
if (this.format === 'json') {
|
|
49
|
+
return JSON.stringify(entry);
|
|
50
|
+
}
|
|
51
|
+
// Text format
|
|
52
|
+
const parts = [
|
|
53
|
+
entry.timestamp,
|
|
54
|
+
`[${entry.level.toUpperCase()}]`,
|
|
55
|
+
];
|
|
56
|
+
if (entry.context) {
|
|
57
|
+
parts.push(`[${entry.context}]`);
|
|
58
|
+
}
|
|
59
|
+
parts.push(entry.message);
|
|
60
|
+
if (entry.data !== undefined) {
|
|
61
|
+
parts.push(JSON.stringify(entry.data));
|
|
62
|
+
}
|
|
63
|
+
if (entry.error) {
|
|
64
|
+
parts.push(`\nError: ${entry.error.name}: ${entry.error.message}`);
|
|
65
|
+
if (entry.error.stack) {
|
|
66
|
+
parts.push(`\n${entry.error.stack}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return parts.join(' ');
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Writes a log entry
|
|
73
|
+
*/
|
|
74
|
+
log(level, message, data, error) {
|
|
75
|
+
if (!this.isLevelEnabled(level)) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const entry = {
|
|
79
|
+
timestamp: new Date().toISOString(),
|
|
80
|
+
level,
|
|
81
|
+
message,
|
|
82
|
+
context: this.context,
|
|
83
|
+
data,
|
|
84
|
+
};
|
|
85
|
+
if (error) {
|
|
86
|
+
entry.error = {
|
|
87
|
+
name: error.name,
|
|
88
|
+
message: error.message,
|
|
89
|
+
stack: error.stack,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
const formatted = this.formatEntry(entry);
|
|
93
|
+
// Write to appropriate stream
|
|
94
|
+
if (level === 'error') {
|
|
95
|
+
console.error(formatted);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
console.log(formatted);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Logs a debug message
|
|
103
|
+
*/
|
|
104
|
+
debug(message, data) {
|
|
105
|
+
this.log('debug', message, data);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Logs an info message
|
|
109
|
+
*/
|
|
110
|
+
info(message, data) {
|
|
111
|
+
this.log('info', message, data);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Logs a warning message
|
|
115
|
+
*/
|
|
116
|
+
warn(message, data) {
|
|
117
|
+
this.log('warn', message, data);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Logs an error message
|
|
121
|
+
*/
|
|
122
|
+
error(message, error, data) {
|
|
123
|
+
this.log('error', message, data, error);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Global logger instance
|
|
128
|
+
*/
|
|
129
|
+
let globalLogger = null;
|
|
130
|
+
/**
|
|
131
|
+
* Initializes the global logger
|
|
132
|
+
*/
|
|
133
|
+
export function initLogger(options) {
|
|
134
|
+
globalLogger = new Logger(options);
|
|
135
|
+
return globalLogger;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Gets the global logger instance
|
|
139
|
+
*/
|
|
140
|
+
export function getLogger() {
|
|
141
|
+
if (!globalLogger) {
|
|
142
|
+
// Create default logger if not initialized
|
|
143
|
+
globalLogger = new Logger({
|
|
144
|
+
level: 'info',
|
|
145
|
+
format: 'text',
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
return globalLogger;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry logic with exponential backoff
|
|
3
|
+
*/
|
|
4
|
+
export interface RetryOptions {
|
|
5
|
+
maxAttempts: number;
|
|
6
|
+
initialDelay: number;
|
|
7
|
+
maxDelay: number;
|
|
8
|
+
backoffMultiplier: number;
|
|
9
|
+
shouldRetry?: (error: unknown) => boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Executes a function with retry logic and exponential backoff
|
|
13
|
+
*/
|
|
14
|
+
export declare function retry<T>(fn: () => Promise<T>, options?: Partial<RetryOptions>): Promise<T>;
|
|
15
|
+
/**
|
|
16
|
+
* Checks if an error is retryable (typically transient errors)
|
|
17
|
+
*/
|
|
18
|
+
export declare function isRetryableError(error: unknown): boolean;
|
|
19
|
+
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CAC3C;AASD;;GAEG;AACH,wBAAsB,KAAK,CAAC,CAAC,EAC3B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,GAAE,OAAO,CAAC,YAAY,CAAM,GAClC,OAAO,CAAC,CAAC,CAAC,CA2CZ;AASD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CA0BxD"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retry logic with exponential backoff
|
|
3
|
+
*/
|
|
4
|
+
import { getLogger } from './logger.js';
|
|
5
|
+
const DEFAULT_RETRY_OPTIONS = {
|
|
6
|
+
maxAttempts: 3,
|
|
7
|
+
initialDelay: 100,
|
|
8
|
+
maxDelay: 5000,
|
|
9
|
+
backoffMultiplier: 2,
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Executes a function with retry logic and exponential backoff
|
|
13
|
+
*/
|
|
14
|
+
export async function retry(fn, options = {}) {
|
|
15
|
+
const opts = { ...DEFAULT_RETRY_OPTIONS, ...options };
|
|
16
|
+
const logger = getLogger();
|
|
17
|
+
let lastError;
|
|
18
|
+
let delay = opts.initialDelay;
|
|
19
|
+
for (let attempt = 1; attempt <= opts.maxAttempts; attempt++) {
|
|
20
|
+
try {
|
|
21
|
+
return await fn();
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
lastError = error;
|
|
25
|
+
// Check if we should retry this error
|
|
26
|
+
if (opts.shouldRetry && !opts.shouldRetry(error)) {
|
|
27
|
+
logger.debug('Error is not retryable, throwing immediately', { error });
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
// Don't retry on last attempt
|
|
31
|
+
if (attempt === opts.maxAttempts) {
|
|
32
|
+
logger.warn('Max retry attempts reached', {
|
|
33
|
+
attempts: attempt,
|
|
34
|
+
error,
|
|
35
|
+
});
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
logger.debug('Retrying after error', {
|
|
39
|
+
attempt,
|
|
40
|
+
maxAttempts: opts.maxAttempts,
|
|
41
|
+
delay,
|
|
42
|
+
error,
|
|
43
|
+
});
|
|
44
|
+
// Wait before retrying
|
|
45
|
+
await sleep(delay);
|
|
46
|
+
// Calculate next delay with exponential backoff
|
|
47
|
+
delay = Math.min(delay * opts.backoffMultiplier, opts.maxDelay);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
throw lastError;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Sleep utility
|
|
54
|
+
*/
|
|
55
|
+
function sleep(ms) {
|
|
56
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Checks if an error is retryable (typically transient errors)
|
|
60
|
+
*/
|
|
61
|
+
export function isRetryableError(error) {
|
|
62
|
+
if (error instanceof Error) {
|
|
63
|
+
const message = error.message.toLowerCase();
|
|
64
|
+
// File system transient errors
|
|
65
|
+
if (message.includes('ebusy') ||
|
|
66
|
+
message.includes('eagain') ||
|
|
67
|
+
message.includes('emfile') ||
|
|
68
|
+
message.includes('enfile') ||
|
|
69
|
+
message.includes('etimedout')) {
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
// Network transient errors
|
|
73
|
+
if (message.includes('econnreset') ||
|
|
74
|
+
message.includes('econnrefused') ||
|
|
75
|
+
message.includes('enetunreach')) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAUxC,MAAM,qBAAqB,GAAiB;IAC1C,WAAW,EAAE,CAAC;IACd,YAAY,EAAE,GAAG;IACjB,QAAQ,EAAE,IAAI;IACd,iBAAiB,EAAE,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,EAAoB,EACpB,UAAiC,EAAE;IAEnC,MAAM,IAAI,GAAG,EAAE,GAAG,qBAAqB,EAAE,GAAG,OAAO,EAAE,CAAC;IACtD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,SAAkB,CAAC;IACvB,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;IAE9B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QAC7D,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAC;YAElB,sCAAsC;YACtC,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjD,MAAM,CAAC,KAAK,CAAC,8CAA8C,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBACxE,MAAM,KAAK,CAAC;YACd,CAAC;YAED,8BAA8B;YAC9B,IAAI,OAAO,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjC,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;oBACxC,QAAQ,EAAE,OAAO;oBACjB,KAAK;iBACN,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE;gBACnC,OAAO;gBACP,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,KAAK;gBACL,KAAK;aACN,CAAC,CAAC;YAEH,uBAAuB;YACvB,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;YAEnB,gDAAgD;YAChD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAE5C,+BAA+B;QAC/B,IACE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;YACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAC7B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,2BAA2B;QAC3B,IACE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;YAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EAC/B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|