driftdetect-core 0.8.0 → 0.8.2

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 (37) hide show
  1. package/dist/index.d.ts +8 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +24 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/java/index.d.ts +8 -0
  6. package/dist/java/index.d.ts.map +1 -0
  7. package/dist/java/index.js +7 -0
  8. package/dist/java/index.js.map +1 -0
  9. package/dist/java/java-analyzer.d.ts +142 -0
  10. package/dist/java/java-analyzer.d.ts.map +1 -0
  11. package/dist/java/java-analyzer.js +515 -0
  12. package/dist/java/java-analyzer.js.map +1 -0
  13. package/dist/php/index.d.ts +8 -0
  14. package/dist/php/index.d.ts.map +1 -0
  15. package/dist/php/index.js +7 -0
  16. package/dist/php/index.js.map +1 -0
  17. package/dist/php/php-analyzer.d.ts +149 -0
  18. package/dist/php/php-analyzer.d.ts.map +1 -0
  19. package/dist/php/php-analyzer.js +546 -0
  20. package/dist/php/php-analyzer.js.map +1 -0
  21. package/dist/python/index.d.ts +8 -0
  22. package/dist/python/index.d.ts.map +1 -0
  23. package/dist/python/index.js +7 -0
  24. package/dist/python/index.js.map +1 -0
  25. package/dist/python/python-analyzer.d.ts +156 -0
  26. package/dist/python/python-analyzer.d.ts.map +1 -0
  27. package/dist/python/python-analyzer.js +535 -0
  28. package/dist/python/python-analyzer.js.map +1 -0
  29. package/dist/typescript/index.d.ts +13 -0
  30. package/dist/typescript/index.d.ts.map +1 -0
  31. package/dist/typescript/index.js +12 -0
  32. package/dist/typescript/index.js.map +1 -0
  33. package/dist/typescript/typescript-analyzer.d.ts +194 -0
  34. package/dist/typescript/typescript-analyzer.d.ts.map +1 -0
  35. package/dist/typescript/typescript-analyzer.js +762 -0
  36. package/dist/typescript/typescript-analyzer.js.map +1 -0
  37. package/package.json +13 -13
