@archznn/xavva 3.1.2 → 3.2.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 (80) hide show
  1. package/README.md +221 -12
  2. package/package.json +3 -2
  3. package/src/commands/AuditCommand.ts +12 -10
  4. package/src/commands/BuildCommand.ts +9 -7
  5. package/src/commands/ChangelogCommand.ts +5 -5
  6. package/src/commands/CleanCommand.ts +242 -0
  7. package/src/commands/CompletionCommand.ts +7 -7
  8. package/src/commands/DbCommand.ts +43 -14
  9. package/src/commands/DeployCommand.ts +252 -229
  10. package/src/commands/DepsCommand.ts +174 -174
  11. package/src/commands/DockerCommand.ts +35 -4
  12. package/src/commands/DoctorCommand.ts +252 -239
  13. package/src/commands/EncodingCommand.ts +26 -19
  14. package/src/commands/HealthCommand.ts +7 -7
  15. package/src/commands/HelpCommand.ts +34 -14
  16. package/src/commands/HistoryCommand.ts +5 -5
  17. package/src/commands/HttpCommand.ts +27 -1
  18. package/src/commands/IdeCommand.ts +313 -0
  19. package/src/commands/InitCommand.ts +26 -25
  20. package/src/commands/LogsCommand.ts +8 -6
  21. package/src/commands/ProfilesCommand.ts +6 -6
  22. package/src/commands/RedoCommand.ts +2 -2
  23. package/src/commands/RunCommand.ts +64 -24
  24. package/src/commands/StartCommand.ts +9 -7
  25. package/src/commands/TestCommand.ts +25 -1
  26. package/src/commands/TomcatCommand.ts +232 -88
  27. package/src/config/versions.ts +111 -9
  28. package/src/di/container.ts +239 -105
  29. package/src/errors/ErrorHandler.ts +23 -19
  30. package/src/errors/errorMessages.ts +235 -0
  31. package/src/index.ts +20 -6
  32. package/src/logging/FileLogger.ts +235 -0
  33. package/src/logging/Logger.ts +545 -0
  34. package/src/logging/OperationLogger.ts +296 -0
  35. package/src/logging/ProgressLogger.ts +187 -0
  36. package/src/logging/TableLogger.ts +246 -0
  37. package/src/logging/colors.ts +167 -0
  38. package/src/logging/constants.ts +176 -0
  39. package/src/logging/formatters.ts +337 -0
  40. package/src/logging/index.ts +93 -0
  41. package/src/logging/types.ts +64 -0
  42. package/src/plugins/PluginManager.ts +325 -0
  43. package/src/plugins/types.ts +82 -0
  44. package/src/services/AuditService.ts +5 -3
  45. package/src/services/BuildService.ts +15 -17
  46. package/src/services/DashboardService.ts +14 -3
  47. package/src/services/DbService.ts +35 -34
  48. package/src/services/DependencyAnalyzerService.ts +18 -18
  49. package/src/services/DependencyCacheService.ts +303 -0
  50. package/src/services/DeployWatcher.ts +127 -23
  51. package/src/services/DockerService.ts +3 -3
  52. package/src/services/EmbeddedTomcatService.ts +13 -12
  53. package/src/services/FileWatcher.ts +15 -7
  54. package/src/services/HttpService.ts +5 -5
  55. package/src/services/LogAnalyzer.ts +26 -22
  56. package/src/services/PerformanceProfiler.ts +267 -0
  57. package/src/services/ProjectService.ts +3 -0
  58. package/src/services/TestService.ts +3 -3
  59. package/src/services/TomcatService.ts +46 -25
  60. package/src/services/tomcat/TomcatBackupManager.ts +330 -0
  61. package/src/services/tomcat/TomcatChecksumVerifier.ts +211 -0
  62. package/src/services/tomcat/TomcatCompatibilityChecker.ts +298 -0
  63. package/src/services/tomcat/TomcatDownloadCache.ts +250 -0
  64. package/src/services/tomcat/TomcatDownloadService.ts +335 -0
  65. package/src/services/tomcat/TomcatInstallerService.ts +474 -0
  66. package/src/services/tomcat/TomcatMirrorManager.ts +181 -0
  67. package/src/services/tomcat/index.ts +36 -0
  68. package/src/services/tomcat/types.ts +120 -0
  69. package/src/types/args.ts +68 -1
  70. package/src/types/configSchema.ts +174 -0
  71. package/src/utils/ChangelogGenerator.ts +11 -11
  72. package/src/utils/LoggerLevel.ts +44 -20
  73. package/src/utils/ProgressBar.ts +87 -46
  74. package/src/utils/argsParser.ts +260 -0
  75. package/src/utils/config.ts +340 -189
  76. package/src/utils/constants.ts +87 -9
  77. package/src/utils/dryRun.ts +192 -0
  78. package/src/utils/processManager.ts +23 -7
  79. package/src/utils/security.ts +293 -0
  80. package/src/utils/ui.ts +299 -428
