@probelabs/visor 0.1.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 (116) hide show
  1. package/README.md +1240 -0
  2. package/action.yml +142 -0
  3. package/defaults/.visor.yaml +184 -0
  4. package/dist/action-cli-bridge.d.ts +104 -0
  5. package/dist/action-cli-bridge.d.ts.map +1 -0
  6. package/dist/action-cli-bridge.js +372 -0
  7. package/dist/action-cli-bridge.js.map +1 -0
  8. package/dist/ai-review-service.d.ts +84 -0
  9. package/dist/ai-review-service.d.ts.map +1 -0
  10. package/dist/ai-review-service.js +674 -0
  11. package/dist/ai-review-service.js.map +1 -0
  12. package/dist/check-execution-engine.d.ts +165 -0
  13. package/dist/check-execution-engine.d.ts.map +1 -0
  14. package/dist/check-execution-engine.js +1172 -0
  15. package/dist/check-execution-engine.js.map +1 -0
  16. package/dist/cli-main.d.ts +6 -0
  17. package/dist/cli-main.d.ts.map +1 -0
  18. package/dist/cli-main.js +247 -0
  19. package/dist/cli-main.js.map +1 -0
  20. package/dist/cli.d.ts +47 -0
  21. package/dist/cli.d.ts.map +1 -0
  22. package/dist/cli.js +224 -0
  23. package/dist/cli.js.map +1 -0
  24. package/dist/commands.d.ts +10 -0
  25. package/dist/commands.d.ts.map +1 -0
  26. package/dist/commands.js +53 -0
  27. package/dist/commands.js.map +1 -0
  28. package/dist/config.d.ts +63 -0
  29. package/dist/config.d.ts.map +1 -0
  30. package/dist/config.js +369 -0
  31. package/dist/config.js.map +1 -0
  32. package/dist/dependency-resolver.d.ts +54 -0
  33. package/dist/dependency-resolver.d.ts.map +1 -0
  34. package/dist/dependency-resolver.js +163 -0
  35. package/dist/dependency-resolver.js.map +1 -0
  36. package/dist/event-mapper.d.ts +125 -0
  37. package/dist/event-mapper.d.ts.map +1 -0
  38. package/dist/event-mapper.js +311 -0
  39. package/dist/event-mapper.js.map +1 -0
  40. package/dist/failure-condition-evaluator.d.ts +81 -0
  41. package/dist/failure-condition-evaluator.d.ts.map +1 -0
  42. package/dist/failure-condition-evaluator.js +445 -0
  43. package/dist/failure-condition-evaluator.js.map +1 -0
  44. package/dist/git-repository-analyzer.d.ts +45 -0
  45. package/dist/git-repository-analyzer.d.ts.map +1 -0
  46. package/dist/git-repository-analyzer.js +285 -0
  47. package/dist/git-repository-analyzer.js.map +1 -0
  48. package/dist/github-check-service.d.ts +104 -0
  49. package/dist/github-check-service.d.ts.map +1 -0
  50. package/dist/github-check-service.js +382 -0
  51. package/dist/github-check-service.js.map +1 -0
  52. package/dist/github-comments.d.ts +109 -0
  53. package/dist/github-comments.d.ts.map +1 -0
  54. package/dist/github-comments.js +289 -0
  55. package/dist/github-comments.js.map +1 -0
  56. package/dist/index.d.ts +2 -0
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +1265 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/output-formatters.d.ts +66 -0
  61. package/dist/output-formatters.d.ts.map +1 -0
  62. package/dist/output-formatters.js +624 -0
  63. package/dist/output-formatters.js.map +1 -0
  64. package/dist/pr-analyzer.d.ts +47 -0
  65. package/dist/pr-analyzer.d.ts.map +1 -0
  66. package/dist/pr-analyzer.js +194 -0
  67. package/dist/pr-analyzer.js.map +1 -0
  68. package/dist/pr-detector.d.ts +78 -0
  69. package/dist/pr-detector.d.ts.map +1 -0
  70. package/dist/pr-detector.js +357 -0
  71. package/dist/pr-detector.js.map +1 -0
  72. package/dist/providers/ai-check-provider.d.ts +40 -0
  73. package/dist/providers/ai-check-provider.d.ts.map +1 -0
  74. package/dist/providers/ai-check-provider.js +416 -0
  75. package/dist/providers/ai-check-provider.js.map +1 -0
  76. package/dist/providers/check-provider-registry.d.ts +67 -0
  77. package/dist/providers/check-provider-registry.d.ts.map +1 -0
  78. package/dist/providers/check-provider-registry.js +138 -0
  79. package/dist/providers/check-provider-registry.js.map +1 -0
  80. package/dist/providers/check-provider.interface.d.ts +78 -0
  81. package/dist/providers/check-provider.interface.d.ts.map +1 -0
  82. package/dist/providers/check-provider.interface.js +11 -0
  83. package/dist/providers/check-provider.interface.js.map +1 -0
  84. package/dist/providers/index.d.ts +10 -0
  85. package/dist/providers/index.d.ts.map +1 -0
  86. package/dist/providers/index.js +19 -0
  87. package/dist/providers/index.js.map +1 -0
  88. package/dist/providers/script-check-provider.d.ts +20 -0
  89. package/dist/providers/script-check-provider.d.ts.map +1 -0
  90. package/dist/providers/script-check-provider.js +163 -0
  91. package/dist/providers/script-check-provider.js.map +1 -0
  92. package/dist/providers/tool-check-provider.d.ts +19 -0
  93. package/dist/providers/tool-check-provider.d.ts.map +1 -0
  94. package/dist/providers/tool-check-provider.js +125 -0
  95. package/dist/providers/tool-check-provider.js.map +1 -0
  96. package/dist/providers/webhook-check-provider.d.ts +21 -0
  97. package/dist/providers/webhook-check-provider.d.ts.map +1 -0
  98. package/dist/providers/webhook-check-provider.js +173 -0
  99. package/dist/providers/webhook-check-provider.js.map +1 -0
  100. package/dist/reviewer.d.ts +88 -0
  101. package/dist/reviewer.d.ts.map +1 -0
  102. package/dist/reviewer.js +760 -0
  103. package/dist/reviewer.js.map +1 -0
  104. package/dist/types/cli.d.ts +41 -0
  105. package/dist/types/cli.d.ts.map +1 -0
  106. package/dist/types/cli.js +3 -0
  107. package/dist/types/cli.js.map +1 -0
  108. package/dist/types/config.d.ts +315 -0
  109. package/dist/types/config.d.ts.map +1 -0
  110. package/dist/types/config.js +6 -0
  111. package/dist/types/config.js.map +1 -0
  112. package/dist/utils/env-resolver.d.ts +38 -0
  113. package/dist/utils/env-resolver.d.ts.map +1 -0
  114. package/dist/utils/env-resolver.js +130 -0
  115. package/dist/utils/env-resolver.js.map +1 -0
  116. package/package.json +116 -0
