herdux-cli 0.1.1

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 (75) hide show
  1. package/README.md +370 -0
  2. package/README.pt-BR.md +369 -0
  3. package/dist/commands/backup.d.ts +3 -0
  4. package/dist/commands/backup.d.ts.map +1 -0
  5. package/dist/commands/backup.js +66 -0
  6. package/dist/commands/backup.js.map +1 -0
  7. package/dist/commands/clean.d.ts +3 -0
  8. package/dist/commands/clean.d.ts.map +1 -0
  9. package/dist/commands/clean.js +102 -0
  10. package/dist/commands/clean.js.map +1 -0
  11. package/dist/commands/config.d.ts +3 -0
  12. package/dist/commands/config.d.ts.map +1 -0
  13. package/dist/commands/config.js +146 -0
  14. package/dist/commands/config.js.map +1 -0
  15. package/dist/commands/create.d.ts +3 -0
  16. package/dist/commands/create.d.ts.map +1 -0
  17. package/dist/commands/create.js +26 -0
  18. package/dist/commands/create.js.map +1 -0
  19. package/dist/commands/doctor.d.ts +3 -0
  20. package/dist/commands/doctor.d.ts.map +1 -0
  21. package/dist/commands/doctor.js +92 -0
  22. package/dist/commands/doctor.js.map +1 -0
  23. package/dist/commands/drop.d.ts +3 -0
  24. package/dist/commands/drop.d.ts.map +1 -0
  25. package/dist/commands/drop.js +40 -0
  26. package/dist/commands/drop.js.map +1 -0
  27. package/dist/commands/list.d.ts +3 -0
  28. package/dist/commands/list.d.ts.map +1 -0
  29. package/dist/commands/list.js +55 -0
  30. package/dist/commands/list.js.map +1 -0
  31. package/dist/commands/restore.d.ts +3 -0
  32. package/dist/commands/restore.d.ts.map +1 -0
  33. package/dist/commands/restore.js +54 -0
  34. package/dist/commands/restore.js.map +1 -0
  35. package/dist/commands/version.d.ts +3 -0
  36. package/dist/commands/version.d.ts.map +1 -0
  37. package/dist/commands/version.js +42 -0
  38. package/dist/commands/version.js.map +1 -0
  39. package/dist/core/command-runner.d.ts +12 -0
  40. package/dist/core/command-runner.d.ts.map +1 -0
  41. package/dist/core/command-runner.js +20 -0
  42. package/dist/core/command-runner.js.map +1 -0
  43. package/dist/core/logger.d.ts +10 -0
  44. package/dist/core/logger.d.ts.map +1 -0
  45. package/dist/core/logger.js +25 -0
  46. package/dist/core/logger.js.map +1 -0
  47. package/dist/index.d.ts +3 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +33 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/services/backup.service.d.ts +4 -0
  52. package/dist/services/backup.service.d.ts.map +1 -0
  53. package/dist/services/backup.service.js +99 -0
  54. package/dist/services/backup.service.js.map +1 -0
  55. package/dist/services/config.service.d.ts +26 -0
  56. package/dist/services/config.service.d.ts.map +1 -0
  57. package/dist/services/config.service.js +83 -0
  58. package/dist/services/config.service.js.map +1 -0
  59. package/dist/services/environment.service.d.ts +4 -0
  60. package/dist/services/environment.service.d.ts.map +1 -0
  61. package/dist/services/environment.service.js +51 -0
  62. package/dist/services/environment.service.js.map +1 -0
  63. package/dist/services/postgres.service.d.ts +27 -0
  64. package/dist/services/postgres.service.d.ts.map +1 -0
  65. package/dist/services/postgres.service.js +180 -0
  66. package/dist/services/postgres.service.js.map +1 -0
  67. package/dist/utils/detect-binary.d.ts +3 -0
  68. package/dist/utils/detect-binary.d.ts.map +1 -0
  69. package/dist/utils/detect-binary.js +16 -0
  70. package/dist/utils/detect-binary.js.map +1 -0
  71. package/dist/utils/resolve-connection.d.ts +3 -0
  72. package/dist/utils/resolve-connection.d.ts.map +1 -0
  73. package/dist/utils/resolve-connection.js +107 -0
  74. package/dist/utils/resolve-connection.js.map +1 -0
  75. package/package.json +46 -0
