driftdetect-lsp 0.9.31 → 0.9.33

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 (60) hide show
  1. package/dist/capabilities.d.ts.map +1 -0
  2. package/dist/capabilities.js +183 -0
  3. package/dist/capabilities.js.map +1 -0
  4. package/dist/commands/show-patterns.d.ts +30 -0
  5. package/dist/commands/show-patterns.d.ts.map +1 -1
  6. package/dist/commands/show-patterns.js +175 -0
  7. package/dist/commands/show-patterns.js.map +1 -0
  8. package/dist/handlers/code-actions.d.ts +32 -0
  9. package/dist/handlers/code-actions.d.ts.map +1 -1
  10. package/dist/handlers/code-actions.js +184 -0
  11. package/dist/handlers/code-actions.js.map +1 -0
  12. package/dist/handlers/code-lens.d.ts +32 -0
  13. package/dist/handlers/code-lens.d.ts.map +1 -1
  14. package/dist/handlers/code-lens.js +162 -0
  15. package/dist/handlers/code-lens.js.map +1 -0
  16. package/dist/handlers/commands.d.ts +48 -0
  17. package/dist/handlers/commands.d.ts.map +1 -1
  18. package/dist/handlers/commands.js +360 -0
  19. package/dist/handlers/commands.js.map +1 -0
  20. package/dist/handlers/diagnostics.d.ts +73 -0
  21. package/dist/handlers/diagnostics.d.ts.map +1 -1
  22. package/dist/handlers/diagnostics.js +259 -0
  23. package/dist/handlers/diagnostics.js.map +1 -0
  24. package/dist/handlers/document-sync.d.ts +37 -0
  25. package/dist/handlers/document-sync.d.ts.map +1 -1
  26. package/dist/handlers/document-sync.js +49 -0
  27. package/dist/handlers/document-sync.js.map +1 -0
  28. package/dist/handlers/hover.d.ts +30 -0
  29. package/dist/handlers/hover.d.ts.map +1 -1
  30. package/dist/handlers/hover.js +119 -0
  31. package/dist/handlers/hover.js.map +1 -0
  32. package/dist/integration/core-scanner.d.ts.map +1 -1
  33. package/dist/integration/core-scanner.js +309 -0
  34. package/dist/integration/core-scanner.js.map +1 -0
  35. package/dist/integration/pattern-store-adapter.d.ts +117 -0
  36. package/dist/integration/pattern-store-adapter.d.ts.map +1 -1
  37. package/dist/integration/pattern-store-adapter.js +349 -0
  38. package/dist/integration/pattern-store-adapter.js.map +1 -0
  39. package/dist/integration/types.d.ts +134 -0
  40. package/dist/integration/types.d.ts.map +1 -1
  41. package/dist/integration/types.js +39 -0
  42. package/dist/integration/types.js.map +1 -0
  43. package/dist/server/types.d.ts +139 -0
  44. package/dist/server/types.d.ts.map +1 -1
  45. package/dist/server/types.js +8 -0
  46. package/dist/server/types.js.map +1 -0
  47. package/dist/server.d.ts.map +1 -1
  48. package/dist/server.js +208 -0
  49. package/dist/server.js.map +1 -0
  50. package/dist/utils/diagnostic.js +263 -0
  51. package/dist/utils/diagnostic.js.map +1 -0
  52. package/dist/utils/document.d.ts +40 -0
  53. package/dist/utils/document.d.ts.map +1 -0
  54. package/dist/utils/document.js +138 -0
  55. package/dist/utils/document.js.map +1 -0
  56. package/dist/utils/index.d.ts.map +1 -0
  57. package/dist/utils/workspace.d.ts.map +1 -1
  58. package/dist/utils/workspace.js +241 -0
  59. package/dist/utils/workspace.js.map +1 -0
  60. package/package.json +1 -1
