@dcyfr/ai 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +91 -0
  2. package/LICENSE +21 -0
  3. package/README.md +210 -0
  4. package/bin/cli.js +249 -0
  5. package/bin/dcyfr-ai.js +376 -0
  6. package/config/default.json +123 -0
  7. package/config/default.yaml +161 -0
  8. package/config/minimal.yaml +16 -0
  9. package/dist/ai/config/loader.d.ts +91 -0
  10. package/dist/ai/config/loader.d.ts.map +1 -0
  11. package/dist/ai/config/loader.js +259 -0
  12. package/dist/ai/config/loader.js.map +1 -0
  13. package/dist/ai/config/schema.d.ts +854 -0
  14. package/dist/ai/config/schema.d.ts.map +1 -0
  15. package/dist/ai/config/schema.js +260 -0
  16. package/dist/ai/config/schema.js.map +1 -0
  17. package/dist/ai/core/provider-registry.d.ts +115 -0
  18. package/dist/ai/core/provider-registry.d.ts.map +1 -0
  19. package/dist/ai/core/provider-registry.js +360 -0
  20. package/dist/ai/core/provider-registry.js.map +1 -0
  21. package/dist/ai/core/telemetry-engine.d.ts +114 -0
  22. package/dist/ai/core/telemetry-engine.d.ts.map +1 -0
  23. package/dist/ai/core/telemetry-engine.js +390 -0
  24. package/dist/ai/core/telemetry-engine.js.map +1 -0
  25. package/dist/ai/index.d.ts +17 -0
  26. package/dist/ai/index.d.ts.map +1 -0
  27. package/dist/ai/index.js +21 -0
  28. package/dist/ai/index.js.map +1 -0
  29. package/dist/ai/plugins/plugin-loader.d.ts +132 -0
  30. package/dist/ai/plugins/plugin-loader.d.ts.map +1 -0
  31. package/dist/ai/plugins/plugin-loader.js +316 -0
  32. package/dist/ai/plugins/plugin-loader.js.map +1 -0
  33. package/dist/ai/types/index.d.ts +179 -0
  34. package/dist/ai/types/index.d.ts.map +1 -0
  35. package/dist/ai/types/index.js +11 -0
  36. package/dist/ai/types/index.js.map +1 -0
  37. package/dist/ai/types/telemetry.d.ts +117 -0
  38. package/dist/ai/types/telemetry.d.ts.map +1 -0
  39. package/dist/ai/types/telemetry.js +6 -0
  40. package/dist/ai/types/telemetry.js.map +1 -0
  41. package/dist/ai/utils/storage.d.ts +37 -0
  42. package/dist/ai/utils/storage.d.ts.map +1 -0
  43. package/dist/ai/utils/storage.js +129 -0
  44. package/dist/ai/utils/storage.js.map +1 -0
  45. package/dist/ai/validation/validation-framework.d.ts +112 -0
  46. package/dist/ai/validation/validation-framework.d.ts.map +1 -0
  47. package/dist/ai/validation/validation-framework.js +221 -0
  48. package/dist/ai/validation/validation-framework.js.map +1 -0
  49. package/package.json +67 -0
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Configuration Loader - Three-layer config merge system
3
+ *
4
+ * Loads and merges configuration from multiple sources:
5
+ * 1. Framework defaults (from schema.ts)
6
+ * 2. Project config (.dcyfr.yaml, .dcyfr.json, package.json)
7
+ * 3. User overrides (environment variables, CLI flags)
8
+ */
9
+ import { type FrameworkConfig } from './schema.js';
10
+ /**
11
+ * Configuration loader options
12
+ */
13
+ export interface LoaderOptions {
14
+ /**
15
+ * Project root directory (default: process.cwd())
16
+ */
17
+ projectRoot?: string;
18
+ /**
19
+ * Override configuration file path
20
+ */
21
+ configFile?: string;
22
+ /**
23
+ * Enable environment variable overrides
24
+ */
25
+ enableEnvOverrides?: boolean;
26
+ /**
27
+ * Enable package.json config section
28
+ */
29
+ enablePackageJson?: boolean;
30
+ /**
31
+ * Validation mode
32
+ */
33
+ validate?: boolean;
34
+ }
35
+ /**
36
+ * Configuration loader with three-layer merge
37
+ */
38
+ export declare class ConfigLoader {
39
+ private projectRoot;
40
+ private options;
41
+ constructor(options?: LoaderOptions);
42
+ /**
43
+ * Load complete configuration with three-layer merge
44
+ */
45
+ load(): Promise<FrameworkConfig>;
46
+ /**
47
+ * Load project configuration from files
48
+ */
49
+ private loadProjectConfig;
50
+ /**
51
+ * Load configuration from a specific file
52
+ */
53
+ private loadConfigFile;
54
+ /**
55
+ * Load configuration from package.json
56
+ */
57
+ private loadPackageJsonConfig;
58
+ /**
59
+ * Load user overrides from environment variables
60
+ */
61
+ private loadUserOverrides;
62
+ /**
63
+ * Parse environment variable value to appropriate type
64
+ */
65
+ private parseEnvValue;
66
+ /**
67
+ * Set nested object value using dot notation
68
+ */
69
+ private setNestedValue;
70
+ /**
71
+ * Deep merge multiple objects
72
+ */
73
+ private deepMerge;
74
+ /**
75
+ * Check if value is a plain object
76
+ */
77
+ private isPlainObject;
78
+ /**
79
+ * Validate configuration against schema
80
+ */
81
+ validate(config: unknown): FrameworkConfig;
82
+ /**
83
+ * Get configuration file path (if exists)
84
+ */
85
+ getConfigFilePath(): Promise<string | null>;
86
+ }
87
+ /**
88
+ * Convenience function to load configuration
89
+ */
90
+ export declare function loadConfig(options?: LoaderOptions): Promise<FrameworkConfig>;
91
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../packages/ai/config/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EAAyC,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAmB1F;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAgB;gBAEnB,OAAO,GAAE,aAAkB;IAUvC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC;IAqBtC;;OAEG;YACW,iBAAiB;IAgC/B;;OAEG;YACW,cAAc;IAkB5B;;OAEG;YACW,qBAAqB;IAuBnC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsBzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAwBrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB;;OAEG;IACH,OAAO,CAAC,SAAS;IAqBjB;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,eAAe;IAU1C;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAelD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAGlF"}
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Configuration Loader - Three-layer config merge system
3
+ *
4
+ * Loads and merges configuration from multiple sources:
5
+ * 1. Framework defaults (from schema.ts)
6
+ * 2. Project config (.dcyfr.yaml, .dcyfr.json, package.json)
7
+ * 3. User overrides (environment variables, CLI flags)
8
+ */
9
+ import { readFile } from 'fs/promises';
10
+ import { existsSync } from 'fs';
11
+ import { parse as parseYaml } from 'yaml';
12
+ import { join } from 'path';
13
+ import { FrameworkConfigSchema, DEFAULT_CONFIG } from './schema.js';
14
+ /**
15
+ * Configuration file names to search for (in priority order)
16
+ */
17
+ const CONFIG_FILES = [
18
+ '.dcyfr.yaml',
19
+ '.dcyfr.yml',
20
+ '.dcyfr.json',
21
+ 'dcyfr.config.json',
22
+ 'dcyfr.config.yaml',
23
+ 'dcyfr.config.yml',
24
+ ];
25
+ /**
26
+ * Environment variable prefix
27
+ */
28
+ const ENV_PREFIX = 'DCYFR_';
29
+ /**
30
+ * Configuration loader with three-layer merge
31
+ */
32
+ export class ConfigLoader {
33
+ projectRoot;
34
+ options;
35
+ constructor(options = {}) {
36
+ this.projectRoot = options.projectRoot || process.cwd();
37
+ this.options = {
38
+ enableEnvOverrides: true,
39
+ enablePackageJson: true,
40
+ validate: true,
41
+ ...options,
42
+ };
43
+ }
44
+ /**
45
+ * Load complete configuration with three-layer merge
46
+ */
47
+ async load() {
48
+ // Layer 1: Framework defaults
49
+ const defaults = { ...DEFAULT_CONFIG };
50
+ // Layer 2: Project configuration
51
+ const projectConfig = await this.loadProjectConfig();
52
+ // Layer 3: User overrides
53
+ const userOverrides = this.loadUserOverrides();
54
+ // Merge all layers (deep merge)
55
+ const merged = this.deepMerge(defaults, projectConfig, userOverrides);
56
+ // Validate final configuration
57
+ if (this.options.validate) {
58
+ return this.validate(merged);
59
+ }
60
+ return merged;
61
+ }
62
+ /**
63
+ * Load project configuration from files
64
+ */
65
+ async loadProjectConfig() {
66
+ // Try custom config file first
67
+ if (this.options.configFile) {
68
+ const customPath = join(this.projectRoot, this.options.configFile);
69
+ if (existsSync(customPath)) {
70
+ return await this.loadConfigFile(customPath);
71
+ }
72
+ throw new Error(`Config file not found: ${this.options.configFile}`);
73
+ }
74
+ // Search for config files in priority order
75
+ for (const filename of CONFIG_FILES) {
76
+ const filepath = join(this.projectRoot, filename);
77
+ if (existsSync(filepath)) {
78
+ console.log(`📝 Loading config from ${filename}`);
79
+ return await this.loadConfigFile(filepath);
80
+ }
81
+ }
82
+ // Try package.json
83
+ if (this.options.enablePackageJson) {
84
+ const pkgConfig = await this.loadPackageJsonConfig();
85
+ if (pkgConfig) {
86
+ return pkgConfig;
87
+ }
88
+ }
89
+ // No project config found, use defaults
90
+ console.log('ℹ️ No config file found, using defaults');
91
+ return {};
92
+ }
93
+ /**
94
+ * Load configuration from a specific file
95
+ */
96
+ async loadConfigFile(filepath) {
97
+ try {
98
+ const content = await readFile(filepath, 'utf-8');
99
+ if (filepath.endsWith('.json')) {
100
+ return JSON.parse(content);
101
+ }
102
+ if (filepath.endsWith('.yaml') || filepath.endsWith('.yml')) {
103
+ return parseYaml(content);
104
+ }
105
+ throw new Error(`Unsupported config file format: ${filepath}`);
106
+ }
107
+ catch (error) {
108
+ throw new Error(`Failed to load config file ${filepath}: ${error}`);
109
+ }
110
+ }
111
+ /**
112
+ * Load configuration from package.json
113
+ */
114
+ async loadPackageJsonConfig() {
115
+ const pkgPath = join(this.projectRoot, 'package.json');
116
+ if (!existsSync(pkgPath)) {
117
+ return null;
118
+ }
119
+ try {
120
+ const content = await readFile(pkgPath, 'utf-8');
121
+ const pkg = JSON.parse(content);
122
+ if (pkg.dcyfr) {
123
+ console.log('📦 Loading config from package.json');
124
+ return pkg.dcyfr;
125
+ }
126
+ return null;
127
+ }
128
+ catch (error) {
129
+ console.warn(`⚠️ Failed to load package.json: ${error}`);
130
+ return null;
131
+ }
132
+ }
133
+ /**
134
+ * Load user overrides from environment variables
135
+ */
136
+ loadUserOverrides() {
137
+ if (!this.options.enableEnvOverrides) {
138
+ return {};
139
+ }
140
+ const overrides = {};
141
+ // Parse environment variables with DCYFR_ prefix
142
+ for (const [key, value] of Object.entries(process.env)) {
143
+ if (key.startsWith(ENV_PREFIX)) {
144
+ const configKey = key
145
+ .substring(ENV_PREFIX.length)
146
+ .toLowerCase()
147
+ .replace(/_/g, '.');
148
+ this.setNestedValue(overrides, configKey, this.parseEnvValue(value));
149
+ }
150
+ }
151
+ return overrides;
152
+ }
153
+ /**
154
+ * Parse environment variable value to appropriate type
155
+ */
156
+ parseEnvValue(value) {
157
+ if (!value)
158
+ return undefined;
159
+ // Boolean
160
+ if (value === 'true')
161
+ return true;
162
+ if (value === 'false')
163
+ return false;
164
+ // Number
165
+ if (/^\d+(\.\d+)?$/.test(value)) {
166
+ return parseFloat(value);
167
+ }
168
+ // JSON
169
+ if (value.startsWith('{') || value.startsWith('[')) {
170
+ try {
171
+ return JSON.parse(value);
172
+ }
173
+ catch {
174
+ return value;
175
+ }
176
+ }
177
+ return value;
178
+ }
179
+ /**
180
+ * Set nested object value using dot notation
181
+ */
182
+ setNestedValue(obj, path, value) {
183
+ const keys = path.split('.');
184
+ let current = obj;
185
+ for (let i = 0; i < keys.length - 1; i++) {
186
+ const key = keys[i];
187
+ if (!(key in current)) {
188
+ current[key] = {};
189
+ }
190
+ current = current[key];
191
+ }
192
+ current[keys[keys.length - 1]] = value;
193
+ }
194
+ /**
195
+ * Deep merge multiple objects
196
+ */
197
+ deepMerge(...objects) {
198
+ const result = {};
199
+ for (const obj of objects) {
200
+ for (const [key, value] of Object.entries(obj)) {
201
+ if (value === undefined)
202
+ continue;
203
+ if (this.isPlainObject(value) && this.isPlainObject(result[key])) {
204
+ result[key] = this.deepMerge(result[key], value);
205
+ }
206
+ else {
207
+ result[key] = value;
208
+ }
209
+ }
210
+ }
211
+ return result;
212
+ }
213
+ /**
214
+ * Check if value is a plain object
215
+ */
216
+ isPlainObject(value) {
217
+ return (typeof value === 'object' &&
218
+ value !== null &&
219
+ !Array.isArray(value) &&
220
+ Object.getPrototypeOf(value) === Object.prototype);
221
+ }
222
+ /**
223
+ * Validate configuration against schema
224
+ */
225
+ validate(config) {
226
+ try {
227
+ return FrameworkConfigSchema.parse(config);
228
+ }
229
+ catch (error) {
230
+ console.error('❌ Configuration validation failed:');
231
+ console.error(error);
232
+ throw new Error('Invalid configuration');
233
+ }
234
+ }
235
+ /**
236
+ * Get configuration file path (if exists)
237
+ */
238
+ async getConfigFilePath() {
239
+ if (this.options.configFile) {
240
+ const customPath = join(this.projectRoot, this.options.configFile);
241
+ return existsSync(customPath) ? customPath : null;
242
+ }
243
+ for (const filename of CONFIG_FILES) {
244
+ const filepath = join(this.projectRoot, filename);
245
+ if (existsSync(filepath)) {
246
+ return filepath;
247
+ }
248
+ }
249
+ return null;
250
+ }
251
+ }
252
+ /**
253
+ * Convenience function to load configuration
254
+ */
255
+ export async function loadConfig(options) {
256
+ const loader = new ConfigLoader(options);
257
+ return await loader.load();
258
+ }
259
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../packages/ai/config/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAwB,MAAM,aAAa,CAAC;AAE1F;;GAEG;AACH,MAAM,YAAY,GAAG;IACnB,aAAa;IACb,YAAY;IACZ,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,kBAAkB;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,GAAG,QAAQ,CAAC;AAgC5B;;GAEG;AACH,MAAM,OAAO,YAAY;IACf,WAAW,CAAS;IACpB,OAAO,CAAgB;IAE/B,YAAY,UAAyB,EAAE;QACrC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACxD,IAAI,CAAC,OAAO,GAAG;YACb,kBAAkB,EAAE,IAAI;YACxB,iBAAiB,EAAE,IAAI;YACvB,QAAQ,EAAE,IAAI;YACd,GAAG,OAAO;SACX,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,8BAA8B;QAC9B,MAAM,QAAQ,GAAG,EAAE,GAAG,cAAc,EAAE,CAAC;QAEvC,iCAAiC;QACjC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAErD,0BAA0B;QAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/C,gCAAgC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;QAEtE,+BAA+B;QAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB;QAC7B,+BAA+B;QAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACnE,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3B,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC/C,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,4CAA4C;QAC5C,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAClD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;gBAClD,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACrD,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,QAAgB;QAC3C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAElD,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;YAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5D,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,qBAAqB;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAEvD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEhC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;gBACnD,OAAO,GAAG,CAAC,KAAK,CAAC;YACnB,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,oCAAoC,KAAK,EAAE,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;YACrC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,SAAS,GAA4B,EAAE,CAAC;QAE9C,iDAAiD;QACjD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvD,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/B,MAAM,SAAS,GAAG,GAAG;qBAClB,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC;qBAC5B,WAAW,EAAE;qBACb,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAEtB,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QAED,OAAO,SAAqC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,KAAyB;QAC7C,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAE7B,UAAU;QACV,IAAI,KAAK,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QAClC,IAAI,KAAK,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC;QAEpC,SAAS;QACT,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QAED,OAAO;QACP,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,GAA4B,EAAE,IAAY,EAAE,KAAc;QAC/E,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,OAAO,GAAG,GAAG,CAAC;QAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACpB,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,GAAG,CAA4B,CAAC;QACpD,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IACzC,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,GAAG,OAAwC;QAC3D,MAAM,MAAM,GAA4B,EAAE,CAAC;QAE3C,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/C,IAAI,KAAK,KAAK,SAAS;oBAAE,SAAS;gBAElC,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBACjE,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAC1B,MAAM,CAAC,GAAG,CAA6B,EACvC,KAAiC,CAClC,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAyB,CAAC;IACnC,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,KAAc;QAClC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACrB,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,SAAS,CAClD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,MAAe;QACtB,IAAI,CAAC;YACH,OAAO,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACpD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB;QACrB,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACnE,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QACpD,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAClD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzB,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAuB;IACtD,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;AAC7B,CAAC"}