configforge 1.0.0-beta.11 → 1.0.0-beta.13
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 +88 -2
- package/dist/core/Converter.d.ts +27 -0
- package/dist/core/Converter.d.ts.map +1 -1
- package/dist/core/Converter.js +91 -21
- package/dist/core/Converter.js.map +1 -1
- package/dist/plugins/Plugin.d.ts +95 -0
- package/dist/plugins/Plugin.d.ts.map +1 -0
- package/dist/plugins/Plugin.js +3 -0
- package/dist/plugins/Plugin.js.map +1 -0
- package/dist/plugins/PluginManager.d.ts +73 -0
- package/dist/plugins/PluginManager.d.ts.map +1 -0
- package/dist/plugins/PluginManager.js +220 -0
- package/dist/plugins/PluginManager.js.map +1 -0
- package/dist/plugins/PluginRegistry.d.ts +122 -0
- package/dist/plugins/PluginRegistry.d.ts.map +1 -0
- package/dist/plugins/PluginRegistry.js +385 -0
- package/dist/plugins/PluginRegistry.js.map +1 -0
- package/dist/plugins/built-in/AuditPlugin.d.ts +81 -0
- package/dist/plugins/built-in/AuditPlugin.d.ts.map +1 -0
- package/dist/plugins/built-in/AuditPlugin.js +235 -0
- package/dist/plugins/built-in/AuditPlugin.js.map +1 -0
- package/dist/plugins/built-in/BackupPlugin.d.ts +38 -0
- package/dist/plugins/built-in/BackupPlugin.d.ts.map +1 -0
- package/dist/plugins/built-in/BackupPlugin.js +105 -0
- package/dist/plugins/built-in/BackupPlugin.js.map +1 -0
- package/dist/plugins/built-in/ValidationPlugin.d.ts +61 -0
- package/dist/plugins/built-in/ValidationPlugin.d.ts.map +1 -0
- package/dist/plugins/built-in/ValidationPlugin.js +235 -0
- package/dist/plugins/built-in/ValidationPlugin.js.map +1 -0
- package/dist/plugins/built-in/index.d.ts +7 -0
- package/dist/plugins/built-in/index.d.ts.map +1 -0
- package/dist/plugins/built-in/index.js +14 -0
- package/dist/plugins/built-in/index.js.map +1 -0
- package/dist/plugins/index.d.ts +5 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +25 -0
- package/dist/plugins/index.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PluginRegistry = exports.PluginError = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Error thrown when plugin operations fail
|
|
6
|
+
*/
|
|
7
|
+
class PluginError extends Error {
|
|
8
|
+
constructor(message, pluginName) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.pluginName = pluginName;
|
|
11
|
+
this.code = 'PLUGIN_ERROR';
|
|
12
|
+
this.name = 'PluginError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.PluginError = PluginError;
|
|
16
|
+
/**
|
|
17
|
+
* Registry for managing plugins and their lifecycle
|
|
18
|
+
*/
|
|
19
|
+
class PluginRegistry {
|
|
20
|
+
constructor(options = {}) {
|
|
21
|
+
this.plugins = new Map();
|
|
22
|
+
this.installedPlugins = new Map();
|
|
23
|
+
this.dependencyGraph = new Map();
|
|
24
|
+
this.options = {
|
|
25
|
+
strict: false,
|
|
26
|
+
autoResolve: true,
|
|
27
|
+
maxDependencyDepth: 10,
|
|
28
|
+
allowDuplicates: false,
|
|
29
|
+
...options,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Register a plugin in the registry
|
|
34
|
+
*/
|
|
35
|
+
register(plugin) {
|
|
36
|
+
if (!plugin.name) {
|
|
37
|
+
throw new PluginError('Plugin must have a name');
|
|
38
|
+
}
|
|
39
|
+
if (!plugin.version) {
|
|
40
|
+
throw new PluginError('Plugin must have a version', plugin.name);
|
|
41
|
+
}
|
|
42
|
+
if (!plugin.install || typeof plugin.install !== 'function') {
|
|
43
|
+
throw new PluginError('Plugin must have an install function', plugin.name);
|
|
44
|
+
}
|
|
45
|
+
// Check for duplicates
|
|
46
|
+
if (this.plugins.has(plugin.name) && !this.options.allowDuplicates) {
|
|
47
|
+
throw new PluginError(`Plugin '${plugin.name}' is already registered`);
|
|
48
|
+
}
|
|
49
|
+
// Validate dependencies
|
|
50
|
+
this.validateDependencies(plugin);
|
|
51
|
+
this.plugins.set(plugin.name, plugin);
|
|
52
|
+
this.buildDependencyGraph(plugin);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Unregister a plugin from the registry
|
|
56
|
+
*/
|
|
57
|
+
unregister(name) {
|
|
58
|
+
if (!this.plugins.has(name)) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
// Check if other plugins depend on this one
|
|
62
|
+
const dependents = this.getDependents(name);
|
|
63
|
+
if (dependents.length > 0 && this.options.strict) {
|
|
64
|
+
throw new PluginError(`Cannot unregister plugin '${name}' - it is required by: ${dependents.join(', ')}`);
|
|
65
|
+
}
|
|
66
|
+
this.plugins.delete(name);
|
|
67
|
+
this.installedPlugins.delete(name);
|
|
68
|
+
this.dependencyGraph.delete(name);
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get a registered plugin by name
|
|
73
|
+
*/
|
|
74
|
+
get(name) {
|
|
75
|
+
return this.plugins.get(name);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Check if a plugin is registered
|
|
79
|
+
*/
|
|
80
|
+
has(name) {
|
|
81
|
+
return this.plugins.has(name);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* List all registered plugins
|
|
85
|
+
*/
|
|
86
|
+
list() {
|
|
87
|
+
return Array.from(this.plugins.values());
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* List all installed plugins
|
|
91
|
+
*/
|
|
92
|
+
listInstalled() {
|
|
93
|
+
return Array.from(this.installedPlugins.values());
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Install a plugin into a converter
|
|
97
|
+
*/
|
|
98
|
+
async install(pluginName, converter) {
|
|
99
|
+
const plugin = this.plugins.get(pluginName);
|
|
100
|
+
if (!plugin) {
|
|
101
|
+
throw new PluginError(`Plugin '${pluginName}' not found`);
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
// Check if already installed
|
|
105
|
+
if (this.installedPlugins.has(pluginName)) {
|
|
106
|
+
return {
|
|
107
|
+
success: false,
|
|
108
|
+
plugin,
|
|
109
|
+
error: new PluginError(`Plugin '${pluginName}' is already installed`),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
// Resolve and install dependencies first
|
|
113
|
+
if (this.options.autoResolve && plugin.dependencies) {
|
|
114
|
+
await this.installDependencies(plugin.dependencies, converter);
|
|
115
|
+
}
|
|
116
|
+
// Create plugin context
|
|
117
|
+
const context = {
|
|
118
|
+
converter,
|
|
119
|
+
version: '1.0.0', // TODO: Get from package.json
|
|
120
|
+
environment: process.env.NODE_ENV || 'development',
|
|
121
|
+
metadata: {
|
|
122
|
+
installDate: new Date(),
|
|
123
|
+
registry: this,
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
// Install the plugin
|
|
127
|
+
await plugin.install(context);
|
|
128
|
+
// Register hooks if provided
|
|
129
|
+
if (plugin.hooks) {
|
|
130
|
+
this.registerHooks(plugin, converter);
|
|
131
|
+
}
|
|
132
|
+
// Mark as installed
|
|
133
|
+
const status = {
|
|
134
|
+
plugin,
|
|
135
|
+
installed: true,
|
|
136
|
+
active: true,
|
|
137
|
+
dependencies: this.getDependencyStatus(plugin),
|
|
138
|
+
installDate: new Date(),
|
|
139
|
+
};
|
|
140
|
+
this.installedPlugins.set(pluginName, status);
|
|
141
|
+
return {
|
|
142
|
+
success: true,
|
|
143
|
+
plugin,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
return {
|
|
148
|
+
success: false,
|
|
149
|
+
plugin,
|
|
150
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Uninstall a plugin from a converter
|
|
156
|
+
*/
|
|
157
|
+
async uninstall(pluginName, converter) {
|
|
158
|
+
const status = this.installedPlugins.get(pluginName);
|
|
159
|
+
if (!status) {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
// Check dependents
|
|
164
|
+
const dependents = this.getInstalledDependents(pluginName);
|
|
165
|
+
if (dependents.length > 0 && this.options.strict) {
|
|
166
|
+
throw new PluginError(`Cannot uninstall plugin '${pluginName}' - it is required by: ${dependents.join(', ')}`);
|
|
167
|
+
}
|
|
168
|
+
// Call uninstall if available
|
|
169
|
+
if (status.plugin.uninstall) {
|
|
170
|
+
const context = {
|
|
171
|
+
converter,
|
|
172
|
+
version: '1.0.0',
|
|
173
|
+
environment: process.env.NODE_ENV || 'development',
|
|
174
|
+
metadata: {
|
|
175
|
+
uninstallDate: new Date(),
|
|
176
|
+
registry: this,
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
await status.plugin.uninstall(context);
|
|
180
|
+
}
|
|
181
|
+
// Unregister hooks
|
|
182
|
+
if (status.plugin.hooks) {
|
|
183
|
+
this.unregisterHooks(status.plugin, converter);
|
|
184
|
+
}
|
|
185
|
+
this.installedPlugins.delete(pluginName);
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
console.error(`Error uninstalling plugin '${pluginName}':`, error);
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get plugin status
|
|
195
|
+
*/
|
|
196
|
+
getStatus(name) {
|
|
197
|
+
return this.installedPlugins.get(name);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Check if a plugin is installed
|
|
201
|
+
*/
|
|
202
|
+
isInstalled(name) {
|
|
203
|
+
return this.installedPlugins.has(name);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Resolve plugin dependencies in correct order
|
|
207
|
+
*/
|
|
208
|
+
resolveDependencies(plugins) {
|
|
209
|
+
const resolved = [];
|
|
210
|
+
const visiting = new Set();
|
|
211
|
+
const visited = new Set();
|
|
212
|
+
const visit = (pluginName, depth = 0) => {
|
|
213
|
+
if (depth > this.options.maxDependencyDepth) {
|
|
214
|
+
throw new PluginError(`Dependency depth exceeded for plugin '${pluginName}'`);
|
|
215
|
+
}
|
|
216
|
+
if (visiting.has(pluginName)) {
|
|
217
|
+
throw new PluginError(`Circular dependency detected involving plugin '${pluginName}'`);
|
|
218
|
+
}
|
|
219
|
+
if (visited.has(pluginName)) {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
visiting.add(pluginName);
|
|
223
|
+
const plugin = this.plugins.get(pluginName);
|
|
224
|
+
if (!plugin) {
|
|
225
|
+
throw new PluginError(`Plugin '${pluginName}' not found`);
|
|
226
|
+
}
|
|
227
|
+
// Visit dependencies first
|
|
228
|
+
if (plugin.dependencies) {
|
|
229
|
+
for (const dep of plugin.dependencies) {
|
|
230
|
+
const depName = this.parseDependencyName(dep);
|
|
231
|
+
visit(depName, depth + 1);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
visiting.delete(pluginName);
|
|
235
|
+
visited.add(pluginName);
|
|
236
|
+
resolved.push(pluginName);
|
|
237
|
+
};
|
|
238
|
+
for (const plugin of plugins) {
|
|
239
|
+
visit(plugin);
|
|
240
|
+
}
|
|
241
|
+
return resolved;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Clear all plugins and installed plugins
|
|
245
|
+
*/
|
|
246
|
+
clear() {
|
|
247
|
+
this.plugins.clear();
|
|
248
|
+
this.installedPlugins.clear();
|
|
249
|
+
this.dependencyGraph.clear();
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Validate plugin dependencies
|
|
253
|
+
*/
|
|
254
|
+
validateDependencies(plugin) {
|
|
255
|
+
if (!plugin.dependencies) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
for (const dep of plugin.dependencies) {
|
|
259
|
+
const depName = this.parseDependencyName(dep);
|
|
260
|
+
if (depName === plugin.name) {
|
|
261
|
+
throw new PluginError(`Plugin '${plugin.name}' cannot depend on itself`);
|
|
262
|
+
}
|
|
263
|
+
// In strict mode, check if dependency is registered
|
|
264
|
+
if (this.options.strict && !this.plugins.has(depName)) {
|
|
265
|
+
throw new PluginError(`Plugin '${plugin.name}' depends on unregistered plugin '${depName}'`);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Build dependency graph for a plugin
|
|
271
|
+
*/
|
|
272
|
+
buildDependencyGraph(plugin) {
|
|
273
|
+
if (!plugin.dependencies) {
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
const deps = new Set();
|
|
277
|
+
for (const dep of plugin.dependencies) {
|
|
278
|
+
const depName = this.parseDependencyName(dep);
|
|
279
|
+
deps.add(depName);
|
|
280
|
+
}
|
|
281
|
+
this.dependencyGraph.set(plugin.name, deps);
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Get plugins that depend on the given plugin
|
|
285
|
+
*/
|
|
286
|
+
getDependents(pluginName) {
|
|
287
|
+
const dependents = [];
|
|
288
|
+
for (const [name, deps] of this.dependencyGraph.entries()) {
|
|
289
|
+
if (deps.has(pluginName)) {
|
|
290
|
+
dependents.push(name);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return dependents;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Get installed plugins that depend on the given plugin
|
|
297
|
+
*/
|
|
298
|
+
getInstalledDependents(pluginName) {
|
|
299
|
+
return this.getDependents(pluginName).filter(name => this.isInstalled(name));
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Install plugin dependencies
|
|
303
|
+
*/
|
|
304
|
+
async installDependencies(dependencies, converter) {
|
|
305
|
+
const depNames = dependencies.map(dep => this.parseDependencyName(dep));
|
|
306
|
+
const resolved = this.resolveDependencies(depNames);
|
|
307
|
+
for (const depName of resolved) {
|
|
308
|
+
if (!this.isInstalled(depName)) {
|
|
309
|
+
const result = await this.install(depName, converter);
|
|
310
|
+
if (!result.success) {
|
|
311
|
+
throw new PluginError(`Failed to install dependency '${depName}': ${result.error?.message}`);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Get dependency status for a plugin
|
|
318
|
+
*/
|
|
319
|
+
getDependencyStatus(plugin) {
|
|
320
|
+
if (!plugin.dependencies) {
|
|
321
|
+
return [];
|
|
322
|
+
}
|
|
323
|
+
return plugin.dependencies.map(dep => {
|
|
324
|
+
const name = this.parseDependencyName(dep);
|
|
325
|
+
const version = this.parseDependencyVersion(dep);
|
|
326
|
+
const installedPlugin = this.plugins.get(name);
|
|
327
|
+
return {
|
|
328
|
+
name,
|
|
329
|
+
version,
|
|
330
|
+
required: true,
|
|
331
|
+
installed: !!installedPlugin,
|
|
332
|
+
compatible: installedPlugin
|
|
333
|
+
? this.isVersionCompatible(installedPlugin.version, version)
|
|
334
|
+
: false,
|
|
335
|
+
};
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Register plugin hooks with converter
|
|
340
|
+
*/
|
|
341
|
+
registerHooks(plugin, _converter) {
|
|
342
|
+
if (!plugin.hooks) {
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
// TODO: Implement hook registration with converter
|
|
346
|
+
// This would integrate with the converter's event system
|
|
347
|
+
console.log(`Registering hooks for plugin '${plugin.name}'`);
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Unregister plugin hooks from converter
|
|
351
|
+
*/
|
|
352
|
+
unregisterHooks(plugin, _converter) {
|
|
353
|
+
if (!plugin.hooks) {
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
// TODO: Implement hook unregistration with converter
|
|
357
|
+
console.log(`Unregistering hooks for plugin '${plugin.name}'`);
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Parse dependency name from dependency string
|
|
361
|
+
*/
|
|
362
|
+
parseDependencyName(dependency) {
|
|
363
|
+
return dependency.split('@')[0];
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Parse dependency version from dependency string
|
|
367
|
+
*/
|
|
368
|
+
parseDependencyVersion(dependency) {
|
|
369
|
+
const parts = dependency.split('@');
|
|
370
|
+
return parts.length > 1 ? parts[1] : '*';
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Check if version is compatible with requirement
|
|
374
|
+
*/
|
|
375
|
+
isVersionCompatible(version, requirement) {
|
|
376
|
+
// Simple version compatibility check
|
|
377
|
+
// In a real implementation, use semver library
|
|
378
|
+
if (requirement === '*') {
|
|
379
|
+
return true;
|
|
380
|
+
}
|
|
381
|
+
return version === requirement;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
exports.PluginRegistry = PluginRegistry;
|
|
385
|
+
//# sourceMappingURL=PluginRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PluginRegistry.js","sourceRoot":"","sources":["../../src/plugins/PluginRegistry.ts"],"names":[],"mappings":";;;AASA;;GAEG;AACH,MAAa,WAAY,SAAQ,KAAK;IAGpC,YACE,OAAe,EACR,UAAmB;QAE1B,KAAK,CAAC,OAAO,CAAC,CAAC;QAFR,eAAU,GAAV,UAAU,CAAS;QAJ5B,SAAI,GAAG,cAAc,CAAC;QAOpB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAVD,kCAUC;AAYD;;GAEG;AACH,MAAa,cAAc;IAMzB,YAAY,UAAiC,EAAE;QALvC,YAAO,GAAwB,IAAI,GAAG,EAAE,CAAC;QACzC,qBAAgB,GAA8B,IAAI,GAAG,EAAE,CAAC;QACxD,oBAAe,GAA6B,IAAI,GAAG,EAAE,CAAC;QAI5D,IAAI,CAAC,OAAO,GAAG;YACb,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,IAAI;YACjB,kBAAkB,EAAE,EAAE;YACtB,eAAe,EAAE,KAAK;YACtB,GAAG,OAAO;SACX,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,MAAc;QACrB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,IAAI,WAAW,CAAC,yBAAyB,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,WAAW,CAAC,4BAA4B,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YAC5D,MAAM,IAAI,WAAW,CACnB,sCAAsC,EACtC,MAAM,CAAC,IAAI,CACZ,CAAC;QACJ,CAAC;QAED,uBAAuB;QACvB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YACnE,MAAM,IAAI,WAAW,CAAC,WAAW,MAAM,CAAC,IAAI,yBAAyB,CAAC,CAAC;QACzE,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAElC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY;QACrB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,4CAA4C;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACjD,MAAM,IAAI,WAAW,CACnB,6BAA6B,IAAI,0BAA0B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACnF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAElC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CACX,UAAkB,EAClB,SAAoB;QAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,WAAW,CAAC,WAAW,UAAU,aAAa,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC;YACH,6BAA6B;YAC7B,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1C,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,MAAM;oBACN,KAAK,EAAE,IAAI,WAAW,CAAC,WAAW,UAAU,wBAAwB,CAAC;iBACtE,CAAC;YACJ,CAAC;YAED,yCAAyC;YACzC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACpD,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YACjE,CAAC;YAED,wBAAwB;YACxB,MAAM,OAAO,GAAkB;gBAC7B,SAAS;gBACT,OAAO,EAAE,OAAO,EAAE,8BAA8B;gBAChD,WAAW,EAAG,OAAO,CAAC,GAAG,CAAC,QAAgB,IAAI,aAAa;gBAC3D,QAAQ,EAAE;oBACR,WAAW,EAAE,IAAI,IAAI,EAAE;oBACvB,QAAQ,EAAE,IAAI;iBACf;aACF,CAAC;YAEF,qBAAqB;YACrB,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAE9B,6BAA6B;YAC7B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACxC,CAAC;YAED,oBAAoB;YACpB,MAAM,MAAM,GAAiB;gBAC3B,MAAM;gBACN,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,IAAI;gBACZ,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;gBAC9C,WAAW,EAAE,IAAI,IAAI,EAAE;aACxB,CAAC;YAEF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAE9C,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM;aACP,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM;gBACN,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACjE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,UAAkB,EAAE,SAAoB;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,mBAAmB;YACnB,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;YAC3D,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACjD,MAAM,IAAI,WAAW,CACnB,4BAA4B,UAAU,0BAA0B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxF,CAAC;YACJ,CAAC;YAED,8BAA8B;YAC9B,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAkB;oBAC7B,SAAS;oBACT,OAAO,EAAE,OAAO;oBAChB,WAAW,EAAG,OAAO,CAAC,GAAG,CAAC,QAAgB,IAAI,aAAa;oBAC3D,QAAQ,EAAE;wBACR,aAAa,EAAE,IAAI,IAAI,EAAE;wBACzB,QAAQ,EAAE,IAAI;qBACf;iBACF,CAAC;gBAEF,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACzC,CAAC;YAED,mBAAmB;YACnB,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACxB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACjD,CAAC;YAED,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,UAAU,IAAI,EAAE,KAAK,CAAC,CAAC;YACnE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,OAAiB;QACnC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAgB,IAAI,GAAG,EAAE,CAAC;QACxC,MAAM,OAAO,GAAgB,IAAI,GAAG,EAAE,CAAC;QAEvC,MAAM,KAAK,GAAG,CAAC,UAAkB,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE;YAC9C,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;gBAC5C,MAAM,IAAI,WAAW,CACnB,yCAAyC,UAAU,GAAG,CACvD,CAAC;YACJ,CAAC;YAED,IAAI,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,WAAW,CACnB,kDAAkD,UAAU,GAAG,CAChE,CAAC;YACJ,CAAC;YAED,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5B,OAAO;YACT,CAAC;YAED,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,WAAW,CAAC,WAAW,UAAU,aAAa,CAAC,CAAC;YAC5D,CAAC;YAED,2BAA2B;YAC3B,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACxB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;oBACtC,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;oBAC9C,KAAK,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;YAED,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC,CAAC;QAEF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,KAAK,CAAC,MAAM,CAAC,CAAC;QAChB,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,MAAc;QACzC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAE9C,IAAI,OAAO,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5B,MAAM,IAAI,WAAW,CACnB,WAAW,MAAM,CAAC,IAAI,2BAA2B,CAClD,CAAC;YACJ,CAAC;YAED,oDAAoD;YACpD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtD,MAAM,IAAI,WAAW,CACnB,WAAW,MAAM,CAAC,IAAI,qCAAqC,OAAO,GAAG,CACtE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,MAAc;QACzC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,UAAkB;QACtC,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1D,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBACzB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,UAAkB;QAC/C,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAClD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CACvB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAC/B,YAAsB,EACtB,SAAoB;QAEpB,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAEpD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,MAAM,IAAI,WAAW,CACnB,iCAAiC,OAAO,MAAM,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,CACtE,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,MAAc;QACxC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;YACjD,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAE/C,OAAO;gBACL,IAAI;gBACJ,OAAO;gBACP,QAAQ,EAAE,IAAI;gBACd,SAAS,EAAE,CAAC,CAAC,eAAe;gBAC5B,UAAU,EAAE,eAAe;oBACzB,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC;oBAC5D,CAAC,CAAC,KAAK;aACV,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,MAAc,EAAE,UAAqB;QACzD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,mDAAmD;QACnD,yDAAyD;QACzD,OAAO,CAAC,GAAG,CAAC,iCAAiC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,MAAc,EAAE,UAAqB;QAC3D,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,qDAAqD;QACrD,OAAO,CAAC,GAAG,CAAC,mCAAmC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,UAAkB;QAC5C,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;IACnC,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,UAAkB;QAC/C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5C,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,OAAe,EAAE,WAAmB;QAC9D,qCAAqC;QACrC,+CAA+C;QAC/C,IAAI,WAAW,KAAK,GAAG,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,OAAO,KAAK,WAAW,CAAC;IACjC,CAAC;CACF;AAvcD,wCAucC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { Plugin, PluginContext } from '../Plugin';
|
|
2
|
+
/**
|
|
3
|
+
* Audit log entry
|
|
4
|
+
*/
|
|
5
|
+
export interface AuditLogEntry {
|
|
6
|
+
timestamp: string;
|
|
7
|
+
event: string;
|
|
8
|
+
plugin?: string;
|
|
9
|
+
converter: string;
|
|
10
|
+
metadata: Record<string, any>;
|
|
11
|
+
duration?: number;
|
|
12
|
+
success: boolean;
|
|
13
|
+
error?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Options for the audit plugin
|
|
17
|
+
*/
|
|
18
|
+
export interface AuditPluginOptions {
|
|
19
|
+
logFile?: string;
|
|
20
|
+
logLevel?: 'minimal' | 'detailed' | 'verbose';
|
|
21
|
+
includeData?: boolean;
|
|
22
|
+
maxLogSize?: number;
|
|
23
|
+
rotateDaily?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Plugin that logs conversion activities for auditing
|
|
27
|
+
*/
|
|
28
|
+
export declare class AuditPlugin implements Plugin {
|
|
29
|
+
name: string;
|
|
30
|
+
version: string;
|
|
31
|
+
description: string;
|
|
32
|
+
author: string;
|
|
33
|
+
options: Required<AuditPluginOptions>;
|
|
34
|
+
private startTime;
|
|
35
|
+
private logEntries;
|
|
36
|
+
constructor(options?: AuditPluginOptions);
|
|
37
|
+
install(context: PluginContext): Promise<void>;
|
|
38
|
+
hooks: {
|
|
39
|
+
beforeParse: (content: string, format: string, context: PluginContext) => Promise<string>;
|
|
40
|
+
afterParse: (data: any, context: PluginContext) => Promise<any>;
|
|
41
|
+
beforeMap: (source: any, context: PluginContext) => Promise<any>;
|
|
42
|
+
afterMap: (target: any, context: PluginContext) => Promise<any>;
|
|
43
|
+
beforeValidate: (data: any, context: PluginContext) => Promise<any>;
|
|
44
|
+
afterValidate: (_data: any, errors: any[], context: PluginContext) => Promise<void>;
|
|
45
|
+
afterSerialize: (content: string, format: string, context: PluginContext) => Promise<string>;
|
|
46
|
+
onError: (error: Error, context: PluginContext) => Promise<void>;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Log an event
|
|
50
|
+
*/
|
|
51
|
+
private logEvent;
|
|
52
|
+
/**
|
|
53
|
+
* Flush accumulated logs to file
|
|
54
|
+
*/
|
|
55
|
+
private flushLogs;
|
|
56
|
+
/**
|
|
57
|
+
* Format log entry for file output
|
|
58
|
+
*/
|
|
59
|
+
private formatLogEntry;
|
|
60
|
+
/**
|
|
61
|
+
* Get log file name with rotation if enabled
|
|
62
|
+
*/
|
|
63
|
+
private getLogFileName;
|
|
64
|
+
/**
|
|
65
|
+
* Check if log should be rotated
|
|
66
|
+
*/
|
|
67
|
+
private shouldRotateLog;
|
|
68
|
+
/**
|
|
69
|
+
* Rotate log file
|
|
70
|
+
*/
|
|
71
|
+
private rotateLog;
|
|
72
|
+
/**
|
|
73
|
+
* Count fields in an object recursively
|
|
74
|
+
*/
|
|
75
|
+
private countFields;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Factory function to create audit plugin
|
|
79
|
+
*/
|
|
80
|
+
export declare function createAuditPlugin(options?: AuditPluginOptions): AuditPlugin;
|
|
81
|
+
//# sourceMappingURL=AuditPlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuditPlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/built-in/AuditPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAIlD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC9C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,WAAY,YAAW,MAAM;IACxC,IAAI,SAAkB;IACtB,OAAO,SAAW;IAClB,WAAW,SAA2D;IACtE,MAAM,SAAsB;IAE5B,OAAO,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IACtC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,UAAU,CAAuB;gBAE7B,OAAO,GAAE,kBAAuB;IAWtC,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBpD,KAAK;+BAEQ,MAAM,UACP,MAAM,WACL,aAAa;2BAaC,GAAG,WAAW,aAAa;4BAS1B,GAAG,WAAW,aAAa;2BAQ5B,GAAG,WAAW,aAAa;+BASvB,GAAG,WAAW,aAAa;+BAS/C,GAAG,UACF,GAAG,EAAE,WACJ,aAAa;kCAUb,MAAM,UACP,MAAM,WACL,aAAa;yBAsBD,KAAK,WAAW,aAAa;MAkBpD;IAEF;;OAEG;IACH,OAAO,CAAC,QAAQ;IAmChB;;OAEG;YACW,SAAS;IAyBvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;YACW,SAAS;IAavB;;OAEG;IACH,OAAO,CAAC,WAAW;CAiBpB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,WAAW,CAE3E"}
|