herdux-cli 0.4.1 → 0.5.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 (50) hide show
  1. package/README.md +11 -4
  2. package/README.pt-BR.md +11 -4
  3. package/dist/commands/backup.d.ts.map +1 -1
  4. package/dist/commands/backup.js +12 -1
  5. package/dist/commands/backup.js.map +1 -1
  6. package/dist/commands/clean.d.ts.map +1 -1
  7. package/dist/commands/clean.js +9 -1
  8. package/dist/commands/clean.js.map +1 -1
  9. package/dist/commands/config.d.ts.map +1 -1
  10. package/dist/commands/config.js +19 -2
  11. package/dist/commands/config.js.map +1 -1
  12. package/dist/commands/create.d.ts.map +1 -1
  13. package/dist/commands/create.js +10 -1
  14. package/dist/commands/create.js.map +1 -1
  15. package/dist/commands/doctor.d.ts.map +1 -1
  16. package/dist/commands/doctor.js +6 -1
  17. package/dist/commands/doctor.js.map +1 -1
  18. package/dist/commands/drop.d.ts.map +1 -1
  19. package/dist/commands/drop.js +11 -1
  20. package/dist/commands/drop.js.map +1 -1
  21. package/dist/commands/list.d.ts.map +1 -1
  22. package/dist/commands/list.js +8 -1
  23. package/dist/commands/list.js.map +1 -1
  24. package/dist/commands/restore.d.ts.map +1 -1
  25. package/dist/commands/restore.js +10 -1
  26. package/dist/commands/restore.js.map +1 -1
  27. package/dist/commands/version.d.ts.map +1 -1
  28. package/dist/commands/version.js +6 -1
  29. package/dist/commands/version.js.map +1 -1
  30. package/dist/core/interfaces/database-engine.interface.d.ts +1 -1
  31. package/dist/core/interfaces/database-engine.interface.d.ts.map +1 -1
  32. package/dist/index.js +27 -2
  33. package/dist/index.js.map +1 -1
  34. package/dist/infra/config/config.service.js +1 -1
  35. package/dist/infra/config/config.service.js.map +1 -1
  36. package/dist/infra/engines/engine-factory.d.ts.map +1 -1
  37. package/dist/infra/engines/engine-factory.js +3 -0
  38. package/dist/infra/engines/engine-factory.js.map +1 -1
  39. package/dist/infra/engines/resolve-connection.d.ts.map +1 -1
  40. package/dist/infra/engines/resolve-connection.js +80 -56
  41. package/dist/infra/engines/resolve-connection.js.map +1 -1
  42. package/dist/infra/engines/sqlite/sqlite-env.d.ts +2 -0
  43. package/dist/infra/engines/sqlite/sqlite-env.d.ts.map +1 -0
  44. package/dist/infra/engines/sqlite/sqlite-env.js +24 -0
  45. package/dist/infra/engines/sqlite/sqlite-env.js.map +1 -0
  46. package/dist/infra/engines/sqlite/sqlite.engine.d.ts +21 -0
  47. package/dist/infra/engines/sqlite/sqlite.engine.d.ts.map +1 -0
  48. package/dist/infra/engines/sqlite/sqlite.engine.js +207 -0
  49. package/dist/infra/engines/sqlite/sqlite.engine.js.map +1 -0
  50. package/package.json +5 -1