@@ -0,0 +1,146 @@
1
+ import chalk from "chalk";
2
+ import * as config from "../services/config.service.js";
3
+ import { logger } from "../core/logger.js";
4
+ const VALID_KEYS = ["host", "port", "user", "password", "output"];
5
+ export function registerConfigCommand(program) {
6
+ const configCmd = program
7
+ .command("config")
8
+ .helpCommand(false)
9
+ .description("Manage Herdux configuration");
10
+ configCmd;
11
+ configCmd
12
+ .command("set <key> <value>")
13
+ .description("Set a default config value (host, port, user, password, output)")
14
+ .action((key, value) => {
15
+ if (!VALID_KEYS.includes(key)) {
16
+ logger.error(`Invalid key "${key}". Valid keys: ${VALID_KEYS.join(", ")}`);
17
+ process.exit(1);
18
+ }
19
+ config.setDefault(key, value);
20
+ const displayValue = key === "password" ? "••••••" : value;
21
+ logger.success(`Default ${chalk.cyan(key)} set to ${chalk.green(displayValue)}`);
22
+ logger.line(`Saved to ${chalk.gray(config.getConfigPath())}`);
23
+ });
24
+ configCmd;
25
+ configCmd
26
+ .command("get <key>")
27
+ .description("Get a config value")
28
+ .action((key) => {
29
+ const defaults = config.getDefault();
30
+ const value = defaults[key];
31
+ if (value === undefined) {
32
+ logger.warn(`No value set for "${key}"`);
33
+ }
34
+ else {
35
+ const displayValue = key === "password" ? "••••••" : value;
36
+ console.log(`${chalk.cyan(key)}: ${displayValue}`);
37
+ }
38
+ });
39
+ configCmd;
40
+ configCmd
41
+ .command("list")
42
+ .alias("ls")
43
+ .description("Show all saved configuration")
44
+ .action(() => {
45
+ const cfg = config.loadConfig();
46
+ logger.title("Herdux Configuration");
47
+ const defaults = cfg.default;
48
+ const hasDefaults = Object.keys(defaults).length > 0;
49
+ if (hasDefaults) {
50
+ console.log(chalk.bold("Default Connection:"));
51
+ for (const [key, value] of Object.entries(defaults)) {
52
+ const displayValue = key === "password" ? "••••••" : value;
53
+ console.log(` ${chalk.cyan(key)}: ${displayValue}`);
54
+ }
55
+ }
56
+ else {
57
+ console.log(chalk.gray(" No default connection configured."));
58
+ }
59
+ console.log();
60
+ const servers = cfg.servers;
61
+ const serverNames = Object.keys(servers);
62
+ if (serverNames.length > 0) {
63
+ console.log(chalk.bold(" Server Profiles:"));
64
+ for (const name of serverNames) {
65
+ const srv = servers[name];
66
+ const parts = [
67
+ srv.host && `host=${srv.host}`,
68
+ srv.port && `port=${chalk.cyan(srv.port)}`,
69
+ srv.user && `user=${srv.user}`,
70
+ srv.password && `password=••••••`,
71
+ ].filter(Boolean);
72
+ console.log(` ${chalk.green(name)}: ${parts.join(", ")}`);
73
+ }
74
+ }
75
+ else {
76
+ console.log(chalk.gray(" No server profiles configured."));
77
+ }
78
+ if (cfg.scan_ports.length > 0) {
79
+ console.log();
80
+ console.log(chalk.bold(" Custom Scan Ports:"));
81
+ console.log(` ${cfg.scan_ports.join(", ")}`);
82
+ }
83
+ console.log();
84
+ console.log(chalk.gray(` Config file: ${config.getConfigPath()}`));
85
+ console.log();
86
+ });
87
+ configCmd;
88
+ configCmd
89
+ .command("reset")
90
+ .description("Reset all configuration")
91
+ .action(() => {
92
+ config.resetConfig();
93
+ logger.success("Configuration reset successfully");
94
+ });
95
+ configCmd;
96
+ configCmd
97
+ .command("add-server <name>")
98
+ .alias("add")
99
+ .description("Add a named server profile (uses global --host, --port, --user, --password)")
100
+ .action((name) => {
101
+ const globalOpts = program.opts();
102
+ const serverOpts = {
103
+ ...(globalOpts.host && { host: globalOpts.host }),
104
+ ...(globalOpts.port && { port: globalOpts.port }),
105
+ ...(globalOpts.user && { user: globalOpts.user }),
106
+ ...(globalOpts.password && { password: globalOpts.password }),
107
+ };
108
+ if (Object.keys(serverOpts).length === 0) {
109
+ logger.error("Provide at least one option (--host, --port, --user, --password)");
110
+ process.exit(1);
111
+ }
112
+ config.addServer(name, serverOpts);
113
+ logger.success(`Server profile "${chalk.green(name)}" saved`);
114
+ const parts = [
115
+ serverOpts.host && ` host=${serverOpts.host}`,
116
+ serverOpts.port && `port=${serverOpts.port}`,
117
+ serverOpts.user && `user=${serverOpts.user}`,
118
+ serverOpts.password && `password=••••••`,
119
+ ].filter(Boolean);
120
+ logger.line(parts.join(", "));
121
+ });
122
+ configCmd;
123
+ configCmd
124
+ .command("remove-server <name>")
125
+ .alias("rm")
126
+ .description("Remove a named server profile")
127
+ .action((name) => {
128
+ const removed = config.removeServer(name);
129
+ if (removed) {
130
+ logger.success(`Server profile "${name}" removed`);
131
+ }
132
+ else {
133
+ logger.warn(`Server profile "${name}" not found`);
134
+ }
135
+ });
136
+ configCmd;
137
+ configCmd
138
+ .command("scan-ports <ports...>")
139
+ .alias("scan")
140
+ .description("Set custom ports to scan for database instances")
141
+ .action((ports) => {
142
+ config.setScanPorts(ports);
143
+ logger.success(`Scan ports set to: ${chalk.cyan(ports.join(", "))}`);
144
+ });
145
+ }
146
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerCreateCommand(program: Command): void;
3
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwB5D"}
@@ -0,0 +1,26 @@
1
+ import chalk from "chalk";
2
+ import ora from "ora";
3
+ import { checkPostgresClient } from "../services/environment.service.js";
4
+ import * as postgres from "../services/postgres.service.js";
5
+ import { resolveConnectionOptions } from "../utils/resolve-connection.js";
6
+ export function registerCreateCommand(program) {
7
+ program
8
+ .command("create <name>")
9
+ .description("Create a new database")
10
+ .action(async (name) => {
11
+ try {
12
+ await checkPostgresClient();
13
+ const rawOpts = program.opts();
14
+ const opts = await resolveConnectionOptions(rawOpts, rawOpts.server);
15
+ const spinner = ora(`Creating database "${name}"...`).start();
16
+ await postgres.createDatabase(name, opts);
17
+ spinner.succeed(`Database "${name}" created successfully\n`);
18
+ }
19
+ catch (err) {
20
+ const message = err instanceof Error ? err.message : String(err);
21
+ console.error(chalk.red(`\n✖ ${message}\n`));
22
+ process.exit(1);
23
+ }
24
+ });
25
+ }
26
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,QAAQ,MAAM,iCAAiC,CAAC;AAE5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,uBAAuB,CAAC;SACpC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,mBAAmB,EAAE,CAAC;YAE5B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,MAAM,wBAAwB,CACzC,OAA4B,EAC5B,OAAO,CAAC,MAAM,CACf,CAAC;YAEF,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,IAAI,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;YAE9D,MAAM,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC1C,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,0BAA0B,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,OAAO,IAAI,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerDoctorCommand(program: Command): void;
3
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4G5D"}
@@ -0,0 +1,92 @@
1
+ import chalk from "chalk";
2
+ import ora from "ora";
3
+ import { execa } from "execa";
4
+ import { resolveConnectionOptions } from "../utils/resolve-connection.js";
5
+ async function checkBin(binName) {
6
+ try {
7
+ const result = await execa(binName, ["--version"], { timeout: 5000 });
8
+ return { ok: true, version: result.stdout.trim().split("\n")[0] };
9
+ }
10
+ catch (err) {
11
+ return { ok: false, error: err.message };
12
+ }
13
+ }
14
+ export function registerDoctorCommand(program) {
15
+ program
16
+ .command("doctor")
17
+ .description("Check system health and database dependencies")
18
+ .action(async () => {
19
+ console.log(chalk.bold("\n--- Herdux Doctor - System Health Check ---\n"));
20
+ const rawOpts = program.opts();
21
+ const opts = await resolveConnectionOptions(rawOpts, rawOpts.server);
22
+ let spinner = ora("Checking psql...").start();
23
+ const psqlCheck = await checkBin("psql");
24
+ if (psqlCheck.ok) {
25
+ spinner.succeed(`psql is installed: ${chalk.cyan(psqlCheck.version)}`);
26
+ }
27
+ else {
28
+ spinner.fail(`psql is missing. Please install PostgreSQL client tools.`);
29
+ }
30
+ spinner = ora("Checking pg_dump...").start();
31
+ const dumpCheck = await checkBin("pg_dump");
32
+ if (dumpCheck.ok) {
33
+ spinner.succeed(`pg_dump is installed: ${chalk.cyan(dumpCheck.version)}`);
34
+ }
35
+ else {
36
+ spinner.fail(`pg_dump is missing. Backups will not work.`);
37
+ }
38
+ spinner = ora("Checking pg_restore...").start();
39
+ const restoreCheck = await checkBin("pg_restore");
40
+ if (restoreCheck.ok) {
41
+ spinner.succeed(`pg_restore is installed: ${chalk.cyan(restoreCheck.version)}`);
42
+ }
43
+ else {
44
+ spinner.fail(`pg_restore is missing. Custom format restores will not work.`);
45
+ }
46
+ spinner = ora(`Testing connection to ${opts.host}:${opts.port} as '${opts.user}'...`).start();
47
+ try {
48
+ const env = { PAGER: "", PSQL_PAGER: "" };
49
+ if (opts.password)
50
+ env.PGPASSWORD = opts.password;
51
+ const args = [
52
+ "-w",
53
+ "-h",
54
+ opts.host ?? "localhost",
55
+ "-p",
56
+ opts.port ?? "5432",
57
+ "-U",
58
+ opts.user ?? "postgres",
59
+ "-c",
60
+ "SELECT 1;",
61
+ "-q",
62
+ "-t",
63
+ "-A",
64
+ ];
65
+ const result = await execa("psql", args, { env, timeout: 5000 });
66
+ if (result.exitCode === 0) {
67
+ spinner.succeed(`Successfully connected to PostgreSQL at ${chalk.cyan(`${opts.host}:${opts.port}`)}`);
68
+ }
69
+ else {
70
+ spinner.fail(`Connection check returned exit code ${result.exitCode}`);
71
+ }
72
+ }
73
+ catch (err) {
74
+ if (err.message.includes("password authentication failed")) {
75
+ spinner.fail(`Connection failed: Password authentication rejected for user '${opts.user}'`);
76
+ }
77
+ else {
78
+ spinner.fail(`Connection failed: Could not connect to the database. Make sure PostgreSQL is running and port is open.`);
79
+ console.error(chalk.gray(` ↳ ${err.shortMessage || err.message}`));
80
+ }
81
+ }
82
+ console.log();
83
+ if (psqlCheck.ok && dumpCheck.ok && restoreCheck.ok) {
84
+ console.log(chalk.green("✔ Your system is fully equipped to run Herdux commands!"));
85
+ }
86
+ else {
87
+ console.log(chalk.yellow("⚠ Some dependencies are missing. Please fix the warnings above."));
88
+ }
89
+ console.log();
90
+ });
91
+ }
92
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerDropCommand(program: Command): void;
3
+ //# sourceMappingURL=drop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drop.d.ts","sourceRoot":"","sources":["../../src/commands/drop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuC1D"}
@@ -0,0 +1,40 @@
1
+ import chalk from "chalk";
2
+ import ora from "ora";
3
+ import prompts from "prompts";
4
+ import { checkPostgresClient } from "../services/environment.service.js";
5
+ import * as postgres from "../services/postgres.service.js";
6
+ import { resolveConnectionOptions } from "../utils/resolve-connection.js";
7
+ export function registerDropCommand(program) {
8
+ program
9
+ .command("drop <name>")
10
+ .description("Drop a database")
11
+ .option("-y, --yes", "Skip confirmation prompt")
12
+ .action(async (name, cmdOpts) => {
13
+ try {
14
+ await checkPostgresClient();
15
+ const rawOpts = program.opts();
16
+ const opts = await resolveConnectionOptions(rawOpts, rawOpts.server);
17
+ if (!cmdOpts.yes) {
18
+ const response = await prompts({
19
+ type: "confirm",
20
+ name: "confirm",
21
+ message: `Are you sure you want to drop database "${name}"? This action is irreversible.`,
22
+ initial: false,
23
+ });
24
+ if (!response.confirm) {
25
+ console.log(chalk.yellow("\n⚠ Operation cancelled.\n"));
26
+ return;
27
+ }
28
+ }
29
+ const spinner = ora(`Dropping database "${name}"...`).start();
30
+ await postgres.dropDatabase(name, opts);
31
+ spinner.succeed(`Database "${name}" dropped successfully\n`);
32
+ }
33
+ catch (err) {
34
+ const message = err instanceof Error ? err.message : String(err);
35
+ console.error(chalk.red(`\n✖ ${message}\n`));
36
+ process.exit(1);
37
+ }
38
+ });
39
+ }
40
+ //# sourceMappingURL=drop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drop.js","sourceRoot":"","sources":["../../src/commands/drop.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,QAAQ,MAAM,iCAAiC,CAAC;AAE5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,iBAAiB,CAAC;SAC9B,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;SAC/C,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA0B,EAAE,EAAE;QACzD,IAAI,CAAC;YACH,MAAM,mBAAmB,EAAE,CAAC;YAE5B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,MAAM,wBAAwB,CACzC,OAA4B,EAC5B,OAAO,CAAC,MAAM,CACf,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;gBACjB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;oBAC7B,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,2CAA2C,IAAI,iCAAiC;oBACzF,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC;oBACxD,OAAO;gBACT,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,IAAI,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;YAE9D,MAAM,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACxC,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,0BAA0B,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,OAAO,IAAI,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerListCommand(program: Command): void;
3
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuE1D"}
@@ -0,0 +1,55 @@
1
+ import chalk from "chalk";
2
+ import ora from "ora";
3
+ import { checkPostgresClient } from "../services/environment.service.js";
4
+ import * as postgres from "../services/postgres.service.js";
5
+ import { resolveConnectionOptions } from "../utils/resolve-connection.js";
6
+ export function registerListCommand(program) {
7
+ program
8
+ .command("list")
9
+ .alias("ls")
10
+ .description("List all databases")
11
+ .option("-S, --size", "Calculate and include database sizes (sorted from largest to smallest)")
12
+ .action(async (options) => {
13
+ try {
14
+ await checkPostgresClient();
15
+ const rawOpts = program.opts();
16
+ const opts = await resolveConnectionOptions(rawOpts, rawOpts.server);
17
+ const spinner = ora(options.size
18
+ ? "Fetching database list and calculating sizes..."
19
+ : "Fetching database list...").start();
20
+ const databases = await postgres.listDatabases({
21
+ ...opts,
22
+ includeSize: options.size,
23
+ });
24
+ spinner.succeed(`Found ${databases.length} database(s)\n`);
25
+ if (databases.length === 0) {
26
+ console.log(chalk.yellow(" No databases found.\n"));
27
+ return;
28
+ }
29
+ const maxDbName = Math.max(15, "DATABASE".length, ...databases.map((db) => db.name.length));
30
+ const nameWidth = maxDbName + 5;
31
+ const ownerWidth = 15;
32
+ const encodingWidth = 12;
33
+ const sizeWidth = options.size ? 15 : 0;
34
+ let header = ` ${"DATABASE".padEnd(nameWidth)}${"OWNER".padEnd(ownerWidth)}${"ENCODING".padEnd(encodingWidth)}`;
35
+ if (options.size)
36
+ header += "SIZE".padEnd(sizeWidth);
37
+ console.log(chalk.bold(header));
38
+ console.log(chalk.gray(` ${"─".repeat(nameWidth + ownerWidth + encodingWidth + sizeWidth - 4)}`));
39
+ for (const db of databases) {
40
+ let row = ` ${chalk.cyan(db.name.padEnd(nameWidth))}${db.owner.padEnd(ownerWidth)}${db.encoding.padEnd(encodingWidth)}`;
41
+ if (options.size && db.size) {
42
+ row += chalk.green(db.size.padEnd(sizeWidth));
43
+ }
44
+ console.log(row);
45
+ }
46
+ console.log();
47
+ }
48
+ catch (err) {
49
+ const message = err instanceof Error ? err.message : String(err);
50
+ console.error(chalk.red(`\n✖ ${message}\n`));
51
+ process.exit(1);
52
+ }
53
+ });
54
+ }
55
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerRestoreCommand(program: Command): void;
3
+ //# sourceMappingURL=restore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore.d.ts","sourceRoot":"","sources":["../../src/commands/restore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0E7D"}
@@ -0,0 +1,54 @@
1
+ import chalk from "chalk";
2
+ import ora from "ora";
3
+ import { checkPostgresClient } from "../services/environment.service.js";
4
+ import * as backup from "../services/backup.service.js";
5
+ import { createDatabase, } from "../services/postgres.service.js";
6
+ import { resolveConnectionOptions } from "../utils/resolve-connection.js";
7
+ export function registerRestoreCommand(program) {
8
+ program
9
+ .command("restore <file>")
10
+ .description("Restore a database from a backup file (auto-creates DB if missing)")
11
+ .requiredOption("--db <name>", "Target database name for restore")
12
+ .option("-F, --format <type>", "Override auto-detection (custom, plain)")
13
+ .action(async (file, cmdOpts) => {
14
+ try {
15
+ await checkPostgresClient();
16
+ const rawOpts = program.opts();
17
+ const opts = await resolveConnectionOptions(rawOpts, rawOpts.server);
18
+ if (cmdOpts.format &&
19
+ cmdOpts.format !== "custom" &&
20
+ cmdOpts.format !== "plain") {
21
+ console.error(chalk.red(`\n✖ Invalid format "${cmdOpts.format}". Use "custom" or "plain".\n`));
22
+ process.exit(1);
23
+ }
24
+ const spinner = ora(`Restoring "${file}" into database "${cmdOpts.db}"...`).start();
25
+ let didCreateDb = false;
26
+ try {
27
+ spinner.text = `Ensuring database "${cmdOpts.db}" exists...`;
28
+ await createDatabase(cmdOpts.db, opts);
29
+ didCreateDb = true;
30
+ }
31
+ catch (err) {
32
+ // Ignore error if database already exists
33
+ if (!err.message.includes("already exists") &&
34
+ !String(err).includes("already exists")) {
35
+ spinner.fail(`Failed to verify or create database "${cmdOpts.db}"`);
36
+ throw err;
37
+ }
38
+ }
39
+ spinner.text = `Restoring data into "${cmdOpts.db}"...`;
40
+ await backup.restoreDatabase(file, cmdOpts.db, opts, cmdOpts.format);
41
+ let successMsg = `Database "${cmdOpts.db}" restored successfully from ${chalk.cyan(file)}`;
42
+ if (didCreateDb) {
43
+ successMsg += chalk.dim(`\n ↳ Note: Database did not exist and was automatically created.`);
44
+ }
45
+ spinner.succeed(successMsg + "\n");
46
+ }
47
+ catch (err) {
48
+ const message = err instanceof Error ? err.message : String(err);
49
+ console.error(chalk.red(`\n✖ ${message}\n`));
50
+ process.exit(1);
51
+ }
52
+ });
53
+ }
54
+ //# sourceMappingURL=restore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore.js","sourceRoot":"","sources":["../../src/commands/restore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerVersionCommand(program: Command): void;
3
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyC7D"}
@@ -0,0 +1,42 @@
1
+ import chalk from "chalk";
2
+ import ora from "ora";
3
+ import { checkPostgresClient } from "../services/environment.service.js";
4
+ import * as postgres from "../services/postgres.service.js";
5
+ export function registerVersionCommand(program) {
6
+ program
7
+ .command("version")
8
+ .description("Show Database client and server versions")
9
+ .action(async () => {
10
+ try {
11
+ await checkPostgresClient();
12
+ const clientVersion = await postgres.getVersion();
13
+ console.log(chalk.bold.cyan("\n--- PostgreSQL Client ---"));
14
+ console.log(` ${clientVersion}`);
15
+ const opts = program.opts();
16
+ const spinner = ora("Scanning for running PostgreSQL servers...").start();
17
+ const instances = await postgres.discoverInstances(opts);
18
+ if (instances.length === 0) {
19
+ spinner.warn("No running PostgreSQL servers found");
20
+ console.log(chalk.yellow(" No servers detected on common ports."));
21
+ console.log(chalk.gray(" Use --port to specify a custom port.\n"));
22
+ }
23
+ else {
24
+ spinner.succeed(`Found ${instances.length} running server(s)\n`);
25
+ console.log(chalk.bold.cyan("--- Running Servers ---"));
26
+ for (const instance of instances) {
27
+ const portBadge = chalk.bgGreen.black(` :${instance.port} `);
28
+ console.log(` ${portBadge} ${instance.version}`);
29
+ }
30
+ console.log();
31
+ }
32
+ console.log(chalk.bold.cyan("--- Herdux CLI ---"));
33
+ console.log(` v${program.version()}\n`);
34
+ }
35
+ catch (err) {
36
+ const message = err instanceof Error ? err.message : String(err);
37
+ console.error(chalk.red(`\n✖ ${message}\n`));
38
+ process.exit(1);
39
+ }
40
+ });
41
+ }
42
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,QAAQ,MAAM,iCAAiC,CAAC;AAE5D,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,mBAAmB,EAAE,CAAC;YAE5B,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,MAAM,aAAa,EAAE,CAAC,CAAC;YAEnC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,GAAG,CACjB,4CAA4C,CAC7C,CAAC,KAAK,EAAE,CAAC;YACV,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAEzD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;gBACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAC,CAAC;gBACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,OAAO,CAAC,SAAS,SAAS,CAAC,MAAM,sBAAsB,CAAC,CAAC;gBAEjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;gBACxD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACjC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;oBAC7D,OAAO,CAAC,GAAG,CAAC,MAAM,SAAS,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;gBACrD,CAAC;gBACD,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,OAAO,IAAI,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface RunResult {
2
+ stdout: string;
3
+ stderr: string;
4
+ exitCode: number;
5
+ }
6
+ export interface RunOptions {
7
+ cwd?: string;
8
+ env?: Record<string, string>;
9
+ timeout?: number;
10
+ }
11
+ export declare function runCommand(command: string, args?: string[], options?: RunOptions): Promise<RunResult>;
12
+ //# sourceMappingURL=command-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-runner.d.ts","sourceRoot":"","sources":["../../src/core/command-runner.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,SAAS,CAAC,CAmBpB"}
@@ -0,0 +1,20 @@
1
+ import { execa } from "execa";
2
+ export async function runCommand(command, args = [], options = {}) {
3
+ const execaOptions = {
4
+ reject: false,
5
+ timeout: options.timeout ?? 30_000,
6
+ ...(options.cwd && { cwd: options.cwd }),
7
+ ...(options.env && { env: { ...process.env, ...options.env } }),
8
+ };
9
+ const result = await execa(command, args, execaOptions);
10
+ let stderr = result.stderr?.toString() ?? "";
11
+ if (!stderr && (result.failed || result.exitCode !== 0)) {
12
+ stderr = result.shortMessage ?? result.message ?? "Unknown execa error";
13
+ }
14
+ return {
15
+ stdout: result.stdout?.toString() ?? "",
16
+ stderr,
17
+ exitCode: result.exitCode ?? (result.failed ? 1 : 0),
18
+ };
19
+ }
20
+ //# sourceMappingURL=command-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-runner.js","sourceRoot":"","sources":["../../src/core/command-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAgC,MAAM,OAAO,CAAC;AAc5D,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAe,EACf,OAAiB,EAAE,EACnB,UAAsB,EAAE;IAExB,MAAM,YAAY,GAAiB;QACjC,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,MAAM;QAClC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;QACxC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;KAChE,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAExD,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC7C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACxD,MAAM,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,OAAO,IAAI,qBAAqB,CAAC;IAC1E,CAAC;IAED,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;QACvC,MAAM;QACN,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACrD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare const logger: {
2
+ info(message: string): void;
3
+ success(message: string): void;
4
+ warn(message: string): void;
5
+ error(message: string): void;
6
+ title(message: string): void;
7
+ line(message: string): void;
8
+ blank(): void;
9
+ };
10
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;kBACH,MAAM,GAAG,IAAI;qBAIV,MAAM,GAAG,IAAI;kBAIhB,MAAM,GAAG,IAAI;mBAIZ,MAAM,GAAG,IAAI;mBAIb,MAAM,GAAG,IAAI;kBAId,MAAM,GAAG,IAAI;aAIlB,IAAI;CAGd,CAAC"}