@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.
Files changed (55) hide show
  1. package/dist/api.d.ts +28 -0
  2. package/dist/api.js +115 -0
  3. package/dist/api.js.map +1 -0
  4. package/dist/args.d.ts +20 -0
  5. package/dist/args.js +42 -0
  6. package/dist/args.js.map +1 -0
  7. package/dist/commands/api-keys.d.ts +11 -0
  8. package/dist/commands/api-keys.js +223 -0
  9. package/dist/commands/api-keys.js.map +1 -0
  10. package/dist/commands/auth.d.ts +3 -0
  11. package/dist/commands/auth.js +133 -0
  12. package/dist/commands/auth.js.map +1 -0
  13. package/dist/commands/connect.d.ts +7 -0
  14. package/dist/commands/connect.js +103 -0
  15. package/dist/commands/connect.js.map +1 -0
  16. package/dist/commands/create.d.ts +7 -0
  17. package/dist/commands/create.js +197 -0
  18. package/dist/commands/create.js.map +1 -0
  19. package/dist/commands/db.d.ts +8 -0
  20. package/dist/commands/db.js +316 -0
  21. package/dist/commands/db.js.map +1 -0
  22. package/dist/commands/dev.d.ts +1 -0
  23. package/dist/commands/dev.js +28 -0
  24. package/dist/commands/dev.js.map +1 -0
  25. package/dist/commands/generate.d.ts +1 -0
  26. package/dist/commands/generate.js +83 -0
  27. package/dist/commands/generate.js.map +1 -0
  28. package/dist/commands/migrate.d.ts +1 -0
  29. package/dist/commands/migrate.js +38 -0
  30. package/dist/commands/migrate.js.map +1 -0
  31. package/dist/commands/projects.d.ts +5 -0
  32. package/dist/commands/projects.js +259 -0
  33. package/dist/commands/projects.js.map +1 -0
  34. package/dist/commands/schema.d.ts +1 -0
  35. package/dist/commands/schema.js +38 -0
  36. package/dist/commands/schema.js.map +1 -0
  37. package/dist/commands/status.d.ts +7 -0
  38. package/dist/commands/status.js +106 -0
  39. package/dist/commands/status.js.map +1 -0
  40. package/dist/config.d.ts +45 -0
  41. package/dist/config.js +96 -0
  42. package/dist/config.js.map +1 -0
  43. package/dist/index.d.ts +2 -0
  44. package/dist/index.js +169 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/utils/logger.d.ts +26 -0
  47. package/dist/utils/logger.js +130 -0
  48. package/dist/utils/logger.js.map +1 -0
  49. package/dist/utils/open.d.ts +1 -0
  50. package/dist/utils/open.js +20 -0
  51. package/dist/utils/open.js.map +1 -0
  52. package/dist/utils/prompts.d.ts +7 -0
  53. package/dist/utils/prompts.js +92 -0
  54. package/dist/utils/prompts.js.map +1 -0
  55. 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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"}
@@ -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":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
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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"}