@archznn/xavva 3.1.2 → 3.1.3

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/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > Ultra-fast development toolkit for Java Enterprise (Tomcat) on Windows, Linux & macOS
4
4
 
5
- [![Version](https://img.shields.io/badge/version-3.1.2-blue.svg)](https://github.com/leorsousa05/Xavva)
5
+ [![Version](https://img.shields.io/badge/version-3.1.3-blue.svg)](https://github.com/leorsousa05/Xavva)
6
6
  [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
7
7
 
8
8
  Xavva is a high-performance CLI built with **Bun** that transforms the Java/Tomcat development experience. It brings modern development workflows (like Node.js/Vite) to the Java Enterprise ecosystem with hot-reload, smart logging, and automated deployment.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@archznn/xavva",
3
- "version": "3.1.2",
3
+ "version": "3.1.3",
4
4
  "description": "Ultra-fast CLI tool for Java/Tomcat development with Hot-Reload and Zero Config. Supports Windows, Linux and macOS.",
5
5
  "module": "src/index.ts",
6
6
  "type": "module",
@@ -10,8 +10,35 @@ import { Logger } from "../utils/ui";
10
10
  import { ProcessManager } from "../utils/processManager";
11
11
 
12
12
  export class DbCommand implements Command {
13
+ private showHelp(): void {
14
+ Logger.section("Database Command");
15
+ Logger.log(`${Logger.C.bold}Usage:${Logger.C.reset} xavva db <action> [options]`);
16
+ Logger.newline();
17
+ Logger.log(`${Logger.C.bold}Actions:${Logger.C.reset}`);
18
+ Logger.log(` ${Logger.C.primary}status${Logger.C.reset} Show migration status`);
19
+ Logger.log(` ${Logger.C.primary}migrate${Logger.C.reset} Run pending migrations`);
20
+ Logger.log(` ${Logger.C.primary}reset${Logger.C.reset} Reset database (⚠️ destructive)`);
21
+ Logger.log(` ${Logger.C.primary}seed${Logger.C.reset} Populate with test data`);
22
+ Logger.newline();
23
+ Logger.log(`${Logger.C.bold}Options:${Logger.C.reset}`);
24
+ Logger.log(` --force Confirm destructive operations`);
25
+ Logger.log(` --env <name> Use environment config`);
26
+ Logger.newline();
27
+ Logger.log(`${Logger.C.bold}Examples:${Logger.C.reset}`);
28
+ Logger.log(` xavva db status`);
29
+ Logger.log(` xavva db migrate`);
30
+ Logger.log(` xavva db reset --force`);
31
+ }
32
+
13
33
  async execute(config: AppConfig, args?: CLIArguments, positionals?: string[]): Promise<void> {
14
34
  const processManager = ProcessManager.getInstance();
35
+
36
+ // Mostra help se solicitado
37
+ if (args?.help) {
38
+ this.showHelp();
39
+ return;
40
+ }
41
+
15
42
  const action = positionals?.[1] || "status";
16
43
 
17
44
  const service = new DbService(config.project.buildTool);
@@ -10,8 +10,39 @@ import { Logger } from "../utils/ui";
10
10
  import { ProcessManager } from "../utils/processManager";
11
11
 
12
12
  export class DockerCommand implements Command {
13
+ private showHelp(): void {
14
+ Logger.section("Docker Command");
15
+ Logger.log(`${Logger.C.bold}Usage:${Logger.C.reset} xavva docker <action> [options]`);
16
+ Logger.newline();
17
+ Logger.log(`${Logger.C.bold}Actions:${Logger.C.reset}`);
18
+ Logger.log(` ${Logger.C.primary}init${Logger.C.reset} Generate Dockerfile & docker-compose.yml`);
19
+ Logger.log(` ${Logger.C.primary}build${Logger.C.reset} Build Docker image`);
20
+ Logger.log(` ${Logger.C.primary}run${Logger.C.reset} Run development container`);
21
+ Logger.log(` ${Logger.C.primary}up${Logger.C.reset} Start with docker-compose`);
22
+ Logger.log(` ${Logger.C.primary}down${Logger.C.reset} Stop containers`);
23
+ Logger.log(` ${Logger.C.primary}status${Logger.C.reset} Show container status`);
24
+ Logger.newline();
25
+ Logger.log(`${Logger.C.bold}Options:${Logger.C.reset}`);
26
+ Logger.log(` --name <n> Image name`);
27
+ Logger.log(` --tag <t> Image tag`);
28
+ Logger.log(` --port <p> Port mapping`);
29
+ Logger.log(` -d, --detached Run in background`);
30
+ Logger.newline();
31
+ Logger.log(`${Logger.C.bold}Examples:${Logger.C.reset}`);
32
+ Logger.log(` xavva docker init`);
33
+ Logger.log(` xavva docker build --tag myapp:1.0`);
34
+ Logger.log(` xavva docker up -d`);
35
+ }
36
+
13
37
  async execute(config: AppConfig, args?: CLIArguments, positionals?: string[]): Promise<void> {
14
38
  const processManager = ProcessManager.getInstance();
39
+
40
+ // Mostra help se solicitado
41
+ if (args?.help) {
42
+ this.showHelp();
43
+ return;
44
+ }
45
+
15
46
  const action = positionals?.[1] || "status";
16
47
 
17
48
  const service = new DockerService();
@@ -16,6 +16,13 @@ export class EncodingCommand implements Command {
16
16
  async execute(config: AppConfig, args?: CLIArguments, positionals?: string[]): Promise<void> {
17
17
  const processManager = ProcessManager.getInstance();
18
18
 
19
+ // Mostra help se solicitado
20
+ if (args?.help) {
21
+ this.showHelp();
22
+ await processManager.shutdown(0);
23
+ return;
24
+ }
25
+
19
26
  // Parse subcomando
20
27
  const subcommand = positionals?.[1] || "help";
21
28
  const fileArg = positionals?.[2]; // Arquivo específico (opcional)
@@ -14,8 +14,34 @@ import fs from "fs";
14
14
  import path from "path";
15
15
 
16
16
  export class HttpCommand implements Command {
17
+ private showHelp(): void {
18
+ Logger.section("HTTP Client");
19
+ Logger.log(`${Logger.C.bold}Usage:${Logger.C.reset} xavva http <method> <path> [options]`);
20
+ Logger.log(`${Logger.C.bold} or:${Logger.C.reset} xavva http --interactive`);
21
+ Logger.newline();
22
+ Logger.log(`${Logger.C.bold}Methods:${Logger.C.reset} GET, POST, PUT, DELETE, PATCH`);
23
+ Logger.newline();
24
+ Logger.log(`${Logger.C.bold}Options:${Logger.C.reset}`);
25
+ Logger.log(` --body <data> Request body (JSON)`);
26
+ Logger.log(` --param <k=v> Query parameter (can use multiple)`);
27
+ Logger.log(` --header <h> Custom header`);
28
+ Logger.log(` --base-url <url> Override base URL`);
29
+ Logger.log(` -i, --interactive Interactive mode`);
30
+ Logger.newline();
31
+ Logger.log(`${Logger.C.bold}Examples:${Logger.C.reset}`);
32
+ Logger.log(` xavva http GET /api/users`);
33
+ Logger.log(` xavva http POST /api/users --body '{"name":"John"}'`);
34
+ Logger.log(` xavva http GET /api/users --param page=1 --param size=10`);
35
+ }
36
+
17
37
  async execute(config: AppConfig, args?: CLIArguments, positionals?: string[]): Promise<void> {
18
38
  const processManager = ProcessManager.getInstance();
39
+
40
+ // Mostra help se solicitado
41
+ if (args?.help) {
42
+ this.showHelp();
43
+ return;
44
+ }
19
45
 
20
46
  // Modo interativo
21
47
  if (args?.interactive || positionals?.length === 1) {
@@ -12,8 +12,32 @@ import { ProcessManager } from "../utils/processManager";
12
12
  export class TestCommand implements Command {
13
13
  private service: TestService | null = null;
14
14
 
15
+ private showHelp(): void {
16
+ Logger.section("Test Runner");
17
+ Logger.log(`${Logger.C.bold}Usage:${Logger.C.reset} xavva test [options] [filter]`);
18
+ Logger.newline();
19
+ Logger.log(`${Logger.C.bold}Options:${Logger.C.reset}`);
20
+ Logger.log(` -w, --watch Watch mode (run on file change)`);
21
+ Logger.log(` --coverage Generate JaCoCo coverage report`);
22
+ Logger.log(` --fail-fast Stop on first failure`);
23
+ Logger.log(` --parallel Run tests in parallel`);
24
+ Logger.log(` -V, --verbose Verbose output`);
25
+ Logger.newline();
26
+ Logger.log(`${Logger.C.bold}Examples:${Logger.C.reset}`);
27
+ Logger.log(` xavva test # Run all tests`);
28
+ Logger.log(` xavva test --watch # Watch mode`);
29
+ Logger.log(` xavva test --coverage # With coverage`);
30
+ Logger.log(` xavva test UserServiceTest # Run specific test`);
31
+ }
32
+
15
33
  async execute(config: AppConfig, args?: CLIArguments, positionals?: string[]): Promise<void> {
16
34
  const processManager = ProcessManager.getInstance();
35
+
36
+ // Mostra help se solicitado
37
+ if (args?.help) {
38
+ this.showHelp();
39
+ return;
40
+ }
17
41
 
18
42
  // Extrai filtros de teste dos positionals (após o comando "test")
19
43
  const filter = positionals?.slice(1).join(" ") || undefined;
@@ -6,7 +6,32 @@ import path from "path";
6
6
  import fs from "fs";
7
7
 
8
8
  export class TomcatCommand implements Command {
9
+ private showHelp(): void {
10
+ Logger.section("Tomcat Command");
11
+ Logger.log(`${Logger.C.bold}Usage:${Logger.C.reset} xavva tomcat <action> [options]`);
12
+ Logger.newline();
13
+ Logger.log(`${Logger.C.bold}Actions:${Logger.C.reset}`);
14
+ Logger.log(` ${Logger.C.primary}list${Logger.C.reset} List available Tomcat versions`);
15
+ Logger.log(` ${Logger.C.primary}installed${Logger.C.reset} List installed versions`);
16
+ Logger.log(` ${Logger.C.primary}install${Logger.C.reset} Install a version`);
17
+ Logger.log(` ${Logger.C.primary}use${Logger.C.reset} Set version for this project`);
18
+ Logger.log(` ${Logger.C.primary}uninstall${Logger.C.reset} Remove a version`);
19
+ Logger.log(` ${Logger.C.primary}status${Logger.C.reset} Show current configuration`);
20
+ Logger.newline();
21
+ Logger.log(`${Logger.C.bold}Examples:${Logger.C.reset}`);
22
+ Logger.log(` xavva tomcat list`);
23
+ Logger.log(` xavva tomcat install 9.0.115`);
24
+ Logger.log(` xavva tomcat use 10.1.52`);
25
+ Logger.log(` xavva tomcat status`);
26
+ }
27
+
9
28
  async execute(config: AppConfig, args?: CLIArguments, positionals?: string[]): Promise<void> {
29
+ // Mostra help se solicitado
30
+ if (args?.help) {
31
+ this.showHelp();
32
+ return;
33
+ }
34
+
10
35
  // A ação vem como positional após "tomcat" (ex: xavva tomcat list)
11
36
  const tomcatIndex = positionals?.indexOf("tomcat") ?? -1;
12
37
  const action = positionals && tomcatIndex >= 0 && positionals[tomcatIndex + 1]
package/src/index.ts CHANGED
@@ -49,9 +49,15 @@ async function main() {
49
49
 
50
50
  // Handler de help
51
51
  if (values.help) {
52
- const { HelpCommand } = await import("./commands/HelpCommand");
53
- new HelpCommand().execute(config, values as CLIArguments);
54
- await processManager.shutdown(0);
52
+ // Se for help de comando específico, deixa o comando tratar
53
+ if (commandName !== "help" && commandName !== "deploy") {
54
+ // O comando específico vai tratar o --help
55
+ } else {
56
+ // Help geral
57
+ const { HelpCommand } = await import("./commands/HelpCommand");
58
+ new HelpCommand().execute(config, values as CLIArguments);
59
+ await processManager.shutdown(0);
60
+ }
55
61
  }
56
62
 
57
63
  // Inicializa Container de DI