@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 +1 -1
- package/package.json +1 -1
- package/src/commands/DbCommand.ts +27 -0
- package/src/commands/DockerCommand.ts +31 -0
- package/src/commands/EncodingCommand.ts +7 -0
- package/src/commands/HttpCommand.ts +26 -0
- package/src/commands/TestCommand.ts +24 -0
- package/src/commands/TomcatCommand.ts +25 -0
- package/src/index.ts +9 -3
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
|
-
[](https://github.com/leorsousa05/Xavva)
|
|
6
6
|
[](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
|
@@ -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
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|