coder-link 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +200 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +684 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/amp-manager.d.ts +24 -0
- package/dist/lib/amp-manager.d.ts.map +1 -0
- package/dist/lib/amp-manager.js +46 -0
- package/dist/lib/amp-manager.js.map +1 -0
- package/dist/lib/claude-code-manager.d.ts +55 -0
- package/dist/lib/claude-code-manager.d.ts.map +1 -0
- package/dist/lib/claude-code-manager.js +408 -0
- package/dist/lib/claude-code-manager.js.map +1 -0
- package/dist/lib/crush-manager.d.ts +31 -0
- package/dist/lib/crush-manager.d.ts.map +1 -0
- package/dist/lib/crush-manager.js +262 -0
- package/dist/lib/crush-manager.js.map +1 -0
- package/dist/lib/factory-droid-manager.d.ts +36 -0
- package/dist/lib/factory-droid-manager.d.ts.map +1 -0
- package/dist/lib/factory-droid-manager.js +387 -0
- package/dist/lib/factory-droid-manager.js.map +1 -0
- package/dist/lib/kimi-manager.d.ts +34 -0
- package/dist/lib/kimi-manager.d.ts.map +1 -0
- package/dist/lib/kimi-manager.js +316 -0
- package/dist/lib/kimi-manager.js.map +1 -0
- package/dist/lib/opencode-manager.d.ts +31 -0
- package/dist/lib/opencode-manager.d.ts.map +1 -0
- package/dist/lib/opencode-manager.js +315 -0
- package/dist/lib/opencode-manager.js.map +1 -0
- package/dist/lib/pi-manager.d.ts +30 -0
- package/dist/lib/pi-manager.d.ts.map +1 -0
- package/dist/lib/pi-manager.js +196 -0
- package/dist/lib/pi-manager.js.map +1 -0
- package/dist/lib/tool-manager.d.ts +51 -0
- package/dist/lib/tool-manager.d.ts.map +1 -0
- package/dist/lib/tool-manager.js +113 -0
- package/dist/lib/tool-manager.js.map +1 -0
- package/dist/locales/en_US.json +49 -0
- package/dist/locales/zh_CN.json +49 -0
- package/dist/mcp-services.d.ts +3 -0
- package/dist/mcp-services.d.ts.map +1 -0
- package/dist/mcp-services.js +26 -0
- package/dist/mcp-services.js.map +1 -0
- package/dist/menu.d.ts +2 -0
- package/dist/menu.d.ts.map +1 -0
- package/dist/menu.js +1226 -0
- package/dist/menu.js.map +1 -0
- package/dist/utils/api-test.d.ts +32 -0
- package/dist/utils/api-test.d.ts.map +1 -0
- package/dist/utils/api-test.js +163 -0
- package/dist/utils/api-test.js.map +1 -0
- package/dist/utils/brand.d.ts +39 -0
- package/dist/utils/brand.d.ts.map +1 -0
- package/dist/utils/brand.js +195 -0
- package/dist/utils/brand.js.map +1 -0
- package/dist/utils/config.d.ts +100 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +483 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/exec.d.ts +5 -0
- package/dist/utils/exec.d.ts.map +1 -0
- package/dist/utils/exec.js +145 -0
- package/dist/utils/exec.js.map +1 -0
- package/dist/utils/i18n.d.ts +56 -0
- package/dist/utils/i18n.d.ts.map +1 -0
- package/dist/utils/i18n.js +42 -0
- package/dist/utils/i18n.js.map +1 -0
- package/dist/utils/keyboard.d.ts +32 -0
- package/dist/utils/keyboard.d.ts.map +1 -0
- package/dist/utils/keyboard.js +109 -0
- package/dist/utils/keyboard.js.map +1 -0
- package/dist/utils/logger.d.ts +14 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +55 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/output.d.ts +58 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +93 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/wizard.d.ts +2 -0
- package/dist/wizard.d.ts.map +1 -0
- package/dist/wizard.js +114 -0
- package/dist/wizard.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { spawnSync, spawn } from 'child_process';
|
|
2
|
+
function restoreTtyAfterChild() {
|
|
3
|
+
try {
|
|
4
|
+
if (process.stdin.isTTY) {
|
|
5
|
+
process.stdin.setRawMode(false);
|
|
6
|
+
process.stdin.resume();
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
// ignore
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function detachStdinListenersForChild() {
|
|
14
|
+
// Snapshot and remove every listener that could consume stdin bytes
|
|
15
|
+
// before the child process sees them.
|
|
16
|
+
const saved = [];
|
|
17
|
+
for (const event of ['data', 'keypress', 'readable']) {
|
|
18
|
+
for (const fn of process.stdin.listeners(event)) {
|
|
19
|
+
saved.push({ event, fn: fn });
|
|
20
|
+
process.stdin.removeListener(event, fn);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// Exit raw mode so the child gets normal cooked input.
|
|
24
|
+
try {
|
|
25
|
+
if (process.stdin.isTTY)
|
|
26
|
+
process.stdin.setRawMode(false);
|
|
27
|
+
}
|
|
28
|
+
catch { /* */ }
|
|
29
|
+
// CRITICAL: **pause** stdin so Node's internal reader thread stops
|
|
30
|
+
// consuming console input. Without this the child never receives
|
|
31
|
+
// keystrokes because the parent's libuv loop eats them first.
|
|
32
|
+
process.stdin.pause();
|
|
33
|
+
const restore = () => {
|
|
34
|
+
// Put stdin back into the state Inquirer expects.
|
|
35
|
+
try {
|
|
36
|
+
if (process.stdin.isTTY)
|
|
37
|
+
process.stdin.setRawMode(false);
|
|
38
|
+
}
|
|
39
|
+
catch { /* */ }
|
|
40
|
+
process.stdin.resume();
|
|
41
|
+
// Reattach saved listeners (skip duplicates).
|
|
42
|
+
for (const { event, fn } of saved) {
|
|
43
|
+
if (!process.stdin.listeners(event).includes(fn)) {
|
|
44
|
+
process.stdin.on(event, fn);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
return { restore };
|
|
49
|
+
}
|
|
50
|
+
export function commandExists(command) {
|
|
51
|
+
const checker = process.platform === 'win32' ? 'where' : 'which';
|
|
52
|
+
const result = spawnSync(checker, [command], { stdio: 'ignore' });
|
|
53
|
+
if (result.status === 0)
|
|
54
|
+
return true;
|
|
55
|
+
// Fallback: some tools are available via shell aliases/shims and won't show up in where/which.
|
|
56
|
+
const shell = process.platform === 'win32';
|
|
57
|
+
const probe1 = spawnSync(command, ['--version'], { stdio: 'ignore', shell });
|
|
58
|
+
if (probe1.status === 0)
|
|
59
|
+
return true;
|
|
60
|
+
const probe2 = spawnSync(command, ['-v'], { stdio: 'ignore', shell });
|
|
61
|
+
return probe2.status === 0;
|
|
62
|
+
}
|
|
63
|
+
export async function runInteractive(command, args = []) {
|
|
64
|
+
return await new Promise((resolve) => {
|
|
65
|
+
const stdin = detachStdinListenersForChild();
|
|
66
|
+
const child = spawn(command, args, { stdio: 'inherit', shell: process.platform === 'win32' });
|
|
67
|
+
child.on('exit', (code) => {
|
|
68
|
+
stdin.restore();
|
|
69
|
+
resolve(code ?? 0);
|
|
70
|
+
});
|
|
71
|
+
child.on('error', () => {
|
|
72
|
+
stdin.restore();
|
|
73
|
+
resolve(1);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
export async function runInteractiveWithEnv(command, args = [], envOverrides = {}) {
|
|
78
|
+
const env = { ...process.env };
|
|
79
|
+
for (const [key, value] of Object.entries(envOverrides)) {
|
|
80
|
+
if (typeof value === 'string' && value.length > 0)
|
|
81
|
+
env[key] = value;
|
|
82
|
+
else
|
|
83
|
+
delete env[key];
|
|
84
|
+
}
|
|
85
|
+
return await new Promise((resolve) => {
|
|
86
|
+
const stdin = detachStdinListenersForChild();
|
|
87
|
+
const child = spawn(command, args, {
|
|
88
|
+
stdio: 'inherit',
|
|
89
|
+
shell: process.platform === 'win32',
|
|
90
|
+
env
|
|
91
|
+
});
|
|
92
|
+
child.on('exit', (code) => {
|
|
93
|
+
stdin.restore();
|
|
94
|
+
resolve(code ?? 0);
|
|
95
|
+
});
|
|
96
|
+
child.on('error', () => {
|
|
97
|
+
stdin.restore();
|
|
98
|
+
resolve(1);
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
export function runInNewTerminal(command, args = [], envOverrides = {}) {
|
|
103
|
+
const env = { ...process.env };
|
|
104
|
+
for (const [key, value] of Object.entries(envOverrides)) {
|
|
105
|
+
if (typeof value === 'string' && value.length > 0)
|
|
106
|
+
env[key] = value;
|
|
107
|
+
else
|
|
108
|
+
delete env[key];
|
|
109
|
+
}
|
|
110
|
+
if (process.platform !== 'win32') {
|
|
111
|
+
// Best-effort; currently only implemented for Windows.
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
// Prefer Windows Terminal (new tab) when available.
|
|
116
|
+
if (commandExists('wt')) {
|
|
117
|
+
const child = spawn('wt', ['-w', '0', 'nt', '--', command, ...args], {
|
|
118
|
+
detached: true,
|
|
119
|
+
stdio: 'ignore',
|
|
120
|
+
env,
|
|
121
|
+
});
|
|
122
|
+
child.unref();
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
// ignore and fall back
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
// Fallback: open a new console window via cmd.exe `start`.
|
|
131
|
+
// Note: `start` requires a window title argument; we pass an empty string.
|
|
132
|
+
const child = spawn('cmd.exe', ['/c', 'start', '""', command, ...args], {
|
|
133
|
+
detached: true,
|
|
134
|
+
stdio: 'ignore',
|
|
135
|
+
env,
|
|
136
|
+
windowsHide: false,
|
|
137
|
+
});
|
|
138
|
+
child.unref();
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=exec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/utils/exec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export interface Translations {
|
|
2
|
+
cli: {
|
|
3
|
+
error_general: string;
|
|
4
|
+
};
|
|
5
|
+
lang: {
|
|
6
|
+
current: string;
|
|
7
|
+
changed: string;
|
|
8
|
+
};
|
|
9
|
+
auth: {
|
|
10
|
+
set_success: string;
|
|
11
|
+
revoke_success: string;
|
|
12
|
+
reload_success: string;
|
|
13
|
+
not_set: string;
|
|
14
|
+
};
|
|
15
|
+
tools: {
|
|
16
|
+
list_header: string;
|
|
17
|
+
install_success: string;
|
|
18
|
+
uninstall_success: string;
|
|
19
|
+
};
|
|
20
|
+
mcp: {
|
|
21
|
+
list_header: string;
|
|
22
|
+
installed_header: string;
|
|
23
|
+
install_success: string;
|
|
24
|
+
uninstall_success: string;
|
|
25
|
+
};
|
|
26
|
+
doctor: {
|
|
27
|
+
header: string;
|
|
28
|
+
config_path: string;
|
|
29
|
+
current_auth: string;
|
|
30
|
+
plan: string;
|
|
31
|
+
api_key: string;
|
|
32
|
+
not_set: string;
|
|
33
|
+
tools_header: string;
|
|
34
|
+
mcp_header: string;
|
|
35
|
+
none: string;
|
|
36
|
+
};
|
|
37
|
+
wizard: {
|
|
38
|
+
welcome: string;
|
|
39
|
+
select_language: string;
|
|
40
|
+
select_plan: string;
|
|
41
|
+
enter_api_key: string;
|
|
42
|
+
select_tools: string;
|
|
43
|
+
installing_tools: string;
|
|
44
|
+
tool_installed: string;
|
|
45
|
+
loading_plan: string;
|
|
46
|
+
manage_mcp: string;
|
|
47
|
+
complete: string;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export declare function setLang(lang: 'zh_CN' | 'en_US'): void;
|
|
51
|
+
export declare function t(key: string, params?: Record<string, string>): string;
|
|
52
|
+
export declare const i18n: {
|
|
53
|
+
t: typeof t;
|
|
54
|
+
setLang: typeof setLang;
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=i18n.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/utils/i18n.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE;QACH,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,IAAI,EAAE;QACJ,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,GAAG,EAAE;QACH,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;QACxB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAiBD,wBAAgB,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,QAE9C;AAED,wBAAgB,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAsBtE;AAED,eAAO,MAAM,IAAI;;;CAAiB,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
5
|
+
const __dirname = dirname(__filename);
|
|
6
|
+
let translations = null;
|
|
7
|
+
let currentLang = 'en_US';
|
|
8
|
+
function loadTranslations() {
|
|
9
|
+
if (translations)
|
|
10
|
+
return translations;
|
|
11
|
+
// At runtime, this file lives in dist/utils, and locales are copied to dist/locales
|
|
12
|
+
const localesDir = join(__dirname, '..', 'locales');
|
|
13
|
+
const zh_CN = JSON.parse(readFileSync(join(localesDir, 'zh_CN.json'), 'utf-8'));
|
|
14
|
+
const en_US = JSON.parse(readFileSync(join(localesDir, 'en_US.json'), 'utf-8'));
|
|
15
|
+
translations = { zh_CN, en_US };
|
|
16
|
+
return translations;
|
|
17
|
+
}
|
|
18
|
+
export function setLang(lang) {
|
|
19
|
+
currentLang = lang;
|
|
20
|
+
}
|
|
21
|
+
export function t(key, params) {
|
|
22
|
+
const allTranslations = loadTranslations();
|
|
23
|
+
const trans = allTranslations[currentLang];
|
|
24
|
+
const keys = key.split('.');
|
|
25
|
+
let value = trans;
|
|
26
|
+
for (const k of keys) {
|
|
27
|
+
if (value && typeof value === 'object' && k in value) {
|
|
28
|
+
value = value[k];
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
return key; // fallback to key if not found
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (typeof value !== 'string')
|
|
35
|
+
return key;
|
|
36
|
+
if (params) {
|
|
37
|
+
return value.replace(/\{(\w+)\}/g, (match, p1) => params[p1] || match);
|
|
38
|
+
}
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
export const i18n = { t, setLang };
|
|
42
|
+
//# sourceMappingURL=i18n.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/utils/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAoDtC,IAAI,YAAY,GAAmD,IAAI,CAAC;AACxE,IAAI,WAAW,GAAsB,OAAO,CAAC;AAE7C,SAAS,gBAAgB;IACvB,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IAEtC,oFAAoF;IACpF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAiB,CAAC;IAChG,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAiB,CAAC;IAEhG,YAAY,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAChC,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAuB;IAC7C,WAAW,GAAG,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,CAAC,CAAC,GAAW,EAAE,MAA+B;IAC5D,MAAM,eAAe,GAAG,gBAAgB,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAE3C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,KAAK,GAAQ,KAAK,CAAC;IAEvB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;YACrD,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,CAAC,CAAC,+BAA+B;QAC7C,CAAC;IACH,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IAE1C,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keyboard shortcut handler for interactive menus
|
|
3
|
+
* Adds support for: q/Q to quit, Ctrl+C graceful exit, Esc to go back
|
|
4
|
+
*/
|
|
5
|
+
export declare class KeyboardHandler {
|
|
6
|
+
private static instance;
|
|
7
|
+
private rl;
|
|
8
|
+
private quitCallback;
|
|
9
|
+
private backCallback;
|
|
10
|
+
private isActive;
|
|
11
|
+
static getInstance(): KeyboardHandler;
|
|
12
|
+
private setupRawMode;
|
|
13
|
+
private restoreRawMode;
|
|
14
|
+
/**
|
|
15
|
+
* Enable keyboard shortcuts
|
|
16
|
+
* @param onQuit Called when user presses 'q' or Ctrl+C
|
|
17
|
+
* @param onBack Called when user presses Esc
|
|
18
|
+
*/
|
|
19
|
+
enable(onQuit?: () => void, onBack?: () => void): void;
|
|
20
|
+
/**
|
|
21
|
+
* Disable keyboard shortcuts
|
|
22
|
+
*/
|
|
23
|
+
disable(): void;
|
|
24
|
+
/**
|
|
25
|
+
* Show available shortcuts hint
|
|
26
|
+
*/
|
|
27
|
+
showHints(): void;
|
|
28
|
+
private handleInput;
|
|
29
|
+
private handleSigint;
|
|
30
|
+
}
|
|
31
|
+
export declare const keyboardHandler: KeyboardHandler;
|
|
32
|
+
//# sourceMappingURL=keyboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../src/utils/keyboard.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgC;IACvD,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,QAAQ,CAAS;IAEzB,MAAM,CAAC,WAAW,IAAI,eAAe;IAOrC,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,cAAc;IAMtB;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAoBtD;;OAEG;IACH,OAAO,IAAI,IAAI;IAef;;OAEG;IACH,SAAS,IAAI,IAAI;IAIjB,OAAO,CAAC,WAAW,CA2BjB;IAEF,OAAO,CAAC,YAAY,CAOlB;CACH;AAED,eAAO,MAAM,eAAe,iBAAgC,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { createInterface } from 'readline';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
/**
|
|
4
|
+
* Keyboard shortcut handler for interactive menus
|
|
5
|
+
* Adds support for: q/Q to quit, Ctrl+C graceful exit, Esc to go back
|
|
6
|
+
*/
|
|
7
|
+
export class KeyboardHandler {
|
|
8
|
+
static instance = null;
|
|
9
|
+
rl = null;
|
|
10
|
+
quitCallback = null;
|
|
11
|
+
backCallback = null;
|
|
12
|
+
isActive = false;
|
|
13
|
+
static getInstance() {
|
|
14
|
+
if (!KeyboardHandler.instance) {
|
|
15
|
+
KeyboardHandler.instance = new KeyboardHandler();
|
|
16
|
+
}
|
|
17
|
+
return KeyboardHandler.instance;
|
|
18
|
+
}
|
|
19
|
+
setupRawMode() {
|
|
20
|
+
if (process.stdin.isTTY) {
|
|
21
|
+
process.stdin.setRawMode(true);
|
|
22
|
+
process.stdin.resume();
|
|
23
|
+
process.stdin.setEncoding('utf8');
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
restoreRawMode() {
|
|
27
|
+
if (process.stdin.isTTY) {
|
|
28
|
+
process.stdin.setRawMode(false);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Enable keyboard shortcuts
|
|
33
|
+
* @param onQuit Called when user presses 'q' or Ctrl+C
|
|
34
|
+
* @param onBack Called when user presses Esc
|
|
35
|
+
*/
|
|
36
|
+
enable(onQuit, onBack) {
|
|
37
|
+
if (this.isActive)
|
|
38
|
+
return;
|
|
39
|
+
this.quitCallback = onQuit || null;
|
|
40
|
+
this.backCallback = onBack || null;
|
|
41
|
+
this.isActive = true;
|
|
42
|
+
this.rl = createInterface({
|
|
43
|
+
input: process.stdin,
|
|
44
|
+
output: process.stdout,
|
|
45
|
+
});
|
|
46
|
+
this.setupRawMode();
|
|
47
|
+
process.stdin.on('data', this.handleInput);
|
|
48
|
+
// Handle Ctrl+C
|
|
49
|
+
process.on('SIGINT', this.handleSigint);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Disable keyboard shortcuts
|
|
53
|
+
*/
|
|
54
|
+
disable() {
|
|
55
|
+
if (!this.isActive)
|
|
56
|
+
return;
|
|
57
|
+
this.isActive = false;
|
|
58
|
+
process.stdin.removeListener('data', this.handleInput);
|
|
59
|
+
process.removeListener('SIGINT', this.handleSigint);
|
|
60
|
+
this.restoreRawMode();
|
|
61
|
+
if (this.rl) {
|
|
62
|
+
this.rl.close();
|
|
63
|
+
this.rl = null;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Show available shortcuts hint
|
|
68
|
+
*/
|
|
69
|
+
showHints() {
|
|
70
|
+
console.log(chalk.gray(' Press q to quit · Esc to go back · ↑/↓ Navigate · Enter Select'));
|
|
71
|
+
}
|
|
72
|
+
handleInput = (key) => {
|
|
73
|
+
const str = key.toString();
|
|
74
|
+
// Ctrl+C
|
|
75
|
+
if (str === '\u0003') {
|
|
76
|
+
this.handleSigint();
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// Esc
|
|
80
|
+
if (str === '\u001B') {
|
|
81
|
+
if (this.backCallback) {
|
|
82
|
+
this.backCallback();
|
|
83
|
+
}
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
// q or Q
|
|
87
|
+
if (str === 'q' || str === 'Q') {
|
|
88
|
+
if (this.quitCallback) {
|
|
89
|
+
this.quitCallback();
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
console.log(chalk.gray('\n Goodbye!\n'));
|
|
93
|
+
process.exit(0);
|
|
94
|
+
}
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
handleSigint = () => {
|
|
99
|
+
console.log(chalk.gray('\n\n Interrupted.\n'));
|
|
100
|
+
if (this.quitCallback) {
|
|
101
|
+
this.quitCallback();
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
process.exit(0);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
export const keyboardHandler = KeyboardHandler.getInstance();
|
|
109
|
+
//# sourceMappingURL=keyboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../../src/utils/keyboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare class Logger {
|
|
2
|
+
private static instance;
|
|
3
|
+
private enabled;
|
|
4
|
+
static getInstance(): Logger;
|
|
5
|
+
private constructor();
|
|
6
|
+
private ensureLogDir;
|
|
7
|
+
private log;
|
|
8
|
+
logError(context: string, error: unknown): void;
|
|
9
|
+
logWarn(message: string): void;
|
|
10
|
+
logInfo(message: string): void;
|
|
11
|
+
setEnabled(enabled: boolean): void;
|
|
12
|
+
}
|
|
13
|
+
export declare const logger: Logger;
|
|
14
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AASA,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAuB;IAC9C,OAAO,CAAC,OAAO,CAAiB;IAEhC,MAAM,CAAC,WAAW,IAAI,MAAM;IAO5B,OAAO;IAIP,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,GAAG;IAmBX,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAKxC,OAAO,CAAC,OAAO,EAAE,MAAM;IAIvB,OAAO,CAAC,OAAO,EAAE,MAAM;IAIvB,UAAU,CAAC,OAAO,EAAE,OAAO;CAG5B;AAED,eAAO,MAAM,MAAM,QAAuB,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, appendFileSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { CONFIG_DIR } from './config.js';
|
|
4
|
+
const LOG_DIR = join(CONFIG_DIR, 'logs');
|
|
5
|
+
const LOG_FILE = join(LOG_DIR, 'error.log');
|
|
6
|
+
export class Logger {
|
|
7
|
+
static instance = null;
|
|
8
|
+
enabled = true;
|
|
9
|
+
static getInstance() {
|
|
10
|
+
if (!Logger.instance) {
|
|
11
|
+
Logger.instance = new Logger();
|
|
12
|
+
}
|
|
13
|
+
return Logger.instance;
|
|
14
|
+
}
|
|
15
|
+
constructor() {
|
|
16
|
+
this.ensureLogDir();
|
|
17
|
+
}
|
|
18
|
+
ensureLogDir() {
|
|
19
|
+
if (!existsSync(LOG_DIR)) {
|
|
20
|
+
mkdirSync(LOG_DIR, { recursive: true });
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
log(level, message, error) {
|
|
24
|
+
if (!this.enabled)
|
|
25
|
+
return;
|
|
26
|
+
const timestamp = new Date().toISOString();
|
|
27
|
+
const logMessage = `[${timestamp}] [${level}] ${message}${error ? '\n' + error.stack : ''}\n`;
|
|
28
|
+
// Write to log file
|
|
29
|
+
try {
|
|
30
|
+
appendFileSync(LOG_FILE, logMessage, 'utf-8');
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
// Silent fail for logging errors
|
|
34
|
+
}
|
|
35
|
+
// Also output to stderr for errors
|
|
36
|
+
if (level === 'ERROR') {
|
|
37
|
+
console.error(logMessage);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
logError(context, error) {
|
|
41
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
42
|
+
this.log('ERROR', `${context}: ${message}`, error instanceof Error ? error : undefined);
|
|
43
|
+
}
|
|
44
|
+
logWarn(message) {
|
|
45
|
+
this.log('WARN', message);
|
|
46
|
+
}
|
|
47
|
+
logInfo(message) {
|
|
48
|
+
this.log('INFO', message);
|
|
49
|
+
}
|
|
50
|
+
setEnabled(enabled) {
|
|
51
|
+
this.enabled = enabled;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export const logger = Logger.getInstance();
|
|
55
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAA+B,cAAc,EAAE,MAAM,IAAI,CAAC;AACxF,OAAO,EAAE,IAAI,EAAW,MAAM,MAAM,CAAC;AAGrC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAE5C,MAAM,OAAO,MAAM;IACT,MAAM,CAAC,QAAQ,GAAkB,IAAI,CAAC;IACtC,OAAO,GAAY,IAAI,CAAC;IAEhC,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,CAAC,QAAQ,GAAG,IAAI,MAAM,EAAE,CAAC;QACjC,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;QACE,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAEO,GAAG,CAAC,KAAa,EAAE,OAAe,EAAE,KAAa;QACvD,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAE1B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,SAAS,MAAM,KAAK,KAAK,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;QAE9F,oBAAoB;QACpB,IAAI,CAAC;YACH,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,iCAAiC;QACnC,CAAC;QAED,mCAAmC;QACnC,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,OAAe,EAAE,KAAc;QACtC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,OAAO,KAAK,OAAO,EAAE,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1F,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,UAAU,CAAC,OAAgB;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;;AAGH,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal output utilities with width awareness and JSON formatting
|
|
3
|
+
*/
|
|
4
|
+
export interface OutputFormatter {
|
|
5
|
+
isJson: boolean;
|
|
6
|
+
indent: number;
|
|
7
|
+
}
|
|
8
|
+
declare let globalFormatter: OutputFormatter;
|
|
9
|
+
/**
|
|
10
|
+
* Set global output format
|
|
11
|
+
*/
|
|
12
|
+
export declare function setOutputFormat(format?: 'json' | 'pretty', indent?: number): void;
|
|
13
|
+
/**
|
|
14
|
+
* Get current output format
|
|
15
|
+
*/
|
|
16
|
+
export declare function getOutputFormat(): OutputFormatter;
|
|
17
|
+
export { globalFormatter };
|
|
18
|
+
declare const _default: {
|
|
19
|
+
setOutputFormat: typeof setOutputFormat;
|
|
20
|
+
getOutputFormat: typeof getOutputFormat;
|
|
21
|
+
printData: typeof printData;
|
|
22
|
+
formatTable: typeof formatTable;
|
|
23
|
+
truncateText: typeof truncateText;
|
|
24
|
+
printError: typeof printError;
|
|
25
|
+
printSuccess: typeof printSuccess;
|
|
26
|
+
printWarning: typeof printWarning;
|
|
27
|
+
printInfo: typeof printInfo;
|
|
28
|
+
};
|
|
29
|
+
export default _default;
|
|
30
|
+
/**
|
|
31
|
+
* Print data based on current format
|
|
32
|
+
*/
|
|
33
|
+
export declare function printData(data: unknown): void;
|
|
34
|
+
/**
|
|
35
|
+
* Format a table for terminal output
|
|
36
|
+
*/
|
|
37
|
+
export declare function formatTable(headers: string[], rows: (string | number | boolean | undefined)[][]): string;
|
|
38
|
+
/**
|
|
39
|
+
* Truncate text to fit terminal width
|
|
40
|
+
*/
|
|
41
|
+
export declare function truncateText(text: string, maxWidth?: number): string;
|
|
42
|
+
/**
|
|
43
|
+
* Print error with actionable hint
|
|
44
|
+
*/
|
|
45
|
+
export declare function printError(message: string, hint?: string): void;
|
|
46
|
+
/**
|
|
47
|
+
* Print success message
|
|
48
|
+
*/
|
|
49
|
+
export declare function printSuccess(message: string): void;
|
|
50
|
+
/**
|
|
51
|
+
* Print warning with suggestion
|
|
52
|
+
*/
|
|
53
|
+
export declare function printWarning(message: string, suggestion?: string): void;
|
|
54
|
+
/**
|
|
55
|
+
* Print info message
|
|
56
|
+
*/
|
|
57
|
+
export declare function printInfo(message: string): void;
|
|
58
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,QAAA,IAAI,eAAe,EAAE,eAA8C,CAAC;AAEpE;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,GAAE,MAAM,GAAG,QAAmB,EAAE,MAAM,SAAI,GAAG,IAAI,CAEtF;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,eAAe,CAEjD;AAED,OAAO,EAAE,eAAe,EAAE,CAAC;;;;;;;;;;;;AAC3B,wBAA6I;AAE7I;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAM7C;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,EAAE,EAAE,GAChD,MAAM,CA2BR;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAIpE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAK/D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAKvE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
let globalFormatter = { isJson: false, indent: 2 };
|
|
3
|
+
/**
|
|
4
|
+
* Set global output format
|
|
5
|
+
*/
|
|
6
|
+
export function setOutputFormat(format = 'pretty', indent = 2) {
|
|
7
|
+
globalFormatter = { isJson: format === 'json', indent };
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Get current output format
|
|
11
|
+
*/
|
|
12
|
+
export function getOutputFormat() {
|
|
13
|
+
return globalFormatter;
|
|
14
|
+
}
|
|
15
|
+
export { globalFormatter };
|
|
16
|
+
export default { setOutputFormat, getOutputFormat, printData, formatTable, truncateText, printError, printSuccess, printWarning, printInfo };
|
|
17
|
+
/**
|
|
18
|
+
* Print data based on current format
|
|
19
|
+
*/
|
|
20
|
+
export function printData(data) {
|
|
21
|
+
if (globalFormatter.isJson) {
|
|
22
|
+
console.log(JSON.stringify(data, null, globalFormatter.indent));
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
console.log(data);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Format a table for terminal output
|
|
30
|
+
*/
|
|
31
|
+
export function formatTable(headers, rows) {
|
|
32
|
+
if (globalFormatter.isJson) {
|
|
33
|
+
return JSON.stringify({ headers, rows }, null, globalFormatter.indent);
|
|
34
|
+
}
|
|
35
|
+
// Calculate column widths
|
|
36
|
+
const widths = headers.map((h, i) => {
|
|
37
|
+
const headerLen = String(h).length;
|
|
38
|
+
const maxDataLen = Math.max(...rows.map(r => String(r[i] ?? '').length));
|
|
39
|
+
return Math.max(headerLen, maxDataLen);
|
|
40
|
+
});
|
|
41
|
+
// Build table
|
|
42
|
+
const lines = [];
|
|
43
|
+
// Header
|
|
44
|
+
const headerRow = headers.map((h, i) => String(h).padEnd(widths[i])).join(' │ ');
|
|
45
|
+
lines.push(headerRow);
|
|
46
|
+
lines.push(widths.map(w => '─'.repeat(w)).join('─┼─'));
|
|
47
|
+
// Rows
|
|
48
|
+
for (const row of rows) {
|
|
49
|
+
const dataRow = row.map((cell, i) => String(cell ?? '').padEnd(widths[i])).join(' │ ');
|
|
50
|
+
lines.push(dataRow);
|
|
51
|
+
}
|
|
52
|
+
return lines.join('\n');
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Truncate text to fit terminal width
|
|
56
|
+
*/
|
|
57
|
+
export function truncateText(text, maxWidth) {
|
|
58
|
+
const width = maxWidth || process.stdout.columns || 80;
|
|
59
|
+
if (text.length <= width)
|
|
60
|
+
return text;
|
|
61
|
+
return text.slice(0, width - 3) + '...';
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Print error with actionable hint
|
|
65
|
+
*/
|
|
66
|
+
export function printError(message, hint) {
|
|
67
|
+
console.error(chalk.red(`✗ ${message}`));
|
|
68
|
+
if (hint) {
|
|
69
|
+
console.error(chalk.gray(` ${hint}`));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Print success message
|
|
74
|
+
*/
|
|
75
|
+
export function printSuccess(message) {
|
|
76
|
+
console.log(chalk.green(`✓ ${message}`));
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Print warning with suggestion
|
|
80
|
+
*/
|
|
81
|
+
export function printWarning(message, suggestion) {
|
|
82
|
+
console.log(chalk.yellow(`⚠ ${message}`));
|
|
83
|
+
if (suggestion) {
|
|
84
|
+
console.log(chalk.gray(` ${suggestion}`));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Print info message
|
|
89
|
+
*/
|
|
90
|
+
export function printInfo(message) {
|
|
91
|
+
console.log(chalk.gray(`ℹ ${message}`));
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"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"}
|
package/dist/wizard.d.ts
ADDED