grf-cli 1.0.0 → 1.0.3
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 +5 -5
- package/README.zh-CN.md +5 -5
- package/dist/cli.js +2 -14
- package/dist/cli.js.map +1 -1
- package/dist/commands/add.d.ts +5 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +15 -16
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/clean.d.ts +5 -0
- package/dist/commands/clean.d.ts.map +1 -1
- package/dist/commands/clean.js +15 -33
- package/dist/commands/clean.js.map +1 -1
- package/dist/commands/config.d.ts +5 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +19 -39
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/index.d.ts +27 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +52 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/list.d.ts +5 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +27 -59
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/load.d.ts +5 -0
- package/dist/commands/load.d.ts.map +1 -1
- package/dist/commands/load.js +23 -61
- package/dist/commands/load.js.map +1 -1
- package/dist/commands/unload.d.ts +6 -1
- package/dist/commands/unload.d.ts.map +1 -1
- package/dist/commands/unload.js +157 -162
- package/dist/commands/unload.js.map +1 -1
- package/dist/commands/update.d.ts +6 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +66 -74
- package/dist/commands/update.js.map +1 -1
- package/dist/core/config-manager.d.ts +83 -0
- package/dist/core/config-manager.d.ts.map +1 -0
- package/dist/core/config-manager.js +170 -0
- package/dist/core/config-manager.js.map +1 -0
- package/dist/core/config.d.ts +22 -2
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +71 -35
- package/dist/core/config.js.map +1 -1
- package/dist/core/loading-state.d.ts +125 -0
- package/dist/core/loading-state.d.ts.map +1 -0
- package/dist/core/loading-state.js +212 -0
- package/dist/core/loading-state.js.map +1 -0
- package/dist/core/loading.d.ts +21 -26
- package/dist/core/loading.d.ts.map +1 -1
- package/dist/core/loading.js +124 -87
- package/dist/core/loading.js.map +1 -1
- package/dist/core/migration.d.ts +54 -0
- package/dist/core/migration.d.ts.map +1 -0
- package/dist/core/migration.js +279 -0
- package/dist/core/migration.js.map +1 -0
- package/dist/core/paths.d.ts +58 -0
- package/dist/core/paths.d.ts.map +1 -0
- package/dist/core/paths.js +103 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/repos-index.d.ts +113 -0
- package/dist/core/repos-index.d.ts.map +1 -0
- package/dist/core/repos-index.js +206 -0
- package/dist/core/repos-index.js.map +1 -0
- package/dist/core/sync.d.ts.map +1 -1
- package/dist/core/sync.js +3 -3
- package/dist/core/sync.js.map +1 -1
- package/dist/ui/format.d.ts +159 -0
- package/dist/ui/format.d.ts.map +1 -0
- package/dist/ui/format.js +300 -0
- package/dist/ui/format.js.map +1 -0
- package/dist/ui/index.d.ts +9 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +53 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/prompt.d.ts +94 -0
- package/dist/ui/prompt.d.ts.map +1 -0
- package/dist/ui/prompt.js +223 -0
- package/dist/ui/prompt.js.map +1 -0
- package/dist/ui/spinner.d.ts +99 -0
- package/dist/ui/spinner.d.ts.map +1 -0
- package/dist/ui/spinner.js +136 -0
- package/dist/ui/spinner.js.map +1 -0
- package/dist/ui/table.d.ts +142 -0
- package/dist/ui/table.d.ts.map +1 -0
- package/dist/ui/table.js +213 -0
- package/dist/ui/table.js.map +1 -0
- package/dist/utils/constants.d.ts +152 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +160 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/error.d.ts +109 -0
- package/dist/utils/error.d.ts.map +1 -0
- package/dist/utils/error.js +212 -0
- package/dist/utils/error.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +44 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/validation.d.ts +122 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +248 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/core/config-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,eAAe;AACf,eAAO,MAAM,eAAe;;;;;CAKlB,CAAC;AAeX;;;GAGG;AACH,qBAAa,aAAa,CAAC,CAAC;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAI;IACxB,OAAO,CAAC,KAAK,CAAkB;IAE/B;;;;OAIG;gBACS,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAK7C;;;;OAIG;IACG,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC;IA6BvB;;;OAGG;IACG,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAclC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAIhC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAW7B;;;OAGG;IACH,UAAU,IAAI,IAAI;CAGnB;AAMD,cAAc;AACd,eAAO,MAAM,aAAa,uBAGzB,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,mBAAmB,uBAG/B,CAAC;AAEF,iBAAiB;AACjB,eAAO,MAAM,kBAAkB,wBAG9B,CAAC;AAEF,iBAAiB;AACjB,eAAO,MAAM,kBAAkB,uBAG9B,CAAC;AAMF,gBAAgB;AAChB,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAezD;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC,CAoBf"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* grf 单配置文件管理器
|
|
4
|
+
* 实现"一个参数一个配置文件"的设计
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.shallowDepthConfig = exports.shallowCloneConfig = exports.defaultBranchConfig = exports.versionConfig = exports.ConfigManager = exports.CONFIG_DEFAULTS = void 0;
|
|
11
|
+
exports.getAllConfigs = getAllConfigs;
|
|
12
|
+
exports.setAllConfigs = setAllConfigs;
|
|
13
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
14
|
+
const paths_1 = require("./paths");
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// 配置默认值常量
|
|
17
|
+
// ============================================================================
|
|
18
|
+
/** 各配置项的默认值 */
|
|
19
|
+
exports.CONFIG_DEFAULTS = {
|
|
20
|
+
VERSION: "1.0.0",
|
|
21
|
+
DEFAULT_BRANCH: "main",
|
|
22
|
+
SHALLOW_CLONE: true,
|
|
23
|
+
SHALLOW_DEPTH: 1,
|
|
24
|
+
};
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// 泛型配置管理类
|
|
27
|
+
// ============================================================================
|
|
28
|
+
/**
|
|
29
|
+
* 通用的单配置文件管理器
|
|
30
|
+
* @template T 配置值的类型
|
|
31
|
+
*/
|
|
32
|
+
class ConfigManager {
|
|
33
|
+
/**
|
|
34
|
+
* 创建配置管理器实例
|
|
35
|
+
* @param filePath 配置文件的绝对路径
|
|
36
|
+
* @param defaultValue 配置的默认值
|
|
37
|
+
*/
|
|
38
|
+
constructor(filePath, defaultValue) {
|
|
39
|
+
this.cache = null;
|
|
40
|
+
this.filePath = filePath;
|
|
41
|
+
this.defaultValue = defaultValue;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 读取配置值
|
|
45
|
+
* 如果配置文件不存在,返回默认值
|
|
46
|
+
* @returns 配置值
|
|
47
|
+
*/
|
|
48
|
+
async get() {
|
|
49
|
+
// 如果有缓存,直接返回
|
|
50
|
+
if (this.cache !== null) {
|
|
51
|
+
return this.cache;
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
// 检查文件是否存在
|
|
55
|
+
const fileExists = await fs_extra_1.default.pathExists(this.filePath);
|
|
56
|
+
if (!fileExists) {
|
|
57
|
+
return this.defaultValue;
|
|
58
|
+
}
|
|
59
|
+
// 读取并解析配置文件
|
|
60
|
+
const content = (await fs_extra_1.default.readJson(this.filePath));
|
|
61
|
+
const value = content.value;
|
|
62
|
+
// 更新缓存
|
|
63
|
+
this.cache = value;
|
|
64
|
+
return value;
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// 文件读取或解析失败,返回默认值
|
|
68
|
+
return this.defaultValue;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* 写入配置值
|
|
73
|
+
* @param value 要写入的配置值
|
|
74
|
+
*/
|
|
75
|
+
async set(value) {
|
|
76
|
+
// 确保目录存在
|
|
77
|
+
await (0, paths_1.ensureGrfDirs)();
|
|
78
|
+
// 构建配置文件内容
|
|
79
|
+
const content = { value };
|
|
80
|
+
// 写入文件
|
|
81
|
+
await fs_extra_1.default.writeJson(this.filePath, content, { spaces: 2 });
|
|
82
|
+
// 更新缓存
|
|
83
|
+
this.cache = value;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* 重置为默认值
|
|
87
|
+
*/
|
|
88
|
+
async reset() {
|
|
89
|
+
await this.set(this.defaultValue);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* 检查配置文件是否存在
|
|
93
|
+
* @returns 文件是否存在
|
|
94
|
+
*/
|
|
95
|
+
async exists() {
|
|
96
|
+
return fs_extra_1.default.pathExists(this.filePath);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* 删除配置文件
|
|
100
|
+
*/
|
|
101
|
+
async delete() {
|
|
102
|
+
// 清除缓存
|
|
103
|
+
this.cache = null;
|
|
104
|
+
// 检查文件是否存在
|
|
105
|
+
const fileExists = await fs_extra_1.default.pathExists(this.filePath);
|
|
106
|
+
if (fileExists) {
|
|
107
|
+
await fs_extra_1.default.remove(this.filePath);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 清除缓存
|
|
112
|
+
* 下次调用 get() 时会重新从文件读取
|
|
113
|
+
*/
|
|
114
|
+
clearCache() {
|
|
115
|
+
this.cache = null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
exports.ConfigManager = ConfigManager;
|
|
119
|
+
// ============================================================================
|
|
120
|
+
// 预定义的配置管理器实例
|
|
121
|
+
// ============================================================================
|
|
122
|
+
/** 版本配置管理器 */
|
|
123
|
+
exports.versionConfig = new ConfigManager((0, paths_1.getConfigFilePath)(paths_1.CONFIG_FILES.VERSION), exports.CONFIG_DEFAULTS.VERSION);
|
|
124
|
+
/** 默认分支配置管理器 */
|
|
125
|
+
exports.defaultBranchConfig = new ConfigManager((0, paths_1.getConfigFilePath)(paths_1.CONFIG_FILES.DEFAULT_BRANCH), exports.CONFIG_DEFAULTS.DEFAULT_BRANCH);
|
|
126
|
+
/** 浅克隆开关配置管理器 */
|
|
127
|
+
exports.shallowCloneConfig = new ConfigManager((0, paths_1.getConfigFilePath)(paths_1.CONFIG_FILES.SHALLOW_CLONE), exports.CONFIG_DEFAULTS.SHALLOW_CLONE);
|
|
128
|
+
/** 浅克隆深度配置管理器 */
|
|
129
|
+
exports.shallowDepthConfig = new ConfigManager((0, paths_1.getConfigFilePath)(paths_1.CONFIG_FILES.SHALLOW_DEPTH), exports.CONFIG_DEFAULTS.SHALLOW_DEPTH);
|
|
130
|
+
/**
|
|
131
|
+
* 获取所有配置的聚合对象
|
|
132
|
+
* 用于兼容旧接口或需要一次性获取所有配置的场景
|
|
133
|
+
* @returns 包含所有配置值的对象
|
|
134
|
+
*/
|
|
135
|
+
async function getAllConfigs() {
|
|
136
|
+
const [version, defaultBranch, shallowClone, shallowDepth] = await Promise.all([
|
|
137
|
+
exports.versionConfig.get(),
|
|
138
|
+
exports.defaultBranchConfig.get(),
|
|
139
|
+
exports.shallowCloneConfig.get(),
|
|
140
|
+
exports.shallowDepthConfig.get(),
|
|
141
|
+
]);
|
|
142
|
+
return {
|
|
143
|
+
version,
|
|
144
|
+
defaultBranch,
|
|
145
|
+
shallowClone,
|
|
146
|
+
shallowDepth,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* 批量设置配置
|
|
151
|
+
* 只设置提供的配置项,未提供的保持不变
|
|
152
|
+
* @param configs 要设置的配置项(部分或全部)
|
|
153
|
+
*/
|
|
154
|
+
async function setAllConfigs(configs) {
|
|
155
|
+
const promises = [];
|
|
156
|
+
if (configs.version !== undefined) {
|
|
157
|
+
promises.push(exports.versionConfig.set(configs.version));
|
|
158
|
+
}
|
|
159
|
+
if (configs.defaultBranch !== undefined) {
|
|
160
|
+
promises.push(exports.defaultBranchConfig.set(configs.defaultBranch));
|
|
161
|
+
}
|
|
162
|
+
if (configs.shallowClone !== undefined) {
|
|
163
|
+
promises.push(exports.shallowCloneConfig.set(configs.shallowClone));
|
|
164
|
+
}
|
|
165
|
+
if (configs.shallowDepth !== undefined) {
|
|
166
|
+
promises.push(exports.shallowDepthConfig.set(configs.shallowDepth));
|
|
167
|
+
}
|
|
168
|
+
await Promise.all(promises);
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=config-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../src/core/config-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/core/config.d.ts
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* grf 配置模块
|
|
3
|
-
*
|
|
2
|
+
* grf 配置模块 - 兼容层
|
|
3
|
+
*
|
|
4
|
+
* 此模块是一个兼容层,保持原有 API 不变,内部使用新的模块化架构:
|
|
5
|
+
* - paths.ts: 路径管理
|
|
6
|
+
* - config-manager.ts: 单配置文件管理
|
|
7
|
+
* - repos-index.ts: 仓库索引管理
|
|
8
|
+
* - migration.ts: 配置迁移工具
|
|
9
|
+
*
|
|
10
|
+
* 现有代码无需修改即可正常工作。
|
|
4
11
|
*/
|
|
5
12
|
import { GlobalConfig, RepoMeta } from "../types/index.js";
|
|
6
13
|
/**
|
|
@@ -16,6 +23,7 @@ export declare function getReposRoot(): string;
|
|
|
16
23
|
/**
|
|
17
24
|
* 获取配置文件路径
|
|
18
25
|
* @returns 配置文件的绝对路径 (~/.gitreference/config.json)
|
|
26
|
+
* @deprecated 新架构使用多个配置文件,此函数仅用于兼容
|
|
19
27
|
*/
|
|
20
28
|
export declare function getConfigPath(): string;
|
|
21
29
|
/**
|
|
@@ -31,12 +39,24 @@ export declare function ensureConfigDir(): Promise<void>;
|
|
|
31
39
|
/**
|
|
32
40
|
* 读取全局配置
|
|
33
41
|
* 如果配置文件不存在,返回默认配置
|
|
42
|
+
*
|
|
43
|
+
* 内部实现:
|
|
44
|
+
* 1. 调用 ensureMigrated() 确保旧配置已迁移
|
|
45
|
+
* 2. 使用 getAllConfigs() 获取配置参数
|
|
46
|
+
* 3. 使用 reposIndex.getAll() 获取仓库列表
|
|
47
|
+
* 4. 组装成 GlobalConfig 对象返回
|
|
48
|
+
*
|
|
34
49
|
* @returns 全局配置对象
|
|
35
50
|
*/
|
|
36
51
|
export declare function readGlobalConfig(): Promise<GlobalConfig>;
|
|
37
52
|
/**
|
|
38
53
|
* 写入全局配置
|
|
39
54
|
* 自动创建配置目录(如果不存在)
|
|
55
|
+
*
|
|
56
|
+
* 内部实现:
|
|
57
|
+
* 1. 使用 setAllConfigs() 保存配置参数
|
|
58
|
+
* 2. 使用 reposIndex.setAll() 保存仓库列表
|
|
59
|
+
*
|
|
40
60
|
* @param config 要写入的配置对象
|
|
41
61
|
*/
|
|
42
62
|
export declare function writeGlobalConfig(config: GlobalConfig): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAuB,MAAM,mBAAmB,CAAC;AA6BhF;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CAQ/C;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAerD;AAMD;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,CA4B9D;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA0B3E;AAeD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CA8B7E;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,IAAI,CAAC,CAaf"}
|
package/dist/core/config.js
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* grf 配置模块
|
|
4
|
-
*
|
|
3
|
+
* grf 配置模块 - 兼容层
|
|
4
|
+
*
|
|
5
|
+
* 此模块是一个兼容层,保持原有 API 不变,内部使用新的模块化架构:
|
|
6
|
+
* - paths.ts: 路径管理
|
|
7
|
+
* - config-manager.ts: 单配置文件管理
|
|
8
|
+
* - repos-index.ts: 仓库索引管理
|
|
9
|
+
* - migration.ts: 配置迁移工具
|
|
10
|
+
*
|
|
11
|
+
* 现有代码无需修改即可正常工作。
|
|
5
12
|
*/
|
|
6
13
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
@@ -17,25 +24,29 @@ exports.writeGlobalConfig = writeGlobalConfig;
|
|
|
17
24
|
exports.readRepoMeta = readRepoMeta;
|
|
18
25
|
exports.writeRepoMeta = writeRepoMeta;
|
|
19
26
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
20
|
-
const os_1 = __importDefault(require("os"));
|
|
21
27
|
const path_1 = __importDefault(require("path"));
|
|
22
28
|
const index_js_1 = require("../types/index.js");
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
const
|
|
29
|
+
// 导入新的模块化组件
|
|
30
|
+
const paths_js_1 = require("./paths.js");
|
|
31
|
+
const config_manager_js_1 = require("./config-manager.js");
|
|
32
|
+
const repos_index_js_1 = require("./repos-index.js");
|
|
33
|
+
const migration_js_1 = require("./migration.js");
|
|
34
|
+
// ============================================================================
|
|
35
|
+
// 常量定义(保持向后兼容)
|
|
36
|
+
// ============================================================================
|
|
27
37
|
/** 仓库存储目录名 */
|
|
28
38
|
const REPOS_DIR_NAME = "repos";
|
|
29
39
|
/** 仓库元信息文件名 */
|
|
30
40
|
const REPO_META_FILE_NAME = ".gitreference-meta.json";
|
|
31
|
-
|
|
32
|
-
|
|
41
|
+
// ============================================================================
|
|
42
|
+
// 路径相关函数(保持向后兼容)
|
|
43
|
+
// ============================================================================
|
|
33
44
|
/**
|
|
34
45
|
* 获取 grf 根目录路径
|
|
35
46
|
* @returns grf 根目录的绝对路径 (~/.gitreference/)
|
|
36
47
|
*/
|
|
37
48
|
function getGrfRoot() {
|
|
38
|
-
return
|
|
49
|
+
return (0, paths_js_1.getGrfRoot)();
|
|
39
50
|
}
|
|
40
51
|
/**
|
|
41
52
|
* 获取仓库存储根目录
|
|
@@ -47,9 +58,10 @@ function getReposRoot() {
|
|
|
47
58
|
/**
|
|
48
59
|
* 获取配置文件路径
|
|
49
60
|
* @returns 配置文件的绝对路径 (~/.gitreference/config.json)
|
|
61
|
+
* @deprecated 新架构使用多个配置文件,此函数仅用于兼容
|
|
50
62
|
*/
|
|
51
63
|
function getConfigPath() {
|
|
52
|
-
return
|
|
64
|
+
return (0, paths_js_1.getLegacyConfigPath)();
|
|
53
65
|
}
|
|
54
66
|
/**
|
|
55
67
|
* 获取默认配置
|
|
@@ -57,10 +69,10 @@ function getConfigPath() {
|
|
|
57
69
|
*/
|
|
58
70
|
function getDefaultConfig() {
|
|
59
71
|
return {
|
|
60
|
-
version:
|
|
61
|
-
defaultBranch:
|
|
62
|
-
shallowClone:
|
|
63
|
-
shallowDepth:
|
|
72
|
+
version: config_manager_js_1.CONFIG_DEFAULTS.VERSION,
|
|
73
|
+
defaultBranch: config_manager_js_1.CONFIG_DEFAULTS.DEFAULT_BRANCH,
|
|
74
|
+
shallowClone: config_manager_js_1.CONFIG_DEFAULTS.SHALLOW_CLONE,
|
|
75
|
+
shallowDepth: config_manager_js_1.CONFIG_DEFAULTS.SHALLOW_DEPTH,
|
|
64
76
|
repos: {},
|
|
65
77
|
};
|
|
66
78
|
}
|
|
@@ -70,41 +82,50 @@ function getDefaultConfig() {
|
|
|
70
82
|
*/
|
|
71
83
|
async function ensureConfigDir() {
|
|
72
84
|
try {
|
|
73
|
-
|
|
85
|
+
// 使用新的目录确保函数
|
|
86
|
+
await (0, paths_js_1.ensureGrfDirs)();
|
|
87
|
+
// 同时确保 repos 目录存在
|
|
74
88
|
const reposRoot = getReposRoot();
|
|
75
|
-
await fs_extra_1.default.ensureDir(grfRoot);
|
|
76
89
|
await fs_extra_1.default.ensureDir(reposRoot);
|
|
77
90
|
}
|
|
78
91
|
catch (error) {
|
|
79
92
|
throw new index_js_1.GrfError(index_js_1.ErrorCode.FS_PERMISSION_DENIED, `无法创建配置目录: ${error.message}`, error);
|
|
80
93
|
}
|
|
81
94
|
}
|
|
95
|
+
// ============================================================================
|
|
96
|
+
// 全局配置读写函数(使用新模块化架构)
|
|
97
|
+
// ============================================================================
|
|
82
98
|
/**
|
|
83
99
|
* 读取全局配置
|
|
84
100
|
* 如果配置文件不存在,返回默认配置
|
|
101
|
+
*
|
|
102
|
+
* 内部实现:
|
|
103
|
+
* 1. 调用 ensureMigrated() 确保旧配置已迁移
|
|
104
|
+
* 2. 使用 getAllConfigs() 获取配置参数
|
|
105
|
+
* 3. 使用 reposIndex.getAll() 获取仓库列表
|
|
106
|
+
* 4. 组装成 GlobalConfig 对象返回
|
|
107
|
+
*
|
|
85
108
|
* @returns 全局配置对象
|
|
86
109
|
*/
|
|
87
110
|
async function readGlobalConfig() {
|
|
88
|
-
const configPath = getConfigPath();
|
|
89
111
|
try {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
// 确保配置对象包含所有必要字段
|
|
112
|
+
// 确保配置已迁移(静默执行,不影响用户体验)
|
|
113
|
+
await (0, migration_js_1.ensureMigrated)();
|
|
114
|
+
// 使用新模块获取配置
|
|
115
|
+
const configs = await (0, config_manager_js_1.getAllConfigs)();
|
|
116
|
+
const repos = await repos_index_js_1.reposIndex.getAll();
|
|
117
|
+
// 组装成 GlobalConfig 对象
|
|
97
118
|
return {
|
|
98
|
-
|
|
99
|
-
|
|
119
|
+
version: configs.version,
|
|
120
|
+
defaultBranch: configs.defaultBranch,
|
|
121
|
+
shallowClone: configs.shallowClone,
|
|
122
|
+
shallowDepth: configs.shallowDepth,
|
|
123
|
+
repos,
|
|
100
124
|
};
|
|
101
125
|
}
|
|
102
126
|
catch (error) {
|
|
103
|
-
if (error
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
if (error instanceof SyntaxError) {
|
|
107
|
-
throw new index_js_1.GrfError(index_js_1.ErrorCode.CONFIG_PARSE_ERROR, `配置文件解析失败: ${error.message}`, error);
|
|
127
|
+
if (error instanceof index_js_1.GrfError) {
|
|
128
|
+
throw error;
|
|
108
129
|
}
|
|
109
130
|
throw new index_js_1.GrfError(index_js_1.ErrorCode.CONFIG_NOT_FOUND, `读取配置文件失败: ${error.message}`, error);
|
|
110
131
|
}
|
|
@@ -112,14 +133,26 @@ async function readGlobalConfig() {
|
|
|
112
133
|
/**
|
|
113
134
|
* 写入全局配置
|
|
114
135
|
* 自动创建配置目录(如果不存在)
|
|
136
|
+
*
|
|
137
|
+
* 内部实现:
|
|
138
|
+
* 1. 使用 setAllConfigs() 保存配置参数
|
|
139
|
+
* 2. 使用 reposIndex.setAll() 保存仓库列表
|
|
140
|
+
*
|
|
115
141
|
* @param config 要写入的配置对象
|
|
116
142
|
*/
|
|
117
143
|
async function writeGlobalConfig(config) {
|
|
118
144
|
try {
|
|
145
|
+
// 确保目录存在
|
|
119
146
|
await ensureConfigDir();
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
147
|
+
// 使用新模块保存配置参数
|
|
148
|
+
await (0, config_manager_js_1.setAllConfigs)({
|
|
149
|
+
version: config.version,
|
|
150
|
+
defaultBranch: config.defaultBranch,
|
|
151
|
+
shallowClone: config.shallowClone,
|
|
152
|
+
shallowDepth: config.shallowDepth,
|
|
153
|
+
});
|
|
154
|
+
// 使用新模块保存仓库列表
|
|
155
|
+
await repos_index_js_1.reposIndex.setAll(config.repos);
|
|
123
156
|
}
|
|
124
157
|
catch (error) {
|
|
125
158
|
if (error instanceof index_js_1.GrfError) {
|
|
@@ -128,6 +161,9 @@ async function writeGlobalConfig(config) {
|
|
|
128
161
|
throw new index_js_1.GrfError(index_js_1.ErrorCode.CONFIG_WRITE_ERROR, `写入配置文件失败: ${error.message}`, error);
|
|
129
162
|
}
|
|
130
163
|
}
|
|
164
|
+
// ============================================================================
|
|
165
|
+
// 仓库元信息相关函数(保持原有实现)
|
|
166
|
+
// ============================================================================
|
|
131
167
|
/**
|
|
132
168
|
* 获取仓库元信息文件路径
|
|
133
169
|
* @param repoPath 仓库目录路径
|
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 加载状态管理模块
|
|
3
|
+
* 管理仓库的加载状态,存储到独立的 loading.json 文件中
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 单个仓库的加载状态
|
|
7
|
+
*/
|
|
8
|
+
export interface RepoLoadingState {
|
|
9
|
+
/** 加载到的目标路径 */
|
|
10
|
+
targetPath: string;
|
|
11
|
+
/** 加载时间 (ISO 8601) */
|
|
12
|
+
loadedAt: string;
|
|
13
|
+
/** 加载的分支 */
|
|
14
|
+
branch?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 加载状态文件结构
|
|
18
|
+
*/
|
|
19
|
+
export interface LoadingStateIndex {
|
|
20
|
+
loadedRepos: Record<string, RepoLoadingState>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 加载状态管理器
|
|
24
|
+
* 提供对仓库加载状态的 CRUD 操作
|
|
25
|
+
*/
|
|
26
|
+
export declare class LoadingStateManager {
|
|
27
|
+
private cache;
|
|
28
|
+
/**
|
|
29
|
+
* 读取加载状态文件
|
|
30
|
+
* @returns 加载状态索引
|
|
31
|
+
*/
|
|
32
|
+
private read;
|
|
33
|
+
/**
|
|
34
|
+
* 写入加载状态文件
|
|
35
|
+
* @param data 加载状态索引
|
|
36
|
+
*/
|
|
37
|
+
private write;
|
|
38
|
+
/**
|
|
39
|
+
* 获取所有加载状态
|
|
40
|
+
* @returns 所有仓库的加载状态记录
|
|
41
|
+
*/
|
|
42
|
+
getAll(): Promise<Record<string, RepoLoadingState>>;
|
|
43
|
+
/**
|
|
44
|
+
* 获取单个仓库的加载状态
|
|
45
|
+
* @param repoName 仓库名称
|
|
46
|
+
* @returns 仓库的加载状态,如果不存在则返回 undefined
|
|
47
|
+
*/
|
|
48
|
+
get(repoName: string): Promise<RepoLoadingState | undefined>;
|
|
49
|
+
/**
|
|
50
|
+
* 设置仓库的加载状态
|
|
51
|
+
* @param repoName 仓库名称
|
|
52
|
+
* @param state 加载状态
|
|
53
|
+
*/
|
|
54
|
+
set(repoName: string, state: RepoLoadingState): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* 移除仓库的加载状态
|
|
57
|
+
* @param repoName 仓库名称
|
|
58
|
+
* @returns 是否成功移除(如果仓库不存在则返回 false)
|
|
59
|
+
*/
|
|
60
|
+
remove(repoName: string): Promise<boolean>;
|
|
61
|
+
/**
|
|
62
|
+
* 检查仓库是否已加载
|
|
63
|
+
* @param repoName 仓库名称
|
|
64
|
+
* @returns 是否已加载
|
|
65
|
+
*/
|
|
66
|
+
isLoaded(repoName: string): Promise<boolean>;
|
|
67
|
+
/**
|
|
68
|
+
* 获取已加载的仓库数量
|
|
69
|
+
* @returns 已加载的仓库数量
|
|
70
|
+
*/
|
|
71
|
+
count(): Promise<number>;
|
|
72
|
+
/**
|
|
73
|
+
* 获取所有已加载的仓库名称
|
|
74
|
+
* @returns 已加载的仓库名称列表
|
|
75
|
+
*/
|
|
76
|
+
names(): Promise<string[]>;
|
|
77
|
+
/**
|
|
78
|
+
* 清空所有加载状态
|
|
79
|
+
*/
|
|
80
|
+
clear(): Promise<void>;
|
|
81
|
+
/**
|
|
82
|
+
* 批量设置加载状态(用于迁移)
|
|
83
|
+
* @param states 加载状态记录
|
|
84
|
+
*/
|
|
85
|
+
setAll(states: Record<string, RepoLoadingState>): Promise<void>;
|
|
86
|
+
/**
|
|
87
|
+
* 清除缓存
|
|
88
|
+
*/
|
|
89
|
+
clearCache(): void;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* 加载状态管理器单例实例
|
|
93
|
+
*/
|
|
94
|
+
export declare const loadingState: LoadingStateManager;
|
|
95
|
+
/**
|
|
96
|
+
* 获取所有加载状态
|
|
97
|
+
* @returns 所有仓库的加载状态记录
|
|
98
|
+
*/
|
|
99
|
+
export declare function getAllLoadingStates(): Promise<Record<string, RepoLoadingState>>;
|
|
100
|
+
/**
|
|
101
|
+
* 获取单个仓库的加载状态
|
|
102
|
+
* @param repoName 仓库名称
|
|
103
|
+
* @returns 仓库的加载状态,如果不存在则返回 undefined
|
|
104
|
+
*/
|
|
105
|
+
export declare function getLoadingState(repoName: string): Promise<RepoLoadingState | undefined>;
|
|
106
|
+
/**
|
|
107
|
+
* 标记仓库为已加载
|
|
108
|
+
* @param repoName 仓库名称
|
|
109
|
+
* @param targetPath 加载到的目标路径
|
|
110
|
+
* @param branch 加载的分支(可选)
|
|
111
|
+
*/
|
|
112
|
+
export declare function markAsLoaded(repoName: string, targetPath: string, branch?: string): Promise<void>;
|
|
113
|
+
/**
|
|
114
|
+
* 标记仓库为已卸载
|
|
115
|
+
* @param repoName 仓库名称
|
|
116
|
+
* @returns 是否成功移除(如果仓库不存在则返回 false)
|
|
117
|
+
*/
|
|
118
|
+
export declare function markAsUnloaded(repoName: string): Promise<boolean>;
|
|
119
|
+
/**
|
|
120
|
+
* 检查仓库是否已加载
|
|
121
|
+
* @param repoName 仓库名称
|
|
122
|
+
* @returns 是否已加载
|
|
123
|
+
*/
|
|
124
|
+
export declare function isRepoLoaded(repoName: string): Promise<boolean>;
|
|
125
|
+
//# sourceMappingURL=loading-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loading-state.d.ts","sourceRoot":"","sources":["../../src/core/loading-state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,eAAe;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC/C;AAMD;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,KAAK,CAAkC;IAE/C;;;OAGG;YACW,IAAI;IA2BlB;;;OAGG;YACW,KAAK;IAOnB;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAKzD;;;;OAIG;IACG,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAKlE;;;;OAIG;IACG,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnE;;;;OAIG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUhD;;;;OAIG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKlD;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAK9B;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAKhC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;;OAGG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE;;OAEG;IACH,UAAU,IAAI,IAAI;CAGnB;AAMD;;GAEG;AACH,eAAO,MAAM,YAAY,qBAA4B,CAAC;AAMtD;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAClD,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CACjC,CAEA;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAEvC;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEvE;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAErE"}
|