@@ -0,0 +1,515 @@
1
+ /**
2
+ * Java Analyzer
3
+ *
4
+ * Main analyzer for Java projects. Provides comprehensive analysis of:
5
+ * - HTTP routes (Spring MVC, JAX-RS, Micronaut, Quarkus)
6
+ * - Classes and methods
7
+ * - Error handling patterns
8
+ * - Data access patterns (Spring Data JPA, Hibernate, JDBC, MyBatis)
9
+ * - Annotations
10
+ */
11
+ import * as fs from 'fs';
12
+ import * as path from 'path';
13
+ import { createJavaHybridExtractor } from '../call-graph/extractors/java-hybrid-extractor.js';
14
+ // ============================================================================
15
+ // Default Configuration
16
+ // ============================================================================
17
+ const DEFAULT_CONFIG = {
18
+ verbose: false,
19
+ includePatterns: ['**/*.java'],
20
+ excludePatterns: ['**/target/**', '**/build/**', '**/.gradle/**', '**/.git/**'],
21
+ };
22
+ // ============================================================================
23
+ // Java Analyzer Implementation
24
+ // ============================================================================
25
+ export class JavaAnalyzer {
26
+ config;
27
+ extractor;
28
+ constructor(config) {
29
+ this.config = { ...DEFAULT_CONFIG, ...config };
30
+ this.extractor = createJavaHybridExtractor();
31
+ }
32
+ /**
33
+ * Full project analysis
34
+ */
35
+ async analyze() {
36
+ const startTime = Date.now();
37
+ const files = await this.findFiles();
38
+ const projectInfo = await this.parseProjectInfo();
39
+ const allFunctions = [];
40
+ const allClasses = [];
41
+ const allCalls = [];
42
+ const allImports = [];
43
+ const detectedFrameworks = new Set();
44
+ let linesOfCode = 0;
45
+ let testFileCount = 0;
46
+ let annotationCount = 0;
47
+ let interfaceCount = 0;
48
+ for (const file of files) {
49
+ const source = await fs.promises.readFile(file, 'utf-8');
50
+ linesOfCode += source.split('\n').length;
51
+ const isTestFile = this.isTestFile(file);
52
+ if (isTestFile)
53
+ testFileCount++;
54
+ const result = this.extractor.extract(source, file);
55
+ // Detect frameworks from imports
56
+ for (const imp of result.imports) {
57
+ const framework = this.detectFramework(imp.source);
58
+ if (framework)
59
+ detectedFrameworks.add(framework);
60
+ }
61
+ // Count annotations
62
+ annotationCount += result.functions.reduce((sum, f) => sum + f.decorators.length, 0);
63
+ // Count interfaces (classes with no methods that look like interfaces)
64
+ interfaceCount += source.split('\n').filter(l => /\binterface\s+\w+/.test(l)).length;
65
+ allFunctions.push(...result.functions);
66
+ allClasses.push(...result.classes);
67
+ allCalls.push(...result.calls);
68
+ allImports.push(...result.imports);
69
+ }
70
+ const analysisTimeMs = Date.now() - startTime;
71
+ return {
72
+ projectInfo: {
73
+ name: projectInfo.name,
74
+ version: projectInfo.version,
75
+ files: files.length,
76
+ buildTool: projectInfo.buildTool,
77
+ },
78
+ detectedFrameworks: Array.from(detectedFrameworks),
79
+ stats: {
80
+ fileCount: files.length,
81
+ classCount: allClasses.length,
82
+ interfaceCount,
83
+ methodCount: allFunctions.length,
84
+ annotationCount,
85
+ linesOfCode,
86
+ testFileCount,
87
+ analysisTimeMs,
88
+ },
89
+ functions: allFunctions,
90
+ classes: allClasses,
91
+ calls: allCalls,
92
+ imports: allImports,
93
+ };
94
+ }
95
+ /**
96
+ * Analyze HTTP routes
97
+ */
98
+ async analyzeRoutes() {
99
+ const files = await this.findFiles();
100
+ const routes = [];
101
+ for (const file of files) {
102
+ const source = await fs.promises.readFile(file, 'utf-8');
103
+ const fileRoutes = this.extractRoutes(source, file);
104
+ routes.push(...fileRoutes);
105
+ }
106
+ const byFramework = {};
107
+ for (const route of routes) {
108
+ byFramework[route.framework] = (byFramework[route.framework] || 0) + 1;
109
+ }
110
+ return { routes, byFramework };
111
+ }
112
+ /**
113
+ * Analyze error handling patterns
114
+ */
115
+ async analyzeErrorHandling() {
116
+ const files = await this.findFiles();
117
+ let tryCatchBlocks = 0;
118
+ let throwStatements = 0;
119
+ let customExceptions = 0;
120
+ let exceptionHandlers = 0;
121
+ const patterns = [];
122
+ const issues = [];
123
+ for (const file of files) {
124
+ const source = await fs.promises.readFile(file, 'utf-8');
125
+ const lines = source.split('\n');
126
+ for (let i = 0; i < lines.length; i++) {
127
+ const line = lines[i];
128
+ const lineNum = i + 1;
129
+ // Try-catch blocks
130
+ if (/\btry\s*\{/.test(line)) {
131
+ tryCatchBlocks++;
132
+ patterns.push({ type: 'try-catch', file, line: lineNum, context: line.trim() });
133
+ }
134
+ // Throw statements
135
+ if (/\bthrow\s+new\s+/.test(line) || /\bthrow\s+\w+/.test(line)) {
136
+ throwStatements++;
137
+ patterns.push({ type: 'throw', file, line: lineNum, context: line.trim() });
138
+ }
139
+ // Custom exception classes
140
+ if (/class\s+\w+.*extends\s+.*Exception/.test(line) || /class\s+\w+.*extends\s+.*Error/.test(line)) {
141
+ customExceptions++;
142
+ patterns.push({ type: 'custom-exception', file, line: lineNum, context: line.trim() });
143
+ }
144
+ // Spring @ExceptionHandler
145
+ if (/@ExceptionHandler/.test(line)) {
146
+ exceptionHandlers++;
147
+ patterns.push({ type: 'exception-handler', file, line: lineNum, context: line.trim() });
148
+ }
149
+ // Empty catch blocks
150
+ if (/catch\s*\([^)]+\)\s*\{\s*\}/.test(line)) {
151
+ issues.push({
152
+ type: 'empty-catch',
153
+ file,
154
+ line: lineNum,
155
+ message: 'Empty catch block swallows exceptions silently',
156
+ suggestion: 'Log the exception or handle it appropriately',
157
+ });
158
+ }
159
+ // Catching generic Exception
160
+ if (/catch\s*\(\s*Exception\s+\w+\s*\)/.test(line)) {
161
+ issues.push({
162
+ type: 'generic-catch',
163
+ file,
164
+ line: lineNum,
165
+ message: 'Catching generic Exception may hide specific errors',
166
+ suggestion: 'Catch specific exception types when possible',
167
+ });
168
+ }
169
+ }
170
+ }
171
+ return {
172
+ stats: { tryCatchBlocks, throwStatements, customExceptions, exceptionHandlers },
173
+ patterns,
174
+ issues,
175
+ };
176
+ }
177
+ /**
178
+ * Analyze data access patterns
179
+ */
180
+ async analyzeDataAccess() {
181
+ const files = await this.findFiles();
182
+ const accessPoints = [];
183
+ const repositories = new Set();
184
+ for (const file of files) {
185
+ const source = await fs.promises.readFile(file, 'utf-8');
186
+ const fileAccessPoints = this.extractDataAccess(source, file);
187
+ accessPoints.push(...fileAccessPoints);
188
+ // Find repository interfaces
189
+ const repoMatches = source.match(/interface\s+(\w+Repository)/g);
190
+ if (repoMatches) {
191
+ for (const match of repoMatches) {
192
+ const name = match.replace('interface ', '');
193
+ repositories.add(name);
194
+ }
195
+ }
196
+ }
197
+ const byFramework = {};
198
+ const byOperation = {};
199
+ for (const ap of accessPoints) {
200
+ byFramework[ap.framework] = (byFramework[ap.framework] || 0) + 1;
201
+ byOperation[ap.operation] = (byOperation[ap.operation] || 0) + 1;
202
+ }
203
+ return { accessPoints, byFramework, byOperation, repositories: Array.from(repositories) };
204
+ }
205
+ /**
206
+ * Analyze annotations
207
+ */
208
+ async analyzeAnnotations() {
209
+ const files = await this.findFiles();
210
+ const annotations = [];
211
+ for (const file of files) {
212
+ const source = await fs.promises.readFile(file, 'utf-8');
213
+ const fileAnnotations = this.extractAnnotations(source, file);
214
+ annotations.push(...fileAnnotations);
215
+ }
216
+ const byName = {};
217
+ for (const ann of annotations) {
218
+ byName[ann.name] = (byName[ann.name] || 0) + 1;
219
+ }
220
+ return { annotations, byName };
221
+ }
222
+ // ============================================================================
223
+ // Private Helper Methods
224
+ // ============================================================================
225
+ async findFiles() {
226
+ const results = [];
227
+ const excludePatterns = this.config.excludePatterns ?? ['target', 'build', '.gradle', '.git'];
228
+ const walk = async (dir) => {
229
+ let entries;
230
+ try {
231
+ entries = await fs.promises.readdir(dir, { withFileTypes: true });
232
+ }
233
+ catch {
234
+ return;
235
+ }
236
+ for (const entry of entries) {
237
+ const fullPath = path.join(dir, entry.name);
238
+ const relativePath = path.relative(this.config.rootDir, fullPath);
239
+ const shouldExclude = excludePatterns.some((pattern) => {
240
+ if (pattern.includes('*')) {
241
+ const regex = new RegExp('^' + pattern.replace(/\*/g, '.*') + '$');
242
+ return regex.test(relativePath);
243
+ }
244
+ return relativePath.includes(pattern);
245
+ });
246
+ if (shouldExclude)
247
+ continue;
248
+ if (entry.isDirectory()) {
249
+ await walk(fullPath);
250
+ }
251
+ else if (entry.isFile() && entry.name.endsWith('.java')) {
252
+ results.push(fullPath);
253
+ }
254
+ }
255
+ };
256
+ await walk(this.config.rootDir);
257
+ return results;
258
+ }
259
+ async parseProjectInfo() {
260
+ // Try pom.xml (Maven)
261
+ const pomPath = path.join(this.config.rootDir, 'pom.xml');
262
+ try {
263
+ const content = await fs.promises.readFile(pomPath, 'utf-8');
264
+ const nameMatch = content.match(/<artifactId>([^<]+)<\/artifactId>/);
265
+ const versionMatch = content.match(/<version>([^<]+)<\/version>/);
266
+ return {
267
+ name: nameMatch?.[1] ?? null,
268
+ version: versionMatch?.[1] ?? null,
269
+ buildTool: 'maven',
270
+ };
271
+ }
272
+ catch {
273
+ // Try build.gradle (Gradle)
274
+ const gradlePath = path.join(this.config.rootDir, 'build.gradle');
275
+ try {
276
+ const content = await fs.promises.readFile(gradlePath, 'utf-8');
277
+ const nameMatch = content.match(/rootProject\.name\s*=\s*['"]([^'"]+)['"]/);
278
+ const versionMatch = content.match(/version\s*=\s*['"]([^'"]+)['"]/);
279
+ return {
280
+ name: nameMatch?.[1] ?? null,
281
+ version: versionMatch?.[1] ?? null,
282
+ buildTool: 'gradle',
283
+ };
284
+ }
285
+ catch {
286
+ return { name: null, version: null, buildTool: null };
287
+ }
288
+ }
289
+ }
290
+ detectFramework(importSource) {
291
+ const frameworks = {
292
+ 'org.springframework': 'spring',
293
+ 'javax.ws.rs': 'jax-rs',
294
+ 'jakarta.ws.rs': 'jakarta-rs',
295
+ 'io.micronaut': 'micronaut',
296
+ 'io.quarkus': 'quarkus',
297
+ 'org.hibernate': 'hibernate',
298
+ 'javax.persistence': 'jpa',
299
+ 'jakarta.persistence': 'jakarta-persistence',
300
+ 'org.mybatis': 'mybatis',
301
+ 'org.jooq': 'jooq',
302
+ 'org.junit': 'junit',
303
+ 'org.mockito': 'mockito',
304
+ 'org.assertj': 'assertj',
305
+ };
306
+ for (const [prefix, name] of Object.entries(frameworks)) {
307
+ if (importSource.startsWith(prefix))
308
+ return name;
309
+ }
310
+ return null;
311
+ }
312
+ isTestFile(file) {
313
+ const testPatterns = [
314
+ /Test\.java$/,
315
+ /Tests\.java$/,
316
+ /IT\.java$/,
317
+ /\/test\//,
318
+ /\/tests\//,
319
+ ];
320
+ return testPatterns.some((p) => p.test(file));
321
+ }
322
+ extractRoutes(source, file) {
323
+ const routes = [];
324
+ const lines = source.split('\n');
325
+ // Spring MVC patterns: @GetMapping, @PostMapping, @RequestMapping
326
+ const springPattern = /@(GetMapping|PostMapping|PutMapping|DeleteMapping|PatchMapping|RequestMapping)\s*\(\s*(?:value\s*=\s*)?["']?([^"')]+)["']?\s*\)?/gi;
327
+ // JAX-RS patterns: @GET @Path("/path")
328
+ const jaxrsMethodPattern = /@(GET|POST|PUT|DELETE|PATCH|HEAD|OPTIONS)/gi;
329
+ const jaxrsPathPattern = /@Path\s*\(\s*["']([^"']+)["']\s*\)/gi;
330
+ for (let i = 0; i < lines.length; i++) {
331
+ const line = lines[i];
332
+ const lineNum = i + 1;
333
+ let match;
334
+ // Spring MVC
335
+ while ((match = springPattern.exec(line)) !== null) {
336
+ const annotation = match[1];
337
+ let method = 'GET';
338
+ if (annotation.toLowerCase().includes('post'))
339
+ method = 'POST';
340
+ else if (annotation.toLowerCase().includes('put'))
341
+ method = 'PUT';
342
+ else if (annotation.toLowerCase().includes('delete'))
343
+ method = 'DELETE';
344
+ else if (annotation.toLowerCase().includes('patch'))
345
+ method = 'PATCH';
346
+ routes.push({
347
+ method,
348
+ path: match[2],
349
+ handler: this.extractNextMethod(lines, i),
350
+ framework: 'spring',
351
+ file,
352
+ line: lineNum,
353
+ annotations: [line.trim()],
354
+ });
355
+ }
356
+ springPattern.lastIndex = 0;
357
+ // JAX-RS
358
+ if (jaxrsMethodPattern.test(line)) {
359
+ const methodMatch = line.match(/@(GET|POST|PUT|DELETE|PATCH|HEAD|OPTIONS)/i);
360
+ if (methodMatch) {
361
+ // Look for @Path on same or adjacent lines
362
+ let pathValue = '/';
363
+ for (let j = Math.max(0, i - 3); j <= Math.min(lines.length - 1, i + 3); j++) {
364
+ const pathMatch = lines[j].match(/@Path\s*\(\s*["']([^"']+)["']\s*\)/);
365
+ if (pathMatch) {
366
+ pathValue = pathMatch[1];
367
+ break;
368
+ }
369
+ }
370
+ routes.push({
371
+ method: methodMatch[1].toUpperCase(),
372
+ path: pathValue,
373
+ handler: this.extractNextMethod(lines, i),
374
+ framework: 'jax-rs',
375
+ file,
376
+ line: lineNum,
377
+ annotations: [line.trim()],
378
+ });
379
+ }
380
+ }
381
+ jaxrsMethodPattern.lastIndex = 0;
382
+ jaxrsPathPattern.lastIndex = 0;
383
+ }
384
+ return routes;
385
+ }
386
+ extractNextMethod(lines, annotationLine) {
387
+ for (let i = annotationLine + 1; i < Math.min(annotationLine + 10, lines.length); i++) {
388
+ const match = lines[i].match(/(?:public|private|protected)?\s*(?:\w+\s+)?(\w+)\s*\(/);
389
+ if (match && !lines[i].trim().startsWith('@'))
390
+ return match[1];
391
+ }
392
+ return 'unknown';
393
+ }
394
+ extractDataAccess(source, file) {
395
+ const accessPoints = [];
396
+ const lines = source.split('\n');
397
+ // Spring Data JPA: repository.findAll(), repository.save()
398
+ const springDataPattern = /(\w+Repository)\.(\w+)\s*\(/gi;
399
+ // JPA EntityManager: entityManager.find(), entityManager.persist()
400
+ const emPattern = /entityManager\.(\w+)\s*\(/gi;
401
+ // Hibernate Session: session.get(), session.save()
402
+ const sessionPattern = /session\.(\w+)\s*\(/gi;
403
+ // JDBC: statement.executeQuery(), preparedStatement.execute()
404
+ const jdbcPattern = /(?:statement|preparedStatement|stmt|ps)\.execute\w*\s*\(/gi;
405
+ for (let i = 0; i < lines.length; i++) {
406
+ const line = lines[i];
407
+ const lineNum = i + 1;
408
+ let match;
409
+ // Spring Data JPA
410
+ while ((match = springDataPattern.exec(line)) !== null) {
411
+ accessPoints.push({
412
+ entity: match[1].replace('Repository', ''),
413
+ operation: this.normalizeOperation(match[2]),
414
+ framework: 'spring-data',
415
+ file,
416
+ line: lineNum,
417
+ isRawSql: false,
418
+ });
419
+ }
420
+ springDataPattern.lastIndex = 0;
421
+ // EntityManager
422
+ while ((match = emPattern.exec(line)) !== null) {
423
+ accessPoints.push({
424
+ entity: 'unknown',
425
+ operation: this.normalizeOperation(match[1]),
426
+ framework: 'jpa',
427
+ file,
428
+ line: lineNum,
429
+ isRawSql: false,
430
+ });
431
+ }
432
+ emPattern.lastIndex = 0;
433
+ // Hibernate Session
434
+ while ((match = sessionPattern.exec(line)) !== null) {
435
+ accessPoints.push({
436
+ entity: 'unknown',
437
+ operation: this.normalizeOperation(match[1]),
438
+ framework: 'hibernate',
439
+ file,
440
+ line: lineNum,
441
+ isRawSql: false,
442
+ });
443
+ }
444
+ sessionPattern.lastIndex = 0;
445
+ // JDBC
446
+ if (jdbcPattern.test(line)) {
447
+ accessPoints.push({
448
+ entity: 'raw',
449
+ operation: 'query',
450
+ framework: 'jdbc',
451
+ file,
452
+ line: lineNum,
453
+ isRawSql: true,
454
+ });
455
+ }
456
+ jdbcPattern.lastIndex = 0;
457
+ }
458
+ return accessPoints;
459
+ }
460
+ normalizeOperation(op) {
461
+ const opLower = op.toLowerCase();
462
+ if (['find', 'findall', 'findby', 'get', 'getone', 'getbyid', 'query', 'createquery', 'count', 'exists'].some(o => opLower.includes(o)))
463
+ return 'read';
464
+ if (['save', 'saveall', 'persist', 'merge', 'insert'].some(o => opLower.includes(o)))
465
+ return 'write';
466
+ if (['update'].some(o => opLower.includes(o)))
467
+ return 'update';
468
+ if (['delete', 'remove'].some(o => opLower.includes(o)))
469
+ return 'delete';
470
+ return 'unknown';
471
+ }
472
+ extractAnnotations(source, file) {
473
+ const annotations = [];
474
+ const lines = source.split('\n');
475
+ const annotationPattern = /@(\w+)(?:\s*\(([^)]*)\))?/g;
476
+ for (let i = 0; i < lines.length; i++) {
477
+ const line = lines[i];
478
+ const lineNum = i + 1;
479
+ let match;
480
+ while ((match = annotationPattern.exec(line)) !== null) {
481
+ const target = this.determineAnnotationTarget(lines, i);
482
+ annotations.push({
483
+ name: match[1],
484
+ target,
485
+ file,
486
+ line: lineNum,
487
+ arguments: match[2] ? match[2].split(',').map(a => a.trim()) : [],
488
+ });
489
+ }
490
+ annotationPattern.lastIndex = 0;
491
+ }
492
+ return annotations;
493
+ }
494
+ determineAnnotationTarget(lines, annotationLine) {
495
+ for (let i = annotationLine + 1; i < Math.min(annotationLine + 5, lines.length); i++) {
496
+ const line = lines[i].trim();
497
+ if (line.startsWith('@'))
498
+ continue;
499
+ if (/\bclass\s+/.test(line) || /\binterface\s+/.test(line) || /\benum\s+/.test(line))
500
+ return 'class';
501
+ if (/\b(public|private|protected)?\s*\w+\s+\w+\s*\(/.test(line))
502
+ return 'method';
503
+ if (/\b(public|private|protected)?\s*\w+\s+\w+\s*[;=]/.test(line))
504
+ return 'field';
505
+ }
506
+ return 'method';
507
+ }
508
+ }
509
+ /**
510
+ * Factory function
511
+ */
512
+ export function createJavaAnalyzer(config) {
513
+ return new JavaAnalyzer(config);
514
+ }
515
+ //# sourceMappingURL=java-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"java-analyzer.js","sourceRoot":"","sources":["../../src/java/java-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,mDAAmD,CAAC;AA8G9F,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E,MAAM,cAAc,GAAgC;IAClD,OAAO,EAAE,KAAK;IACd,eAAe,EAAE,CAAC,WAAW,CAAC;IAC9B,eAAe,EAAE,CAAC,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,CAAC;CAChF,CAAC;AAEF,+EAA+E;AAC/E,+BAA+B;AAC/B,+EAA+E;AAE/E,MAAM,OAAO,YAAY;IACf,MAAM,CAAqB;IAC3B,SAAS,CAA+C;IAEhE,YAAY,MAA0B;QACpC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAwB,CAAC;QACrE,IAAI,CAAC,SAAS,GAAG,yBAAyB,EAAE,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAElD,MAAM,YAAY,GAAyB,EAAE,CAAC;QAC9C,MAAM,UAAU,GAAsB,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAqB,EAAE,CAAC;QACtC,MAAM,UAAU,GAAuB,EAAE,CAAC;QAC1C,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;QAE7C,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,cAAc,GAAG,CAAC,CAAC;QAEvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACzD,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YAEzC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,UAAU;gBAAE,aAAa,EAAE,CAAC;YAEhC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAEpD,iCAAiC;YACjC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjC,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACnD,IAAI,SAAS;oBAAE,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACnD,CAAC;YAED,oBAAoB;YACpB,eAAe,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAErF,uEAAuE;YACvE,cAAc,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAErF,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YACvC,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/B,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAE9C,OAAO;YACL,WAAW,EAAE;gBACX,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,KAAK,EAAE,KAAK,CAAC,MAAM;gBACnB,SAAS,EAAE,WAAW,CAAC,SAAS;aACjC;YACD,kBAAkB,EAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC;YAClD,KAAK,EAAE;gBACL,SAAS,EAAE,KAAK,CAAC,MAAM;gBACvB,UAAU,EAAE,UAAU,CAAC,MAAM;gBAC7B,cAAc;gBACd,WAAW,EAAE,YAAY,CAAC,MAAM;gBAChC,eAAe;gBACf,WAAW;gBACX,aAAa;gBACb,cAAc;aACf;YACD,SAAS,EAAE,YAAY;YACvB,OAAO,EAAE,UAAU;YACnB,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,UAAU;SACpB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,MAAM,GAAgB,EAAE,CAAC;QAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACzD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACpD,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,WAAW,GAA2B,EAAE,CAAC;QAC/C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB;QACxB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QAErC,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,MAAM,QAAQ,GAAuB,EAAE,CAAC;QACxC,MAAM,MAAM,GAAqB,EAAE,CAAC;QAEpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACzD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;gBACvB,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;gBAEtB,mBAAmB;gBACnB,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5B,cAAc,EAAE,CAAC;oBACjB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAClF,CAAC;gBAED,mBAAmB;gBACnB,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChE,eAAe,EAAE,CAAC;oBAClB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC9E,CAAC;gBAED,2BAA2B;gBAC3B,IAAI,oCAAoC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnG,gBAAgB,EAAE,CAAC;oBACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACzF,CAAC;gBAED,2BAA2B;gBAC3B,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnC,iBAAiB,EAAE,CAAC;oBACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC1F,CAAC;gBAED,qBAAqB;gBACrB,IAAI,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC7C,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,aAAa;wBACnB,IAAI;wBACJ,IAAI,EAAE,OAAO;wBACb,OAAO,EAAE,gDAAgD;wBACzD,UAAU,EAAE,8CAA8C;qBAC3D,CAAC,CAAC;gBACL,CAAC;gBAED,6BAA6B;gBAC7B,IAAI,mCAAmC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnD,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,eAAe;wBACrB,IAAI;wBACJ,IAAI,EAAE,OAAO;wBACb,OAAO,EAAE,qDAAqD;wBAC9D,UAAU,EAAE,8CAA8C;qBAC3D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,KAAK,EAAE,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE;YAC/E,QAAQ;YACR,MAAM;SACP,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB;QACrB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,YAAY,GAA0B,EAAE,CAAC;QAC/C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;QAEvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACzD,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC9D,YAAY,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;YAEvC,6BAA6B;YAC7B,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YACjE,IAAI,WAAW,EAAE,CAAC;gBAChB,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;oBAChC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;oBAC7C,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAA2B,EAAE,CAAC;QAC/C,MAAM,WAAW,GAA2B,EAAE,CAAC;QAE/C,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC9B,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACjE,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;IAC5F,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB;QACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,WAAW,GAAqB,EAAE,CAAC;QAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACzD,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC9D,WAAW,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IACjC,CAAC;IAED,+EAA+E;IAC/E,yBAAyB;IACzB,+EAA+E;IAEvE,KAAK,CAAC,SAAS;QACrB,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAE9F,MAAM,IAAI,GAAG,KAAK,EAAE,GAAW,EAAiB,EAAE;YAChD,IAAI,OAAO,CAAC;YACZ,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACpE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;YACT,CAAC;YAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAElE,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;oBACrD,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC1B,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;wBACnE,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBAClC,CAAC;oBACD,OAAO,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACxC,CAAC,CAAC,CAAC;gBAEH,IAAI,aAAa;oBAAE,SAAS;gBAE5B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC;qBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC1D,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,sBAAsB;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7D,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACrE,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAClE,OAAO;gBACL,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI;gBAC5B,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI;gBAClC,SAAS,EAAE,OAAO;aACnB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;YAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YAClE,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBAChE,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;gBAC5E,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBACrE,OAAO;oBACL,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI;oBAC5B,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI;oBAClC,SAAS,EAAE,QAAQ;iBACpB,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,YAAoB;QAC1C,MAAM,UAAU,GAA2B;YACzC,qBAAqB,EAAE,QAAQ;YAC/B,aAAa,EAAE,QAAQ;YACvB,eAAe,EAAE,YAAY;YAC7B,cAAc,EAAE,WAAW;YAC3B,YAAY,EAAE,SAAS;YACvB,eAAe,EAAE,WAAW;YAC5B,mBAAmB,EAAE,KAAK;YAC1B,qBAAqB,EAAE,qBAAqB;YAC5C,aAAa,EAAE,SAAS;YACxB,UAAU,EAAE,MAAM;YAClB,WAAW,EAAE,OAAO;YACpB,aAAa,EAAE,SAAS;YACxB,aAAa,EAAE,SAAS;SACzB,CAAC;QAEF,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACxD,IAAI,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAC;QACnD,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,UAAU,CAAC,IAAY;QAC7B,MAAM,YAAY,GAAG;YACnB,aAAa;YACb,cAAc;YACd,WAAW;YACX,UAAU;YACV,WAAW;SACZ,CAAC;QACF,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;IAEO,aAAa,CAAC,MAAc,EAAE,IAAY;QAChD,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEjC,kEAAkE;QAClE,MAAM,aAAa,GAAG,oIAAoI,CAAC;QAE3J,uCAAuC;QACvC,MAAM,kBAAkB,GAAG,6CAA6C,CAAC;QACzE,MAAM,gBAAgB,GAAG,sCAAsC,CAAC;QAEhE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACvB,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;YAEtB,IAAI,KAAK,CAAC;YAEV,aAAa;YACb,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACnD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;gBAC7B,IAAI,MAAM,GAAG,KAAK,CAAC;gBACnB,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAAE,MAAM,GAAG,MAAM,CAAC;qBAC1D,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,MAAM,GAAG,KAAK,CAAC;qBAC7D,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAAE,MAAM,GAAG,QAAQ,CAAC;qBACnE,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,MAAM,GAAG,OAAO,CAAC;gBAEtE,MAAM,CAAC,IAAI,CAAC;oBACV,MAAM;oBACN,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE;oBACf,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC;oBACzC,SAAS,EAAE,QAAQ;oBACnB,IAAI;oBACJ,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBAC3B,CAAC,CAAC;YACL,CAAC;YACD,aAAa,CAAC,SAAS,GAAG,CAAC,CAAC;YAE5B,SAAS;YACT,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;gBAC7E,IAAI,WAAW,EAAE,CAAC;oBAChB,2CAA2C;oBAC3C,IAAI,SAAS,GAAG,GAAG,CAAC;oBACpB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC7E,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;wBACxE,IAAI,SAAS,EAAE,CAAC;4BACd,SAAS,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC;4BAC1B,MAAM;wBACR,CAAC;oBACH,CAAC;oBAED,MAAM,CAAC,IAAI,CAAC;wBACV,MAAM,EAAE,WAAW,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE;wBACrC,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC;wBACzC,SAAS,EAAE,QAAQ;wBACnB,IAAI;wBACJ,IAAI,EAAE,OAAO;wBACb,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;qBAC3B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,kBAAkB,CAAC,SAAS,GAAG,CAAC,CAAC;YACjC,gBAAgB,CAAC,SAAS,GAAG,CAAC,CAAC;QACjC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,iBAAiB,CAAC,KAAe,EAAE,cAAsB;QAC/D,KAAK,IAAI,CAAC,GAAG,cAAc,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACtF,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;YACvF,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC,CAAC,CAAE,CAAC;QACnE,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,iBAAiB,CAAC,MAAc,EAAE,IAAY;QACpD,MAAM,YAAY,GAA0B,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEjC,2DAA2D;QAC3D,MAAM,iBAAiB,GAAG,+BAA+B,CAAC;QAE1D,mEAAmE;QACnE,MAAM,SAAS,GAAG,6BAA6B,CAAC;QAEhD,mDAAmD;QACnD,MAAM,cAAc,GAAG,uBAAuB,CAAC;QAE/C,8DAA8D;QAC9D,MAAM,WAAW,GAAG,4DAA4D,CAAC;QAEjF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACvB,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;YAEtB,IAAI,KAAK,CAAC;YAEV,kBAAkB;YAClB,OAAO,CAAC,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACvD,YAAY,CAAC,IAAI,CAAC;oBAChB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;oBAC3C,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;oBAC7C,SAAS,EAAE,aAAa;oBACxB,IAAI;oBACJ,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,KAAK;iBAChB,CAAC,CAAC;YACL,CAAC;YACD,iBAAiB,CAAC,SAAS,GAAG,CAAC,CAAC;YAEhC,gBAAgB;YAChB,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC/C,YAAY,CAAC,IAAI,CAAC;oBAChB,MAAM,EAAE,SAAS;oBACjB,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;oBAC7C,SAAS,EAAE,KAAK;oBAChB,IAAI;oBACJ,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,KAAK;iBAChB,CAAC,CAAC;YACL,CAAC;YACD,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;YAExB,oBAAoB;YACpB,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACpD,YAAY,CAAC,IAAI,CAAC;oBAChB,MAAM,EAAE,SAAS;oBACjB,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;oBAC7C,SAAS,EAAE,WAAW;oBACtB,IAAI;oBACJ,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,KAAK;iBAChB,CAAC,CAAC;YACL,CAAC;YACD,cAAc,CAAC,SAAS,GAAG,CAAC,CAAC;YAE7B,OAAO;YACP,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,YAAY,CAAC,IAAI,CAAC;oBAChB,MAAM,EAAE,KAAK;oBACb,SAAS,EAAE,OAAO;oBAClB,SAAS,EAAE,MAAM;oBACjB,IAAI;oBACJ,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;YACL,CAAC;YACD,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,kBAAkB,CAAC,EAAU;QACnC,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC;QACvJ,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,OAAO,CAAC;QACrG,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,QAAQ,CAAC;QAC/D,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,QAAQ,CAAC;QACzE,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,kBAAkB,CAAC,MAAc,EAAE,IAAY;QACrD,MAAM,WAAW,GAAqB,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEjC,MAAM,iBAAiB,GAAG,4BAA4B,CAAC;QAEvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACvB,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;YAEtB,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACvD,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACxD,WAAW,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE;oBACf,MAAM;oBACN,IAAI;oBACJ,IAAI,EAAE,OAAO;oBACb,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;iBAClE,CAAC,CAAC;YACL,CAAC;YACD,iBAAiB,CAAC,SAAS,GAAG,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAEO,yBAAyB,CAAC,KAAe,EAAE,cAAsB;QACvE,KAAK,IAAI,CAAC,GAAG,cAAc,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACrF,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACnC,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO,OAAO,CAAC;YACrG,IAAI,gDAAgD,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO,QAAQ,CAAC;YACjF,IAAI,kDAAkD,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO,OAAO,CAAC;QACpF,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA0B;IAC3D,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * PHP Language Support
3
+ *
4
+ * Exports for PHP project analysis.
5
+ */
6
+ export { PhpAnalyzer, createPhpAnalyzer, } from './php-analyzer.js';
7
+ export type { PhpAnalyzerConfig, PhpAnalysisResult, PhpAnalysisStats, PhpRoute, PhpRoutesResult, PhpErrorPattern, PhpErrorIssue, PhpErrorHandlingResult, PhpDataAccessPoint, PhpDataAccessResult, PhpTrait, PhpTraitUsage, PhpTraitsResult, } from './php-analyzer.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/php/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,WAAW,EACX,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,eAAe,EACf,aAAa,EACb,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,QAAQ,EACR,aAAa,EACb,eAAe,GAChB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * PHP Language Support
3
+ *
4
+ * Exports for PHP project analysis.
5
+ */
6
+ export { PhpAnalyzer, createPhpAnalyzer, } from './php-analyzer.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/php/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,WAAW,EACX,iBAAiB,GAClB,MAAM,mBAAmB,CAAC"}