@@ -1 +1 @@
1
- {"version":3,"file":"config.service.js","sourceRoot":"","sources":["../../../src/infra/config/config.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.service.js","sourceRoot":"","sources":["../../../src/infra/config/config.service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"engine-factory.d.ts","sourceRoot":"","sources":["../../../src/infra/engines/engine-factory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACX,MAAM,oDAAoD,CAAC;AAE5D,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,eAAe,CAQ/D"}
1
+ {"version":3,"file":"engine-factory.d.ts","sourceRoot":"","sources":["../../../src/infra/engines/engine-factory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACX,MAAM,oDAAoD,CAAC;AAE5D,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,eAAe,CAU/D"}
@@ -1,9 +1,12 @@
1
1
  import { PostgresEngine } from "./postgres/postgres.engine.js";
2
2
  import { MysqlEngine } from "./mysql/mysql.engine.js";
3
+ import { SqliteEngine } from "./sqlite/sqlite.engine.js";
3
4
  export function createEngine(type) {
4
5
  switch (type) {
5
6
  case "mysql":
6
7
  return new MysqlEngine();
8
+ case "sqlite":
9
+ return new SqliteEngine();
7
10
  case "postgres":
8
11
  default:
9
12
  return new PostgresEngine();
@@ -1 +1 @@
1
- {"version":3,"file":"engine-factory.js","sourceRoot":"","sources":["../../../src/infra/engines/engine-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAMtD,MAAM,UAAU,YAAY,CAAC,IAAiB;IAC5C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,IAAI,WAAW,EAAE,CAAC;QAC3B,KAAK,UAAU,CAAC;QAChB;YACE,OAAO,IAAI,cAAc,EAAE,CAAC;IAChC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"engine-factory.js","sourceRoot":"","sources":["../../../src/infra/engines/engine-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAMzD,MAAM,UAAU,YAAY,CAAC,IAAiB;IAC5C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,IAAI,WAAW,EAAE,CAAC;QAC3B,KAAK,QAAQ;YACX,OAAO,IAAI,YAAY,EAAE,CAAC;QAC5B,KAAK,UAAU,CAAC;QAChB;YACE,OAAO,IAAI,cAAc,EAAE,CAAC;IAChC,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-connection.d.ts","sourceRoot":"","sources":["../../../src/infra/engines/resolve-connection.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,eAAe,EAChB,MAAM,oDAAoD,CAAC;AAM5D,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,iBAAiB,GAAG;IAAE,MAAM,CAAC,EAAE,UAAU,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACpE,OAAO,CAAC,kBAAkB,CAAC,CAoL7B"}
1
+ {"version":3,"file":"resolve-connection.d.ts","sourceRoot":"","sources":["../../../src/infra/engines/resolve-connection.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,eAAe,EAChB,MAAM,oDAAoD,CAAC;AAO5D,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAyFD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,iBAAiB,GAAG;IAAE,MAAM,CAAC,EAAE,UAAU,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACpE,OAAO,CAAC,kBAAkB,CAAC,CA0J7B"}
@@ -4,6 +4,66 @@ import prompts from "prompts";
4
4
  import { createEngine } from "./engine-factory.js";
5
5
  import * as config from "../config/config.service.js";
6
6
  import { logger } from "../../presentation/logger.js";
7
+ /**
8
+ * Presents an interactive prompt for the user to select a server profile.
9
+ * Returns the selected server name, or undefined if the user selected
10
+ * the default connection or no options were available.
11
+ */
12
+ async function promptServerSelection(servers, serverNames, savedDefaults, requestedEngine) {
13
+ const dEngine = savedDefaults.engine ?? "postgres";
14
+ const isDefaultCompatible = !requestedEngine || dEngine === requestedEngine;
15
+ const hasDefaults = Object.keys(savedDefaults).length > 0;
16
+ if (serverNames.length === 0 && !(hasDefaults && isDefaultCompatible)) {
17
+ return undefined;
18
+ }
19
+ const choices = serverNames.map((name) => {
20
+ const srv = servers[name];
21
+ const engineLabel = srv.engine ? `, engine: ${srv.engine}` : "";
22
+ return {
23
+ title: `${name} (port ${srv.port ?? "?"}${engineLabel})`,
24
+ value: name,
25
+ };
26
+ });
27
+ if (hasDefaults && isDefaultCompatible) {
28
+ const defaultEngineLabel = `, engine: ${dEngine}`;
29
+ choices.unshift({
30
+ title: `Default connection (port ${savedDefaults.port ?? "?"}${defaultEngineLabel})`,
31
+ value: "__default__",
32
+ });
33
+ }
34
+ if (choices.length === 0) {
35
+ return undefined;
36
+ }
37
+ if (choices.length === 1) {
38
+ const choice = choices[0];
39
+ console.log(chalk.green(`✔ Auto-selected connection: › ${choice.title}`));
40
+ return choice.value !== "__default__" ? choice.value : undefined;
41
+ }
42
+ const response = await prompts({
43
+ type: "select",
44
+ name: "server",
45
+ message: "Select a connection to use:",
46
+ choices,
47
+ });
48
+ if (!response.server) {
49
+ console.log(chalk.yellow("\n⚠ Operation cancelled.\n"));
50
+ process.exit(0);
51
+ }
52
+ return response.server !== "__default__" ? response.server : undefined;
53
+ }
54
+ /**
55
+ * Determines the engine type from the CLI flag, server profile, or config defaults.
56
+ * Priority: CLI flag > server profile engine > config default engine > "postgres"
57
+ */
58
+ function resolveEngineType(rawEngine, serverName, savedDefaults) {
59
+ if (rawEngine)
60
+ return rawEngine;
61
+ if (serverName) {
62
+ const profile = config.getServer(serverName);
63
+ return profile?.engine ?? savedDefaults.engine ?? "postgres";
64
+ }
65
+ return savedDefaults.engine ?? "postgres";
66
+ }
7
67
  // --- Main Resolver ---
8
68
  /**
9
69
  * Resolves both the database engine and connection options together.
@@ -23,71 +83,21 @@ import { logger } from "../../presentation/logger.js";
23
83
  export async function resolveEngineAndConnection(rawOpts) {
24
84
  const savedDefaults = config.getDefault();
25
85
  let serverName = rawOpts.server;
26
- let profileEngine;
27
86
  // --- Step 1: Resolve server profile (may provide engine) ---
28
- if (!serverName && !rawOpts.port && !rawOpts.host && process.stdout.isTTY) {
87
+ const isInteractive = process.stdout.isTTY || process.env.HERDUX_TEST_FORCE_TTY === "1";
88
+ if (!serverName && !rawOpts.port && !rawOpts.host && isInteractive) {
29
89
  const servers = config.listServers();
30
90
  let serverNames = Object.keys(servers);
31
91
  if (rawOpts.engine) {
32
92
  serverNames = serverNames.filter((name) => servers[name].engine === rawOpts.engine);
33
93
  }
34
- const dEngine = savedDefaults.engine ?? "postgres";
35
- const isDefaultCompatible = !rawOpts.engine || dEngine === rawOpts.engine;
36
- const hasDefaults = Object.keys(savedDefaults).length > 0;
37
- if (serverNames.length > 0 || (hasDefaults && isDefaultCompatible)) {
38
- const choices = serverNames.map((name) => {
39
- const srv = servers[name];
40
- const engineLabel = srv.engine ? `, engine: ${srv.engine}` : "";
41
- return {
42
- title: `${name} (port ${srv.port ?? "?"}${engineLabel})`,
43
- value: name,
44
- };
45
- });
46
- if (hasDefaults && isDefaultCompatible) {
47
- const defaultEngineLabel = `, engine: ${dEngine}`;
48
- choices.unshift({
49
- title: `Default connection (port ${savedDefaults.port ?? "?"}${defaultEngineLabel})`,
50
- value: "__default__",
51
- });
52
- }
53
- if (choices.length === 1) {
54
- const choice = choices[0];
55
- console.log(chalk.green(`✔ Auto-selected connection: › ${choice.title}`));
56
- if (choice.value !== "__default__") {
57
- serverName = choice.value;
58
- }
59
- }
60
- else {
61
- const response = await prompts({
62
- type: "select",
63
- name: "server",
64
- message: "Select a connection to use:",
65
- choices,
66
- });
67
- if (!response.server) {
68
- console.log(chalk.yellow("\n⚠ Operation cancelled.\n"));
69
- process.exit(0);
70
- }
71
- if (response.server !== "__default__") {
72
- serverName = response.server;
73
- }
74
- }
94
+ const selected = await promptServerSelection(servers, serverNames, savedDefaults, rawOpts.engine);
95
+ if (selected !== undefined) {
96
+ serverName = selected;
75
97
  }
76
98
  }
77
99
  // --- Step 2: Determine engine type ---
78
- // Priority: CLI flag > profile engine > config default engine > "postgres"
79
- let engineType;
80
- if (rawOpts.engine) {
81
- engineType = rawOpts.engine;
82
- }
83
- else if (serverName) {
84
- const profile = config.getServer(serverName);
85
- profileEngine = profile?.engine;
86
- engineType = profileEngine ?? savedDefaults.engine ?? "postgres";
87
- }
88
- else {
89
- engineType = savedDefaults.engine ?? "postgres";
90
- }
100
+ const engineType = resolveEngineType(rawOpts.engine, serverName, savedDefaults);
91
101
  const engine = createEngine(engineType);
92
102
  // --- Step 3: Resolve connection options ---
93
103
  if (serverName) {
@@ -121,6 +131,7 @@ export async function resolveEngineAndConnection(rawOpts) {
121
131
  };
122
132
  }
123
133
  // No server profile — merge CLI opts with config defaults
134
+ const engineDefaults = engine.getDefaultConnectionOptions();
124
135
  const merged = {
125
136
  host: rawOpts.host ?? savedDefaults.host,
126
137
  port: rawOpts.port ?? savedDefaults.port,
@@ -130,6 +141,19 @@ export async function resolveEngineAndConnection(rawOpts) {
130
141
  if (merged.port) {
131
142
  return { engine, engineType, opts: merged };
132
143
  }
144
+ // Engines that don't use ports (e.g. SQLite) skip port-based auto-discovery.
145
+ // They are fully identified by their host (database directory) alone.
146
+ if (!engineDefaults.port) {
147
+ return {
148
+ engine,
149
+ engineType,
150
+ opts: {
151
+ host: merged.host ?? engineDefaults.host,
152
+ user: merged.user ?? engineDefaults.user,
153
+ password: merged.password,
154
+ },
155
+ };
156
+ }
133
157
  // --- Step 4: Auto-discovery ---
134
158
  const spinner = ora(`Scanning for running ${engine.getEngineName()} servers...`).start();
135
159
  const instances = await engine.discoverInstances(merged);
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-connection.js","sourceRoot":"","sources":["../../../src/infra/engines/resolve-connection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolve-connection.js","sourceRoot":"","sources":["../../../src/infra/engines/resolve-connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function checkSqliteClient(): Promise<string>;
2
+ //# sourceMappingURL=sqlite-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-env.d.ts","sourceRoot":"","sources":["../../../../src/infra/engines/sqlite/sqlite-env.ts"],"names":[],"mappings":"AAIA,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAuBzD"}
@@ -0,0 +1,24 @@
1
+ import ora from "ora";
2
+ import { logger } from "../../../presentation/logger.js";
3
+ import { binaryExists, getBinaryVersion } from "../../utils/detect-binary.js";
4
+ export async function checkSqliteClient() {
5
+ const spinner = ora("Checking SQLite client...").start();
6
+ const exists = await binaryExists("sqlite3");
7
+ if (!exists) {
8
+ spinner.fail("SQLite client (sqlite3) not found");
9
+ logger.blank();
10
+ logger.error("sqlite3 is not available in your PATH.");
11
+ logger.blank();
12
+ logger.info("To fix this, you can:");
13
+ logger.line("1. Install SQLite:");
14
+ logger.line(" • Windows: choco install sqlite");
15
+ logger.line(" • macOS: brew install sqlite");
16
+ logger.line(" • Ubuntu: sudo apt install sqlite3");
17
+ logger.blank();
18
+ process.exit(1);
19
+ }
20
+ const version = await getBinaryVersion("sqlite3");
21
+ spinner.succeed(`Found ${version ?? "sqlite3"}`);
22
+ return version ?? "unknown";
23
+ }
24
+ //# sourceMappingURL=sqlite-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-env.js","sourceRoot":"","sources":["../../../../src/infra/engines/sqlite/sqlite-env.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAE9E,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,OAAO,GAAG,GAAG,CAAC,2BAA2B,CAAC,CAAC,KAAK,EAAE,CAAC;IAEzD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC;IAE7C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAClD,OAAO,CAAC,OAAO,CAAC,SAAS,OAAO,IAAI,SAAS,EAAE,CAAC,CAAC;IAEjD,OAAO,OAAO,IAAI,SAAS,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { IDatabaseEngine, ConnectionOptions, DatabaseInstance, DatabaseInfo, HealthCheck } from "../../../core/interfaces/database-engine.interface.js";
2
+ export declare class SqliteEngine implements IDatabaseEngine {
3
+ getHealthChecks(): HealthCheck[];
4
+ getEngineName(): string;
5
+ getDefaultConnectionOptions(): ConnectionOptions;
6
+ checkClientVersion(): Promise<string>;
7
+ checkBackupRequirements(): Promise<void>;
8
+ discoverInstances(_opts?: ConnectionOptions): Promise<DatabaseInstance[]>;
9
+ getServerVersion(_opts?: ConnectionOptions): Promise<string | null>;
10
+ listDatabases(opts?: ConnectionOptions & {
11
+ includeSize?: boolean;
12
+ }): Promise<DatabaseInfo[]>;
13
+ createDatabase(name: string, opts?: ConnectionOptions): Promise<void>;
14
+ dropDatabase(name: string, opts?: ConnectionOptions): Promise<void>;
15
+ backupDatabase(dbName: string, outputDir: string, opts?: ConnectionOptions, format?: string): Promise<string>;
16
+ restoreDatabase(filePath: string, dbName: string, opts?: ConnectionOptions): Promise<{
17
+ hasWarnings: boolean;
18
+ warnings?: string;
19
+ } | void>;
20
+ }
21
+ //# sourceMappingURL=sqlite.engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.engine.d.ts","sourceRoot":"","sources":["../../../../src/infra/engines/sqlite/sqlite.engine.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACZ,MAAM,uDAAuD,CAAC;AAiC/D,qBAAa,YAAa,YAAW,eAAe;IAClD,eAAe,IAAI,WAAW,EAAE;IAmDhC,aAAa,IAAI,MAAM;IAIvB,2BAA2B,IAAI,iBAAiB;IAI1C,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIrC,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKxC,iBAAiB,CACrB,KAAK,CAAC,EAAE,iBAAiB,GACxB,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAKxB,gBAAgB,CAAC,KAAK,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAMnE,aAAa,CACjB,IAAI,GAAE,iBAAiB,GAAG;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAO,GACvD,OAAO,CAAC,YAAY,EAAE,CAAC;IAgCpB,cAAc,CAClB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC;IAqBV,YAAY,CAChB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC;IAUV,cAAc,CAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,iBAAsB,EAC5B,MAAM,GAAE,MAAiB,GACxB,OAAO,CAAC,MAAM,CAAC;IAiCZ,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CA8B/D"}
@@ -0,0 +1,207 @@
1
+ import { existsSync, mkdirSync, readdirSync, statSync, unlinkSync, copyFileSync, writeFileSync, } from "fs";
2
+ import { join, resolve, basename, extname } from "path";
3
+ import { homedir } from "os";
4
+ import { runCommand } from "../../command-runner.js";
5
+ import { checkSqliteClient } from "./sqlite-env.js";
6
+ // --- Internal Helpers ---
7
+ function defaultDbDir() {
8
+ return join(homedir(), ".herdux", "sqlite");
9
+ }
10
+ function resolveDbDir(opts) {
11
+ return opts.host ? resolve(opts.host) : defaultDbDir();
12
+ }
13
+ function resolveDbPath(name, opts) {
14
+ return join(resolveDbDir(opts), `${name}.db`);
15
+ }
16
+ function generateBackupFilename(dbName, format) {
17
+ const date = new Date().toISOString().slice(0, 10);
18
+ return `${dbName}_${date}.${format === "plain" ? "sql" : "db"}`;
19
+ }
20
+ function formatFileSize(bytes) {
21
+ if (bytes < 1024)
22
+ return `${bytes} B`;
23
+ if (bytes < 1024 * 1024)
24
+ return `${(bytes / 1024).toFixed(1)} KB`;
25
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
26
+ }
27
+ // --- SqliteEngine ---
28
+ export class SqliteEngine {
29
+ getHealthChecks() {
30
+ return [
31
+ {
32
+ name: "sqlite3",
33
+ pendingMessage: "Checking sqlite3...",
34
+ run: async () => {
35
+ try {
36
+ const result = await runCommand("sqlite3", ["--version"]);
37
+ if (result.exitCode === 0) {
38
+ return {
39
+ status: "success",
40
+ message: `sqlite3 is installed: ${result.stdout.trim().split("\n")[0]}`,
41
+ };
42
+ }
43
+ return {
44
+ status: "error",
45
+ message: "sqlite3 returned a non-zero exit code.",
46
+ };
47
+ }
48
+ catch {
49
+ return {
50
+ status: "error",
51
+ message: "sqlite3 is missing. Install it: apt install sqlite3 / brew install sqlite",
52
+ };
53
+ }
54
+ },
55
+ },
56
+ {
57
+ name: "Database directory",
58
+ pendingMessage: "Checking database directory...",
59
+ run: async (opts) => {
60
+ const dbDir = resolveDbDir(opts);
61
+ try {
62
+ if (!existsSync(dbDir)) {
63
+ mkdirSync(dbDir, { recursive: true });
64
+ }
65
+ return {
66
+ status: "success",
67
+ message: `Database directory is accessible: ${dbDir}`,
68
+ };
69
+ }
70
+ catch (err) {
71
+ return {
72
+ status: "error",
73
+ message: `Cannot access database directory "${dbDir}": ${err.message}`,
74
+ };
75
+ }
76
+ },
77
+ },
78
+ ];
79
+ }
80
+ getEngineName() {
81
+ return "SQLite";
82
+ }
83
+ getDefaultConnectionOptions() {
84
+ return { host: defaultDbDir() };
85
+ }
86
+ async checkClientVersion() {
87
+ return await checkSqliteClient();
88
+ }
89
+ async checkBackupRequirements() {
90
+ // SQLite backups use Node.js fs (file copy) or sqlite3 .dump.
91
+ // sqlite3 is already validated in checkClientVersion — nothing else needed.
92
+ }
93
+ async discoverInstances(_opts) {
94
+ // SQLite is file-based and has no running server instances.
95
+ return [];
96
+ }
97
+ async getServerVersion(_opts) {
98
+ const result = await runCommand("sqlite3", ["--version"]);
99
+ if (result.exitCode !== 0)
100
+ return null;
101
+ return `SQLite ${result.stdout.trim().split("\n")[0]}`;
102
+ }
103
+ async listDatabases(opts = {}) {
104
+ const dbDir = resolveDbDir(opts);
105
+ if (!existsSync(dbDir)) {
106
+ return [];
107
+ }
108
+ const entries = readdirSync(dbDir);
109
+ const databases = [];
110
+ for (const entry of entries) {
111
+ const ext = extname(entry).toLowerCase();
112
+ if (ext !== ".db" && ext !== ".sqlite")
113
+ continue;
114
+ const name = basename(entry, ext);
115
+ const info = { name };
116
+ if (opts.includeSize) {
117
+ try {
118
+ const stat = statSync(join(dbDir, entry));
119
+ info.size = formatFileSize(stat.size);
120
+ }
121
+ catch {
122
+ info.size = "unknown";
123
+ }
124
+ }
125
+ databases.push(info);
126
+ }
127
+ return databases.sort((a, b) => a.name.localeCompare(b.name));
128
+ }
129
+ async createDatabase(name, opts = {}) {
130
+ const dbDir = resolveDbDir(opts);
131
+ if (!existsSync(dbDir)) {
132
+ mkdirSync(dbDir, { recursive: true });
133
+ }
134
+ const dbPath = join(dbDir, `${name}.db`);
135
+ if (existsSync(dbPath)) {
136
+ throw new Error(`Database "${name}" already exists at ${dbPath}`);
137
+ }
138
+ // Running sqlite3 with an empty command creates a valid empty database file.
139
+ const result = await runCommand("sqlite3", [dbPath, ""]);
140
+ if (result.exitCode !== 0) {
141
+ throw new Error(`Failed to create database "${name}": ${result.stderr}`);
142
+ }
143
+ }
144
+ async dropDatabase(name, opts = {}) {
145
+ const dbPath = resolveDbPath(name, opts);
146
+ if (!existsSync(dbPath)) {
147
+ throw new Error(`Database "${name}" not found at ${dbPath}`);
148
+ }
149
+ unlinkSync(dbPath);
150
+ }
151
+ async backupDatabase(dbName, outputDir, opts = {}, format = "custom") {
152
+ const dbPath = resolveDbPath(dbName, opts);
153
+ if (!existsSync(dbPath)) {
154
+ throw new Error(`Database "${dbName}" not found at ${dbPath}`);
155
+ }
156
+ const resolvedDir = resolve(outputDir);
157
+ if (!existsSync(resolvedDir)) {
158
+ mkdirSync(resolvedDir, { recursive: true });
159
+ }
160
+ const typedFormat = format === "plain" ? "plain" : "custom";
161
+ const filename = generateBackupFilename(dbName, typedFormat);
162
+ const outputPath = join(resolvedDir, filename);
163
+ if (typedFormat === "plain") {
164
+ // SQL dump via sqlite3 .dump
165
+ const result = await runCommand("sqlite3", [dbPath, ".dump"], {
166
+ timeout: 0,
167
+ });
168
+ if (result.exitCode !== 0) {
169
+ throw new Error(`Backup failed for "${dbName}": ${result.stderr}`);
170
+ }
171
+ writeFileSync(outputPath, result.stdout, "utf8");
172
+ }
173
+ else {
174
+ // Binary copy of the .db file
175
+ copyFileSync(dbPath, outputPath);
176
+ }
177
+ return outputPath;
178
+ }
179
+ async restoreDatabase(filePath, dbName, opts = {}) {
180
+ const resolvedPath = resolve(filePath);
181
+ if (!existsSync(resolvedPath)) {
182
+ throw new Error(`Backup file not found: ${resolvedPath}`);
183
+ }
184
+ const dbDir = resolveDbDir(opts);
185
+ if (!existsSync(dbDir)) {
186
+ mkdirSync(dbDir, { recursive: true });
187
+ }
188
+ const targetPath = join(dbDir, `${dbName}.db`);
189
+ const ext = extname(resolvedPath).toLowerCase();
190
+ const isPlain = ext === ".sql" || ext === ".txt";
191
+ if (isPlain) {
192
+ // Restore from SQL dump: sqlite3 target.db < backup.sql
193
+ const result = await runCommand("sqlite3", [targetPath], {
194
+ stdin: resolvedPath,
195
+ timeout: 0,
196
+ });
197
+ if (result.exitCode !== 0) {
198
+ throw new Error(`Restore failed: ${result.stderr}`);
199
+ }
200
+ }
201
+ else {
202
+ // Restore from .db file copy
203
+ copyFileSync(resolvedPath, targetPath);
204
+ }
205
+ }
206
+ }
207
+ //# sourceMappingURL=sqlite.engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.engine.js","sourceRoot":"","sources":["../../../../src/infra/engines/sqlite/sqlite.engine.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "herdux-cli",
3
- "version": "0.4.1",
3
+ "version": "0.5.0",
4
4
  "description": "Modern Database workflow CLI focused on developer experience, safety, and automation.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -27,16 +27,20 @@
27
27
  "test:watch": "node --experimental-vm-modules node_modules/jest/bin/jest.js --watch --selectProjects unit",
28
28
  "test:unit": "node --no-warnings --experimental-vm-modules node_modules/jest/bin/jest.js --selectProjects unit",
29
29
  "test:e2e": "node --no-warnings --experimental-vm-modules node_modules/jest/bin/jest.js --selectProjects e2e",
30
+ "test:integration": "node --no-warnings --experimental-vm-modules node_modules/jest/bin/jest.js --selectProjects integration",
30
31
  "test:e2e:pgsql": "node --no-warnings --experimental-vm-modules node_modules/jest/bin/jest.js -- tests/e2e/postgres/",
31
32
  "test:e2e:pgsql:up": "docker compose -f infra/docker/compose.e2e-pgsql.yml up -d --wait",
32
33
  "test:e2e:pgsql:down": "docker compose -f infra/docker/compose.e2e-pgsql.yml down -v --remove-orphans",
33
34
  "test:e2e:mysql": "node --no-warnings --experimental-vm-modules node_modules/jest/bin/jest.js -- tests/e2e/mysql/",
34
35
  "test:e2e:mysql:up": "docker compose -f infra/docker/compose.e2e-mysql.yml up -d --wait",
35
36
  "test:e2e:mysql:down": "docker compose -f infra/docker/compose.e2e-mysql.yml down -v --remove-orphans",
37
+ "test:e2e:sqlite": "node --no-warnings --experimental-vm-modules node_modules/jest/bin/jest.js -- tests/e2e/sqlite/",
36
38
  "prepare": "husky"
37
39
  },
38
40
  "keywords": [
39
41
  "postgresql",
42
+ "mysql",
43
+ "sqlite",
40
44
  "cli",
41
45
  "database",
42
46
  "backup",