@batadata/cli 0.1.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.
- package/dist/api.d.ts +28 -0
- package/dist/api.js +115 -0
- package/dist/api.js.map +1 -0
- package/dist/args.d.ts +20 -0
- package/dist/args.js +42 -0
- package/dist/args.js.map +1 -0
- package/dist/commands/api-keys.d.ts +11 -0
- package/dist/commands/api-keys.js +223 -0
- package/dist/commands/api-keys.js.map +1 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.js +133 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/connect.d.ts +7 -0
- package/dist/commands/connect.js +103 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/create.d.ts +7 -0
- package/dist/commands/create.js +197 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/db.d.ts +8 -0
- package/dist/commands/db.js +316 -0
- package/dist/commands/db.js.map +1 -0
- package/dist/commands/dev.d.ts +1 -0
- package/dist/commands/dev.js +28 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/generate.d.ts +1 -0
- package/dist/commands/generate.js +83 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/migrate.d.ts +1 -0
- package/dist/commands/migrate.js +38 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/projects.d.ts +5 -0
- package/dist/commands/projects.js +259 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/schema.d.ts +1 -0
- package/dist/commands/schema.js +38 -0
- package/dist/commands/schema.js.map +1 -0
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.js +106 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/config.d.ts +45 -0
- package/dist/config.js +96 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +169 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/logger.d.ts +26 -0
- package/dist/utils/logger.js +130 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/open.d.ts +1 -0
- package/dist/utils/open.js +20 -0
- package/dist/utils/open.js.map +1 -0
- package/dist/utils/prompts.d.ts +7 -0
- package/dist/utils/prompts.js +92 -0
- package/dist/utils/prompts.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export interface BataConfig {
|
|
2
|
+
token?: string;
|
|
3
|
+
apiUrl?: string;
|
|
4
|
+
defaultProject?: string;
|
|
5
|
+
defaultTeam?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Runtime context resolved from global flags once at startup.
|
|
9
|
+
* Commands read from here so that --api-key / --api-url / --json
|
|
10
|
+
* are honored everywhere without each command re-parsing argv.
|
|
11
|
+
*/
|
|
12
|
+
interface RuntimeContext {
|
|
13
|
+
apiKey?: string;
|
|
14
|
+
apiUrl?: string;
|
|
15
|
+
json: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function setRuntime(ctx: Partial<RuntimeContext>): void;
|
|
18
|
+
export declare function isJsonMode(): boolean;
|
|
19
|
+
export declare function loadConfig(): BataConfig;
|
|
20
|
+
export declare function saveConfig(config: Partial<BataConfig>): void;
|
|
21
|
+
export declare function clearConfig(): void;
|
|
22
|
+
/**
|
|
23
|
+
* Resolve the token/API key to authenticate with, in priority order:
|
|
24
|
+
* 1. --api-key flag (runtime)
|
|
25
|
+
* 2. BATA_API_KEY env var
|
|
26
|
+
* 3. saved session token in ~/.batarc
|
|
27
|
+
* Returns undefined if none is available.
|
|
28
|
+
*/
|
|
29
|
+
export declare function getToken(): string | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* Like getToken() but exits with a clear, agent-friendly error if no
|
|
32
|
+
* credential can be found anywhere.
|
|
33
|
+
*/
|
|
34
|
+
export declare function requireToken(): string;
|
|
35
|
+
/**
|
|
36
|
+
* Resolve the API base URL, in priority order:
|
|
37
|
+
* 1. --api-url flag (runtime)
|
|
38
|
+
* 2. BATA_API_URL env var
|
|
39
|
+
* 3. saved apiUrl in ~/.batarc
|
|
40
|
+
* 4. built-in default (https://api.batadata.com)
|
|
41
|
+
*/
|
|
42
|
+
export declare function getApiUrl(): string;
|
|
43
|
+
export declare function getDefaultProject(): string | undefined;
|
|
44
|
+
export declare function getDefaultTeam(): string | undefined;
|
|
45
|
+
export {};
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import * as os from "node:os";
|
|
4
|
+
const CONFIG_PATH = path.join(os.homedir(), ".batarc");
|
|
5
|
+
const DEFAULT_API_URL = "https://api.batadata.com";
|
|
6
|
+
const runtime = { json: false };
|
|
7
|
+
export function setRuntime(ctx) {
|
|
8
|
+
if (ctx.apiKey !== undefined)
|
|
9
|
+
runtime.apiKey = ctx.apiKey;
|
|
10
|
+
if (ctx.apiUrl !== undefined)
|
|
11
|
+
runtime.apiUrl = ctx.apiUrl;
|
|
12
|
+
if (ctx.json !== undefined)
|
|
13
|
+
runtime.json = ctx.json;
|
|
14
|
+
}
|
|
15
|
+
export function isJsonMode() {
|
|
16
|
+
return runtime.json;
|
|
17
|
+
}
|
|
18
|
+
export function loadConfig() {
|
|
19
|
+
try {
|
|
20
|
+
const raw = fs.readFileSync(CONFIG_PATH, "utf-8");
|
|
21
|
+
return JSON.parse(raw);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return {};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function saveConfig(config) {
|
|
28
|
+
const existing = loadConfig();
|
|
29
|
+
const merged = { ...existing, ...config };
|
|
30
|
+
fs.writeFileSync(CONFIG_PATH, JSON.stringify(merged, null, 2) + "\n", "utf-8");
|
|
31
|
+
}
|
|
32
|
+
export function clearConfig() {
|
|
33
|
+
try {
|
|
34
|
+
fs.unlinkSync(CONFIG_PATH);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// File doesn't exist, that's fine
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Resolve the token/API key to authenticate with, in priority order:
|
|
42
|
+
* 1. --api-key flag (runtime)
|
|
43
|
+
* 2. BATA_API_KEY env var
|
|
44
|
+
* 3. saved session token in ~/.batarc
|
|
45
|
+
* Returns undefined if none is available.
|
|
46
|
+
*/
|
|
47
|
+
export function getToken() {
|
|
48
|
+
if (runtime.apiKey)
|
|
49
|
+
return runtime.apiKey;
|
|
50
|
+
if (process.env.BATA_API_KEY)
|
|
51
|
+
return process.env.BATA_API_KEY;
|
|
52
|
+
return loadConfig().token;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Like getToken() but exits with a clear, agent-friendly error if no
|
|
56
|
+
* credential can be found anywhere.
|
|
57
|
+
*/
|
|
58
|
+
export function requireToken() {
|
|
59
|
+
const token = getToken();
|
|
60
|
+
if (!token) {
|
|
61
|
+
if (isJsonMode()) {
|
|
62
|
+
console.log(JSON.stringify({
|
|
63
|
+
error: "Not authenticated",
|
|
64
|
+
code: "NO_CREDENTIALS",
|
|
65
|
+
hint: "Pass --api-key, set BATA_API_KEY, or run `bata login`.",
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
console.error("\x1b[31mError:\x1b[0m Not authenticated. Provide an API key with " +
|
|
70
|
+
"\x1b[36m--api-key\x1b[0m, set \x1b[36mBATA_API_KEY\x1b[0m, or run " +
|
|
71
|
+
"\x1b[36mbata login\x1b[0m.");
|
|
72
|
+
}
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
return token;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Resolve the API base URL, in priority order:
|
|
79
|
+
* 1. --api-url flag (runtime)
|
|
80
|
+
* 2. BATA_API_URL env var
|
|
81
|
+
* 3. saved apiUrl in ~/.batarc
|
|
82
|
+
* 4. built-in default (https://api.batadata.com)
|
|
83
|
+
*/
|
|
84
|
+
export function getApiUrl() {
|
|
85
|
+
return (runtime.apiUrl ||
|
|
86
|
+
process.env.BATA_API_URL ||
|
|
87
|
+
loadConfig().apiUrl ||
|
|
88
|
+
DEFAULT_API_URL);
|
|
89
|
+
}
|
|
90
|
+
export function getDefaultProject() {
|
|
91
|
+
return loadConfig().defaultProject;
|
|
92
|
+
}
|
|
93
|
+
export function getDefaultTeam() {
|
|
94
|
+
return loadConfig().defaultTeam;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAS9B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACvD,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAanD,MAAM,OAAO,GAAmB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAEhD,MAAM,UAAU,UAAU,CAAC,GAA4B;IACrD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC1D,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC1D,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,CAAC,IAAI,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAA2B;IACpD,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1C,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ;IACtB,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC,MAAM,CAAC;IAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC9D,OAAO,UAAU,EAAE,CAAC,KAAK,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,UAAU,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CAAC;gBACb,KAAK,EAAE,mBAAmB;gBAC1B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,wDAAwD;aAC/D,CAAC,CACH,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CACX,mEAAmE;gBACjE,oEAAoE;gBACpE,4BAA4B,CAC/B,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,CACL,OAAO,CAAC,MAAM;QACd,OAAO,CAAC,GAAG,CAAC,YAAY;QACxB,UAAU,EAAE,CAAC,MAAM;QACnB,eAAe,CAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,UAAU,EAAE,CAAC,cAAc,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,UAAU,EAAE,CAAC,WAAW,CAAC;AAClC,CAAC"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { login, logout, whoami } from "./commands/auth.js";
|
|
3
|
+
import { handleProjects } from "./commands/projects.js";
|
|
4
|
+
import { handleDb } from "./commands/db.js";
|
|
5
|
+
import { handleSchema } from "./commands/schema.js";
|
|
6
|
+
import { generate } from "./commands/generate.js";
|
|
7
|
+
import { handleMigrate } from "./commands/migrate.js";
|
|
8
|
+
import { handleApiKeys } from "./commands/api-keys.js";
|
|
9
|
+
import { dev } from "./commands/dev.js";
|
|
10
|
+
import { create } from "./commands/create.js";
|
|
11
|
+
import { status } from "./commands/status.js";
|
|
12
|
+
import { connect } from "./commands/connect.js";
|
|
13
|
+
import { parseGlobalFlags } from "./args.js";
|
|
14
|
+
import { isJsonMode } from "./config.js";
|
|
15
|
+
import { colors, log, banner } from "./utils/logger.js";
|
|
16
|
+
const VERSION = "0.1.0";
|
|
17
|
+
function help() {
|
|
18
|
+
banner();
|
|
19
|
+
log(` ${colors.bold("Usage")}`);
|
|
20
|
+
log(` ${colors.cyan("bata")} ${colors.dim("<command>")} ${colors.dim("[options]")}`);
|
|
21
|
+
log();
|
|
22
|
+
log(` ${colors.bold("Quick Start")}`);
|
|
23
|
+
log(` ${colors.cyan("create <name>")} Create a project and wait for it to be ready`);
|
|
24
|
+
log(` ${colors.cyan("connect <name>")} Open psql to a project (auto-wakes if suspended)`);
|
|
25
|
+
log(` ${colors.cyan("status")} Show all projects and their status`);
|
|
26
|
+
log();
|
|
27
|
+
log(` ${colors.bold("Auth")}`);
|
|
28
|
+
log(` ${colors.cyan("login")} Log in to BataDB`);
|
|
29
|
+
log(` ${colors.cyan("logout")} Log out and clear credentials`);
|
|
30
|
+
log(` ${colors.cyan("whoami")} Show current user and team`);
|
|
31
|
+
log(` ${colors.cyan("api-keys")} Manage API keys (create/list/revoke)`);
|
|
32
|
+
log();
|
|
33
|
+
log(` ${colors.bold("Projects")}`);
|
|
34
|
+
log(` ${colors.cyan("projects")} List all projects`);
|
|
35
|
+
log(` ${colors.cyan("projects list")} Alias for status`);
|
|
36
|
+
log(` ${colors.cyan("projects create")} Create a new project (interactive)`);
|
|
37
|
+
log(` ${colors.cyan("projects info")} Show project details`);
|
|
38
|
+
log(` ${colors.cyan("projects delete")} Delete a project`);
|
|
39
|
+
log();
|
|
40
|
+
log(` ${colors.bold("Database")}`);
|
|
41
|
+
log(` ${colors.cyan("db connect")} Open psql to your database`);
|
|
42
|
+
log(` ${colors.cyan("db url")} Print connection string`);
|
|
43
|
+
log(` ${colors.cyan("db branches")} List database branches`);
|
|
44
|
+
log(` ${colors.cyan("db branch create")} Create a new branch`);
|
|
45
|
+
log(` ${colors.cyan("db branch delete")} Delete a branch`);
|
|
46
|
+
log(` ${colors.cyan("db studio")} Open table browser in browser`);
|
|
47
|
+
log(` ${colors.cyan("db query")} Run a SQL query`);
|
|
48
|
+
log();
|
|
49
|
+
log(` ${colors.bold("Schema & Types")}`);
|
|
50
|
+
log(` ${colors.cyan("generate")} Generate types from database schema`);
|
|
51
|
+
log(` ${colors.cyan("generate --watch")} Watch mode for type generation`);
|
|
52
|
+
log(` ${colors.cyan("schema")} Schema management ${colors.dim("(coming soon)")}`);
|
|
53
|
+
log(` ${colors.cyan("migrate")} Migration management ${colors.dim("(coming soon)")}`);
|
|
54
|
+
log();
|
|
55
|
+
log(` ${colors.bold("Development")}`);
|
|
56
|
+
log(` ${colors.cyan("dev")} Local development setup guide`);
|
|
57
|
+
log();
|
|
58
|
+
log(` ${colors.bold("Global Options")}`);
|
|
59
|
+
log(` ${colors.dim("--json")} Machine-readable JSON output (read commands)`);
|
|
60
|
+
log(` ${colors.dim("--api-key <key>")} API key (else BATA_API_KEY, else saved login)`);
|
|
61
|
+
log(` ${colors.dim("--api-url <url>")} API base URL (else BATA_API_URL, else config/default)`);
|
|
62
|
+
log(` ${colors.dim("--yes, -y")} Skip confirmation prompts`);
|
|
63
|
+
log(` ${colors.dim("--help, -h")} Show this help message`);
|
|
64
|
+
log(` ${colors.dim("--version, -v")} Show version`);
|
|
65
|
+
log();
|
|
66
|
+
log(` ${colors.bold("Headless / agents")}`);
|
|
67
|
+
log(` ${colors.dim("Every command works with just")} ${colors.cyan("BATA_API_KEY")} ${colors.dim("set — no login needed.")}`);
|
|
68
|
+
log(` ${colors.dim("Mint a key with")} ${colors.cyan("bata api-keys create")}${colors.dim(".")}`);
|
|
69
|
+
log();
|
|
70
|
+
log(` ${colors.dim("Documentation:")} ${colors.cyan("https://batadata.com/docs")}`);
|
|
71
|
+
log();
|
|
72
|
+
}
|
|
73
|
+
async function main() {
|
|
74
|
+
// Extract global flags (--json, --api-key, --api-url, --yes) from anywhere
|
|
75
|
+
// in argv and install them into the runtime context, leaving the command
|
|
76
|
+
// and its own args clean.
|
|
77
|
+
const { rest: args } = parseGlobalFlags(process.argv.slice(2));
|
|
78
|
+
const command = args[0];
|
|
79
|
+
const rest = args.slice(1);
|
|
80
|
+
// Flags
|
|
81
|
+
if (!command || command === "--help" || command === "-h" || command === "help") {
|
|
82
|
+
help();
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (command === "--version" || command === "-v" || command === "version") {
|
|
86
|
+
log(`@batadata/cli ${VERSION}`);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// Route commands
|
|
90
|
+
try {
|
|
91
|
+
switch (command) {
|
|
92
|
+
// Quick commands
|
|
93
|
+
case "create":
|
|
94
|
+
await create(rest);
|
|
95
|
+
break;
|
|
96
|
+
case "status":
|
|
97
|
+
await status();
|
|
98
|
+
break;
|
|
99
|
+
case "connect":
|
|
100
|
+
await connect(rest);
|
|
101
|
+
break;
|
|
102
|
+
// Auth
|
|
103
|
+
case "login":
|
|
104
|
+
await login();
|
|
105
|
+
break;
|
|
106
|
+
case "logout":
|
|
107
|
+
await logout();
|
|
108
|
+
break;
|
|
109
|
+
case "whoami":
|
|
110
|
+
await whoami();
|
|
111
|
+
break;
|
|
112
|
+
case "api-keys":
|
|
113
|
+
case "apikeys":
|
|
114
|
+
await handleApiKeys(rest);
|
|
115
|
+
break;
|
|
116
|
+
// Projects
|
|
117
|
+
case "projects":
|
|
118
|
+
// "projects list" is an alias for status
|
|
119
|
+
if (rest[0] === "list") {
|
|
120
|
+
await status();
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
await handleProjects(rest);
|
|
124
|
+
}
|
|
125
|
+
break;
|
|
126
|
+
// Database
|
|
127
|
+
case "db":
|
|
128
|
+
await handleDb(rest);
|
|
129
|
+
break;
|
|
130
|
+
// Schema
|
|
131
|
+
case "schema":
|
|
132
|
+
await handleSchema(rest);
|
|
133
|
+
break;
|
|
134
|
+
// Generate
|
|
135
|
+
case "generate":
|
|
136
|
+
await generate(rest);
|
|
137
|
+
break;
|
|
138
|
+
// Migrate
|
|
139
|
+
case "migrate":
|
|
140
|
+
await handleMigrate(rest);
|
|
141
|
+
break;
|
|
142
|
+
// Dev
|
|
143
|
+
case "dev":
|
|
144
|
+
await dev();
|
|
145
|
+
break;
|
|
146
|
+
default:
|
|
147
|
+
log();
|
|
148
|
+
log(` ${colors.red("Error:")} Unknown command ${colors.white(command)}`);
|
|
149
|
+
log();
|
|
150
|
+
log(` Run ${colors.cyan("bata --help")} to see available commands.`);
|
|
151
|
+
log();
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
157
|
+
if (isJsonMode()) {
|
|
158
|
+
log(JSON.stringify({ error: message, code: "CLI_ERROR" }, null, 2));
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
log();
|
|
162
|
+
log(` ${colors.red("Error:")} ${message}`);
|
|
163
|
+
log();
|
|
164
|
+
}
|
|
165
|
+
process.exit(1);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
main();
|
|
169
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare const colors: {
|
|
2
|
+
bold: (t: string) => string;
|
|
3
|
+
dim: (t: string) => string;
|
|
4
|
+
red: (t: string) => string;
|
|
5
|
+
green: (t: string) => string;
|
|
6
|
+
yellow: (t: string) => string;
|
|
7
|
+
cyan: (t: string) => string;
|
|
8
|
+
white: (t: string) => string;
|
|
9
|
+
gray: (t: string) => string;
|
|
10
|
+
};
|
|
11
|
+
export declare function log(msg?: string): void;
|
|
12
|
+
/** Emit a stable JSON document to stdout (for --json mode). */
|
|
13
|
+
export declare function json(value: unknown): void;
|
|
14
|
+
export declare function info(msg: string): void;
|
|
15
|
+
export declare function success(msg: string): void;
|
|
16
|
+
export declare function warn(msg: string): void;
|
|
17
|
+
export declare function error(msg: string): void;
|
|
18
|
+
export declare function heading(msg: string): void;
|
|
19
|
+
export interface Spinner {
|
|
20
|
+
stop: (finalMsg?: string) => void;
|
|
21
|
+
update: (msg: string) => void;
|
|
22
|
+
}
|
|
23
|
+
export declare function spinner(msg: string): Spinner;
|
|
24
|
+
export declare function table(headers: string[], rows: string[][]): void;
|
|
25
|
+
export declare function kvList(items: [string, string][]): void;
|
|
26
|
+
export declare function banner(): void;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { isJsonMode } from "../config.js";
|
|
2
|
+
// ANSI color codes
|
|
3
|
+
const ESC = "\x1b[";
|
|
4
|
+
const RESET = `${ESC}0m`;
|
|
5
|
+
const BOLD = `${ESC}1m`;
|
|
6
|
+
const DIM = `${ESC}2m`;
|
|
7
|
+
const RED = `${ESC}31m`;
|
|
8
|
+
const GREEN = `${ESC}32m`;
|
|
9
|
+
const YELLOW = `${ESC}33m`;
|
|
10
|
+
const CYAN = `${ESC}36m`;
|
|
11
|
+
const WHITE = `${ESC}37m`;
|
|
12
|
+
const GRAY = `${ESC}90m`;
|
|
13
|
+
const noColor = process.env.NO_COLOR !== undefined;
|
|
14
|
+
function c(color, text) {
|
|
15
|
+
if (noColor)
|
|
16
|
+
return text;
|
|
17
|
+
return `${color}${text}${RESET}`;
|
|
18
|
+
}
|
|
19
|
+
export const colors = {
|
|
20
|
+
bold: (t) => c(BOLD, t),
|
|
21
|
+
dim: (t) => c(DIM, t),
|
|
22
|
+
red: (t) => c(RED, t),
|
|
23
|
+
green: (t) => c(GREEN, t),
|
|
24
|
+
yellow: (t) => c(YELLOW, t),
|
|
25
|
+
cyan: (t) => c(CYAN, t),
|
|
26
|
+
white: (t) => c(WHITE, t),
|
|
27
|
+
gray: (t) => c(GRAY, t),
|
|
28
|
+
};
|
|
29
|
+
export function log(msg = "") {
|
|
30
|
+
console.log(msg);
|
|
31
|
+
}
|
|
32
|
+
/** Emit a stable JSON document to stdout (for --json mode). */
|
|
33
|
+
export function json(value) {
|
|
34
|
+
console.log(JSON.stringify(value, null, 2));
|
|
35
|
+
}
|
|
36
|
+
// Decorative/human-facing output is suppressed in --json mode so that stdout
|
|
37
|
+
// stays pure machine-readable JSON. Commands emit data via json(); errors go to
|
|
38
|
+
// stderr via error(), so they never pollute parsed stdout either way.
|
|
39
|
+
export function info(msg) {
|
|
40
|
+
if (isJsonMode())
|
|
41
|
+
return;
|
|
42
|
+
console.log(`${colors.cyan(">")} ${msg}`);
|
|
43
|
+
}
|
|
44
|
+
export function success(msg) {
|
|
45
|
+
if (isJsonMode())
|
|
46
|
+
return;
|
|
47
|
+
console.log(`${colors.green(">")} ${msg}`);
|
|
48
|
+
}
|
|
49
|
+
export function warn(msg) {
|
|
50
|
+
if (isJsonMode())
|
|
51
|
+
return;
|
|
52
|
+
console.log(`${colors.yellow("!")} ${msg}`);
|
|
53
|
+
}
|
|
54
|
+
export function error(msg) {
|
|
55
|
+
// Always to stderr — keeps stdout clean for JSON consumers.
|
|
56
|
+
console.error(`${colors.red("Error:")} ${msg}`);
|
|
57
|
+
}
|
|
58
|
+
export function heading(msg) {
|
|
59
|
+
if (isJsonMode())
|
|
60
|
+
return;
|
|
61
|
+
console.log();
|
|
62
|
+
console.log(` ${colors.bold(msg)}`);
|
|
63
|
+
console.log();
|
|
64
|
+
}
|
|
65
|
+
// Spinner for async operations
|
|
66
|
+
const SPINNER_FRAMES = [".", "..", "...", "....", ".....", "......"];
|
|
67
|
+
export function spinner(msg) {
|
|
68
|
+
// No-op spinner in JSON mode (no stray frames on stdout).
|
|
69
|
+
if (isJsonMode()) {
|
|
70
|
+
return { stop() { }, update() { } };
|
|
71
|
+
}
|
|
72
|
+
let frame = 0;
|
|
73
|
+
let currentMsg = msg;
|
|
74
|
+
const interval = setInterval(() => {
|
|
75
|
+
process.stdout.write(`\r${colors.cyan(">")} ${currentMsg}${SPINNER_FRAMES[frame % SPINNER_FRAMES.length]} \r`);
|
|
76
|
+
frame++;
|
|
77
|
+
}, 200);
|
|
78
|
+
return {
|
|
79
|
+
stop(finalMsg) {
|
|
80
|
+
clearInterval(interval);
|
|
81
|
+
process.stdout.write("\r" + " ".repeat(80) + "\r");
|
|
82
|
+
if (finalMsg) {
|
|
83
|
+
success(finalMsg);
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
update(newMsg) {
|
|
87
|
+
currentMsg = newMsg;
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// Table formatting
|
|
92
|
+
export function table(headers, rows) {
|
|
93
|
+
if (rows.length === 0) {
|
|
94
|
+
log(colors.dim(" No results."));
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// Calculate column widths
|
|
98
|
+
const widths = headers.map((h, i) => {
|
|
99
|
+
const maxData = rows.reduce((max, row) => Math.max(max, (row[i] || "").length), 0);
|
|
100
|
+
return Math.max(h.length, maxData);
|
|
101
|
+
});
|
|
102
|
+
// Header
|
|
103
|
+
const headerLine = headers.map((h, i) => colors.dim(h.padEnd(widths[i]))).join(" ");
|
|
104
|
+
log(` ${headerLine}`);
|
|
105
|
+
// Separator
|
|
106
|
+
const sep = widths.map((w) => colors.dim("-".repeat(w))).join(" ");
|
|
107
|
+
log(` ${sep}`);
|
|
108
|
+
// Rows
|
|
109
|
+
for (const row of rows) {
|
|
110
|
+
const line = row.map((cell, i) => {
|
|
111
|
+
const padded = (cell || "").padEnd(widths[i]);
|
|
112
|
+
return i === 0 ? colors.white(padded) : padded;
|
|
113
|
+
}).join(" ");
|
|
114
|
+
log(` ${line}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Key-value display
|
|
118
|
+
export function kvList(items) {
|
|
119
|
+
const maxKey = items.reduce((max, [k]) => Math.max(max, k.length), 0);
|
|
120
|
+
for (const [key, value] of items) {
|
|
121
|
+
log(` ${colors.dim(key.padEnd(maxKey))} ${value}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Banner
|
|
125
|
+
export function banner() {
|
|
126
|
+
log();
|
|
127
|
+
log(` ${colors.cyan(colors.bold("BataDB"))} ${colors.dim("v0.1.0")} ${colors.dim("— serverless Postgres platform")}`);
|
|
128
|
+
log();
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function openBrowser(url: string): void;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { exec } from "node:child_process";
|
|
2
|
+
export function openBrowser(url) {
|
|
3
|
+
const platform = process.platform;
|
|
4
|
+
let cmd;
|
|
5
|
+
if (platform === "darwin") {
|
|
6
|
+
cmd = `open "${url}"`;
|
|
7
|
+
}
|
|
8
|
+
else if (platform === "win32") {
|
|
9
|
+
cmd = `start "${url}"`;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
cmd = `xdg-open "${url}"`;
|
|
13
|
+
}
|
|
14
|
+
exec(cmd, (err) => {
|
|
15
|
+
if (err) {
|
|
16
|
+
// Silently fail — user can copy the URL
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=open.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/utils/open.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,IAAI,GAAW,CAAC;IAEhB,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,GAAG,GAAG,SAAS,GAAG,GAAG,CAAC;IACxB,CAAC;SAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChC,GAAG,GAAG,UAAU,GAAG,GAAG,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,aAAa,GAAG,GAAG,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;QAChB,IAAI,GAAG,EAAE,CAAC;YACR,wCAAwC;QAC1C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function prompt(message: string, defaultValue?: string): Promise<string>;
|
|
2
|
+
export declare function promptSecret(message: string): Promise<string>;
|
|
3
|
+
export declare function confirm(message: string, defaultYes?: boolean): Promise<boolean>;
|
|
4
|
+
export declare function select(message: string, options: {
|
|
5
|
+
label: string;
|
|
6
|
+
value: string;
|
|
7
|
+
}[]): Promise<string>;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import * as readline from "node:readline";
|
|
2
|
+
import { colors, log } from "./logger.js";
|
|
3
|
+
function createInterface() {
|
|
4
|
+
return readline.createInterface({
|
|
5
|
+
input: process.stdin,
|
|
6
|
+
output: process.stdout,
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
export async function prompt(message, defaultValue) {
|
|
10
|
+
const rl = createInterface();
|
|
11
|
+
const suffix = defaultValue ? ` ${colors.dim(`(${defaultValue})`)}` : "";
|
|
12
|
+
return new Promise((resolve) => {
|
|
13
|
+
rl.question(` ${colors.cyan("?")} ${message}${suffix} `, (answer) => {
|
|
14
|
+
rl.close();
|
|
15
|
+
resolve(answer.trim() || defaultValue || "");
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
export async function promptSecret(message) {
|
|
20
|
+
// If not a TTY (piped input), fall back to readline
|
|
21
|
+
if (!process.stdin.isTTY) {
|
|
22
|
+
const rl = createInterface();
|
|
23
|
+
return new Promise((resolve) => {
|
|
24
|
+
rl.question(` ${colors.cyan("?")} ${message} `, (answer) => {
|
|
25
|
+
rl.close();
|
|
26
|
+
resolve(answer.trim());
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return new Promise((resolve) => {
|
|
31
|
+
const rl = createInterface();
|
|
32
|
+
process.stdout.write(` ${colors.cyan("?")} ${message} `);
|
|
33
|
+
// Mute output for password entry
|
|
34
|
+
const stdin = process.stdin;
|
|
35
|
+
const wasRaw = stdin.isRaw;
|
|
36
|
+
stdin.setRawMode(true);
|
|
37
|
+
let input = "";
|
|
38
|
+
const onData = (char) => {
|
|
39
|
+
const c = char.toString();
|
|
40
|
+
if (c === "\n" || c === "\r") {
|
|
41
|
+
stdin.removeListener("data", onData);
|
|
42
|
+
if (wasRaw !== undefined) {
|
|
43
|
+
stdin.setRawMode(wasRaw);
|
|
44
|
+
}
|
|
45
|
+
rl.close();
|
|
46
|
+
log();
|
|
47
|
+
resolve(input);
|
|
48
|
+
}
|
|
49
|
+
else if (c === "\u0003") {
|
|
50
|
+
// Ctrl+C
|
|
51
|
+
stdin.setRawMode(wasRaw ?? false);
|
|
52
|
+
rl.close();
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
else if (c === "\u007f" || c === "\b") {
|
|
56
|
+
// Backspace
|
|
57
|
+
if (input.length > 0) {
|
|
58
|
+
input = input.slice(0, -1);
|
|
59
|
+
process.stdout.write("\b \b");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
input += c;
|
|
64
|
+
process.stdout.write("*");
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
stdin.on("data", onData);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
export async function confirm(message, defaultYes = true) {
|
|
71
|
+
const hint = defaultYes ? "Y/n" : "y/N";
|
|
72
|
+
const answer = await prompt(`${message} ${colors.dim(`(${hint})`)}`);
|
|
73
|
+
if (!answer)
|
|
74
|
+
return defaultYes;
|
|
75
|
+
return answer.toLowerCase().startsWith("y");
|
|
76
|
+
}
|
|
77
|
+
export async function select(message, options) {
|
|
78
|
+
log(` ${colors.cyan("?")} ${message}`);
|
|
79
|
+
log();
|
|
80
|
+
for (let i = 0; i < options.length; i++) {
|
|
81
|
+
log(` ${colors.cyan(`${i + 1})`)} ${options[i].label}`);
|
|
82
|
+
}
|
|
83
|
+
log();
|
|
84
|
+
const answer = await prompt("Enter number");
|
|
85
|
+
const idx = parseInt(answer, 10) - 1;
|
|
86
|
+
if (idx >= 0 && idx < options.length) {
|
|
87
|
+
return options[idx].value;
|
|
88
|
+
}
|
|
89
|
+
// Default to first option
|
|
90
|
+
return options[0].value;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"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"}
|