@@ -1,19 +1,62 @@
1
1
  import type { Command } from "./Command";
2
2
  import type { AppConfig, CLIArguments } from "../types/config";
3
- import { EmbeddedTomcatService } from "../services/EmbeddedTomcatService";
4
- import { Logger } from "../utils/ui";
3
+ import { Logger, C } from "../utils/ui";
4
+ // TomcatManagerService será implementado em fase futura
5
+ import { TomcatInstallerService } from "../services/tomcat";
5
6
  import path from "path";
6
7
  import fs from "fs";
7
8
 
8
9
  export class TomcatCommand implements Command {
10
+ private installer = new TomcatInstallerService();
11
+
12
+ private showHelp(): void {
13
+ Logger.section("Tomcat Command");
14
+ Logger.log(`${C.bold}Usage:${C.reset} xavva tomcat <action> [options]`);
15
+ Logger.newline();
16
+ Logger.log(`${C.bold}Actions:${C.reset}`);
17
+ Logger.log(` ${C.primary}list${C.reset} List available Tomcat versions`);
18
+ Logger.log(` ${C.primary}installed${C.reset} List installed versions`);
19
+ Logger.log(` ${C.primary}install${C.reset} Install a version`);
20
+ Logger.log(` ${C.primary}use${C.reset} Set version for this project`);
21
+ Logger.log(` ${C.primary}uninstall${C.reset} Remove a version`);
22
+ Logger.log(` ${C.primary}status${C.reset} Show current configuration`);
23
+ Logger.log(` ${C.primary}backup${C.reset} Manage backups`);
24
+ Logger.log(` ${C.primary}cache${C.reset} Manage download cache`);
25
+ Logger.log(` ${C.primary}mirrors${C.reset} Test and select mirrors`);
26
+ Logger.newline();
27
+ Logger.log(`${C.bold}Install Options:${C.reset}`);
28
+ Logger.log(` ${C.primary}--mirror${C.reset} <name> Use specific mirror (or 'auto')`);
29
+ Logger.log(` ${C.primary}--no-checksum${C.reset} Skip checksum verification`);
30
+ Logger.log(` ${C.primary}--no-cache${C.reset} Don't use download cache`);
31
+ Logger.log(` ${C.primary}--no-backup${C.reset} Skip backup if exists`);
32
+ Logger.log(` ${C.primary}--silent${C.reset} Silent mode (CI/CD)`);
33
+ Logger.log(` ${C.primary}--timeout${C.reset} <sec> Download timeout (default: 300)`);
34
+ Logger.log(` ${C.primary}--retries${C.reset} <n> Retry attempts (default: 3)`);
35
+ Logger.log(` ${C.primary}--force${C.reset} Force reinstallation`);
36
+ Logger.log(` ${C.primary}--parallel${C.reset} Install multiple versions`);
37
+ Logger.newline();
38
+ Logger.log(`${C.bold}Examples:${C.reset}`);
39
+ Logger.log(` xavva tomcat list`);
40
+ Logger.log(` xavva tomcat install 10.1.52`);
41
+ Logger.log(` xavva tomcat install 9.0.115 --mirror auto`);
42
+ Logger.log(` xavva tomcat install 10.1.52 9.0.115 --parallel`);
43
+ Logger.log(` xavva tomcat use 10.1.52`);
44
+ Logger.log(` xavva tomcat backup list`);
45
+ Logger.log(` xavva tomcat cache stats`);
46
+ Logger.log(` xavva tomcat mirrors test`);
47
+ }
48
+
9
49
  async execute(config: AppConfig, args?: CLIArguments, positionals?: string[]): Promise<void> {
10
- // A ação vem como positional após "tomcat" (ex: xavva tomcat list)
50
+ if (args?.help) {
51
+ this.showHelp();
52
+ return;
53
+ }
54
+
11
55
  const tomcatIndex = positionals?.indexOf("tomcat") ?? -1;
12
56
  const action = positionals && tomcatIndex >= 0 && positionals[tomcatIndex + 1]
13
57
  ? positionals[tomcatIndex + 1]
14
58
  : "status";
15
59
 
16
- // Argumentos extras após a ação (ex: xavva tomcat install 9.0.115)
17
60
  const extraArgs = positionals && tomcatIndex >= 0 ? positionals.slice(tomcatIndex + 2) : [];
18
61
 
19
62
  switch (action) {
@@ -21,10 +64,10 @@ export class TomcatCommand implements Command {
21
64
  await this.handleInstall(config, args, extraArgs);
22
65
  break;
23
66
  case "list":
24
- this.handleList();
67
+ await this.handleList();
25
68
  break;
26
69
  case "installed":
27
- this.handleInstalled();
70
+ await this.handleInstalled();
28
71
  break;
29
72
  case "use":
30
73
  await this.handleUse(config, args, extraArgs);
@@ -32,61 +75,98 @@ export class TomcatCommand implements Command {
32
75
  case "uninstall":
33
76
  await this.handleUninstall(config, args, extraArgs);
34
77
  break;
78
+ case "backup":
79
+ await this.handleBackup(extraArgs);
80
+ break;
81
+ case "cache":
82
+ await this.handleCache(extraArgs);
83
+ break;
84
+ case "mirrors":
85
+ await this.handleMirrors(extraArgs);
86
+ break;
35
87
  case "status":
36
- await this.handleStatus(config);
88
+ Logger.info("Status", "Tomcat manager avançado em desenvolvimento");
37
89
  break;
38
90
  default:
39
91
  Logger.error(`Ação desconhecida: ${action}`);
40
- Logger.info("Ações disponíveis", "install, list, installed, use, uninstall, status");
92
+ Logger.info("Ações disponíveis", "install, list, installed, use, uninstall, backup, cache, mirrors, status");
41
93
  }
42
94
  }
43
95
 
44
96
  private async handleInstall(config: AppConfig, args?: CLIArguments, extraArgs: string[] = []): Promise<void> {
45
- // Versão pode vir de: flag --tomcat-version, argumento posicional, config, ou padrão
46
- const version = args?.["tomcat-version"] || extraArgs[0] || config.tomcat.version || "10.1.52";
47
-
48
- // Detectar webapp path
49
- const webappPath = config.project.buildTool === "maven"
50
- ? path.join(process.cwd(), "src", "main", "webapp")
51
- : path.join(process.cwd(), "src", "main", "webapp");
52
-
53
- const service = new EmbeddedTomcatService({
54
- version,
55
- port: config.tomcat.port,
56
- webappPath
57
- });
58
-
59
- if (service.checkInstallation()) {
60
- Logger.info("Tomcat", `Versão ${version} já está instalada`);
61
- const info = service.getInfo();
62
- Logger.config("Local", info.home);
63
- return;
97
+ // Verifica modo paralelo
98
+ const isParallel = args?.parallel || extraArgs.includes("--parallel");
99
+
100
+ // Coleta versões para instalar
101
+ let versions: string[] = [];
102
+
103
+ // Versão via flag
104
+ if (args?.["tomcat-version"]) {
105
+ versions.push(args["tomcat-version"]);
64
106
  }
107
+
108
+ // Versões via args extras (remove flags)
109
+ const versionArgs = extraArgs.filter(arg => !arg.startsWith("--"));
110
+ versions.push(...versionArgs);
111
+
112
+ // Se nenhuma versão especificada, usa padrão ou config
113
+ if (versions.length === 0) {
114
+ versions.push(config.tomcat.version || "10.1.52");
115
+ }
116
+
117
+ // Remove duplicatas
118
+ versions = [...new Set(versions)];
65
119
 
66
- const installed = await service.install();
67
- if (installed) {
68
- Logger.success(`Tomcat ${version} instalado com sucesso!`);
120
+ const installOptions = {
121
+ version: versions[0], // Será sobrescrito no loop/paralelo
122
+ mirror: args?.["tomcat-mirror"] as string | undefined,
123
+ verifyChecksum: !args?.["no-checksum"] && !extraArgs.includes("--no-checksum"),
124
+ useCache: !args?.["no-cache"] && !extraArgs.includes("--no-cache"),
125
+ backup: !args?.["no-backup"] && !extraArgs.includes("--no-backup"),
126
+ silent: args?.silent || extraArgs.includes("--silent"),
127
+ timeout: parseInt(args?.timeout as string || "300"),
128
+ retries: parseInt(args?.retries as string || "3"),
129
+ force: args?.force || extraArgs.includes("--force"),
130
+ projectPath: process.cwd()
131
+ };
132
+
133
+ if (isParallel && versions.length > 1) {
134
+ await this.installer.installParallel(versions, installOptions);
69
135
  } else {
70
- Logger.error("Falha na instalação");
136
+ for (const version of versions) {
137
+ const result = await this.installer.install({
138
+ ...installOptions,
139
+ version
140
+ });
141
+
142
+ if (!result.success) {
143
+ Logger.error(`Falha ao instalar ${version}: ${result.error}`);
144
+ }
145
+ }
71
146
  }
72
147
  }
73
148
 
74
- private handleList(): void {
75
- Logger.section("Versões Disponíveis para Download");
76
- const versions = EmbeddedTomcatService.getAvailableVersions();
149
+ private async handleList(): Promise<void> {
150
+ Logger.section("Versões Disponíveis");
77
151
 
78
- for (const version of versions) {
79
- Logger.log(` ${Logger.C.primary}•${Logger.C.reset} ${version}`);
80
- }
152
+ const versions = ["11.0.6", "10.1.52", "10.0.27", "9.0.96", "8.5.100"];
81
153
 
154
+ Logger.log(`${C.bold}Recomendadas:${C.reset}`);
155
+ Logger.log(` ${C.success}✓${C.reset} 10.1.52 - Jakarta EE 10, Servlet 6.0`);
156
+ Logger.log(` ${C.success}✓${C.reset} 9.0.96 - Java EE 8, Servlet 4.0 (mais estável)`);
82
157
  Logger.newline();
83
- Logger.info("Versão padrão", "10.1.52");
158
+
159
+ Logger.log(`${C.bold}Outras versões:${C.reset}`);
160
+ Logger.log(` ${C.primary}•${C.reset} 11.0.6 - Jakarta EE 11, requer Java 21`);
161
+ Logger.log(` ${C.primary}•${C.reset} 10.0.27 - Jakarta EE 9 (legado)`);
162
+ Logger.log(` ${C.primary}•${C.reset} 8.5.100 - Java EE 7 (legado)`);
84
163
  Logger.newline();
164
+
85
165
  Logger.info("Dica", "Use 'xavva tomcat installed' para ver versões já instaladas");
86
166
  }
87
167
 
88
- private handleInstalled(): void {
89
- const installed = EmbeddedTomcatService.listInstalledVersions();
168
+ private async handleInstalled(): Promise<void> {
169
+ const installed = await this.installer.listInstalled();
90
170
 
91
171
  Logger.section("Versões Instaladas");
92
172
 
@@ -97,7 +177,9 @@ export class TomcatCommand implements Command {
97
177
  }
98
178
 
99
179
  for (const version of installed) {
100
- Logger.log(` ${Logger.C.success}✓${Logger.C.reset} ${version}`);
180
+ const sizeMB = (version.size / 1024 / 1024).toFixed(1);
181
+ Logger.log(` ${C.success}✓${C.reset} ${C.bold}${version.version}${C.reset} (${sizeMB} MB)`);
182
+ Logger.log(` ${C.gray}Local:${C.reset} ${version.home}`);
101
183
  }
102
184
 
103
185
  Logger.newline();
@@ -110,37 +192,28 @@ export class TomcatCommand implements Command {
110
192
  if (!version) {
111
193
  Logger.error("Versão não especificada");
112
194
  Logger.info("Uso", "xavva tomcat use <version>");
113
- Logger.info("Exemplo", "xavva tomcat use 9.0.115");
195
+ Logger.info("Exemplo", "xavva tomcat use 10.1.52");
114
196
  Logger.newline();
115
- Logger.info("Versões instaladas", "");
116
- this.handleInstalled();
197
+ await this.handleInstalled();
117
198
  return;
118
199
  }
119
200
 
120
- // Verifica se a versão está instalada
121
- const service = new EmbeddedTomcatService({
122
- version,
123
- port: config.tomcat.port,
124
- webappPath: "."
125
- });
126
-
127
- if (!service.checkInstallation()) {
201
+ if (!this.installer.isInstalled(version)) {
128
202
  Logger.warn(`Tomcat ${version} não está instalado`);
129
203
  Logger.newline();
130
204
  Logger.info("Opções", "");
131
- Logger.log(` ${Logger.C.primary}1.${Logger.C.reset} Instalar agora: xavva tomcat install ${version}`);
132
- Logger.log(` ${Logger.C.primary}2.${Logger.C.reset} Ver instaladas: xavva tomcat installed`);
205
+ Logger.log(` ${C.primary}1.${C.reset} Instalar agora: xavva tomcat install ${version}`);
206
+ Logger.log(` ${C.primary}2.${C.reset} Ver instaladas: xavva tomcat installed`);
133
207
  return;
134
208
  }
135
209
 
136
- // Salva a versão no xavva.json do projeto
137
210
  await this.saveTomcatVersion(version);
138
211
 
139
212
  Logger.success(`Tomcat ${version} configurado para este projeto!`);
140
213
  Logger.newline();
141
214
  Logger.info("Próximos comandos", "");
142
- Logger.log(` ${Logger.C.primary}•${Logger.C.reset} xavva dev # Iniciar desenvolvimento`);
143
- Logger.log(` ${Logger.C.primary}•${Logger.C.reset} xavva deploy # Fazer deploy`);
215
+ Logger.log(` ${C.primary}•${C.reset} xavva dev # Iniciar desenvolvimento`);
216
+ Logger.log(` ${C.primary}•${C.reset} xavva deploy # Fazer deploy`);
144
217
  }
145
218
 
146
219
  private async saveTomcatVersion(version: string): Promise<void> {
@@ -163,47 +236,118 @@ export class TomcatCommand implements Command {
163
236
  }
164
237
 
165
238
  private async handleUninstall(config: AppConfig, args?: CLIArguments, extraArgs: string[] = []): Promise<void> {
166
- // Versão pode vir de: flag --tomcat-version, argumento posicional, config, ou padrão
167
- const version = args?.["tomcat-version"] || extraArgs[0] || config.tomcat.version || "10.1.52";
239
+ const version = args?.["tomcat-version"] || extraArgs[0] || config.tomcat.version;
168
240
 
169
- const service = new EmbeddedTomcatService({
170
- version,
171
- port: config.tomcat.port,
172
- webappPath: "."
173
- });
241
+ if (!version) {
242
+ Logger.error("Versão não especificada");
243
+ Logger.info("Uso", "xavva tomcat uninstall <version>");
244
+ return;
245
+ }
174
246
 
175
- if (!service.checkInstallation()) {
247
+ if (!this.installer.isInstalled(version)) {
176
248
  Logger.warn(`Tomcat ${version} não está instalado`);
177
249
  return;
178
250
  }
179
251
 
180
252
  Logger.step(`Removendo Tomcat ${version}...`);
181
- await service.uninstall();
182
- Logger.success("Removido com sucesso!");
253
+ await this.installer.uninstall(version);
183
254
  }
184
255
 
185
- private async handleStatus(config: AppConfig): Promise<void> {
186
- Logger.section("Status do Tomcat");
187
-
188
- if (config.tomcat.embedded) {
189
- Logger.config("Modo", "Embutido");
190
- Logger.config("Versão", config.tomcat.version || "10.1.52");
191
- Logger.config("Porta", String(config.tomcat.port));
192
- Logger.config("Home", config.tomcat.path);
193
- } else {
194
- Logger.config("Modo", "Externo");
195
- Logger.config("CATALINA_HOME", config.tomcat.path);
196
- Logger.config("Porta", String(config.tomcat.port));
256
+ private async handleBackup(extraArgs: string[] = []): Promise<void> {
257
+ const subAction = extraArgs[0] || "list";
258
+
259
+ switch (subAction) {
260
+ case "list": {
261
+ const version = extraArgs[1];
262
+ const backups = await this.installer.listBackups(version);
263
+
264
+ Logger.section("Backups Disponíveis");
265
+
266
+ if (backups.length === 0) {
267
+ Logger.warn("Nenhum backup encontrado");
268
+ return;
269
+ }
270
+
271
+ for (const backup of backups) {
272
+ const sizeMB = (backup.size / 1024 / 1024).toFixed(1);
273
+ const date = backup.timestamp.toLocaleString();
274
+ Logger.log(` ${C.primary}•${C.reset} ${backup.version} - ${date} (${sizeMB} MB)`);
275
+ }
276
+ break;
277
+ }
278
+ case "restore": {
279
+ const version = extraArgs[1];
280
+ if (!version) {
281
+ Logger.error("Versão não especificada");
282
+ Logger.info("Uso", "xavva tomcat backup restore <version>");
283
+ return;
284
+ }
285
+
286
+ const success = await this.installer.restoreBackup(version);
287
+ if (success) {
288
+ Logger.success(`Backup de ${version} restaurado!`);
289
+ } else {
290
+ Logger.error("Falha ao restaurar backup");
291
+ }
292
+ break;
293
+ }
294
+ default:
295
+ Logger.error(`Ação de backup desconhecida: ${subAction}`);
296
+ Logger.info("Ações", "list, restore");
197
297
  }
198
-
199
- // Verificar se está rodando
200
- const netstat = Bun.spawnSync(["cmd", "/c", `netstat -ano | findstr :${config.tomcat.port}`]);
201
- const output = await new Response(netstat.stdout).text();
202
-
203
- if (output.trim()) {
204
- Logger.config("Status", `${Logger.C.success}Rodando${Logger.C.reset}`);
205
- } else {
206
- Logger.config("Status", `${Logger.C.warning}Parado${Logger.C.reset}`);
298
+ }
299
+
300
+ private async handleCache(extraArgs: string[] = []): Promise<void> {
301
+ const subAction = extraArgs[0] || "stats";
302
+
303
+ switch (subAction) {
304
+ case "stats": {
305
+ const stats = await this.installer.getCacheStats();
306
+ const sizeMB = (stats.size / 1024 / 1024).toFixed(1);
307
+
308
+ Logger.section("Estatísticas do Cache");
309
+ Logger.log(` ${C.primary}•${C.reset} Arquivos: ${stats.files}`);
310
+ Logger.log(` ${C.primary}•${C.reset} Tamanho: ${sizeMB} MB`);
311
+ break;
312
+ }
313
+ case "clear":
314
+ await this.installer.clearCache();
315
+ Logger.success("Cache limpo!");
316
+ break;
317
+ default:
318
+ Logger.error(`Ação de cache desconhecida: ${subAction}`);
319
+ Logger.info("Ações", "stats, clear");
320
+ }
321
+ }
322
+
323
+ private async handleMirrors(extraArgs: string[] = []): Promise<void> {
324
+ const { TomcatMirrorManager } = await import("../services/tomcat");
325
+ const manager = new TomcatMirrorManager();
326
+
327
+ const subAction = extraArgs[0] || "list";
328
+
329
+ switch (subAction) {
330
+ case "list": {
331
+ const mirrors = manager.getMirrors();
332
+ Logger.section("Mirrors Disponíveis");
333
+ for (const mirror of mirrors) {
334
+ Logger.log(` ${C.primary}•${C.reset} ${mirror.name} (${mirror.region})`);
335
+ }
336
+ break;
337
+ }
338
+ case "test": {
339
+ Logger.section("Testando Mirrors");
340
+ const tested = await manager.testAllMirrors();
341
+
342
+ for (const mirror of tested.slice(0, 5)) {
343
+ const color = mirror.latency < 200 ? C.success : mirror.latency < 500 ? C.warning : C.error;
344
+ Logger.log(` ${color}•${C.reset} ${mirror.name}: ${mirror.latency}ms`);
345
+ }
346
+ break;
347
+ }
348
+ default:
349
+ Logger.error(`Ação desconhecida: ${subAction}`);
350
+ Logger.info("Ações", "list, test");
207
351
  }
208
352
  }
209
353
  }
@@ -1,14 +1,18 @@
1
1
  /**
2
- * Configurações centralizadas de versões
3
- * Evita hardcoding espalhado pelo código
2
+ * Configurações centralizadas de versões e constantes
3
+ * Fonte única da verdade para todo o XAVVA CLI
4
4
  */
5
5
 
6
+ // ============================================
7
+ // VERSÕES
8
+ // ============================================
9
+
6
10
  export const VERSIONS = {
7
11
  // Versões padrão do Tomcat
8
12
  TOMCAT: {
9
13
  DEFAULT: "10.1.52",
10
14
  AVAILABLE: {
11
- "10.1.52": { sha512: "" },
15
+ "10.1.52": { sha512: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" },
12
16
  "9.0.115": { sha512: "" },
13
17
  "11.0.18": { sha512: "" },
14
18
  },
@@ -20,15 +24,113 @@ export const VERSIONS = {
20
24
  URL: "https://github.com/HotswapProjects/HotswapAgent/releases/download/RELEASE-{version}/hotswap-agent-{version}.jar",
21
25
  },
22
26
 
23
- // Configurações padrão
24
- DEFAULTS: {
25
- TOMCAT_PORT: 8080,
26
- DEBUG_PORT: 5005,
27
- DEBOUNCE_MS: 300,
28
- COOLING_MS: 1000,
27
+ // Requisitos
28
+ JDK: {
29
+ MIN: "11",
30
+ RECOMMENDED: "17",
29
31
  },
30
32
  } as const;
31
33
 
34
+ // ============================================
35
+ // PORTAS PADRÃO
36
+ // ============================================
37
+
38
+ export const PORTS = {
39
+ DEFAULT_TOMCAT: 8080,
40
+ DEFAULT_DEBUG: 5005,
41
+ } as const;
42
+
43
+ // ============================================
44
+ // TIMEOUTS (ms)
45
+ // ============================================
46
+
47
+ export const TIMEOUTS = {
48
+ SHUTDOWN: 5000,
49
+ DEBOUNCE: 300,
50
+ COOLING: 1000,
51
+ WATCHER_DEBOUNCE: 1500,
52
+ BROWSER_OPEN: 800,
53
+ DEPLOY_HEALTH_CHECK: 1500,
54
+ HOTSWAP: 500,
55
+ TOMCAT_CLEAN_RETRY: 50,
56
+ } as const;
57
+
58
+ // ============================================
59
+ // LIMITES E TAMANHOS
60
+ // ============================================
61
+
62
+ export const LIMITS = {
63
+ MAX_LOG_SCROLLBUFFER: 1000,
64
+ MAX_BUILD_ERRORS_SHOWN: 15,
65
+ MAX_HISTORY_ITEMS: 10,
66
+ MAX_DUPLICATE_LOGS: 5,
67
+ RATE_LIMIT_WINDOW_MS: 5000,
68
+ JAR_INTEGRITY_BUFFER_SIZE: 1024,
69
+ JAR_MIN_VALID_SIZE: 1000,
70
+ ZIP_EOCD_SIGNATURE_SIZE: 4,
71
+ } as const;
72
+
73
+ // ============================================
74
+ // DASHBOARD
75
+ // ============================================
76
+
77
+ export const DASHBOARD = {
78
+ REFRESH_INTERVAL_MS: 1000,
79
+ LOG_SLICE_LINES: 1000,
80
+ } as const;
81
+
82
+ // ============================================
83
+ // BUILD
84
+ // ============================================
85
+
86
+ export const BUILD = {
87
+ MAVEN_PARALLEL_THREADS: "1C",
88
+ JVM_MEMORY_OPTS: "-Xms512m -Xmx1024m -XX:+UseParallelGC",
89
+ GRADLE_MEMORY_OPTS: "-Xmx1024m -Dorg.gradle.daemon=true",
90
+ } as const;
91
+
92
+ // ============================================
93
+ // EXIT CODES
94
+ // ============================================
95
+
96
+ export const EXIT_CODES = {
97
+ SUCCESS: 0,
98
+ GENERIC_ERROR: 1,
99
+ INVALID_COMMAND: 2,
100
+ BUILD_FAILED: 3,
101
+ DEPLOY_FAILED: 4,
102
+ TOMCAT_ERROR: 5,
103
+ PROJECT_ERROR: 6,
104
+ AUDIT_ERROR: 7,
105
+ NETWORK_ERROR: 8,
106
+ FILESYSTEM_ERROR: 9,
107
+ COMMAND_ERROR: 10,
108
+ SIGINT: 130,
109
+ } as const;
110
+
111
+ // ============================================
112
+ // ARQUIVOS E DIRETÓRIOS
113
+ // ============================================
114
+
115
+ export const PATHS = {
116
+ JAVA_FILE_PATTERN: "**/*.java",
117
+ WAR_EXTENSION: ".war",
118
+ JAR_EXTENSION: ".jar",
119
+ XAVVA_DIR: ".xavva",
120
+ TARGET_DIR: "target",
121
+ BUILD_DIR: "build",
122
+ WEBAPP_DIR: "webapps",
123
+ } as const;
124
+
125
+ // ============================================
126
+ // CACHE
127
+ // ============================================
128
+
129
+ export const CACHE = {
130
+ MAX_AGE_MS: 24 * 60 * 60 * 1000,
131
+ VERSION: 1,
132
+ } as const;
133
+
32
134
  // Type helpers
33
135
  export type TomcatVersion = keyof typeof VERSIONS.TOMCAT.AVAILABLE;
34
136