colyn-cli 3.2.4 → 3.2.7
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/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +165 -24
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/branch-selection.helpers.d.ts +19 -0
- package/dist/commands/branch-selection.helpers.d.ts.map +1 -0
- package/dist/commands/branch-selection.helpers.js +48 -0
- package/dist/commands/branch-selection.helpers.js.map +1 -0
- package/dist/commands/checkout.d.ts +1 -1
- package/dist/commands/checkout.d.ts.map +1 -1
- package/dist/commands/checkout.js +157 -16
- package/dist/commands/checkout.js.map +1 -1
- package/dist/commands/completion.d.ts.map +1 -1
- package/dist/commands/completion.js +25 -2
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/list-project.d.ts +1 -1
- package/dist/commands/list-project.d.ts.map +1 -1
- package/dist/commands/list-project.js +61 -31
- package/dist/commands/list-project.js.map +1 -1
- package/dist/commands/merge.d.ts.map +1 -1
- package/dist/commands/merge.helpers.d.ts +1 -12
- package/dist/commands/merge.helpers.d.ts.map +1 -1
- package/dist/commands/merge.helpers.js +1 -39
- package/dist/commands/merge.helpers.js.map +1 -1
- package/dist/commands/merge.js +11 -52
- package/dist/commands/merge.js.map +1 -1
- package/dist/commands/todo.d.ts.map +1 -1
- package/dist/commands/todo.helpers.d.ts +49 -2
- package/dist/commands/todo.helpers.d.ts.map +1 -1
- package/dist/commands/todo.helpers.js +110 -36
- package/dist/commands/todo.helpers.js.map +1 -1
- package/dist/commands/todo.js +61 -23
- package/dist/commands/todo.js.map +1 -1
- package/dist/core/worktree-status.d.ts +8 -0
- package/dist/core/worktree-status.d.ts.map +1 -1
- package/dist/core/worktree-status.js +12 -0
- package/dist/core/worktree-status.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +25 -7
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +25 -7
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/zh-CN.d.ts +25 -7
- package/dist/i18n/locales/zh-CN.d.ts.map +1 -1
- package/dist/i18n/locales/zh-CN.js +25 -7
- package/dist/i18n/locales/zh-CN.js.map +1 -1
- package/package.json +10 -2
- package/shell/completion.bash +25 -8
- package/shell/completion.zsh +14 -0
- package/dist/commands/install.d.ts +0 -6
- package/dist/commands/install.d.ts.map +0 -1
- package/dist/commands/install.helpers.d.ts +0 -32
- package/dist/commands/install.helpers.d.ts.map +0 -1
- package/dist/commands/install.helpers.js +0 -124
- package/dist/commands/install.helpers.js.map +0 -1
- package/dist/commands/install.js +0 -104
- package/dist/commands/install.js.map +0 -1
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Install 命令辅助函数
|
|
3
|
-
*/
|
|
4
|
-
import * as fs from 'fs/promises';
|
|
5
|
-
import * as path from 'path';
|
|
6
|
-
import * as os from 'os';
|
|
7
|
-
import { fileURLToPath } from 'url';
|
|
8
|
-
/**
|
|
9
|
-
* 检测用户的 shell 类型和配置文件
|
|
10
|
-
*/
|
|
11
|
-
export async function detectShellConfig() {
|
|
12
|
-
const homeDir = os.homedir();
|
|
13
|
-
const shell = process.env.SHELL || '';
|
|
14
|
-
let shellType = 'bash';
|
|
15
|
-
const candidates = [];
|
|
16
|
-
// 根据 SHELL 环境变量确定类型和候选文件
|
|
17
|
-
if (shell.includes('zsh')) {
|
|
18
|
-
shellType = 'zsh';
|
|
19
|
-
candidates.push(path.join(homeDir, '.zshrc'));
|
|
20
|
-
}
|
|
21
|
-
else if (shell.includes('bash')) {
|
|
22
|
-
shellType = 'bash';
|
|
23
|
-
candidates.push(path.join(homeDir, '.bashrc'));
|
|
24
|
-
candidates.push(path.join(homeDir, '.bash_profile'));
|
|
25
|
-
}
|
|
26
|
-
// 添加默认候选文件
|
|
27
|
-
if (!candidates.includes(path.join(homeDir, '.zshrc'))) {
|
|
28
|
-
candidates.push(path.join(homeDir, '.zshrc'));
|
|
29
|
-
}
|
|
30
|
-
if (!candidates.includes(path.join(homeDir, '.bashrc'))) {
|
|
31
|
-
candidates.push(path.join(homeDir, '.bashrc'));
|
|
32
|
-
}
|
|
33
|
-
// 检测第一个存在的配置文件
|
|
34
|
-
for (const configPath of candidates) {
|
|
35
|
-
try {
|
|
36
|
-
await fs.access(configPath);
|
|
37
|
-
return {
|
|
38
|
-
shellType,
|
|
39
|
-
configPath,
|
|
40
|
-
configExists: true
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
// 文件不存在,继续检查下一个
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
// 如果都不存在,返回第一个候选文件(稍后会创建)
|
|
48
|
-
return {
|
|
49
|
-
shellType,
|
|
50
|
-
configPath: candidates[0],
|
|
51
|
-
configExists: false
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* 获取 colyn.sh 的绝对路径
|
|
56
|
-
*/
|
|
57
|
-
export function getColynShellPath() {
|
|
58
|
-
// 获取当前模块的路径
|
|
59
|
-
const currentModulePath = fileURLToPath(import.meta.url);
|
|
60
|
-
// 从 dist/commands/install.helpers.js 向上找到项目根目录
|
|
61
|
-
// dist/commands/install.helpers.js -> dist/commands -> dist -> root
|
|
62
|
-
const distDir = path.dirname(path.dirname(currentModulePath));
|
|
63
|
-
const rootDir = path.dirname(distDir);
|
|
64
|
-
// colyn.sh 位于 shell/colyn.sh
|
|
65
|
-
const colynShellPath = path.join(rootDir, 'shell', 'colyn.sh');
|
|
66
|
-
return colynShellPath;
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* 配置标记
|
|
70
|
-
*/
|
|
71
|
-
const CONFIG_MARKER = '# Colyn shell integration';
|
|
72
|
-
/**
|
|
73
|
-
* 添加或更新 shell 配置文件中的 colyn 集成
|
|
74
|
-
*
|
|
75
|
-
* @param configPath - shell 配置文件路径
|
|
76
|
-
* @param colynShellPath - colyn.sh 文件路径
|
|
77
|
-
* @returns 'added' | 'updated' - 添加还是更新
|
|
78
|
-
*/
|
|
79
|
-
export async function updateShellConfig(configPath, colynShellPath) {
|
|
80
|
-
const sourceLine = `source "${colynShellPath}"`;
|
|
81
|
-
let content = '';
|
|
82
|
-
let fileExists = true;
|
|
83
|
-
try {
|
|
84
|
-
content = await fs.readFile(configPath, 'utf-8');
|
|
85
|
-
}
|
|
86
|
-
catch {
|
|
87
|
-
// 文件不存在,创建新文件
|
|
88
|
-
fileExists = false;
|
|
89
|
-
}
|
|
90
|
-
// 检查是否已经添加过配置
|
|
91
|
-
if (content.includes(CONFIG_MARKER)) {
|
|
92
|
-
// 已存在,更新路径
|
|
93
|
-
const lines = content.split('\n');
|
|
94
|
-
const newLines = lines.map(line => {
|
|
95
|
-
// 查找以 source 开头且包含 colyn 的行
|
|
96
|
-
if (line.trim().startsWith('source') && line.includes('colyn.sh')) {
|
|
97
|
-
return sourceLine;
|
|
98
|
-
}
|
|
99
|
-
return line;
|
|
100
|
-
});
|
|
101
|
-
await fs.writeFile(configPath, newLines.join('\n'), 'utf-8');
|
|
102
|
-
return 'updated';
|
|
103
|
-
}
|
|
104
|
-
// 添加新配置
|
|
105
|
-
const configBlock = fileExists
|
|
106
|
-
? `\n\n${CONFIG_MARKER}\n${sourceLine}\n`
|
|
107
|
-
: `${CONFIG_MARKER}\n${sourceLine}\n`;
|
|
108
|
-
const newContent = content.trimEnd() + configBlock;
|
|
109
|
-
await fs.writeFile(configPath, newContent, 'utf-8');
|
|
110
|
-
return 'added';
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* 检查 colyn.sh 文件是否存在
|
|
114
|
-
*/
|
|
115
|
-
export async function checkColynShellExists(colynShellPath) {
|
|
116
|
-
try {
|
|
117
|
-
await fs.access(colynShellPath);
|
|
118
|
-
return true;
|
|
119
|
-
}
|
|
120
|
-
catch {
|
|
121
|
-
return false;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
//# sourceMappingURL=install.helpers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install.helpers.js","sourceRoot":"","sources":["../../src/commands/install.helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/install.js
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { ColynError } from '../types/index.js';
|
|
3
|
-
import { formatError, output, outputResult, outputSuccess } from '../utils/logger.js';
|
|
4
|
-
import { detectShellConfig, getColynShellPath, updateShellConfig, checkColynShellExists } from './install.helpers.js';
|
|
5
|
-
/**
|
|
6
|
-
* Install 命令:配置 shell 集成
|
|
7
|
-
*
|
|
8
|
-
* 功能:
|
|
9
|
-
* 1. 检测用户的 shell 类型和配置文件
|
|
10
|
-
* 2. 定位 colyn.sh 文件
|
|
11
|
-
* 3. 添加 source 命令到 shell 配置文件
|
|
12
|
-
* 4. 支持更新已有配置
|
|
13
|
-
*/
|
|
14
|
-
async function installCommand() {
|
|
15
|
-
try {
|
|
16
|
-
// 检查平台
|
|
17
|
-
if (process.platform === 'win32') {
|
|
18
|
-
output('');
|
|
19
|
-
output(chalk.yellow('⚠ Windows 平台暂不支持自动配置'));
|
|
20
|
-
output('');
|
|
21
|
-
output('请参考文档手动配置 shell 集成:');
|
|
22
|
-
output(' https://github.com/your-repo/colyn#windows-setup');
|
|
23
|
-
output('');
|
|
24
|
-
outputResult({ success: false });
|
|
25
|
-
process.exit(1);
|
|
26
|
-
}
|
|
27
|
-
// 步骤 1: 检测系统环境
|
|
28
|
-
output('');
|
|
29
|
-
output('检测系统环境...');
|
|
30
|
-
const shellConfig = await detectShellConfig();
|
|
31
|
-
const colynShellPath = getColynShellPath();
|
|
32
|
-
output(chalk.green(`✓ Shell 类型: ${shellConfig.shellType}`));
|
|
33
|
-
output(chalk.green(`✓ 配置文件: ${shellConfig.configPath}`));
|
|
34
|
-
output(chalk.green(`✓ Colyn 安装路径: ${colynShellPath}`));
|
|
35
|
-
// 步骤 2: 检查 colyn.sh 是否存在
|
|
36
|
-
const shellExists = await checkColynShellExists(colynShellPath);
|
|
37
|
-
if (!shellExists) {
|
|
38
|
-
throw new ColynError('找不到 shell 集成脚本', `路径: ${colynShellPath}\n` +
|
|
39
|
-
'\n' +
|
|
40
|
-
'可能原因:\n' +
|
|
41
|
-
' - colyn 安装不完整\n' +
|
|
42
|
-
'\n' +
|
|
43
|
-
'解决方法:\n' +
|
|
44
|
-
' 重新安装:npm install -g colyn');
|
|
45
|
-
}
|
|
46
|
-
// 步骤 3: 配置 shell 集成
|
|
47
|
-
output('');
|
|
48
|
-
output('配置 shell 集成...');
|
|
49
|
-
const result = await updateShellConfig(shellConfig.configPath, colynShellPath);
|
|
50
|
-
const configFileName = shellConfig.configPath.replace(process.env.HOME || '', '~');
|
|
51
|
-
if (result === 'added') {
|
|
52
|
-
if (!shellConfig.configExists) {
|
|
53
|
-
output(chalk.green(`✓ 已创建 ${configFileName}`));
|
|
54
|
-
}
|
|
55
|
-
output(chalk.green(`✓ 已添加 shell 集成到 ${configFileName}`));
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
output(chalk.green(`✓ 已更新 ${configFileName} 中的 shell 集成配置`));
|
|
59
|
-
}
|
|
60
|
-
// 步骤 4: 显示完成信息
|
|
61
|
-
output('');
|
|
62
|
-
outputSuccess(result === 'added' ? '安装完成!' : '更新完成!');
|
|
63
|
-
output('');
|
|
64
|
-
// 生效配置指引
|
|
65
|
-
output(chalk.cyan('生效配置:'));
|
|
66
|
-
if (result === 'added') {
|
|
67
|
-
output(' 方式 1(推荐):重新打开终端');
|
|
68
|
-
output(` 方式 2:运行命令:${chalk.gray(`source ${shellConfig.configPath}`)}`);
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
output(` 运行命令:${chalk.gray(`source ${shellConfig.configPath}`)}`);
|
|
72
|
-
}
|
|
73
|
-
output('');
|
|
74
|
-
// 功能说明
|
|
75
|
-
if (result === 'added') {
|
|
76
|
-
output(chalk.cyan('功能说明:'));
|
|
77
|
-
output(' ✓ colyn 命令支持自动目录切换');
|
|
78
|
-
output(' ✓ 使用 Tab 键可自动完成命令和参数');
|
|
79
|
-
output('');
|
|
80
|
-
}
|
|
81
|
-
// 输出 JSON 结果
|
|
82
|
-
const jsonResult = {
|
|
83
|
-
success: true
|
|
84
|
-
};
|
|
85
|
-
outputResult(jsonResult);
|
|
86
|
-
}
|
|
87
|
-
catch (error) {
|
|
88
|
-
formatError(error);
|
|
89
|
-
outputResult({ success: false });
|
|
90
|
-
process.exit(1);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* 注册 install 命令
|
|
95
|
-
*/
|
|
96
|
-
export function register(program) {
|
|
97
|
-
program
|
|
98
|
-
.command('install')
|
|
99
|
-
.description('配置 shell 集成(支持自动目录切换和命令补全)')
|
|
100
|
-
.action(async () => {
|
|
101
|
-
await installCommand();
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
//# sourceMappingURL=install.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|