@quiltdata/benchling-webhook 0.5.4 → 0.6.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 +273 -10
- package/dist/bin/benchling-webhook.d.ts +1 -1
- package/dist/bin/benchling-webhook.d.ts.map +1 -1
- package/dist/bin/benchling-webhook.js +8 -22
- package/dist/bin/benchling-webhook.js.map +1 -1
- package/dist/bin/cdk-dev.js +59 -3
- package/dist/bin/cli.js +16 -6
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/commands/deploy.d.ts +6 -2
- package/dist/bin/commands/deploy.d.ts.map +1 -1
- package/dist/bin/commands/deploy.js +149 -90
- package/dist/bin/commands/deploy.js.map +1 -1
- package/dist/bin/config-profiles.d.ts +59 -0
- package/dist/bin/config-profiles.d.ts.map +1 -0
- package/dist/bin/config-profiles.js +272 -0
- package/dist/bin/config-profiles.js.map +1 -0
- package/dist/bin/create-secret.d.ts +25 -0
- package/dist/bin/create-secret.d.ts.map +1 -0
- package/dist/bin/create-secret.js +239 -0
- package/dist/bin/create-secret.js.map +1 -0
- package/dist/lib/benchling-auth-validator.d.ts +65 -0
- package/dist/lib/benchling-auth-validator.d.ts.map +1 -0
- package/dist/lib/benchling-auth-validator.js +213 -0
- package/dist/lib/benchling-auth-validator.js.map +1 -0
- package/dist/lib/benchling-webhook-stack.d.ts +13 -10
- package/dist/lib/benchling-webhook-stack.d.ts.map +1 -1
- package/dist/lib/benchling-webhook-stack.js +25 -69
- package/dist/lib/benchling-webhook-stack.js.map +1 -1
- package/dist/lib/config-logger.d.ts +191 -0
- package/dist/lib/config-logger.d.ts.map +1 -0
- package/dist/lib/config-logger.js +372 -0
- package/dist/lib/config-logger.js.map +1 -0
- package/dist/lib/configuration-saver.d.ts +75 -0
- package/dist/lib/configuration-saver.d.ts.map +1 -0
- package/dist/lib/configuration-saver.js +145 -0
- package/dist/lib/configuration-saver.js.map +1 -0
- package/dist/lib/configuration-validator.d.ts +63 -0
- package/dist/lib/configuration-validator.d.ts.map +1 -0
- package/dist/lib/configuration-validator.js +136 -0
- package/dist/lib/configuration-validator.js.map +1 -0
- package/dist/lib/configuration-wizard.d.ts +52 -0
- package/dist/lib/configuration-wizard.d.ts.map +1 -0
- package/dist/lib/configuration-wizard.js +193 -0
- package/dist/lib/configuration-wizard.js.map +1 -0
- package/dist/lib/fargate-service.d.ts +18 -9
- package/dist/lib/fargate-service.d.ts.map +1 -1
- package/dist/lib/fargate-service.js +177 -61
- package/dist/lib/fargate-service.js.map +1 -1
- package/dist/lib/quilt-config-resolver.d.ts +53 -0
- package/dist/lib/quilt-config-resolver.d.ts.map +1 -0
- package/dist/lib/quilt-config-resolver.js +100 -0
- package/dist/lib/quilt-config-resolver.js.map +1 -0
- package/dist/lib/s3-bucket-validator.d.ts +76 -0
- package/dist/lib/s3-bucket-validator.d.ts.map +1 -0
- package/dist/lib/s3-bucket-validator.js +237 -0
- package/dist/lib/s3-bucket-validator.js.map +1 -0
- package/dist/lib/types/config.d.ts +398 -0
- package/dist/lib/types/config.d.ts.map +1 -0
- package/dist/lib/types/config.js +11 -0
- package/dist/lib/types/config.js.map +1 -0
- package/dist/lib/utils/config-loader.d.ts +48 -0
- package/dist/lib/utils/config-loader.d.ts.map +1 -0
- package/dist/lib/utils/config-loader.js +109 -0
- package/dist/lib/utils/config-loader.js.map +1 -0
- package/dist/lib/utils/config-resolver.d.ts +138 -0
- package/dist/lib/utils/config-resolver.d.ts.map +1 -0
- package/dist/lib/utils/config-resolver.js +272 -0
- package/dist/lib/utils/config-resolver.js.map +1 -0
- package/dist/lib/utils/config.d.ts +50 -0
- package/dist/lib/utils/config.d.ts.map +1 -1
- package/dist/lib/utils/config.js +86 -0
- package/dist/lib/utils/config.js.map +1 -1
- package/dist/lib/utils/secrets.d.ts +174 -0
- package/dist/lib/utils/secrets.d.ts.map +1 -0
- package/dist/lib/utils/secrets.js +351 -0
- package/dist/lib/utils/secrets.js.map +1 -0
- package/dist/lib/xdg-cli-wrapper.d.ts +113 -0
- package/dist/lib/xdg-cli-wrapper.d.ts.map +1 -0
- package/dist/lib/xdg-cli-wrapper.js +288 -0
- package/dist/lib/xdg-cli-wrapper.js.map +1 -0
- package/dist/lib/xdg-config.d.ts +187 -0
- package/dist/lib/xdg-config.d.ts.map +1 -0
- package/dist/lib/xdg-config.js +562 -0
- package/dist/lib/xdg-config.js.map +1 -0
- package/dist/package.json +33 -25
- package/dist/scripts/config-health-check.d.ts +78 -0
- package/dist/scripts/config-health-check.d.ts.map +1 -0
- package/dist/scripts/config-health-check.js +559 -0
- package/dist/scripts/config-health-check.js.map +1 -0
- package/dist/scripts/infer-quilt-config.d.ts +50 -0
- package/dist/scripts/infer-quilt-config.d.ts.map +1 -0
- package/dist/scripts/infer-quilt-config.js +353 -0
- package/dist/scripts/infer-quilt-config.js.map +1 -0
- package/dist/scripts/install-wizard.d.ts +34 -0
- package/dist/scripts/install-wizard.d.ts.map +1 -0
- package/dist/scripts/install-wizard.js +719 -0
- package/dist/scripts/install-wizard.js.map +1 -0
- package/dist/scripts/sync-secrets.d.ts +63 -0
- package/dist/scripts/sync-secrets.d.ts.map +1 -0
- package/dist/scripts/sync-secrets.js +424 -0
- package/dist/scripts/sync-secrets.js.map +1 -0
- package/env.template +60 -47
- package/package.json +33 -25
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration Diagnostic Logging
|
|
4
|
+
*
|
|
5
|
+
* Provides comprehensive logging for configuration operations:
|
|
6
|
+
* - Configuration sources tracking
|
|
7
|
+
* - Operation audit trail
|
|
8
|
+
* - Troubleshooting insights
|
|
9
|
+
* - Performance metrics
|
|
10
|
+
*
|
|
11
|
+
* @module lib/config-logger
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.ConfigLogger = exports.ConfigOperation = exports.LogLevel = void 0;
|
|
15
|
+
exports.getConfigLogger = getConfigLogger;
|
|
16
|
+
exports.setConfigLogger = setConfigLogger;
|
|
17
|
+
const fs_1 = require("fs");
|
|
18
|
+
const path_1 = require("path");
|
|
19
|
+
const os_1 = require("os");
|
|
20
|
+
/**
|
|
21
|
+
* Log level enumeration
|
|
22
|
+
*/
|
|
23
|
+
var LogLevel;
|
|
24
|
+
(function (LogLevel) {
|
|
25
|
+
LogLevel["DEBUG"] = "DEBUG";
|
|
26
|
+
LogLevel["INFO"] = "INFO";
|
|
27
|
+
LogLevel["WARN"] = "WARN";
|
|
28
|
+
LogLevel["ERROR"] = "ERROR";
|
|
29
|
+
})(LogLevel || (exports.LogLevel = LogLevel = {}));
|
|
30
|
+
/**
|
|
31
|
+
* Configuration operation types
|
|
32
|
+
*/
|
|
33
|
+
var ConfigOperation;
|
|
34
|
+
(function (ConfigOperation) {
|
|
35
|
+
ConfigOperation["READ"] = "read";
|
|
36
|
+
ConfigOperation["WRITE"] = "write";
|
|
37
|
+
ConfigOperation["VALIDATE"] = "validate";
|
|
38
|
+
ConfigOperation["MERGE"] = "merge";
|
|
39
|
+
ConfigOperation["SYNC_SECRETS"] = "sync-secrets";
|
|
40
|
+
ConfigOperation["INFER_CONFIG"] = "infer-config";
|
|
41
|
+
ConfigOperation["CREATE_PROFILE"] = "create-profile";
|
|
42
|
+
ConfigOperation["DELETE_PROFILE"] = "delete-profile";
|
|
43
|
+
})(ConfigOperation || (exports.ConfigOperation = ConfigOperation = {}));
|
|
44
|
+
/**
|
|
45
|
+
* Configuration logger for diagnostic and audit purposes
|
|
46
|
+
*/
|
|
47
|
+
class ConfigLogger {
|
|
48
|
+
/**
|
|
49
|
+
* Creates a new configuration logger
|
|
50
|
+
*
|
|
51
|
+
* @param options - Logger configuration options
|
|
52
|
+
*/
|
|
53
|
+
constructor(options) {
|
|
54
|
+
const { logFile, enableConsole = true, minLogLevel = LogLevel.INFO } = options || {};
|
|
55
|
+
// Default log file location
|
|
56
|
+
const logDir = (0, path_1.resolve)((0, os_1.homedir)(), ".config", "benchling-webhook", "logs");
|
|
57
|
+
if (!(0, fs_1.existsSync)(logDir)) {
|
|
58
|
+
(0, fs_1.mkdirSync)(logDir, { recursive: true });
|
|
59
|
+
}
|
|
60
|
+
this.logFile = logFile || (0, path_1.resolve)(logDir, "config.log");
|
|
61
|
+
this.enableConsole = enableConsole;
|
|
62
|
+
this.minLogLevel = minLogLevel;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Gets log level priority for comparison
|
|
66
|
+
*
|
|
67
|
+
* @param level - Log level
|
|
68
|
+
* @returns Priority number (higher = more severe)
|
|
69
|
+
*/
|
|
70
|
+
getLogLevelPriority(level) {
|
|
71
|
+
switch (level) {
|
|
72
|
+
case LogLevel.DEBUG:
|
|
73
|
+
return 0;
|
|
74
|
+
case LogLevel.INFO:
|
|
75
|
+
return 1;
|
|
76
|
+
case LogLevel.WARN:
|
|
77
|
+
return 2;
|
|
78
|
+
case LogLevel.ERROR:
|
|
79
|
+
return 3;
|
|
80
|
+
default:
|
|
81
|
+
return 1;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Checks if log level should be output
|
|
86
|
+
*
|
|
87
|
+
* @param level - Log level to check
|
|
88
|
+
* @returns True if should log
|
|
89
|
+
*/
|
|
90
|
+
shouldLog(level) {
|
|
91
|
+
return this.getLogLevelPriority(level) >= this.getLogLevelPriority(this.minLogLevel);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Formats log entry for output
|
|
95
|
+
*
|
|
96
|
+
* @param entry - Log entry
|
|
97
|
+
* @returns Formatted log string
|
|
98
|
+
*/
|
|
99
|
+
formatLogEntry(entry) {
|
|
100
|
+
const parts = [
|
|
101
|
+
entry.timestamp,
|
|
102
|
+
`[${entry.level}]`,
|
|
103
|
+
`[${entry.operation}]`,
|
|
104
|
+
entry.message,
|
|
105
|
+
];
|
|
106
|
+
if (entry.source) {
|
|
107
|
+
parts.push(`source=${entry.source}`);
|
|
108
|
+
}
|
|
109
|
+
if (entry.profileName) {
|
|
110
|
+
parts.push(`profile=${entry.profileName}`);
|
|
111
|
+
}
|
|
112
|
+
if (entry.duration !== undefined) {
|
|
113
|
+
parts.push(`duration=${entry.duration}ms`);
|
|
114
|
+
}
|
|
115
|
+
if (entry.data) {
|
|
116
|
+
parts.push(`data=${JSON.stringify(entry.data)}`);
|
|
117
|
+
}
|
|
118
|
+
return parts.join(" ");
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Writes log entry to file and console
|
|
122
|
+
*
|
|
123
|
+
* @param entry - Log entry to write
|
|
124
|
+
*/
|
|
125
|
+
writeLog(entry) {
|
|
126
|
+
if (!this.shouldLog(entry.level)) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const formattedLog = this.formatLogEntry(entry);
|
|
130
|
+
// Write to file
|
|
131
|
+
try {
|
|
132
|
+
(0, fs_1.appendFileSync)(this.logFile, formattedLog + "\n", "utf-8");
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
console.error(`Failed to write log: ${error.message}`);
|
|
136
|
+
}
|
|
137
|
+
// Write to console
|
|
138
|
+
if (this.enableConsole) {
|
|
139
|
+
switch (entry.level) {
|
|
140
|
+
case LogLevel.DEBUG:
|
|
141
|
+
console.debug(formattedLog);
|
|
142
|
+
break;
|
|
143
|
+
case LogLevel.INFO:
|
|
144
|
+
console.log(formattedLog);
|
|
145
|
+
break;
|
|
146
|
+
case LogLevel.WARN:
|
|
147
|
+
console.warn(formattedLog);
|
|
148
|
+
break;
|
|
149
|
+
case LogLevel.ERROR:
|
|
150
|
+
console.error(formattedLog);
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Logs a debug message
|
|
157
|
+
*
|
|
158
|
+
* @param operation - Configuration operation
|
|
159
|
+
* @param message - Log message
|
|
160
|
+
* @param data - Additional data
|
|
161
|
+
*/
|
|
162
|
+
debug(operation, message, data) {
|
|
163
|
+
this.writeLog({
|
|
164
|
+
timestamp: new Date().toISOString(),
|
|
165
|
+
level: LogLevel.DEBUG,
|
|
166
|
+
operation,
|
|
167
|
+
message,
|
|
168
|
+
data,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Logs an info message
|
|
173
|
+
*
|
|
174
|
+
* @param operation - Configuration operation
|
|
175
|
+
* @param message - Log message
|
|
176
|
+
* @param data - Additional data
|
|
177
|
+
*/
|
|
178
|
+
info(operation, message, data) {
|
|
179
|
+
this.writeLog({
|
|
180
|
+
timestamp: new Date().toISOString(),
|
|
181
|
+
level: LogLevel.INFO,
|
|
182
|
+
operation,
|
|
183
|
+
message,
|
|
184
|
+
data,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Logs a warning message
|
|
189
|
+
*
|
|
190
|
+
* @param operation - Configuration operation
|
|
191
|
+
* @param message - Log message
|
|
192
|
+
* @param data - Additional data
|
|
193
|
+
*/
|
|
194
|
+
warn(operation, message, data) {
|
|
195
|
+
this.writeLog({
|
|
196
|
+
timestamp: new Date().toISOString(),
|
|
197
|
+
level: LogLevel.WARN,
|
|
198
|
+
operation,
|
|
199
|
+
message,
|
|
200
|
+
data,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Logs an error message
|
|
205
|
+
*
|
|
206
|
+
* @param operation - Configuration operation
|
|
207
|
+
* @param message - Log message
|
|
208
|
+
* @param data - Additional data
|
|
209
|
+
*/
|
|
210
|
+
error(operation, message, data) {
|
|
211
|
+
this.writeLog({
|
|
212
|
+
timestamp: new Date().toISOString(),
|
|
213
|
+
level: LogLevel.ERROR,
|
|
214
|
+
operation,
|
|
215
|
+
message,
|
|
216
|
+
data,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Logs configuration operation with timing
|
|
221
|
+
*
|
|
222
|
+
* @param operation - Configuration operation
|
|
223
|
+
* @param profileName - Profile name
|
|
224
|
+
* @param source - Configuration source
|
|
225
|
+
* @param fn - Function to execute and time
|
|
226
|
+
* @returns Result of the function
|
|
227
|
+
*/
|
|
228
|
+
async logOperation(operation, profileName, source, fn) {
|
|
229
|
+
const startTime = Date.now();
|
|
230
|
+
this.info(operation, "Starting operation", {
|
|
231
|
+
profileName,
|
|
232
|
+
source,
|
|
233
|
+
});
|
|
234
|
+
try {
|
|
235
|
+
const result = await fn();
|
|
236
|
+
const duration = Date.now() - startTime;
|
|
237
|
+
this.info(operation, "Operation completed successfully", {
|
|
238
|
+
profileName,
|
|
239
|
+
source,
|
|
240
|
+
duration,
|
|
241
|
+
});
|
|
242
|
+
return result;
|
|
243
|
+
}
|
|
244
|
+
catch (error) {
|
|
245
|
+
const duration = Date.now() - startTime;
|
|
246
|
+
this.error(operation, `Operation failed: ${error.message}`, {
|
|
247
|
+
profileName,
|
|
248
|
+
source,
|
|
249
|
+
duration,
|
|
250
|
+
error: error.stack,
|
|
251
|
+
});
|
|
252
|
+
throw error;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Logs configuration read operation
|
|
257
|
+
*
|
|
258
|
+
* @param profileName - Profile name
|
|
259
|
+
* @param configType - Configuration type
|
|
260
|
+
* @param success - Whether read was successful
|
|
261
|
+
* @param source - Configuration source
|
|
262
|
+
*/
|
|
263
|
+
logRead(profileName, configType, success, source) {
|
|
264
|
+
const entry = {
|
|
265
|
+
timestamp: new Date().toISOString(),
|
|
266
|
+
level: success ? LogLevel.INFO : LogLevel.ERROR,
|
|
267
|
+
operation: ConfigOperation.READ,
|
|
268
|
+
message: `Configuration read ${success ? "successful" : "failed"}`,
|
|
269
|
+
profileName,
|
|
270
|
+
source,
|
|
271
|
+
data: {
|
|
272
|
+
configType,
|
|
273
|
+
},
|
|
274
|
+
};
|
|
275
|
+
this.writeLog(entry);
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Logs configuration write operation
|
|
279
|
+
*
|
|
280
|
+
* @param profileName - Profile name
|
|
281
|
+
* @param configType - Configuration type
|
|
282
|
+
* @param success - Whether write was successful
|
|
283
|
+
* @param source - Configuration source
|
|
284
|
+
*/
|
|
285
|
+
logWrite(profileName, configType, success, source) {
|
|
286
|
+
const entry = {
|
|
287
|
+
timestamp: new Date().toISOString(),
|
|
288
|
+
level: success ? LogLevel.INFO : LogLevel.ERROR,
|
|
289
|
+
operation: ConfigOperation.WRITE,
|
|
290
|
+
message: `Configuration write ${success ? "successful" : "failed"}`,
|
|
291
|
+
profileName,
|
|
292
|
+
source,
|
|
293
|
+
data: {
|
|
294
|
+
configType,
|
|
295
|
+
},
|
|
296
|
+
};
|
|
297
|
+
this.writeLog(entry);
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Logs configuration validation
|
|
301
|
+
*
|
|
302
|
+
* @param profileName - Profile name
|
|
303
|
+
* @param isValid - Whether configuration is valid
|
|
304
|
+
* @param errors - Validation errors
|
|
305
|
+
*/
|
|
306
|
+
logValidation(profileName, isValid, errors) {
|
|
307
|
+
const entry = {
|
|
308
|
+
timestamp: new Date().toISOString(),
|
|
309
|
+
level: isValid ? LogLevel.INFO : LogLevel.WARN,
|
|
310
|
+
operation: ConfigOperation.VALIDATE,
|
|
311
|
+
message: `Configuration validation ${isValid ? "passed" : "failed"}`,
|
|
312
|
+
profileName,
|
|
313
|
+
data: errors ? { errors } : undefined,
|
|
314
|
+
};
|
|
315
|
+
this.writeLog(entry);
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Logs secrets sync operation
|
|
319
|
+
*
|
|
320
|
+
* @param profileName - Profile name
|
|
321
|
+
* @param secretArn - Secret ARN
|
|
322
|
+
* @param action - Action performed (created/updated/skipped)
|
|
323
|
+
*/
|
|
324
|
+
logSecretsSync(profileName, secretArn, action) {
|
|
325
|
+
const entry = {
|
|
326
|
+
timestamp: new Date().toISOString(),
|
|
327
|
+
level: LogLevel.INFO,
|
|
328
|
+
operation: ConfigOperation.SYNC_SECRETS,
|
|
329
|
+
message: `Secrets ${action}`,
|
|
330
|
+
profileName,
|
|
331
|
+
data: {
|
|
332
|
+
secretArn,
|
|
333
|
+
action,
|
|
334
|
+
},
|
|
335
|
+
};
|
|
336
|
+
this.writeLog(entry);
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Gets the log file path
|
|
340
|
+
*
|
|
341
|
+
* @returns Log file path
|
|
342
|
+
*/
|
|
343
|
+
getLogFile() {
|
|
344
|
+
return this.logFile;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
exports.ConfigLogger = ConfigLogger;
|
|
348
|
+
/**
|
|
349
|
+
* Global configuration logger instance
|
|
350
|
+
*/
|
|
351
|
+
let globalLogger = null;
|
|
352
|
+
/**
|
|
353
|
+
* Gets or creates the global configuration logger
|
|
354
|
+
*
|
|
355
|
+
* @param options - Logger options (only used on first call)
|
|
356
|
+
* @returns Configuration logger instance
|
|
357
|
+
*/
|
|
358
|
+
function getConfigLogger(options) {
|
|
359
|
+
if (!globalLogger) {
|
|
360
|
+
globalLogger = new ConfigLogger(options);
|
|
361
|
+
}
|
|
362
|
+
return globalLogger;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Sets the global configuration logger
|
|
366
|
+
*
|
|
367
|
+
* @param logger - Logger instance
|
|
368
|
+
*/
|
|
369
|
+
function setConfigLogger(logger) {
|
|
370
|
+
globalLogger = logger;
|
|
371
|
+
}
|
|
372
|
+
//# sourceMappingURL=config-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-logger.js","sourceRoot":"","sources":["../../lib/config-logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { XDGConfig } from "./xdg-config";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration metadata
|
|
4
|
+
*/
|
|
5
|
+
export interface ConfigMetadata {
|
|
6
|
+
savedAt: string;
|
|
7
|
+
source: string;
|
|
8
|
+
version?: string;
|
|
9
|
+
inferredAt?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Save options for configuration persistence
|
|
13
|
+
*/
|
|
14
|
+
export interface SaveOptions {
|
|
15
|
+
xdgConfig?: XDGConfig;
|
|
16
|
+
source?: string;
|
|
17
|
+
skipValidation?: boolean;
|
|
18
|
+
merge?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Configuration saver for persisting configuration to XDG files
|
|
22
|
+
*/
|
|
23
|
+
export declare class ConfigurationSaver {
|
|
24
|
+
/**
|
|
25
|
+
* Default XDG config instance
|
|
26
|
+
*/
|
|
27
|
+
private static defaultXDGConfig;
|
|
28
|
+
/**
|
|
29
|
+
* Get or create default XDG config instance
|
|
30
|
+
*/
|
|
31
|
+
private static getDefaultXDGConfig;
|
|
32
|
+
/**
|
|
33
|
+
* Save configuration to user config file
|
|
34
|
+
*
|
|
35
|
+
* @param config - Configuration to save
|
|
36
|
+
* @param options - Save options
|
|
37
|
+
* @returns Saved configuration with metadata
|
|
38
|
+
*/
|
|
39
|
+
static save(config: Record<string, string | number | boolean>, options?: SaveOptions): Promise<Record<string, string | number | boolean>>;
|
|
40
|
+
/**
|
|
41
|
+
* Save inferred configuration to derived config file
|
|
42
|
+
*
|
|
43
|
+
* @param config - Inferred configuration
|
|
44
|
+
* @param options - Save options
|
|
45
|
+
*/
|
|
46
|
+
static saveToDerived(config: Record<string, string | number | boolean>, options?: SaveOptions): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Save deployment outputs to deployment config file
|
|
49
|
+
*
|
|
50
|
+
* @param config - Deployment configuration
|
|
51
|
+
* @param options - Save options
|
|
52
|
+
*/
|
|
53
|
+
static saveToDeployment(config: Record<string, string | number | boolean>, options?: SaveOptions): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Create metadata for configuration
|
|
56
|
+
*
|
|
57
|
+
* @param options - Metadata options
|
|
58
|
+
* @returns Configuration metadata
|
|
59
|
+
*/
|
|
60
|
+
static getMetadata(options?: Partial<ConfigMetadata>): ConfigMetadata;
|
|
61
|
+
/**
|
|
62
|
+
* Get the current version
|
|
63
|
+
*
|
|
64
|
+
* @returns Version string
|
|
65
|
+
*/
|
|
66
|
+
private static getVersion;
|
|
67
|
+
/**
|
|
68
|
+
* Validate configuration before saving
|
|
69
|
+
*
|
|
70
|
+
* @param config - Configuration to validate
|
|
71
|
+
* @throws {Error} If configuration is invalid
|
|
72
|
+
*/
|
|
73
|
+
private static validateConfig;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=configuration-saver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configuration-saver.d.ts","sourceRoot":"","sources":["../../lib/configuration-saver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAA0B;IAEzD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAQlC;;;;;;OAMG;WACiB,IAAI,CACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EACjD,OAAO,GAAE,WAAgB,GAC1B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IA8CrD;;;;;OAKG;WACiB,aAAa,CAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EACjD,OAAO,GAAE,WAAgB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAqBhB;;;;;OAKG;WACiB,gBAAgB,CAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EACjD,OAAO,GAAE,WAAgB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAkBhB;;;;;OAKG;WACW,WAAW,CAAC,OAAO,GAAE,OAAO,CAAC,cAAc,CAAM,GAAG,cAAc;IAShF;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAMzB;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;CAQhC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ConfigurationSaver = void 0;
|
|
7
|
+
const xdg_config_1 = require("./xdg-config");
|
|
8
|
+
const lodash_merge_1 = __importDefault(require("lodash.merge"));
|
|
9
|
+
/**
|
|
10
|
+
* Configuration saver for persisting configuration to XDG files
|
|
11
|
+
*/
|
|
12
|
+
class ConfigurationSaver {
|
|
13
|
+
/**
|
|
14
|
+
* Get or create default XDG config instance
|
|
15
|
+
*/
|
|
16
|
+
static getDefaultXDGConfig() {
|
|
17
|
+
if (!ConfigurationSaver.defaultXDGConfig) {
|
|
18
|
+
ConfigurationSaver.defaultXDGConfig = new xdg_config_1.XDGConfig();
|
|
19
|
+
ConfigurationSaver.defaultXDGConfig.ensureDirectories();
|
|
20
|
+
}
|
|
21
|
+
return ConfigurationSaver.defaultXDGConfig;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Save configuration to user config file
|
|
25
|
+
*
|
|
26
|
+
* @param config - Configuration to save
|
|
27
|
+
* @param options - Save options
|
|
28
|
+
* @returns Saved configuration with metadata
|
|
29
|
+
*/
|
|
30
|
+
static async save(config, options = {}) {
|
|
31
|
+
const { xdgConfig = ConfigurationSaver.getDefaultXDGConfig(), source = "wizard", skipValidation = false, merge: shouldMerge = false, } = options;
|
|
32
|
+
// Validate configuration if not skipped
|
|
33
|
+
if (!skipValidation) {
|
|
34
|
+
ConfigurationSaver.validateConfig(config);
|
|
35
|
+
}
|
|
36
|
+
// Merge with existing config if requested
|
|
37
|
+
let finalConfig = { ...config };
|
|
38
|
+
if (shouldMerge) {
|
|
39
|
+
try {
|
|
40
|
+
const existingConfig = xdgConfig.readConfig("user");
|
|
41
|
+
finalConfig = (0, lodash_merge_1.default)({}, existingConfig, config);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// If no existing config, just use the new config
|
|
45
|
+
finalConfig = { ...config };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Add metadata
|
|
49
|
+
const metadata = ConfigurationSaver.getMetadata({ source });
|
|
50
|
+
const configWithMetadata = {
|
|
51
|
+
...finalConfig,
|
|
52
|
+
_metadata: metadata,
|
|
53
|
+
};
|
|
54
|
+
// Save to user config
|
|
55
|
+
xdgConfig.writeConfig("user", configWithMetadata);
|
|
56
|
+
// If source indicates inference, also save to derived config
|
|
57
|
+
if (source === "quilt-cli" || source === "inference") {
|
|
58
|
+
await ConfigurationSaver.saveToDerived(config, {
|
|
59
|
+
xdgConfig,
|
|
60
|
+
source,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
return finalConfig;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Save inferred configuration to derived config file
|
|
67
|
+
*
|
|
68
|
+
* @param config - Inferred configuration
|
|
69
|
+
* @param options - Save options
|
|
70
|
+
*/
|
|
71
|
+
static async saveToDerived(config, options = {}) {
|
|
72
|
+
const { xdgConfig = ConfigurationSaver.getDefaultXDGConfig(), source = "inferred", } = options;
|
|
73
|
+
// Add inference metadata
|
|
74
|
+
const metadata = ConfigurationSaver.getMetadata({
|
|
75
|
+
source,
|
|
76
|
+
inferredAt: new Date().toISOString(),
|
|
77
|
+
});
|
|
78
|
+
const configWithMetadata = {
|
|
79
|
+
...config,
|
|
80
|
+
_metadata: metadata,
|
|
81
|
+
};
|
|
82
|
+
// Save to derived config
|
|
83
|
+
xdgConfig.writeConfig("derived", configWithMetadata);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Save deployment outputs to deployment config file
|
|
87
|
+
*
|
|
88
|
+
* @param config - Deployment configuration
|
|
89
|
+
* @param options - Save options
|
|
90
|
+
*/
|
|
91
|
+
static async saveToDeployment(config, options = {}) {
|
|
92
|
+
const { xdgConfig = ConfigurationSaver.getDefaultXDGConfig(), source = "deployment", } = options;
|
|
93
|
+
// Add deployment metadata
|
|
94
|
+
const metadata = ConfigurationSaver.getMetadata({ source });
|
|
95
|
+
const configWithMetadata = {
|
|
96
|
+
...config,
|
|
97
|
+
_metadata: metadata,
|
|
98
|
+
};
|
|
99
|
+
// Save to deployment config
|
|
100
|
+
xdgConfig.writeConfig("deploy", configWithMetadata);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Create metadata for configuration
|
|
104
|
+
*
|
|
105
|
+
* @param options - Metadata options
|
|
106
|
+
* @returns Configuration metadata
|
|
107
|
+
*/
|
|
108
|
+
static getMetadata(options = {}) {
|
|
109
|
+
return {
|
|
110
|
+
savedAt: new Date().toISOString(),
|
|
111
|
+
source: options.source || "unknown",
|
|
112
|
+
version: ConfigurationSaver.getVersion(),
|
|
113
|
+
...(options.inferredAt && { inferredAt: options.inferredAt }),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get the current version
|
|
118
|
+
*
|
|
119
|
+
* @returns Version string
|
|
120
|
+
*/
|
|
121
|
+
static getVersion() {
|
|
122
|
+
// For now, return a static version
|
|
123
|
+
// In production, this would read from package.json
|
|
124
|
+
return "0.6.0";
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Validate configuration before saving
|
|
128
|
+
*
|
|
129
|
+
* @param config - Configuration to validate
|
|
130
|
+
* @throws {Error} If configuration is invalid
|
|
131
|
+
*/
|
|
132
|
+
static validateConfig(config) {
|
|
133
|
+
// Check if config is empty
|
|
134
|
+
if (Object.keys(config).length === 0) {
|
|
135
|
+
throw new Error("Configuration validation failed: Configuration cannot be empty");
|
|
136
|
+
}
|
|
137
|
+
// Basic validation passed
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
exports.ConfigurationSaver = ConfigurationSaver;
|
|
141
|
+
/**
|
|
142
|
+
* Default XDG config instance
|
|
143
|
+
*/
|
|
144
|
+
ConfigurationSaver.defaultXDGConfig = null;
|
|
145
|
+
//# sourceMappingURL=configuration-saver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configuration-saver.js","sourceRoot":"","sources":["../../lib/configuration-saver.ts"],"names":[],"mappings":";;;;;;AAAA,6CAAyC;AACzC,gEAAiC;AAsBjC;;GAEG;AACH,MAAa,kBAAkB;IAM3B;;OAEG;IACK,MAAM,CAAC,mBAAmB;QAC9B,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,CAAC;YACvC,kBAAkB,CAAC,gBAAgB,GAAG,IAAI,sBAAS,EAAE,CAAC;YACtD,kBAAkB,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC;QAC5D,CAAC;QACD,OAAO,kBAAkB,CAAC,gBAAgB,CAAC;IAC/C,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,KAAK,CAAC,IAAI,CACpB,MAAiD,EACjD,UAAuB,EAAE;QAEzB,MAAM,EACF,SAAS,GAAG,kBAAkB,CAAC,mBAAmB,EAAE,EACpD,MAAM,GAAG,QAAQ,EACjB,cAAc,GAAG,KAAK,EACtB,KAAK,EAAE,WAAW,GAAG,KAAK,GAC7B,GAAG,OAAO,CAAC;QAEZ,wCAAwC;QACxC,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,kBAAkB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;QAED,0CAA0C;QAC1C,IAAI,WAAW,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QAChC,IAAI,WAAW,EAAE,CAAC;YACd,IAAI,CAAC;gBACD,MAAM,cAAc,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACpD,WAAW,GAAG,IAAA,sBAAK,EAAC,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;YACpD,CAAC;YAAC,MAAM,CAAC;gBACL,iDAAiD;gBACjD,WAAW,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;YAChC,CAAC;QACL,CAAC;QAED,eAAe;QACf,MAAM,QAAQ,GAAG,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5D,MAAM,kBAAkB,GAAG;YACvB,GAAG,WAAW;YACd,SAAS,EAAE,QAAQ;SACtB,CAAC;QAEF,sBAAsB;QACtB,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAElD,6DAA6D;QAC7D,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YACnD,MAAM,kBAAkB,CAAC,aAAa,CAAC,MAAM,EAAE;gBAC3C,SAAS;gBACT,MAAM;aACT,CAAC,CAAC;QACP,CAAC;QAED,OAAO,WAAW,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,KAAK,CAAC,aAAa,CAC7B,MAAiD,EACjD,UAAuB,EAAE;QAEzB,MAAM,EACF,SAAS,GAAG,kBAAkB,CAAC,mBAAmB,EAAE,EACpD,MAAM,GAAG,UAAU,GACtB,GAAG,OAAO,CAAC;QAEZ,yBAAyB;QACzB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,WAAW,CAAC;YAC5C,MAAM;YACN,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACvC,CAAC,CAAC;QAEH,MAAM,kBAAkB,GAAG;YACvB,GAAG,MAAM;YACT,SAAS,EAAE,QAAQ;SACtB,CAAC;QAEF,yBAAyB;QACzB,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IACzD,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAChC,MAAiD,EACjD,UAAuB,EAAE;QAEzB,MAAM,EACF,SAAS,GAAG,kBAAkB,CAAC,mBAAmB,EAAE,EACpD,MAAM,GAAG,YAAY,GACxB,GAAG,OAAO,CAAC;QAEZ,0BAA0B;QAC1B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAE5D,MAAM,kBAAkB,GAAG;YACvB,GAAG,MAAM;YACT,SAAS,EAAE,QAAQ;SACtB,CAAC;QAEF,4BAA4B;QAC5B,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IACxD,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,WAAW,CAAC,UAAmC,EAAE;QAC3D,OAAO;YACH,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACjC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,SAAS;YACnC,OAAO,EAAE,kBAAkB,CAAC,UAAU,EAAE;YACxC,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;SAChE,CAAC;IACN,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,UAAU;QACrB,mCAAmC;QACnC,mDAAmD;QACnD,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,cAAc,CAAC,MAAiD;QAC3E,2BAA2B;QAC3B,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACtF,CAAC;QAED,0BAA0B;IAC9B,CAAC;;AAzKL,gDA0KC;AAzKG;;GAEG;AACY,mCAAgB,GAAqB,IAAI,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration object for validation
|
|
3
|
+
*/
|
|
4
|
+
export interface Configuration {
|
|
5
|
+
catalogUrl?: string;
|
|
6
|
+
benchlingTenant?: string;
|
|
7
|
+
benchlingClientId?: string;
|
|
8
|
+
benchlingClientSecret?: string;
|
|
9
|
+
benchlingAppDefinitionId?: string;
|
|
10
|
+
quiltUserBucket?: string;
|
|
11
|
+
quiltRegion?: string;
|
|
12
|
+
[key: string]: string | undefined;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Validation options
|
|
16
|
+
*/
|
|
17
|
+
export interface ValidationOptions {
|
|
18
|
+
skipBenchlingValidation?: boolean;
|
|
19
|
+
skipS3Validation?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Comprehensive validation result
|
|
23
|
+
*/
|
|
24
|
+
export interface ComprehensiveValidationResult {
|
|
25
|
+
isValid: boolean;
|
|
26
|
+
errors: string[];
|
|
27
|
+
warnings?: string[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Comprehensive configuration validator
|
|
31
|
+
*
|
|
32
|
+
* Combines all validation checks (Benchling + S3) and provides
|
|
33
|
+
* comprehensive validation results with aggregated errors.
|
|
34
|
+
*/
|
|
35
|
+
export declare class ConfigurationValidator {
|
|
36
|
+
/**
|
|
37
|
+
* Required configuration fields
|
|
38
|
+
*/
|
|
39
|
+
private static readonly REQUIRED_FIELDS;
|
|
40
|
+
/**
|
|
41
|
+
* Validate entire configuration
|
|
42
|
+
*
|
|
43
|
+
* @param config - Configuration to validate
|
|
44
|
+
* @param options - Validation options
|
|
45
|
+
* @returns Comprehensive validation result
|
|
46
|
+
*/
|
|
47
|
+
static validate(config: Configuration, options?: ValidationOptions): Promise<ComprehensiveValidationResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Validate catalog URL format
|
|
50
|
+
*
|
|
51
|
+
* @param catalogUrl - Catalog URL to validate
|
|
52
|
+
* @returns True if URL format is valid
|
|
53
|
+
*/
|
|
54
|
+
static validateCatalogUrl(catalogUrl: string): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Check for missing required fields
|
|
57
|
+
*
|
|
58
|
+
* @param config - Configuration to check
|
|
59
|
+
* @returns Array of missing field names
|
|
60
|
+
*/
|
|
61
|
+
static checkRequiredFields(config: Configuration): string[];
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=configuration-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configuration-validator.d.ts","sourceRoot":"","sources":["../../lib/configuration-validator.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;GAKG;AACH,qBAAa,sBAAsB;IAC/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAQrC;IAEF;;;;;;OAMG;WACiB,QAAQ,CACxB,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,iBAAsB,GAChC,OAAO,CAAC,6BAA6B,CAAC;IA8EzC;;;;;OAKG;WACW,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAa7D;;;;;OAKG;WACW,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE;CAWrE"}
|