@@ -0,0 +1,309 @@
1
+ /**
2
+ * Core Scanner Integration
3
+ *
4
+ * Connects the LSP diagnostics handler to driftdetect-core scanner
5
+ * and driftdetect-detectors for pattern detection and violation generation.
6
+ *
7
+ * @requirements 27.3 - THE LSP_Server SHALL publish diagnostics for violations
8
+ * @requirements 27.7 - THE LSP_Server SHALL respond to diagnostics within 200ms of file change
9
+ */
10
+ import { PatternStore, Evaluator, ParserManager, TypeScriptParser, PythonParser, CSSParser, JSONParser, MarkdownParser, } from 'driftdetect-core';
11
+ import { URI } from 'vscode-uri';
12
+ import { DEFAULT_CORE_INTEGRATION_CONFIG } from './types.js';
13
+ /**
14
+ * Core Scanner - Integrates driftdetect-core with LSP diagnostics
15
+ *
16
+ * This class bridges the LSP server with the core drift detection engine.
17
+ * It manages the pattern store, parser manager, evaluator, and detector registry
18
+ * to scan documents and generate violations.
19
+ */
20
+ export class CoreScanner {
21
+ config;
22
+ logger;
23
+ patternStore = null;
24
+ parserManager = null;
25
+ evaluator = null;
26
+ initialized = false;
27
+ scanCache = new Map();
28
+ cacheTimeout = 5000; // 5 seconds cache
29
+ constructor(config = {}, logger) {
30
+ this.config = { ...DEFAULT_CORE_INTEGRATION_CONFIG, ...config };
31
+ this.logger = logger;
32
+ }
33
+ /**
34
+ * Initialize the core scanner
35
+ *
36
+ * Sets up the pattern store, parser manager, evaluator, and detector registry.
37
+ */
38
+ async initialize() {
39
+ if (this.initialized) {
40
+ return;
41
+ }
42
+ this.logger.info('Initializing core scanner...');
43
+ try {
44
+ // Initialize pattern store
45
+ const storeConfig = {
46
+ rootDir: this.config.rootDir,
47
+ validateSchema: this.config.validateSchema,
48
+ trackHistory: this.config.trackHistory,
49
+ autoSave: this.config.autoSave,
50
+ };
51
+ this.patternStore = new PatternStore(storeConfig);
52
+ await this.patternStore.initialize();
53
+ this.logger.info('Pattern store initialized');
54
+ // Initialize parser manager with language parsers
55
+ this.parserManager = new ParserManager();
56
+ this.parserManager.registerParser(new TypeScriptParser());
57
+ this.parserManager.registerParser(new PythonParser());
58
+ this.parserManager.registerParser(new CSSParser());
59
+ this.parserManager.registerParser(new JSONParser());
60
+ this.parserManager.registerParser(new MarkdownParser());
61
+ this.logger.info('Parser manager initialized');
62
+ // Initialize evaluator
63
+ const evaluatorConfig = {
64
+ aiExplainAvailable: this.config.aiEnabled,
65
+ aiFixAvailable: this.config.aiEnabled,
66
+ minConfidence: this.config.minConfidence,
67
+ projectRoot: this.config.rootDir,
68
+ };
69
+ this.evaluator = new Evaluator(evaluatorConfig);
70
+ this.logger.info('Evaluator initialized');
71
+ this.initialized = true;
72
+ this.logger.info('Core scanner initialization complete');
73
+ }
74
+ catch (error) {
75
+ this.logger.error(`Failed to initialize core scanner: ${error}`);
76
+ throw error;
77
+ }
78
+ }
79
+ /**
80
+ * Check if the scanner is initialized
81
+ */
82
+ isInitialized() {
83
+ return this.initialized;
84
+ }
85
+ /**
86
+ * Get the pattern store instance
87
+ */
88
+ getPatternStore() {
89
+ return this.patternStore;
90
+ }
91
+ /**
92
+ * Scan a document for violations
93
+ *
94
+ * @requirements 27.3 - Publish diagnostics for violations
95
+ * @requirements 27.7 - Respond within 200ms
96
+ */
97
+ async scan(uri, content, options = {}) {
98
+ const startTime = Date.now();
99
+ const errors = [];
100
+ const violations = [];
101
+ let patterns = [];
102
+ // Check cache unless force rescan
103
+ if (!options.force) {
104
+ const cached = this.scanCache.get(uri);
105
+ if (cached && Date.now() - cached.timestamp < this.cacheTimeout) {
106
+ this.logger.debug(`Using cached scan result for ${uri}`);
107
+ return {
108
+ uri,
109
+ violations: cached.violations,
110
+ patterns: [],
111
+ duration: Date.now() - startTime,
112
+ errors: [],
113
+ };
114
+ }
115
+ }
116
+ if (!this.initialized) {
117
+ errors.push({
118
+ message: 'Core scanner not initialized',
119
+ code: 'NOT_INITIALIZED',
120
+ recoverable: false,
121
+ });
122
+ return { uri, violations, patterns, duration: Date.now() - startTime, errors };
123
+ }
124
+ try {
125
+ // Parse the document
126
+ const filePath = this.uriToPath(uri);
127
+ const language = this.getLanguageFromUri(uri);
128
+ this.logger.debug(`Scanning ${filePath} (${language})`);
129
+ // Get AST if parser is available
130
+ let ast = null;
131
+ if (this.parserManager && language) {
132
+ try {
133
+ const parseResult = this.parserManager.parse(content, language);
134
+ if (parseResult.success && parseResult.ast) {
135
+ ast = parseResult.ast;
136
+ }
137
+ }
138
+ catch (parseError) {
139
+ this.logger.warn(`Parse error for ${uri}: ${parseError}`);
140
+ errors.push({
141
+ message: `Parse error: ${parseError}`,
142
+ code: 'PARSE_ERROR',
143
+ recoverable: true,
144
+ });
145
+ }
146
+ }
147
+ // Get approved patterns to evaluate against
148
+ const approvedPatterns = this.patternStore?.getApproved() ?? [];
149
+ // Filter patterns by options
150
+ let patternsToEvaluate = approvedPatterns;
151
+ if (options.categories && options.categories.length > 0) {
152
+ patternsToEvaluate = patternsToEvaluate.filter((p) => options.categories.includes(p.category));
153
+ }
154
+ if (options.patternIds && options.patternIds.length > 0) {
155
+ patternsToEvaluate = patternsToEvaluate.filter((p) => options.patternIds.includes(p.id));
156
+ }
157
+ // Evaluate patterns against the document
158
+ if (this.evaluator && patternsToEvaluate.length > 0) {
159
+ const evaluationInput = {
160
+ file: filePath,
161
+ content,
162
+ ast,
163
+ language: language || 'unknown',
164
+ };
165
+ const results = this.evaluator.evaluateAll(evaluationInput, patternsToEvaluate);
166
+ // Convert evaluation results to ViolationInfo
167
+ for (const result of results) {
168
+ for (const violation of result.violations) {
169
+ // Apply minimum confidence filter
170
+ const minConf = options.minConfidence ?? this.config.minConfidence;
171
+ const pattern = patternsToEvaluate.find((p) => p.id === violation.patternId);
172
+ if (pattern && pattern.confidence.score >= minConf) {
173
+ violations.push(this.violationToInfo(violation, uri));
174
+ }
175
+ }
176
+ }
177
+ }
178
+ // Pattern discovery would be handled by detectors
179
+ // For now, we just return the violations from approved patterns
180
+ patterns = [];
181
+ // Cache the result
182
+ this.scanCache.set(uri, { violations, timestamp: Date.now() });
183
+ const duration = Date.now() - startTime;
184
+ this.logger.debug(`Scan complete for ${uri}: ${violations.length} violations in ${duration}ms`);
185
+ // Warn if we exceeded the 200ms target
186
+ if (duration > 200) {
187
+ this.logger.warn(`Scan latency exceeded 200ms target: ${duration}ms for ${uri}`);
188
+ }
189
+ return { uri, violations, patterns, duration, errors };
190
+ }
191
+ catch (error) {
192
+ const errorMessage = error instanceof Error ? error.message : String(error);
193
+ this.logger.error(`Scan error for ${uri}: ${errorMessage}`);
194
+ errors.push({
195
+ message: errorMessage,
196
+ code: 'SCAN_ERROR',
197
+ recoverable: true,
198
+ });
199
+ return { uri, violations, patterns, duration: Date.now() - startTime, errors };
200
+ }
201
+ }
202
+ /**
203
+ * Invalidate cache for a document
204
+ */
205
+ invalidateCache(uri) {
206
+ this.scanCache.delete(uri);
207
+ }
208
+ /**
209
+ * Clear all cached scan results
210
+ */
211
+ clearCache() {
212
+ this.scanCache.clear();
213
+ }
214
+ /**
215
+ * Convert a driftdetect-core Violation to ViolationInfo
216
+ */
217
+ violationToInfo(violation, uri) {
218
+ return {
219
+ id: violation.id,
220
+ patternId: violation.patternId,
221
+ message: violation.message,
222
+ severity: violation.severity,
223
+ file: uri,
224
+ range: violation.range,
225
+ expected: violation.expected,
226
+ actual: violation.actual,
227
+ explanation: violation.explanation,
228
+ quickFix: violation.quickFix
229
+ ? {
230
+ title: violation.quickFix.title,
231
+ isPreferred: violation.quickFix.isPreferred,
232
+ confidence: violation.quickFix.confidence,
233
+ }
234
+ : undefined,
235
+ aiExplainAvailable: violation.aiExplainAvailable,
236
+ aiFixAvailable: violation.aiFixAvailable,
237
+ };
238
+ }
239
+ /**
240
+ * Convert a URI to a file path
241
+ */
242
+ uriToPath(uri) {
243
+ try {
244
+ return URI.parse(uri).fsPath;
245
+ }
246
+ catch {
247
+ // If URI parsing fails, assume it's already a path
248
+ return uri;
249
+ }
250
+ }
251
+ /**
252
+ * Get the language from a URI based on file extension
253
+ */
254
+ getLanguageFromUri(uri) {
255
+ const ext = uri.split('.').pop()?.toLowerCase();
256
+ switch (ext) {
257
+ case 'ts':
258
+ case 'tsx':
259
+ return 'typescript';
260
+ case 'js':
261
+ case 'jsx':
262
+ case 'mjs':
263
+ case 'cjs':
264
+ return 'javascript';
265
+ case 'py':
266
+ return 'python';
267
+ case 'css':
268
+ case 'scss':
269
+ case 'sass':
270
+ case 'less':
271
+ return 'css';
272
+ case 'json':
273
+ return 'json';
274
+ case 'yaml':
275
+ case 'yml':
276
+ return 'yaml';
277
+ case 'md':
278
+ case 'markdown':
279
+ return 'markdown';
280
+ default:
281
+ return null;
282
+ }
283
+ }
284
+ /**
285
+ * Shutdown the core scanner
286
+ */
287
+ async shutdown() {
288
+ this.logger.info('Shutting down core scanner...');
289
+ // Save pattern store if auto-save is enabled
290
+ if (this.patternStore && this.config.autoSave) {
291
+ try {
292
+ await this.patternStore.saveAll();
293
+ }
294
+ catch (error) {
295
+ this.logger.error(`Error saving pattern store: ${error}`);
296
+ }
297
+ }
298
+ this.scanCache.clear();
299
+ this.initialized = false;
300
+ this.logger.info('Core scanner shutdown complete');
301
+ }
302
+ }
303
+ /**
304
+ * Create a core scanner instance
305
+ */
306
+ export function createCoreScanner(config = {}, logger) {
307
+ return new CoreScanner(config, logger);
308
+ }
309
+ //# sourceMappingURL=core-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-scanner.js","sourceRoot":"","sources":["../../src/integration/core-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Pattern Store Adapter
3
+ *
4
+ * Adapts driftdetect-core PatternStore and VariantManager for use in LSP commands.
5
+ * Provides approve, ignore, and variant operations that persist to disk.
6
+ *
7
+ * @requirements 28.1 - drift.approvePattern
8
+ * @requirements 28.2 - drift.ignorePattern
9
+ * @requirements 28.3 - drift.ignoreOnce
10
+ * @requirements 28.4 - drift.createVariant
11
+ */
12
+ import { PatternStore, VariantManager } from 'driftdetect-core';
13
+ import type { ApproveResult, IgnoreResult, CreateVariantResult, CreateVariantInput, CoreIntegrationConfig } from './types.js';
14
+ import type { ViolationInfo, PatternInfo } from '../types/lsp-types.js';
15
+ /**
16
+ * Logger interface
17
+ */
18
+ interface Logger {
19
+ error(message: string): void;
20
+ warn(message: string): void;
21
+ info(message: string): void;
22
+ debug(message: string): void;
23
+ }
24
+ /**
25
+ * Pattern Store Adapter
26
+ *
27
+ * Provides a simplified interface for LSP commands to interact with
28
+ * the driftdetect-core PatternStore and VariantManager.
29
+ */
30
+ export declare class PatternStoreAdapter {
31
+ private config;
32
+ private logger;
33
+ private patternStore;
34
+ private variantManager;
35
+ private initialized;
36
+ constructor(config: Partial<CoreIntegrationConfig> | undefined, logger: Logger);
37
+ /**
38
+ * Initialize the adapter
39
+ */
40
+ initialize(): Promise<void>;
41
+ /**
42
+ * Check if the adapter is initialized
43
+ */
44
+ isInitialized(): boolean;
45
+ /**
46
+ * Get the pattern store instance
47
+ */
48
+ getPatternStore(): PatternStore | null;
49
+ /**
50
+ * Get the variant manager instance
51
+ */
52
+ getVariantManager(): VariantManager | null;
53
+ /**
54
+ * Approve a pattern
55
+ *
56
+ * Moves the pattern from discovered to approved status and persists the change.
57
+ *
58
+ * @requirements 28.1 - drift.approvePattern
59
+ */
60
+ approve(patternId: string, approvedBy?: string): Promise<ApproveResult>;
61
+ /**
62
+ * Ignore a pattern
63
+ *
64
+ * Moves the pattern to ignored status and persists the change.
65
+ *
66
+ * @requirements 28.2 - drift.ignorePattern
67
+ */
68
+ ignore(patternId: string): Promise<IgnoreResult>;
69
+ /**
70
+ * Create a variant for a pattern
71
+ *
72
+ * Creates an intentional deviation from a pattern and persists it.
73
+ *
74
+ * @requirements 28.4 - drift.createVariant
75
+ */
76
+ createVariant(input: CreateVariantInput): Promise<CreateVariantResult>;
77
+ /**
78
+ * Check if a location is covered by a variant
79
+ *
80
+ * Used to filter out violations that are covered by variants.
81
+ */
82
+ isLocationCovered(patternId: string, file: string, line: number, column: number): boolean;
83
+ /**
84
+ * Get all patterns
85
+ */
86
+ getAllPatterns(): PatternInfo[];
87
+ /**
88
+ * Get approved patterns
89
+ */
90
+ getApprovedPatterns(): PatternInfo[];
91
+ /**
92
+ * Get discovered patterns
93
+ */
94
+ getDiscoveredPatterns(): PatternInfo[];
95
+ /**
96
+ * Get ignored patterns
97
+ */
98
+ getIgnoredPatterns(): PatternInfo[];
99
+ /**
100
+ * Get a pattern by ID
101
+ */
102
+ getPattern(patternId: string): PatternInfo | undefined;
103
+ /**
104
+ * Filter violations by removing those covered by variants
105
+ */
106
+ filterViolationsByVariants(violations: ViolationInfo[]): ViolationInfo[];
107
+ /**
108
+ * Shutdown the adapter
109
+ */
110
+ shutdown(): Promise<void>;
111
+ }
112
+ /**
113
+ * Create a pattern store adapter instance
114
+ */
115
+ export declare function createPatternStoreAdapter(config: Partial<CoreIntegrationConfig> | undefined, logger: Logger): PatternStoreAdapter;
116
+ export {};
117
+ //# sourceMappingURL=pattern-store-adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pattern-store-adapter.d.ts","sourceRoot":"","sources":["../../src/integration/pattern-store-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,YAAY,EACZ,cAAc,EAKf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,UAAU,MAAM;IACd,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;;;GAKG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,WAAW,CAAkB;gBAEzB,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,YAAK,EAAE,MAAM,EAAE,MAAM;IAKvE;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoCjC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,eAAe,IAAI,YAAY,GAAG,IAAI;IAItC;;OAEG;IACH,iBAAiB,IAAI,cAAc,GAAG,IAAI;IAI1C;;;;;;OAMG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAiD7E;;;;;;OAMG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAiDtD;;;;;;OAMG;IACG,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA4D5E;;;;OAIG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IASzF;;OAEG;IACH,cAAc,IAAI,WAAW,EAAE;IAQ/B;;OAEG;IACH,mBAAmB,IAAI,WAAW,EAAE;IAQpC;;OAEG;IACH,qBAAqB,IAAI,WAAW,EAAE;IAQtC;;OAEG;IACH,kBAAkB,IAAI,WAAW,EAAE;IAQnC;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAStD;;OAEG;IACH,0BAA0B,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE;IAexE;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAwBhC;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,YAAK,EAC3C,MAAM,EAAE,MAAM,GACb,mBAAmB,CAErB"}
1
+ {"version":3,"file":"pattern-store-adapter.d.ts","sourceRoot":"","sources":["../../src/integration/pattern-store-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,YAAY,EACZ,cAAc,EAKf,MAAM,kBAAkB,CAAC;AAI1B,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAExE;;GAEG;AACH,UAAU,MAAM;IACd,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;;;GAKG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,WAAW,CAAkB;gBAEzB,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,YAAK,EAAE,MAAM,EAAE,MAAM;IAKvE;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoCjC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,eAAe,IAAI,YAAY,GAAG,IAAI;IAItC;;OAEG;IACH,iBAAiB,IAAI,cAAc,GAAG,IAAI;IAI1C;;;;;;OAMG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAiD7E;;;;;;OAMG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAiDtD;;;;;;OAMG;IACG,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA4D5E;;;;OAIG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IASzF;;OAEG;IACH,cAAc,IAAI,WAAW,EAAE;IAQ/B;;OAEG;IACH,mBAAmB,IAAI,WAAW,EAAE;IAQpC;;OAEG;IACH,qBAAqB,IAAI,WAAW,EAAE;IAQtC;;OAEG;IACH,kBAAkB,IAAI,WAAW,EAAE;IAQnC;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAStD;;OAEG;IACH,0BAA0B,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE;IAexE;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAwBhC;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,YAAK,EAC3C,MAAM,EAAE,MAAM,GACb,mBAAmB,CAErB"}