@@ -0,0 +1,47 @@
1
+ import { Octokit } from '@octokit/rest';
2
+ export interface PRDiff {
3
+ filename: string;
4
+ additions: number;
5
+ deletions: number;
6
+ changes: number;
7
+ patch?: string;
8
+ status: 'added' | 'removed' | 'modified' | 'renamed';
9
+ }
10
+ export interface PRInfo {
11
+ number: number;
12
+ title: string;
13
+ body: string;
14
+ author: string;
15
+ base: string;
16
+ head: string;
17
+ files: PRDiff[];
18
+ totalAdditions: number;
19
+ totalDeletions: number;
20
+ fullDiff?: string;
21
+ commitDiff?: string;
22
+ isIncremental?: boolean;
23
+ }
24
+ export declare class PRAnalyzer {
25
+ private octokit;
26
+ private maxRetries;
27
+ constructor(octokit: Octokit, maxRetries?: number);
28
+ /**
29
+ * Fetch commit diff for incremental analysis
30
+ */
31
+ fetchCommitDiff(owner: string, repo: string, commitSha: string): Promise<string>;
32
+ /**
33
+ * Generate unified diff for all PR files
34
+ */
35
+ private generateFullDiff;
36
+ fetchPRDiff(owner: string, repo: string, prNumber: number, commitSha?: string): Promise<PRInfo>;
37
+ fetchPRComments(owner: string, repo: string, prNumber: number): Promise<{
38
+ id: number;
39
+ author: string;
40
+ body: string;
41
+ createdAt: string;
42
+ updatedAt: string;
43
+ }[]>;
44
+ private withRetry;
45
+ private isRetryableError;
46
+ }
47
+ //# sourceMappingURL=pr-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-analyzer.d.ts","sourceRoot":"","sources":["../src/pr-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAQD,qBAAa,UAAU;IAEnB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,UAAU;gBADV,OAAO,EAAE,OAAO,EAChB,UAAU,GAAE,MAAU;IAGhC;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBtF;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOlB,WAAW,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC;IAoGZ,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;;;;;;;YAkBrD,SAAS;IAwCvB,OAAO,CAAC,gBAAgB;CAkBzB"}
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PRAnalyzer = void 0;
4
+ class PRAnalyzer {
5
+ octokit;
6
+ maxRetries;
7
+ constructor(octokit, maxRetries = 3) {
8
+ this.octokit = octokit;
9
+ this.maxRetries = maxRetries;
10
+ }
11
+ /**
12
+ * Fetch commit diff for incremental analysis
13
+ */
14
+ async fetchCommitDiff(owner, repo, commitSha) {
15
+ try {
16
+ const { data: commit } = await this.withRetry(() => this.octokit.rest.repos.getCommit({
17
+ owner,
18
+ repo,
19
+ ref: commitSha,
20
+ }));
21
+ // Extract patches from all files in the commit
22
+ const patches = commit.files
23
+ ?.filter(file => file.patch)
24
+ .map(file => `--- ${file.filename}\n${file.patch}`)
25
+ .join('\n\n') || '';
26
+ return patches;
27
+ }
28
+ catch (error) {
29
+ console.warn(`Failed to fetch commit diff for ${commitSha}:`, error);
30
+ return '';
31
+ }
32
+ }
33
+ /**
34
+ * Generate unified diff for all PR files
35
+ */
36
+ generateFullDiff(files) {
37
+ return files
38
+ .filter(file => file.patch)
39
+ .map(file => `--- ${file.filename}\n${file.patch}`)
40
+ .join('\n\n');
41
+ }
42
+ async fetchPRDiff(owner, repo, prNumber, commitSha) {
43
+ const [prData, filesData] = await Promise.all([
44
+ this.withRetry(() => this.octokit.rest.pulls.get({
45
+ owner,
46
+ repo,
47
+ pull_number: prNumber,
48
+ })),
49
+ this.withRetry(() => this.octokit.rest.pulls.listFiles({
50
+ owner,
51
+ repo,
52
+ pull_number: prNumber,
53
+ })),
54
+ ]);
55
+ const pr = prData?.data;
56
+ const files = filesData?.data || [];
57
+ // Handle missing or malformed PR data gracefully
58
+ if (!pr) {
59
+ throw new Error('Invalid or missing pull request data');
60
+ }
61
+ // Validate critical fields and provide defaults for missing data
62
+ const title = typeof pr.title === 'string' ? pr.title : pr.title ? String(pr.title) : 'MISSING';
63
+ const body = typeof pr.body === 'string' ? pr.body : pr.body ? String(pr.body) : '';
64
+ const author = pr.user && typeof pr.user === 'object' && pr.user.login
65
+ ? typeof pr.user.login === 'string'
66
+ ? pr.user.login
67
+ : String(pr.user.login)
68
+ : 'unknown';
69
+ const base = pr.base && typeof pr.base === 'object' && pr.base.ref
70
+ ? typeof pr.base.ref === 'string'
71
+ ? pr.base.ref
72
+ : String(pr.base.ref)
73
+ : 'main';
74
+ const head = pr.head && typeof pr.head === 'object' && pr.head.ref
75
+ ? typeof pr.head.ref === 'string'
76
+ ? pr.head.ref
77
+ : String(pr.head.ref)
78
+ : 'feature';
79
+ // Filter out malformed files and handle invalid data types
80
+ const validFiles = files
81
+ ? files
82
+ .filter(file => file && typeof file === 'object' && file.filename)
83
+ .map(file => ({
84
+ filename: typeof file.filename === 'string'
85
+ ? file.filename
86
+ : String(file.filename || 'unknown'),
87
+ additions: typeof file.additions === 'number' ? Math.max(0, file.additions) : 0,
88
+ deletions: typeof file.deletions === 'number' ? Math.max(0, file.deletions) : 0,
89
+ changes: typeof file.changes === 'number' ? Math.max(0, file.changes) : 0,
90
+ patch: typeof file.patch === 'string' ? file.patch : undefined,
91
+ status: (['added', 'removed', 'modified', 'renamed'].includes(file.status)
92
+ ? file.status
93
+ : 'modified'),
94
+ }))
95
+ .filter(file => file.filename.length > 0) // Remove files with empty names
96
+ : [];
97
+ const prInfo = {
98
+ number: typeof pr.number === 'number' ? pr.number : parseInt(String(pr.number || 1), 10),
99
+ title,
100
+ body,
101
+ author,
102
+ base,
103
+ head,
104
+ files: validFiles,
105
+ totalAdditions: validFiles.reduce((sum, file) => sum + file.additions, 0),
106
+ totalDeletions: validFiles.reduce((sum, file) => sum + file.deletions, 0),
107
+ fullDiff: this.generateFullDiff(validFiles),
108
+ };
109
+ // Add commit diff for incremental analysis
110
+ if (commitSha) {
111
+ console.log(`🔧 Fetching incremental diff for commit: ${commitSha}`);
112
+ prInfo.commitDiff = await this.fetchCommitDiff(owner, repo, commitSha);
113
+ prInfo.isIncremental = true;
114
+ if (!prInfo.commitDiff || prInfo.commitDiff.length === 0) {
115
+ console.warn(`⚠️ No commit diff retrieved for ${commitSha}, will use full diff as fallback`);
116
+ }
117
+ else {
118
+ console.log(`✅ Incremental diff retrieved (${prInfo.commitDiff.length} chars)`);
119
+ }
120
+ }
121
+ else {
122
+ prInfo.isIncremental = false;
123
+ }
124
+ return prInfo;
125
+ }
126
+ async fetchPRComments(owner, repo, prNumber) {
127
+ const { data: comments } = await this.withRetry(() => this.octokit.rest.issues.listComments({
128
+ owner,
129
+ repo,
130
+ issue_number: prNumber,
131
+ }));
132
+ return comments.map(comment => ({
133
+ id: comment.id,
134
+ author: comment.user?.login || 'unknown',
135
+ body: comment.body || '',
136
+ createdAt: comment.created_at,
137
+ updatedAt: comment.updated_at,
138
+ }));
139
+ }
140
+ async withRetry(operation) {
141
+ let lastError = new Error('Unknown error');
142
+ for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
143
+ try {
144
+ return await operation();
145
+ }
146
+ catch (error) {
147
+ // Preserve the original error object if possible
148
+ if (error instanceof Error) {
149
+ lastError = error;
150
+ }
151
+ else if (typeof error === 'object' && error !== null) {
152
+ // For objects like {code: 'ETIMEDOUT', message: 'Network timeout'}
153
+ const errorObj = error;
154
+ const message = errorObj.message || errorObj.code || 'Unknown error';
155
+ lastError = new Error(String(message));
156
+ // Preserve important properties
157
+ Object.assign(lastError, error);
158
+ }
159
+ else {
160
+ lastError = new Error(String(error));
161
+ }
162
+ // Don't retry on the last attempt
163
+ if (attempt === this.maxRetries) {
164
+ break;
165
+ }
166
+ // Check if this is a retryable error
167
+ if (this.isRetryableError(error)) {
168
+ const delay = Math.min(1000 * Math.pow(2, attempt), 5000); // Exponential backoff, max 5s
169
+ await new Promise(resolve => setTimeout(resolve, delay));
170
+ }
171
+ else {
172
+ // Non-retryable error, fail immediately with original error
173
+ throw error;
174
+ }
175
+ }
176
+ }
177
+ throw lastError;
178
+ }
179
+ isRetryableError(error) {
180
+ // Retry on network timeouts, connection errors, and temporary server errors
181
+ const retryableErrors = ['ETIMEDOUT', 'ECONNRESET', 'ECONNREFUSED', 'ENOTFOUND', 'EAI_AGAIN'];
182
+ const retryableStatuses = [408, 429, 500, 502, 503, 504];
183
+ // Type guard for error objects
184
+ if (typeof error !== 'object' || error === null) {
185
+ return false;
186
+ }
187
+ const err = error;
188
+ return ((err.code !== undefined && retryableErrors.includes(err.code)) ||
189
+ (err.status !== undefined && retryableStatuses.includes(err.status)) ||
190
+ (err.response?.status !== undefined && retryableStatuses.includes(err.response.status)));
191
+ }
192
+ }
193
+ exports.PRAnalyzer = PRAnalyzer;
194
+ //# sourceMappingURL=pr-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-analyzer.js","sourceRoot":"","sources":["../src/pr-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import { Octokit } from '@octokit/rest';
2
+ export interface PRDetectionResult {
3
+ prNumber: number | null;
4
+ confidence: 'high' | 'medium' | 'low';
5
+ source: 'direct' | 'api_query' | 'comment' | 'branch_search' | 'commit_search';
6
+ details?: string;
7
+ }
8
+ export interface GitHubEventContext {
9
+ event_name: string;
10
+ repository?: {
11
+ owner: {
12
+ login: string;
13
+ };
14
+ name: string;
15
+ };
16
+ event?: {
17
+ pull_request?: {
18
+ number: number;
19
+ head?: {
20
+ sha: string;
21
+ };
22
+ };
23
+ issue?: {
24
+ number: number;
25
+ pull_request?: any;
26
+ };
27
+ comment?: any;
28
+ action?: string;
29
+ commits?: any[];
30
+ head_commit?: {
31
+ id: string;
32
+ };
33
+ ref?: string;
34
+ };
35
+ payload?: any;
36
+ }
37
+ /**
38
+ * Robust PR detection utility that works across all GitHub event types
39
+ */
40
+ export declare class PRDetector {
41
+ private octokit;
42
+ private debug;
43
+ constructor(octokit: Octokit, debug?: boolean);
44
+ private log;
45
+ /**
46
+ * Detect PR number from GitHub context with comprehensive fallback strategies
47
+ */
48
+ detectPRNumber(context: GitHubEventContext, owner?: string, repo?: string): Promise<PRDetectionResult>;
49
+ /**
50
+ * Strategy 1: Detect PR from direct PR events
51
+ */
52
+ private detectFromDirectPREvent;
53
+ /**
54
+ * Strategy 2: Detect PR from issue comment events
55
+ */
56
+ private detectFromIssueComment;
57
+ /**
58
+ * Strategy 3: Detect PR from push events by querying associated PRs
59
+ */
60
+ private detectFromPushEvent;
61
+ /**
62
+ * Strategy 4: Detect PR by searching current branch
63
+ */
64
+ private detectFromBranch;
65
+ /**
66
+ * Strategy 5: Detect PR by searching for commits
67
+ */
68
+ private detectFromCommit;
69
+ /**
70
+ * Search for PRs containing a specific commit
71
+ */
72
+ private searchPRsByCommit;
73
+ /**
74
+ * Get PR detection summary for debugging
75
+ */
76
+ getDetectionStrategies(): string[];
77
+ }
78
+ //# sourceMappingURL=pr-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-detector.d.ts","sourceRoot":"","sources":["../src/pr-detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,eAAe,GAAG,eAAe,CAAC;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE;QACX,KAAK,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QACzB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE;gBAAE,GAAG,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC;QAC1D,KAAK,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,YAAY,CAAC,EAAE,GAAG,CAAA;SAAE,CAAC;QAC/C,OAAO,CAAC,EAAE,GAAG,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;QAChB,WAAW,CAAC,EAAE;YAAE,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,KAAK,CAAU;gBAEX,OAAO,EAAE,OAAO,EAAE,KAAK,UAAQ;IAK3C,OAAO,CAAC,GAAG;IAMX;;OAEG;IACU,cAAc,CACzB,OAAO,EAAE,kBAAkB,EAC3B,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,iBAAiB,CAAC;IAwE7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAc/B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;OAEG;YACW,mBAAmB;IAyEjC;;OAEG;YACW,gBAAgB;IAgF9B;;OAEG;YACW,gBAAgB;IAwB9B;;OAEG;YACW,iBAAiB;IA+E/B;;OAEG;IACI,sBAAsB,IAAI,MAAM,EAAE;CAS1C"}