@eruoxi/csm-test 0.0.1
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/LICENSE +21 -0
- package/README.md +217 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +43 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/backup.d.ts +3 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +99 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/backups.d.ts +3 -0
- package/dist/commands/backups.d.ts.map +1 -0
- package/dist/commands/backups.js +109 -0
- package/dist/commands/backups.js.map +1 -0
- package/dist/commands/copy.d.ts +3 -0
- package/dist/commands/copy.d.ts.map +1 -0
- package/dist/commands/copy.js +36 -0
- package/dist/commands/copy.js.map +1 -0
- package/dist/commands/create.d.ts +3 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +102 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/current.d.ts +3 -0
- package/dist/commands/current.d.ts.map +1 -0
- package/dist/commands/current.js +45 -0
- package/dist/commands/current.js.map +1 -0
- package/dist/commands/delete.d.ts +3 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +111 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/edit.d.ts +3 -0
- package/dist/commands/edit.d.ts.map +1 -0
- package/dist/commands/edit.js +86 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/export.d.ts +3 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +43 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/import.d.ts +3 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +74 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/index.d.ts +7 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +13 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +66 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/rename.d.ts +3 -0
- package/dist/commands/rename.d.ts.map +1 -0
- package/dist/commands/rename.js +30 -0
- package/dist/commands/rename.js.map +1 -0
- package/dist/commands/restore.d.ts +3 -0
- package/dist/commands/restore.d.ts.map +1 -0
- package/dist/commands/restore.js +184 -0
- package/dist/commands/restore.js.map +1 -0
- package/dist/commands/show.d.ts +3 -0
- package/dist/commands/show.d.ts.map +1 -0
- package/dist/commands/show.js +24 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/commands/use.d.ts +3 -0
- package/dist/commands/use.d.ts.map +1 -0
- package/dist/commands/use.js +234 -0
- package/dist/commands/use.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/merge.d.ts +20 -0
- package/dist/lib/merge.d.ts.map +1 -0
- package/dist/lib/merge.js +146 -0
- package/dist/lib/merge.js.map +1 -0
- package/dist/lib/profile.d.ts +65 -0
- package/dist/lib/profile.d.ts.map +1 -0
- package/dist/lib/profile.js +158 -0
- package/dist/lib/profile.js.map +1 -0
- package/dist/lib/settings.d.ts +72 -0
- package/dist/lib/settings.d.ts.map +1 -0
- package/dist/lib/settings.js +270 -0
- package/dist/lib/settings.js.map +1 -0
- package/dist/lib/state.d.ts +55 -0
- package/dist/lib/state.d.ts.map +1 -0
- package/dist/lib/state.js +145 -0
- package/dist/lib/state.js.map +1 -0
- package/dist/types/index.d.ts +37 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/atomicWrite.d.ts +24 -0
- package/dist/utils/atomicWrite.d.ts.map +1 -0
- package/dist/utils/atomicWrite.js +67 -0
- package/dist/utils/atomicWrite.js.map +1 -0
- package/dist/utils/backupValidator.d.ts +32 -0
- package/dist/utils/backupValidator.d.ts.map +1 -0
- package/dist/utils/backupValidator.js +144 -0
- package/dist/utils/backupValidator.js.map +1 -0
- package/dist/utils/errors.d.ts +63 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +117 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/file.d.ts +8 -0
- package/dist/utils/file.d.ts.map +1 -0
- package/dist/utils/file.js +54 -0
- package/dist/utils/file.js.map +1 -0
- package/dist/utils/logger.d.ts +6 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +37 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/normalize.d.ts +13 -0
- package/dist/utils/normalize.d.ts.map +1 -0
- package/dist/utils/normalize.js +31 -0
- package/dist/utils/normalize.js.map +1 -0
- package/dist/utils/validator.d.ts +24 -0
- package/dist/utils/validator.d.ts.map +1 -0
- package/dist/utils/validator.js +178 -0
- package/dist/utils/validator.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.initListCommand = initListCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const profile_1 = require("../lib/profile");
|
|
9
|
+
const state_1 = require("../lib/state");
|
|
10
|
+
const logger_1 = require("../utils/logger");
|
|
11
|
+
function initListCommand(program) {
|
|
12
|
+
program
|
|
13
|
+
.command('list')
|
|
14
|
+
.alias('ls')
|
|
15
|
+
.description('列出所有配置档案')
|
|
16
|
+
.option('-j, --json', '以 JSON 格式输出')
|
|
17
|
+
.action(async (options) => {
|
|
18
|
+
try {
|
|
19
|
+
const profileManager = new profile_1.ProfileManager();
|
|
20
|
+
const stateManager = new state_1.StateManager();
|
|
21
|
+
// 1. 获取所有 profiles
|
|
22
|
+
const profiles = await profileManager.list();
|
|
23
|
+
// 2. 获取当前激活的 profile
|
|
24
|
+
const activeProfile = await stateManager.getActiveProfile();
|
|
25
|
+
if (options.json) {
|
|
26
|
+
// JSON 格式输出
|
|
27
|
+
const output = {
|
|
28
|
+
profiles: profiles.map(name => ({
|
|
29
|
+
name,
|
|
30
|
+
active: name === activeProfile
|
|
31
|
+
})),
|
|
32
|
+
activeProfile
|
|
33
|
+
};
|
|
34
|
+
console.log(JSON.stringify(output, null, 2));
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
// 格式化输出
|
|
38
|
+
if (profiles.length === 0) {
|
|
39
|
+
(0, logger_1.info)('暂无配置档案。使用 csm create <name> 创建新配置。');
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
console.log();
|
|
43
|
+
console.log(chalk_1.default.bold('配置档案列表:'));
|
|
44
|
+
console.log();
|
|
45
|
+
for (const name of profiles) {
|
|
46
|
+
const isActive = name === activeProfile;
|
|
47
|
+
const prefix = isActive ? chalk_1.default.green('*') : ' ';
|
|
48
|
+
const displayName = isActive ? chalk_1.default.green.bold(name) : name;
|
|
49
|
+
console.log(` ${prefix} ${displayName}`);
|
|
50
|
+
}
|
|
51
|
+
console.log();
|
|
52
|
+
if (activeProfile) {
|
|
53
|
+
console.log(chalk_1.default.gray(`当前激活: ${activeProfile}`));
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
console.log(chalk_1.default.gray('当前无激活的配置档案'));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
console.error(chalk_1.default.red(`列出配置档案失败: ${err instanceof Error ? err.message : String(err)}`));
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":";;;;;AAMA,0CA2DC;AAhED,kDAA0B;AAC1B,4CAAgD;AAChD,wCAA4C;AAC5C,4CAAuC;AAEvC,SAAgB,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,KAAK,CAAC,IAAI,CAAC;SACX,WAAW,CAAC,UAAU,CAAC;SACvB,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC;SACnC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,IAAI,wBAAc,EAAE,CAAC;YAC5C,MAAM,YAAY,GAAG,IAAI,oBAAY,EAAE,CAAC;YAExC,mBAAmB;YACnB,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;YAE7C,qBAAqB;YACrB,MAAM,aAAa,GAAG,MAAM,YAAY,CAAC,gBAAgB,EAAE,CAAC;YAE5D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,YAAY;gBACZ,MAAM,MAAM,GAAG;oBACb,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBAC9B,IAAI;wBACJ,MAAM,EAAE,IAAI,KAAK,aAAa;qBAC/B,CAAC,CAAC;oBACH,aAAa;iBACd,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,QAAQ;gBACR,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC1B,IAAA,aAAI,EAAC,oCAAoC,CAAC,CAAC;oBAC3C,OAAO;gBACT,CAAC;gBAED,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;gBACnC,OAAO,CAAC,GAAG,EAAE,CAAC;gBAEd,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;oBAC5B,MAAM,QAAQ,GAAG,IAAI,KAAK,aAAa,CAAC;oBACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;oBACjD,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAE7D,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,IAAI,WAAW,EAAE,CAAC,CAAC;gBAC5C,CAAC;gBAED,OAAO,CAAC,GAAG,EAAE,CAAC;gBAEd,IAAI,aAAa,EAAE,CAAC;oBAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,SAAS,aAAa,EAAE,CAAC,CAAC,CAAC;gBACpD,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,aAAa,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rename.d.ts","sourceRoot":"","sources":["../../src/commands/rename.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,QAuBjD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initRenameCommand = initRenameCommand;
|
|
4
|
+
const profile_1 = require("../lib/profile");
|
|
5
|
+
const state_1 = require("../lib/state");
|
|
6
|
+
const logger_1 = require("../utils/logger");
|
|
7
|
+
const errors_1 = require("../utils/errors");
|
|
8
|
+
function initRenameCommand(program) {
|
|
9
|
+
program
|
|
10
|
+
.command('rename <oldName> <newName>')
|
|
11
|
+
.description('重命名配置档案')
|
|
12
|
+
.action(async (oldName, newName) => {
|
|
13
|
+
try {
|
|
14
|
+
const profileManager = new profile_1.ProfileManager();
|
|
15
|
+
const stateManager = new state_1.StateManager();
|
|
16
|
+
// 执行重命名(rename 方法会检查源存在和目标不存在)
|
|
17
|
+
await profileManager.rename(oldName, newName);
|
|
18
|
+
// 如果是当前激活的配置,更新状态
|
|
19
|
+
const activeProfile = await stateManager.getActiveProfile();
|
|
20
|
+
if (activeProfile === oldName) {
|
|
21
|
+
await stateManager.setActiveProfile(newName);
|
|
22
|
+
}
|
|
23
|
+
(0, logger_1.success)(`配置档案已重命名: ${oldName} -> ${newName}`);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
(0, errors_1.handleCommandError)(err, '重命名');
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=rename.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rename.js","sourceRoot":"","sources":["../../src/commands/rename.ts"],"names":[],"mappings":";;AAMA,8CAuBC;AA5BD,4CAAgD;AAChD,wCAA4C;AAC5C,4CAA0C;AAC1C,4CAAqD;AAErD,SAAgB,iBAAiB,CAAC,OAAgB;IAChD,OAAO;SACJ,OAAO,CAAC,4BAA4B,CAAC;SACrC,WAAW,CAAC,SAAS,CAAC;SACtB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QACjC,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,IAAI,wBAAc,EAAE,CAAC;YAC5C,MAAM,YAAY,GAAG,IAAI,oBAAY,EAAE,CAAC;YAExC,+BAA+B;YAC/B,MAAM,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAE9C,kBAAkB;YAClB,MAAM,aAAa,GAAG,MAAM,YAAY,CAAC,gBAAgB,EAAE,CAAC;YAC5D,IAAI,aAAa,KAAK,OAAO,EAAE,CAAC;gBAC9B,MAAM,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC/C,CAAC;YAED,IAAA,gBAAO,EAAC,aAAa,OAAO,OAAO,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAA,2BAAkB,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restore.d.ts","sourceRoot":"","sources":["../../src/commands/restore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyFpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,QAiHlD"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.initRestoreCommand = initRestoreCommand;
|
|
7
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const unzipper_1 = __importDefault(require("unzipper"));
|
|
10
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
11
|
+
const file_1 = require("../utils/file");
|
|
12
|
+
const logger_1 = require("../utils/logger");
|
|
13
|
+
const backupValidator_1 = require("../utils/backupValidator");
|
|
14
|
+
const settings_1 = require("../lib/settings");
|
|
15
|
+
const errors_1 = require("../utils/errors");
|
|
16
|
+
/**
|
|
17
|
+
* 创建恢复前的自动备份(仅备份当前 settings.json)
|
|
18
|
+
* @returns 备份文件路径,如果 settings 不存在则返回 null
|
|
19
|
+
*/
|
|
20
|
+
async function createPreRestoreSettingsBackup() {
|
|
21
|
+
const settingsPath = (0, file_1.getSettingsPath)();
|
|
22
|
+
if (!(await fs_extra_1.default.pathExists(settingsPath))) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
const settingsManager = new settings_1.SettingsManager();
|
|
26
|
+
try {
|
|
27
|
+
return await settingsManager.backup();
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 解析备份文件路径
|
|
35
|
+
* 支持名称或完整路径
|
|
36
|
+
*/
|
|
37
|
+
async function resolveBackupPath(backup) {
|
|
38
|
+
// 如果是绝对路径且存在,直接返回
|
|
39
|
+
if (path_1.default.isAbsolute(backup) && await fs_extra_1.default.pathExists(backup)) {
|
|
40
|
+
return backup;
|
|
41
|
+
}
|
|
42
|
+
// 如果是相对路径且存在,返回完整路径
|
|
43
|
+
const cwdPath = path_1.default.resolve(process.cwd(), backup);
|
|
44
|
+
if (await fs_extra_1.default.pathExists(cwdPath)) {
|
|
45
|
+
return cwdPath;
|
|
46
|
+
}
|
|
47
|
+
// 在备份目录中查找
|
|
48
|
+
const backupsDir = (0, file_1.getBackupsDir)();
|
|
49
|
+
const backupPath = path_1.default.join(backupsDir, backup.endsWith('.zip') ? backup : `${backup}.zip`);
|
|
50
|
+
if (await fs_extra_1.default.pathExists(backupPath)) {
|
|
51
|
+
return backupPath;
|
|
52
|
+
}
|
|
53
|
+
throw new Error(`找不到备份文件: ${backup}`);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 安全解压备份文件
|
|
57
|
+
* 手动处理每个条目,确保路径安全
|
|
58
|
+
*/
|
|
59
|
+
async function safeExtractBackup(backupPath) {
|
|
60
|
+
const csmDir = (0, file_1.getCsmDir)();
|
|
61
|
+
return new Promise((resolve, reject) => {
|
|
62
|
+
fs_extra_1.default.createReadStream(backupPath)
|
|
63
|
+
.pipe(unzipper_1.default.Parse())
|
|
64
|
+
.on('entry', async (entry) => {
|
|
65
|
+
const entryPath = entry.path;
|
|
66
|
+
// 使用统一的路径安全检查
|
|
67
|
+
if (!(0, backupValidator_1.isEntryPathSafe)(entryPath)) {
|
|
68
|
+
entry.autodrain();
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const destPath = path_1.default.join(csmDir, entryPath);
|
|
72
|
+
// 确保目标目录存在
|
|
73
|
+
await fs_extra_1.default.ensureDir(path_1.default.dirname(destPath));
|
|
74
|
+
// 写入文件
|
|
75
|
+
entry.pipe(fs_extra_1.default.createWriteStream(destPath));
|
|
76
|
+
})
|
|
77
|
+
.on('close', resolve)
|
|
78
|
+
.on('error', reject);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
function initRestoreCommand(program) {
|
|
82
|
+
program
|
|
83
|
+
.command('restore <backup>')
|
|
84
|
+
.description('从备份恢复配置')
|
|
85
|
+
.option('-f, --force', '覆盖现有配置,不询问')
|
|
86
|
+
.option('--skip-validation', '跳过备份验证')
|
|
87
|
+
.option('--no-auto-backup', '恢复前不自动备份当前配置')
|
|
88
|
+
.action(async (backup, options) => {
|
|
89
|
+
try {
|
|
90
|
+
// 1. 定位备份文件
|
|
91
|
+
const backupPath = await resolveBackupPath(backup);
|
|
92
|
+
(0, logger_1.info)(`找到备份文件: ${backupPath}`);
|
|
93
|
+
// 2. 验证备份文件
|
|
94
|
+
if (!options.skipValidation) {
|
|
95
|
+
(0, logger_1.info)('正在验证备份文件...');
|
|
96
|
+
const validation = await (0, backupValidator_1.validateBackup)(backupPath);
|
|
97
|
+
if (!validation.valid) {
|
|
98
|
+
(0, logger_1.error)('备份文件验证失败:');
|
|
99
|
+
for (const err of validation.errors) {
|
|
100
|
+
(0, logger_1.error)(` - ${err}`);
|
|
101
|
+
}
|
|
102
|
+
process.exit(1);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (validation.warnings.length > 0) {
|
|
106
|
+
for (const warning of validation.warnings) {
|
|
107
|
+
(0, logger_1.warn)(warning);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// 显示备份内容预览
|
|
111
|
+
(0, logger_1.info)('备份内容:');
|
|
112
|
+
if (validation.contents.hasSettings) {
|
|
113
|
+
(0, logger_1.info)(' - settings.json');
|
|
114
|
+
}
|
|
115
|
+
if (validation.contents.hasState) {
|
|
116
|
+
(0, logger_1.info)(' - csm-state.json');
|
|
117
|
+
}
|
|
118
|
+
if (validation.contents.profileCount > 0) {
|
|
119
|
+
(0, logger_1.info)(` - profiles/ (${validation.contents.profileCount} 个配置)`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// 3. 检查现有配置(并行检查)
|
|
123
|
+
const settingsPath = (0, file_1.getSettingsPath)();
|
|
124
|
+
const statePath = (0, file_1.getStatePath)();
|
|
125
|
+
const profilesDir = (0, file_1.getProfilesDir)();
|
|
126
|
+
const [hasSettings, hasState, hasProfiles] = await Promise.all([
|
|
127
|
+
fs_extra_1.default.pathExists(settingsPath),
|
|
128
|
+
fs_extra_1.default.pathExists(statePath),
|
|
129
|
+
fs_extra_1.default.pathExists(profilesDir)
|
|
130
|
+
]);
|
|
131
|
+
const hasExistingConfig = hasSettings || hasState || hasProfiles;
|
|
132
|
+
// 4. 自动备份当前配置
|
|
133
|
+
let autoBackupPath = null;
|
|
134
|
+
if (hasExistingConfig && options.autoBackup !== false) {
|
|
135
|
+
(0, logger_1.info)('正在备份当前配置...');
|
|
136
|
+
autoBackupPath = await createPreRestoreSettingsBackup();
|
|
137
|
+
if (autoBackupPath) {
|
|
138
|
+
(0, logger_1.info)(`当前配置已备份到: ${autoBackupPath}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// 5. 确认覆盖
|
|
142
|
+
if (hasExistingConfig && !options.force) {
|
|
143
|
+
const answers = await inquirer_1.default.prompt([
|
|
144
|
+
{
|
|
145
|
+
type: 'confirm',
|
|
146
|
+
name: 'confirm',
|
|
147
|
+
message: '这将覆盖现有配置,是否继续?',
|
|
148
|
+
default: false
|
|
149
|
+
}
|
|
150
|
+
]);
|
|
151
|
+
if (!answers.confirm) {
|
|
152
|
+
(0, logger_1.warn)('操作已取消');
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// 6. 解压到相应位置
|
|
157
|
+
(0, logger_1.info)('正在恢复配置...');
|
|
158
|
+
await safeExtractBackup(backupPath);
|
|
159
|
+
// 7. 输出恢复结果
|
|
160
|
+
(0, logger_1.success)('配置已恢复');
|
|
161
|
+
(0, logger_1.info)('已恢复的内容:');
|
|
162
|
+
if (await fs_extra_1.default.pathExists(settingsPath)) {
|
|
163
|
+
(0, logger_1.info)(' - settings.json');
|
|
164
|
+
}
|
|
165
|
+
if (await fs_extra_1.default.pathExists(statePath)) {
|
|
166
|
+
(0, logger_1.info)(' - csm-state.json');
|
|
167
|
+
}
|
|
168
|
+
if (await fs_extra_1.default.pathExists(profilesDir)) {
|
|
169
|
+
const profiles = (await fs_extra_1.default.readdir(profilesDir)).filter(f => f.endsWith('.json'));
|
|
170
|
+
if (profiles.length > 0) {
|
|
171
|
+
(0, logger_1.info)(` - profiles/ (${profiles.length} 个配置文件)`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// 提示自动备份位置
|
|
175
|
+
if (autoBackupPath) {
|
|
176
|
+
(0, logger_1.info)(`如需回滚,可使用: csm restore ${path_1.default.basename(autoBackupPath)}`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
(0, errors_1.handleCommandError)(err, '恢复');
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=restore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restore.js","sourceRoot":"","sources":["../../src/commands/restore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../src/commands/show.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,QAiB/C"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initShowCommand = initShowCommand;
|
|
4
|
+
const profile_1 = require("../lib/profile");
|
|
5
|
+
const logger_1 = require("../utils/logger");
|
|
6
|
+
const errors_1 = require("../utils/errors");
|
|
7
|
+
function initShowCommand(program) {
|
|
8
|
+
program
|
|
9
|
+
.command('show <name>')
|
|
10
|
+
.description('显示指定配置的详细内容')
|
|
11
|
+
.action(async (name) => {
|
|
12
|
+
try {
|
|
13
|
+
const profileManager = new profile_1.ProfileManager();
|
|
14
|
+
// 1. 获取 profile settings
|
|
15
|
+
const settings = await profileManager.get(name);
|
|
16
|
+
// 2. 使用 highlightJson 显示内容
|
|
17
|
+
console.log((0, logger_1.highlightJson)(settings));
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
(0, errors_1.handleCommandError)(err, '显示配置档案');
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=show.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show.js","sourceRoot":"","sources":["../../src/commands/show.ts"],"names":[],"mappings":";;AAKA,0CAiBC;AArBD,4CAAgD;AAChD,4CAA6D;AAC7D,4CAAqD;AAErD,SAAgB,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,aAAa,CAAC;SAC1B,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,IAAI,wBAAc,EAAE,CAAC;YAE5C,yBAAyB;YACzB,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAEhD,2BAA2B;YAC3B,OAAO,CAAC,GAAG,CAAC,IAAA,sBAAa,EAAC,QAAQ,CAAC,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAA,2BAAkB,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use.d.ts","sourceRoot":"","sources":["../../src/commands/use.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsPpC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,QA2B9C"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.initUseCommand = initUseCommand;
|
|
7
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
8
|
+
const profile_1 = require("../lib/profile");
|
|
9
|
+
const settings_1 = require("../lib/settings");
|
|
10
|
+
const state_1 = require("../lib/state");
|
|
11
|
+
const merge_1 = require("../lib/merge");
|
|
12
|
+
const logger_1 = require("../utils/logger");
|
|
13
|
+
const errors_1 = require("../utils/errors");
|
|
14
|
+
const logger_2 = require("../utils/logger");
|
|
15
|
+
/**
|
|
16
|
+
* 构建 MergeOptions
|
|
17
|
+
*/
|
|
18
|
+
function buildMergeOptions(options) {
|
|
19
|
+
const mergeOptions = {};
|
|
20
|
+
if (options.noMerge) {
|
|
21
|
+
mergeOptions.noMerge = true;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
if (options.merge) {
|
|
25
|
+
mergeOptions.merge = options.merge.split(',').map((f) => f.trim());
|
|
26
|
+
}
|
|
27
|
+
if (options.keepPermissions) {
|
|
28
|
+
mergeOptions.keepPermissions = true;
|
|
29
|
+
}
|
|
30
|
+
if (options.keepPlugins) {
|
|
31
|
+
mergeOptions.keepPlugins = true;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return mergeOptions;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 显示合并选项信息
|
|
38
|
+
*/
|
|
39
|
+
function displayMergeOptions(options) {
|
|
40
|
+
if (options.noMerge) {
|
|
41
|
+
(0, logger_1.info)('合并模式: 完全替换');
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
const mergeDetails = [];
|
|
45
|
+
if (options.merge) {
|
|
46
|
+
mergeDetails.push(`合并字段: ${options.merge}`);
|
|
47
|
+
}
|
|
48
|
+
if (options.keepPermissions) {
|
|
49
|
+
mergeDetails.push('保留权限配置');
|
|
50
|
+
}
|
|
51
|
+
if (options.keepPlugins) {
|
|
52
|
+
mergeDetails.push('保留插件配置');
|
|
53
|
+
}
|
|
54
|
+
if (mergeDetails.length > 0) {
|
|
55
|
+
(0, logger_1.info)(`合并选项: ${mergeDetails.join(', ')}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 预览配置切换结果(dry-run 模式)
|
|
61
|
+
*/
|
|
62
|
+
async function previewSwitch(name, options, profileManager, settingsManager) {
|
|
63
|
+
// 检查 profile 存在
|
|
64
|
+
const settings = await profileManager.get(name);
|
|
65
|
+
// 读取当前设置
|
|
66
|
+
const currentSettings = await settingsManager.read();
|
|
67
|
+
// 构建 MergeOptions
|
|
68
|
+
const mergeOptions = buildMergeOptions(options);
|
|
69
|
+
// 计算合并结果
|
|
70
|
+
const mergedSettings = (0, merge_1.mergeSettings)(currentSettings, settings, mergeOptions);
|
|
71
|
+
// 显示预览
|
|
72
|
+
(0, logger_1.info)(`[预览模式] 切换到配置 "${name}" 的结果:`);
|
|
73
|
+
console.log();
|
|
74
|
+
// 显示合并选项
|
|
75
|
+
displayMergeOptions(options);
|
|
76
|
+
console.log();
|
|
77
|
+
(0, logger_1.info)('合并后的配置:');
|
|
78
|
+
console.log((0, logger_2.highlightJson)(mergedSettings));
|
|
79
|
+
console.log();
|
|
80
|
+
(0, logger_1.warn)('提示: 这是预览模式,配置未被实际修改');
|
|
81
|
+
(0, logger_1.info)('移除 --dry-run 选项以实际执行切换');
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 执行配置切换
|
|
85
|
+
*/
|
|
86
|
+
async function executeSwitch(name, options, profileManager, settingsManager, stateManager) {
|
|
87
|
+
// dry-run 模式
|
|
88
|
+
if (options.dryRun) {
|
|
89
|
+
return previewSwitch(name, options, profileManager, settingsManager);
|
|
90
|
+
}
|
|
91
|
+
// 检查 profile 存在
|
|
92
|
+
const settings = await profileManager.get(name);
|
|
93
|
+
// 构建 MergeOptions
|
|
94
|
+
const mergeOptions = buildMergeOptions(options);
|
|
95
|
+
// 执行切换
|
|
96
|
+
const mergedSettings = await settingsManager.applyProfile(settings, mergeOptions);
|
|
97
|
+
await stateManager.setActiveProfile(name);
|
|
98
|
+
(0, logger_1.success)(`已切换到配置 "${name}"`);
|
|
99
|
+
// 显示合并详情
|
|
100
|
+
displayMergeOptions(options);
|
|
101
|
+
// 显示当前生效的设置关键字段
|
|
102
|
+
(0, logger_1.info)(`设置文件: ${settingsManager.getSettingsPath()}`);
|
|
103
|
+
if (mergedSettings.permissions) {
|
|
104
|
+
const permCount = (mergedSettings.permissions.allow?.length || 0) +
|
|
105
|
+
(mergedSettings.permissions.deny?.length || 0);
|
|
106
|
+
(0, logger_1.info)(`权限规则: ${permCount} 条`);
|
|
107
|
+
}
|
|
108
|
+
if (mergedSettings.enabledPlugins) {
|
|
109
|
+
const pluginCount = Object.keys(mergedSettings.enabledPlugins).length;
|
|
110
|
+
(0, logger_1.info)(`启用插件: ${pluginCount} 个`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 交互式选择配置
|
|
115
|
+
*/
|
|
116
|
+
async function interactiveSwitch(profileManager, settingsManager, stateManager) {
|
|
117
|
+
// 1. 获取所有 profiles
|
|
118
|
+
const profiles = await profileManager.list();
|
|
119
|
+
if (profiles.length === 0) {
|
|
120
|
+
(0, logger_1.warn)('没有可用的配置');
|
|
121
|
+
(0, logger_1.info)('使用 "csm create <name>" 创建一个新配置');
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
// 2. 获取当前激活的 profile
|
|
125
|
+
const activeProfile = await stateManager.getActiveProfile();
|
|
126
|
+
// 3. 构建选择列表,标记当前激活的配置
|
|
127
|
+
const choices = profiles.map(name => {
|
|
128
|
+
const isActive = name === activeProfile;
|
|
129
|
+
return {
|
|
130
|
+
name: isActive ? `${name} (当前)` : name,
|
|
131
|
+
value: name,
|
|
132
|
+
short: name
|
|
133
|
+
};
|
|
134
|
+
});
|
|
135
|
+
// 4. 使用 inquirer 显示选择列表
|
|
136
|
+
const answers = await inquirer_1.default.prompt([
|
|
137
|
+
{
|
|
138
|
+
type: 'list',
|
|
139
|
+
name: 'profile',
|
|
140
|
+
message: '选择要切换的配置:',
|
|
141
|
+
choices,
|
|
142
|
+
default: activeProfile || undefined
|
|
143
|
+
}
|
|
144
|
+
]);
|
|
145
|
+
const selectedName = answers.profile;
|
|
146
|
+
// 如果选择的是当前配置,不执行切换
|
|
147
|
+
if (selectedName === activeProfile) {
|
|
148
|
+
(0, logger_1.info)(`"${selectedName}" 已是当前配置`);
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
// 询问合并选项
|
|
152
|
+
const mergeAnswers = await inquirer_1.default.prompt([
|
|
153
|
+
{
|
|
154
|
+
type: 'confirm',
|
|
155
|
+
name: 'useMerge',
|
|
156
|
+
message: '是否保留某些当前设置?',
|
|
157
|
+
default: false
|
|
158
|
+
}
|
|
159
|
+
]);
|
|
160
|
+
const options = {};
|
|
161
|
+
if (mergeAnswers.useMerge) {
|
|
162
|
+
const keepAnswers = await inquirer_1.default.prompt([
|
|
163
|
+
{
|
|
164
|
+
type: 'checkbox',
|
|
165
|
+
name: 'keepFields',
|
|
166
|
+
message: '选择要保留的字段:',
|
|
167
|
+
choices: [
|
|
168
|
+
{ name: '权限配置 (permissions)', value: 'permissions' },
|
|
169
|
+
{ name: '插件配置 (enabledPlugins)', value: 'plugins' },
|
|
170
|
+
{ name: '环境变量 (env)', value: 'env' },
|
|
171
|
+
{ name: '其他设置', value: 'other' }
|
|
172
|
+
]
|
|
173
|
+
}
|
|
174
|
+
]);
|
|
175
|
+
const keepFields = keepAnswers.keepFields;
|
|
176
|
+
if (keepFields.includes('permissions')) {
|
|
177
|
+
options.keepPermissions = true;
|
|
178
|
+
}
|
|
179
|
+
if (keepFields.includes('plugins')) {
|
|
180
|
+
options.keepPlugins = true;
|
|
181
|
+
}
|
|
182
|
+
if (keepFields.includes('env')) {
|
|
183
|
+
options.merge = 'env';
|
|
184
|
+
}
|
|
185
|
+
if (keepFields.includes('other')) {
|
|
186
|
+
const otherFieldsAnswer = await inquirer_1.default.prompt([
|
|
187
|
+
{
|
|
188
|
+
type: 'input',
|
|
189
|
+
name: 'otherFields',
|
|
190
|
+
message: '输入其他要保留的字段(逗号分隔):',
|
|
191
|
+
}
|
|
192
|
+
]);
|
|
193
|
+
if (otherFieldsAnswer.otherFields) {
|
|
194
|
+
const existing = options.merge ? options.merge : '';
|
|
195
|
+
const otherFields = otherFieldsAnswer.otherFields
|
|
196
|
+
.split(',')
|
|
197
|
+
.map((f) => f.trim())
|
|
198
|
+
.filter((f) => f);
|
|
199
|
+
options.merge = existing ? `${existing},${otherFields.join(',')}` : otherFields.join(',');
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
await executeSwitch(selectedName, options, profileManager, settingsManager, stateManager);
|
|
204
|
+
}
|
|
205
|
+
function initUseCommand(program) {
|
|
206
|
+
program
|
|
207
|
+
.command('use [name]')
|
|
208
|
+
.alias('switch')
|
|
209
|
+
.description('切换到指定配置(无参数时交互式选择)')
|
|
210
|
+
.option('--merge <fields>', '指定要合并的字段(逗号分隔)')
|
|
211
|
+
.option('--no-merge', '完全替换,不合并任何字段')
|
|
212
|
+
.option('--keep-permissions', '保留当前权限配置')
|
|
213
|
+
.option('--keep-plugins', '保留当前插件配置')
|
|
214
|
+
.option('--dry-run', '预览切换结果,不实际执行')
|
|
215
|
+
.action(async (name, options) => {
|
|
216
|
+
try {
|
|
217
|
+
const profileManager = new profile_1.ProfileManager();
|
|
218
|
+
const settingsManager = new settings_1.SettingsManager();
|
|
219
|
+
const stateManager = new state_1.StateManager();
|
|
220
|
+
if (name) {
|
|
221
|
+
// 直接切换模式
|
|
222
|
+
await executeSwitch(name, options, profileManager, settingsManager, stateManager);
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
// 交互式选择模式
|
|
226
|
+
await interactiveSwitch(profileManager, settingsManager, stateManager);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch (err) {
|
|
230
|
+
(0, errors_1.handleCommandError)(err, '切换');
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=use.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use.js","sourceRoot":"","sources":["../../src/commands/use.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CSM - Claude Code Settings Manager
|
|
3
|
+
* 核心模块导出
|
|
4
|
+
*/
|
|
5
|
+
export { ProfileManager } from './lib/profile';
|
|
6
|
+
export { SettingsManager } from './lib/settings';
|
|
7
|
+
export { StateManager } from './lib/state';
|
|
8
|
+
export { mergeSettings } from './lib/merge';
|
|
9
|
+
export * from './types';
|
|
10
|
+
export * from './utils/file';
|
|
11
|
+
export * from './utils/logger';
|
|
12
|
+
export * from './utils/validator';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,cAAc,SAAS,CAAC;AAGxB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC"}
|