gitlab-auto-reviewers 2.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.
- package/LICENSE +21 -0
- package/README.md +1878 -0
- package/dist/api/gitlab-api.d.ts +136 -0
- package/dist/api/gitlab-api.d.ts.map +1 -0
- package/dist/api/gitlab-api.js +334 -0
- package/dist/api/gitlab-api.js.map +1 -0
- package/dist/bin/cli.d.ts +10 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +186 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/bin/deprecated-mcp.d.ts +12 -0
- package/dist/bin/deprecated-mcp.d.ts.map +1 -0
- package/dist/bin/deprecated-mcp.js +73 -0
- package/dist/bin/deprecated-mcp.js.map +1 -0
- package/dist/bin/index.d.ts +18 -0
- package/dist/bin/index.d.ts.map +1 -0
- package/dist/bin/index.js +78 -0
- package/dist/bin/index.js.map +1 -0
- package/dist/bin/mcp.d.ts +11 -0
- package/dist/bin/mcp.d.ts.map +1 -0
- package/dist/bin/mcp.js +43 -0
- package/dist/bin/mcp.js.map +1 -0
- package/dist/cache/cache.service.d.ts +113 -0
- package/dist/cache/cache.service.d.ts.map +1 -0
- package/dist/cache/cache.service.js +213 -0
- package/dist/cache/cache.service.js.map +1 -0
- package/dist/cli/commands.d.ts +40 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +142 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/output.d.ts +24 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +143 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/config/config.service.d.ts +89 -0
- package/dist/config/config.service.d.ts.map +1 -0
- package/dist/config/config.service.js +169 -0
- package/dist/config/config.service.js.map +1 -0
- package/dist/datasources/git-data-source.interface.d.ts +140 -0
- package/dist/datasources/git-data-source.interface.d.ts.map +1 -0
- package/dist/datasources/git-data-source.interface.js +2 -0
- package/dist/datasources/git-data-source.interface.js.map +1 -0
- package/dist/datasources/gitlab-api-data-source.d.ts +127 -0
- package/dist/datasources/gitlab-api-data-source.d.ts.map +1 -0
- package/dist/datasources/gitlab-api-data-source.js +248 -0
- package/dist/datasources/gitlab-api-data-source.js.map +1 -0
- package/dist/datasources/local-git-data-source.d.ts +124 -0
- package/dist/datasources/local-git-data-source.d.ts.map +1 -0
- package/dist/datasources/local-git-data-source.js +580 -0
- package/dist/datasources/local-git-data-source.js.map +1 -0
- package/dist/errors/error-handler.d.ts +113 -0
- package/dist/errors/error-handler.d.ts.map +1 -0
- package/dist/errors/error-handler.js +230 -0
- package/dist/errors/error-handler.js.map +1 -0
- package/dist/index.d.ts +139 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +139 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/example.d.ts +15 -0
- package/dist/logging/example.d.ts.map +1 -0
- package/dist/logging/example.js +79 -0
- package/dist/logging/example.js.map +1 -0
- package/dist/logging/index.d.ts +7 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +7 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/logging/logger.service.d.ts +98 -0
- package/dist/logging/logger.service.d.ts.map +1 -0
- package/dist/logging/logger.service.js +160 -0
- package/dist/logging/logger.service.js.map +1 -0
- package/dist/mcp/server.d.ts +67 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +213 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +22 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +176 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/services/blacklist.service.d.ts +32 -0
- package/dist/services/blacklist.service.d.ts.map +1 -0
- package/dist/services/blacklist.service.js +59 -0
- package/dist/services/blacklist.service.js.map +1 -0
- package/dist/services/codeowners.service.d.ts +45 -0
- package/dist/services/codeowners.service.d.ts.map +1 -0
- package/dist/services/codeowners.service.js +200 -0
- package/dist/services/codeowners.service.js.map +1 -0
- package/dist/services/comment-builder.service.d.ts +48 -0
- package/dist/services/comment-builder.service.d.ts.map +1 -0
- package/dist/services/comment-builder.service.js +61 -0
- package/dist/services/comment-builder.service.js.map +1 -0
- package/dist/services/contributors.service.d.ts +52 -0
- package/dist/services/contributors.service.d.ts.map +1 -0
- package/dist/services/contributors.service.js +144 -0
- package/dist/services/contributors.service.js.map +1 -0
- package/dist/services/reviewer-service.d.ts +125 -0
- package/dist/services/reviewer-service.d.ts.map +1 -0
- package/dist/services/reviewer-service.js +554 -0
- package/dist/services/reviewer-service.js.map +1 -0
- package/dist/services/team-members.service.d.ts +29 -0
- package/dist/services/team-members.service.d.ts.map +1 -0
- package/dist/services/team-members.service.js +45 -0
- package/dist/services/team-members.service.js.map +1 -0
- package/dist/services/whitelist.service.d.ts +31 -0
- package/dist/services/whitelist.service.d.ts.map +1 -0
- package/dist/services/whitelist.service.js +51 -0
- package/dist/services/whitelist.service.js.map +1 -0
- package/dist/tools.d.ts +22 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +176 -0
- package/dist/tools.js.map +1 -0
- package/dist/types/index.d.ts +502 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +91 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types.d.ts +219 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/package.json +71 -0
package/dist/bin/cli.js
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Entry Point
|
|
3
|
+
*
|
|
4
|
+
* This is the entry point for the gitlab-auto-reviewers CLI.
|
|
5
|
+
* Parses command-line arguments and executes the appropriate command.
|
|
6
|
+
*
|
|
7
|
+
* @module bin/cli
|
|
8
|
+
*/
|
|
9
|
+
import { suggestReviewersCommand, displayHelp } from "../cli/commands.js";
|
|
10
|
+
import { existsSync, statSync } from "fs";
|
|
11
|
+
import { resolve } from "path";
|
|
12
|
+
/**
|
|
13
|
+
* Parse command-line arguments
|
|
14
|
+
*
|
|
15
|
+
* @param args - Command-line arguments (process.argv.slice(2))
|
|
16
|
+
* @returns Parsed CLI options
|
|
17
|
+
*/
|
|
18
|
+
function parseArguments(args) {
|
|
19
|
+
const options = {
|
|
20
|
+
repoPath: '',
|
|
21
|
+
};
|
|
22
|
+
for (let i = 0; i < args.length; i++) {
|
|
23
|
+
const arg = args[i];
|
|
24
|
+
const nextArg = args[i + 1];
|
|
25
|
+
switch (arg) {
|
|
26
|
+
case '--help':
|
|
27
|
+
case '-h':
|
|
28
|
+
return null; // Signal to display help
|
|
29
|
+
case '--repo-path':
|
|
30
|
+
if (!nextArg || nextArg.startsWith('--')) {
|
|
31
|
+
console.error('Error: --repo-path requires a value');
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
options.repoPath = nextArg;
|
|
35
|
+
i++;
|
|
36
|
+
break;
|
|
37
|
+
case '--mr':
|
|
38
|
+
if (!nextArg || nextArg.startsWith('--')) {
|
|
39
|
+
console.error('Error: --mr requires a value');
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
const mrIid = parseInt(nextArg, 10);
|
|
43
|
+
if (isNaN(mrIid) || mrIid <= 0) {
|
|
44
|
+
console.error('Error: --mr must be a positive integer');
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
options.mergeRequestIid = mrIid;
|
|
48
|
+
i++;
|
|
49
|
+
break;
|
|
50
|
+
case '--branch':
|
|
51
|
+
if (!nextArg || nextArg.startsWith('--')) {
|
|
52
|
+
console.error('Error: --branch requires a value');
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
options.branch = nextArg;
|
|
56
|
+
i++;
|
|
57
|
+
break;
|
|
58
|
+
case '--gitlab-url':
|
|
59
|
+
if (!nextArg || nextArg.startsWith('--')) {
|
|
60
|
+
console.error('Error: --gitlab-url requires a value');
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
options.gitlabUrl = nextArg;
|
|
64
|
+
i++;
|
|
65
|
+
break;
|
|
66
|
+
case '--gitlab-token':
|
|
67
|
+
if (!nextArg || nextArg.startsWith('--')) {
|
|
68
|
+
console.error('Error: --gitlab-token requires a value');
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
options.gitlabToken = nextArg;
|
|
72
|
+
i++;
|
|
73
|
+
break;
|
|
74
|
+
case '--format':
|
|
75
|
+
if (!nextArg || nextArg.startsWith('--')) {
|
|
76
|
+
console.error('Error: --format requires a value');
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
if (nextArg !== 'json' && nextArg !== 'text') {
|
|
80
|
+
console.error('Error: --format must be either "json" or "text"');
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
options.format = nextArg;
|
|
84
|
+
i++;
|
|
85
|
+
break;
|
|
86
|
+
case '--verbose':
|
|
87
|
+
case '-v':
|
|
88
|
+
options.verbose = true;
|
|
89
|
+
break;
|
|
90
|
+
default:
|
|
91
|
+
console.error(`Error: Unknown option: ${arg}`);
|
|
92
|
+
console.error('Use --help to see available options');
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return options;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Validate repository path
|
|
100
|
+
*
|
|
101
|
+
* @param repoPath - Path to validate
|
|
102
|
+
* @returns Absolute path if valid
|
|
103
|
+
* @throws Error if path is invalid
|
|
104
|
+
*/
|
|
105
|
+
function validateRepositoryPath(repoPath) {
|
|
106
|
+
if (!repoPath) {
|
|
107
|
+
throw new Error('Repository path is required. Use --repo-path to specify the path.');
|
|
108
|
+
}
|
|
109
|
+
const absolutePath = resolve(repoPath);
|
|
110
|
+
if (!existsSync(absolutePath)) {
|
|
111
|
+
throw new Error(`Repository path does not exist: ${absolutePath}`);
|
|
112
|
+
}
|
|
113
|
+
const stats = statSync(absolutePath);
|
|
114
|
+
if (!stats.isDirectory()) {
|
|
115
|
+
throw new Error(`Repository path is not a directory: ${absolutePath}`);
|
|
116
|
+
}
|
|
117
|
+
// Check if it's a git repository
|
|
118
|
+
const gitDir = resolve(absolutePath, '.git');
|
|
119
|
+
if (!existsSync(gitDir)) {
|
|
120
|
+
throw new Error(`Not a git repository: ${absolutePath} (no .git directory found)`);
|
|
121
|
+
}
|
|
122
|
+
return absolutePath;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Main CLI execution
|
|
126
|
+
*/
|
|
127
|
+
async function main() {
|
|
128
|
+
// When imported from index.ts, args will already have 'cli' removed
|
|
129
|
+
// When run directly, we need to handle it
|
|
130
|
+
const args = process.argv.slice(2);
|
|
131
|
+
// Remove 'cli' if it's the first argument (for direct execution)
|
|
132
|
+
const cliArgs = args[0] === 'cli' ? args.slice(1) : args;
|
|
133
|
+
// Handle help for CLI subcommand
|
|
134
|
+
if (cliArgs.length === 0 || cliArgs.includes('--help') || cliArgs.includes('-h')) {
|
|
135
|
+
displayHelp();
|
|
136
|
+
process.exit(0);
|
|
137
|
+
}
|
|
138
|
+
// Parse arguments
|
|
139
|
+
const options = parseArguments(cliArgs);
|
|
140
|
+
if (!options) {
|
|
141
|
+
displayHelp();
|
|
142
|
+
process.exit(0);
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
// Validate repository path
|
|
146
|
+
options.repoPath = validateRepositoryPath(options.repoPath);
|
|
147
|
+
// Execute command
|
|
148
|
+
const exitCode = await suggestReviewersCommand(options);
|
|
149
|
+
process.exit(exitCode);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
153
|
+
// Format error based on output format
|
|
154
|
+
if (options.format === 'json') {
|
|
155
|
+
const errorOutput = {
|
|
156
|
+
error: errorMessage,
|
|
157
|
+
...(options.verbose && error instanceof Error && error.stack ? { stack: error.stack } : {}),
|
|
158
|
+
};
|
|
159
|
+
console.error(JSON.stringify(errorOutput, null, 2));
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
console.error(`Error: ${errorMessage}`);
|
|
163
|
+
if (options.verbose && error instanceof Error && error.stack) {
|
|
164
|
+
console.error('\nStack trace:');
|
|
165
|
+
console.error(error.stack);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
process.exit(1);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Handle uncaught errors
|
|
172
|
+
process.on('uncaughtException', (error) => {
|
|
173
|
+
console.error('Uncaught exception:', error.message);
|
|
174
|
+
process.exit(1);
|
|
175
|
+
});
|
|
176
|
+
process.on('unhandledRejection', (reason) => {
|
|
177
|
+
const error = reason instanceof Error ? reason : new Error(String(reason));
|
|
178
|
+
console.error('Unhandled rejection:', error.message);
|
|
179
|
+
process.exit(1);
|
|
180
|
+
});
|
|
181
|
+
// Run main function
|
|
182
|
+
main().catch((error) => {
|
|
183
|
+
console.error('Fatal error:', error.message);
|
|
184
|
+
process.exit(1);
|
|
185
|
+
});
|
|
186
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Deprecated MCP Server Entry Point
|
|
4
|
+
*
|
|
5
|
+
* This is the deprecated entry point for the old 'auto-reviewers-mcp-server' command.
|
|
6
|
+
* It displays a deprecation warning and then delegates to the new MCP server.
|
|
7
|
+
*
|
|
8
|
+
* @deprecated Use 'gitlab-auto-reviewers mcp' instead
|
|
9
|
+
* @module bin/deprecated-mcp
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=deprecated-mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deprecated-mcp.d.ts","sourceRoot":"","sources":["../../src/bin/deprecated-mcp.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Deprecated MCP Server Entry Point
|
|
4
|
+
*
|
|
5
|
+
* This is the deprecated entry point for the old 'auto-reviewers-mcp-server' command.
|
|
6
|
+
* It displays a deprecation warning and then delegates to the new MCP server.
|
|
7
|
+
*
|
|
8
|
+
* @deprecated Use 'gitlab-auto-reviewers mcp' instead
|
|
9
|
+
* @module bin/deprecated-mcp
|
|
10
|
+
*/
|
|
11
|
+
import { AutoReviewerMCPServer } from "../mcp/server.js";
|
|
12
|
+
import { ErrorHandler } from "../errors/error-handler.js";
|
|
13
|
+
/**
|
|
14
|
+
* Display deprecation warning
|
|
15
|
+
*/
|
|
16
|
+
function displayDeprecationWarning() {
|
|
17
|
+
console.error(`
|
|
18
|
+
╔════════════════════════════════════════════════════════════════════════════╗
|
|
19
|
+
║ DEPRECATION WARNING ║
|
|
20
|
+
╠════════════════════════════════════════════════════════════════════════════╣
|
|
21
|
+
║ ║
|
|
22
|
+
║ The command 'auto-reviewers-mcp-server' is deprecated and will be ║
|
|
23
|
+
║ removed in a future version. ║
|
|
24
|
+
║ ║
|
|
25
|
+
║ Please update your configuration to use the new command: ║
|
|
26
|
+
║ ║
|
|
27
|
+
║ npx gitlab-auto-reviewers mcp ║
|
|
28
|
+
║ ║
|
|
29
|
+
║ Or update your MCP client configuration to use: ║
|
|
30
|
+
║ ║
|
|
31
|
+
║ "command": "npx", ║
|
|
32
|
+
║ "args": ["-y", "gitlab-auto-reviewers", "mcp"] ║
|
|
33
|
+
║ ║
|
|
34
|
+
║ For more information, see the migration guide: ║
|
|
35
|
+
║ https://github.com/your-org/gitlab-auto-reviewers#migration ║
|
|
36
|
+
║ ║
|
|
37
|
+
╚════════════════════════════════════════════════════════════════════════════╝
|
|
38
|
+
`);
|
|
39
|
+
}
|
|
40
|
+
// Display deprecation warning
|
|
41
|
+
displayDeprecationWarning();
|
|
42
|
+
// Initialize and start server (same as mcp.ts)
|
|
43
|
+
let server;
|
|
44
|
+
try {
|
|
45
|
+
server = new AutoReviewerMCPServer();
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
console.error("Failed to initialize MCP server:", error);
|
|
49
|
+
console.error(ErrorHandler.formatError(error instanceof Error ? error : new Error(String(error))));
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
process.on("SIGINT", async () => {
|
|
53
|
+
await server.shutdown();
|
|
54
|
+
process.exit(0);
|
|
55
|
+
});
|
|
56
|
+
process.on("SIGTERM", async () => {
|
|
57
|
+
await server.shutdown();
|
|
58
|
+
process.exit(0);
|
|
59
|
+
});
|
|
60
|
+
process.on('uncaughtException', (error) => {
|
|
61
|
+
console.error('Uncaught exception:', ErrorHandler.formatError(error));
|
|
62
|
+
server.shutdown().finally(() => process.exit(1));
|
|
63
|
+
});
|
|
64
|
+
process.on('unhandledRejection', (reason) => {
|
|
65
|
+
const error = reason instanceof Error ? reason : new Error(String(reason));
|
|
66
|
+
console.error('Unhandled rejection:', ErrorHandler.formatError(error));
|
|
67
|
+
server.shutdown().finally(() => process.exit(1));
|
|
68
|
+
});
|
|
69
|
+
server.run().catch((error) => {
|
|
70
|
+
console.error("Failed to start MCP server:", ErrorHandler.formatError(error));
|
|
71
|
+
process.exit(1);
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=deprecated-mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deprecated-mcp.js","sourceRoot":"","sources":["../../src/bin/deprecated-mcp.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D;;GAEG;AACH,SAAS,yBAAyB;IAChC,OAAO,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;CAqBf,CAAC,CAAC;AACH,CAAC;AAED,8BAA8B;AAC9B,yBAAyB,EAAE,CAAC;AAE5B,+CAA+C;AAC/C,IAAI,MAA6B,CAAC;AAElC,IAAI,CAAC;IACH,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;AACvC,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;IACzD,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;IAC9B,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;IACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;IAC/B,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;IACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;IACxC,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,MAAM,KAAK,GAAG,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC3B,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Main Entry Point
|
|
4
|
+
*
|
|
5
|
+
* This is the unified entry point for gitlab-auto-reviewers.
|
|
6
|
+
* Routes to either CLI or MCP mode based on the subcommand.
|
|
7
|
+
*
|
|
8
|
+
* @module bin/index
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Display main help text
|
|
12
|
+
*/
|
|
13
|
+
declare function displayMainHelp(): void;
|
|
14
|
+
/**
|
|
15
|
+
* Main execution
|
|
16
|
+
*/
|
|
17
|
+
declare function main(): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAIH;;GAEG;AACH,iBAAS,eAAe,IAAI,IAAI,CA2B/B;AAED;;GAEG;AACH,iBAAe,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA0BnC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Main Entry Point
|
|
5
|
+
*
|
|
6
|
+
* This is the unified entry point for gitlab-auto-reviewers.
|
|
7
|
+
* Routes to either CLI or MCP mode based on the subcommand.
|
|
8
|
+
*
|
|
9
|
+
* @module bin/index
|
|
10
|
+
*/
|
|
11
|
+
// No imports needed - dynamic imports are used below
|
|
12
|
+
/**
|
|
13
|
+
* Display main help text
|
|
14
|
+
*/
|
|
15
|
+
function displayMainHelp() {
|
|
16
|
+
console.log(`
|
|
17
|
+
gitlab-auto-reviewers
|
|
18
|
+
|
|
19
|
+
USAGE:
|
|
20
|
+
gitlab-auto-reviewers <SUBCOMMAND> [OPTIONS]
|
|
21
|
+
|
|
22
|
+
SUBCOMMANDS:
|
|
23
|
+
cli Run in CLI mode (local git repository analysis)
|
|
24
|
+
mcp Run in MCP server mode (for AI assistants)
|
|
25
|
+
|
|
26
|
+
OPTIONS:
|
|
27
|
+
--help, -h Display this help message
|
|
28
|
+
|
|
29
|
+
EXAMPLES:
|
|
30
|
+
# Run CLI mode
|
|
31
|
+
gitlab-auto-reviewers cli --repo-path . --mr 123
|
|
32
|
+
|
|
33
|
+
# Run MCP server mode
|
|
34
|
+
gitlab-auto-reviewers mcp
|
|
35
|
+
|
|
36
|
+
# Get help for specific subcommand
|
|
37
|
+
gitlab-auto-reviewers cli --help
|
|
38
|
+
gitlab-auto-reviewers mcp --help
|
|
39
|
+
|
|
40
|
+
For more information, visit: https://github.com/your-org/gitlab-auto-reviewers
|
|
41
|
+
`);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Main execution
|
|
45
|
+
*/
|
|
46
|
+
async function main() {
|
|
47
|
+
const args = process.argv.slice(2);
|
|
48
|
+
const subcommand = args[0];
|
|
49
|
+
// Handle help or no arguments
|
|
50
|
+
if (args.length === 0 || subcommand === '--help' || subcommand === '-h') {
|
|
51
|
+
displayMainHelp();
|
|
52
|
+
process.exit(0);
|
|
53
|
+
}
|
|
54
|
+
// Route to appropriate subcommand
|
|
55
|
+
if (subcommand === 'cli') {
|
|
56
|
+
// Import and run CLI
|
|
57
|
+
await import('./cli.js');
|
|
58
|
+
// The CLI module will handle its own execution
|
|
59
|
+
// We don't need to do anything here as it will call process.exit
|
|
60
|
+
}
|
|
61
|
+
else if (subcommand === 'mcp') {
|
|
62
|
+
// Import and run MCP server
|
|
63
|
+
await import('./mcp.js');
|
|
64
|
+
// The MCP module will handle its own execution
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
console.error(`Error: Unknown subcommand: ${subcommand}`);
|
|
68
|
+
console.error('Available subcommands: cli, mcp');
|
|
69
|
+
console.error('Use --help to see available options');
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Run main function
|
|
74
|
+
main().catch((error) => {
|
|
75
|
+
console.error('Fatal error:', error.message);
|
|
76
|
+
process.exit(1);
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":";;AAEA;;;;;;;GAOG;AAEH,qDAAqD;AAErD;;GAEG;AACH,SAAS,eAAe;IACtB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;CAyBb,CAAC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAE3B,8BAA8B;IAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxE,eAAe,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kCAAkC;IAClC,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,qBAAqB;QACrB,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QACzB,+CAA+C;QAC/C,iEAAiE;IACnE,CAAC;SAAM,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QAChC,4BAA4B;QAC5B,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QACzB,+CAA+C;IACjD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,8BAA8B,UAAU,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,oBAAoB;AACpB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* MCP Server Entry Point
|
|
4
|
+
*
|
|
5
|
+
* This is the entry point for the Auto Reviewers MCP Server.
|
|
6
|
+
* It initializes the server and handles process lifecycle events.
|
|
7
|
+
*
|
|
8
|
+
* @module bin/mcp
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/bin/mcp.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG"}
|
package/dist/bin/mcp.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* MCP Server Entry Point
|
|
4
|
+
*
|
|
5
|
+
* This is the entry point for the Auto Reviewers MCP Server.
|
|
6
|
+
* It initializes the server and handles process lifecycle events.
|
|
7
|
+
*
|
|
8
|
+
* @module bin/mcp
|
|
9
|
+
*/
|
|
10
|
+
import { AutoReviewerMCPServer } from "../mcp/server.js";
|
|
11
|
+
import { ErrorHandler } from "../errors/error-handler.js";
|
|
12
|
+
// Initialize and start server
|
|
13
|
+
let server;
|
|
14
|
+
try {
|
|
15
|
+
server = new AutoReviewerMCPServer();
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
console.error("Failed to initialize MCP server:", error);
|
|
19
|
+
console.error(ErrorHandler.formatError(error instanceof Error ? error : new Error(String(error))));
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
process.on("SIGINT", async () => {
|
|
23
|
+
await server.shutdown();
|
|
24
|
+
process.exit(0);
|
|
25
|
+
});
|
|
26
|
+
process.on("SIGTERM", async () => {
|
|
27
|
+
await server.shutdown();
|
|
28
|
+
process.exit(0);
|
|
29
|
+
});
|
|
30
|
+
process.on('uncaughtException', (error) => {
|
|
31
|
+
console.error('Uncaught exception:', ErrorHandler.formatError(error));
|
|
32
|
+
server.shutdown().finally(() => process.exit(1));
|
|
33
|
+
});
|
|
34
|
+
process.on('unhandledRejection', (reason) => {
|
|
35
|
+
const error = reason instanceof Error ? reason : new Error(String(reason));
|
|
36
|
+
console.error('Unhandled rejection:', ErrorHandler.formatError(error));
|
|
37
|
+
server.shutdown().finally(() => process.exit(1));
|
|
38
|
+
});
|
|
39
|
+
server.run().catch((error) => {
|
|
40
|
+
console.error("Failed to start MCP server:", ErrorHandler.formatError(error));
|
|
41
|
+
process.exit(1);
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/bin/mcp.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,8BAA8B;AAC9B,IAAI,MAA6B,CAAC;AAElC,IAAI,CAAC;IACH,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;AACvC,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;IACzD,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;IAC9B,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;IACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;IAC/B,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;IACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;IACxC,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,MAAM,KAAK,GAAG,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC3B,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache Service
|
|
3
|
+
*
|
|
4
|
+
* Provides in-memory caching with TTL (Time To Live) support for performance optimization.
|
|
5
|
+
* Supports automatic expiration and cache statistics tracking.
|
|
6
|
+
*/
|
|
7
|
+
import { Logger } from '../logging/logger.service.js';
|
|
8
|
+
/**
|
|
9
|
+
* Cache statistics
|
|
10
|
+
*
|
|
11
|
+
* @property hits - Number of cache hits
|
|
12
|
+
* @property misses - Number of cache misses
|
|
13
|
+
* @property size - Current number of entries in cache
|
|
14
|
+
* @property hitRate - Cache hit rate (hits / (hits + misses))
|
|
15
|
+
*/
|
|
16
|
+
export interface CacheStats {
|
|
17
|
+
hits: number;
|
|
18
|
+
misses: number;
|
|
19
|
+
size: number;
|
|
20
|
+
hitRate: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Cache options
|
|
24
|
+
*
|
|
25
|
+
* @property ttlMs - Time to live in milliseconds for cache entries
|
|
26
|
+
* @property maxSize - Maximum number of entries in cache (optional)
|
|
27
|
+
*/
|
|
28
|
+
export interface CacheOptions {
|
|
29
|
+
ttlMs: number;
|
|
30
|
+
maxSize?: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Default cache options
|
|
34
|
+
*/
|
|
35
|
+
export declare const DEFAULT_CACHE_OPTIONS: CacheOptions;
|
|
36
|
+
/**
|
|
37
|
+
* Cache Service for in-memory caching with TTL support
|
|
38
|
+
*/
|
|
39
|
+
/**
|
|
40
|
+
* Cache Service for in-memory caching with TTL support
|
|
41
|
+
*/
|
|
42
|
+
export declare class CacheService {
|
|
43
|
+
private cache;
|
|
44
|
+
private hits;
|
|
45
|
+
private misses;
|
|
46
|
+
private logger;
|
|
47
|
+
private options;
|
|
48
|
+
/**
|
|
49
|
+
* Create a new cache service
|
|
50
|
+
*
|
|
51
|
+
* @param options - Cache configuration options (ttlMs, maxSize)
|
|
52
|
+
* @param logger - Optional logger instance for logging cache operations
|
|
53
|
+
*/
|
|
54
|
+
constructor(options?: Partial<CacheOptions>, logger?: Logger);
|
|
55
|
+
/**
|
|
56
|
+
* Get a value from the cache
|
|
57
|
+
*/
|
|
58
|
+
get<T>(key: string): T | undefined;
|
|
59
|
+
/**
|
|
60
|
+
* Set a value in the cache
|
|
61
|
+
*/
|
|
62
|
+
set<T>(key: string, value: T, ttlMs?: number): void;
|
|
63
|
+
/**
|
|
64
|
+
* Check if a key exists in the cache and is not expired
|
|
65
|
+
*
|
|
66
|
+
* @param key - The cache key to check
|
|
67
|
+
* @returns True if key exists and is not expired, false otherwise
|
|
68
|
+
*/
|
|
69
|
+
has(key: string): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Delete a specific key from the cache
|
|
72
|
+
*
|
|
73
|
+
* @param key - The cache key to delete
|
|
74
|
+
* @returns True if key was deleted, false if key didn't exist
|
|
75
|
+
*/
|
|
76
|
+
delete(key: string): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Clear all entries from the cache
|
|
79
|
+
*/
|
|
80
|
+
clear(): void;
|
|
81
|
+
/**
|
|
82
|
+
* Invalidate all entries matching a pattern
|
|
83
|
+
*
|
|
84
|
+
* @param pattern - String or RegExp pattern to match cache keys against
|
|
85
|
+
* @returns Number of entries invalidated
|
|
86
|
+
*/
|
|
87
|
+
invalidatePattern(pattern: string | RegExp): number;
|
|
88
|
+
/**
|
|
89
|
+
* Remove expired entries from the cache
|
|
90
|
+
*/
|
|
91
|
+
cleanup(): number;
|
|
92
|
+
/**
|
|
93
|
+
* Get cache statistics
|
|
94
|
+
*/
|
|
95
|
+
getStats(): CacheStats;
|
|
96
|
+
/**
|
|
97
|
+
* Wrap an operation with caching
|
|
98
|
+
*/
|
|
99
|
+
wrap<T>(key: string, operation: () => Promise<T>, ttlMs?: number): Promise<T>;
|
|
100
|
+
/**
|
|
101
|
+
* Evict the oldest entry from the cache
|
|
102
|
+
*/
|
|
103
|
+
private evictOldest;
|
|
104
|
+
/**
|
|
105
|
+
* Get the current cache size
|
|
106
|
+
*/
|
|
107
|
+
get size(): number;
|
|
108
|
+
/**
|
|
109
|
+
* Get all cache keys
|
|
110
|
+
*/
|
|
111
|
+
keys(): string[];
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=cache.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.service.d.ts","sourceRoot":"","sources":["../../src/cache/cache.service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAUtD;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAGnC,CAAC;AAEF;;GAEG;AACH;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAyB;IAExC;;;;;OAKG;gBACS,OAAO,GAAE,OAAO,CAAC,YAAY,CAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAShE;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAsBlC;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAanD;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAgBzB;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAQ5B;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;;;;OAKG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAkBnD;;OAEG;IACH,OAAO,IAAI,MAAM;IAkBjB;;OAEG;IACH,QAAQ,IAAI,UAAU;IAYtB;;OAEG;IACG,IAAI,CAAC,CAAC,EACV,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,CAAC,CAAC;IAkBb;;OAEG;IACH,OAAO,CAAC,WAAW;IAiBnB;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,IAAI,MAAM,EAAE;CAGjB"}
|