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.
Files changed (104) hide show
  1. package/README.md +5 -5
  2. package/README.zh-CN.md +5 -5
  3. package/dist/cli.js +2 -14
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/add.d.ts +5 -0
  6. package/dist/commands/add.d.ts.map +1 -1
  7. package/dist/commands/add.js +15 -16
  8. package/dist/commands/add.js.map +1 -1
  9. package/dist/commands/clean.d.ts +5 -0
  10. package/dist/commands/clean.d.ts.map +1 -1
  11. package/dist/commands/clean.js +15 -33
  12. package/dist/commands/clean.js.map +1 -1
  13. package/dist/commands/config.d.ts +5 -0
  14. package/dist/commands/config.d.ts.map +1 -1
  15. package/dist/commands/config.js +19 -39
  16. package/dist/commands/config.js.map +1 -1
  17. package/dist/commands/index.d.ts +27 -0
  18. package/dist/commands/index.d.ts.map +1 -0
  19. package/dist/commands/index.js +52 -0
  20. package/dist/commands/index.js.map +1 -0
  21. package/dist/commands/list.d.ts +5 -0
  22. package/dist/commands/list.d.ts.map +1 -1
  23. package/dist/commands/list.js +27 -59
  24. package/dist/commands/list.js.map +1 -1
  25. package/dist/commands/load.d.ts +5 -0
  26. package/dist/commands/load.d.ts.map +1 -1
  27. package/dist/commands/load.js +23 -61
  28. package/dist/commands/load.js.map +1 -1
  29. package/dist/commands/unload.d.ts +6 -1
  30. package/dist/commands/unload.d.ts.map +1 -1
  31. package/dist/commands/unload.js +157 -162
  32. package/dist/commands/unload.js.map +1 -1
  33. package/dist/commands/update.d.ts +6 -1
  34. package/dist/commands/update.d.ts.map +1 -1
  35. package/dist/commands/update.js +66 -74
  36. package/dist/commands/update.js.map +1 -1
  37. package/dist/core/config-manager.d.ts +83 -0
  38. package/dist/core/config-manager.d.ts.map +1 -0
  39. package/dist/core/config-manager.js +170 -0
  40. package/dist/core/config-manager.js.map +1 -0
  41. package/dist/core/config.d.ts +22 -2
  42. package/dist/core/config.d.ts.map +1 -1
  43. package/dist/core/config.js +71 -35
  44. package/dist/core/config.js.map +1 -1
  45. package/dist/core/loading-state.d.ts +125 -0
  46. package/dist/core/loading-state.d.ts.map +1 -0
  47. package/dist/core/loading-state.js +212 -0
  48. package/dist/core/loading-state.js.map +1 -0
  49. package/dist/core/loading.d.ts +21 -26
  50. package/dist/core/loading.d.ts.map +1 -1
  51. package/dist/core/loading.js +124 -87
  52. package/dist/core/loading.js.map +1 -1
  53. package/dist/core/migration.d.ts +54 -0
  54. package/dist/core/migration.d.ts.map +1 -0
  55. package/dist/core/migration.js +279 -0
  56. package/dist/core/migration.js.map +1 -0
  57. package/dist/core/paths.d.ts +58 -0
  58. package/dist/core/paths.d.ts.map +1 -0
  59. package/dist/core/paths.js +103 -0
  60. package/dist/core/paths.js.map +1 -0
  61. package/dist/core/repos-index.d.ts +113 -0
  62. package/dist/core/repos-index.d.ts.map +1 -0
  63. package/dist/core/repos-index.js +206 -0
  64. package/dist/core/repos-index.js.map +1 -0
  65. package/dist/core/sync.d.ts.map +1 -1
  66. package/dist/core/sync.js +3 -3
  67. package/dist/core/sync.js.map +1 -1
  68. package/dist/ui/format.d.ts +159 -0
  69. package/dist/ui/format.d.ts.map +1 -0
  70. package/dist/ui/format.js +300 -0
  71. package/dist/ui/format.js.map +1 -0
  72. package/dist/ui/index.d.ts +9 -0
  73. package/dist/ui/index.d.ts.map +1 -0
  74. package/dist/ui/index.js +53 -0
  75. package/dist/ui/index.js.map +1 -0
  76. package/dist/ui/prompt.d.ts +94 -0
  77. package/dist/ui/prompt.d.ts.map +1 -0
  78. package/dist/ui/prompt.js +223 -0
  79. package/dist/ui/prompt.js.map +1 -0
  80. package/dist/ui/spinner.d.ts +99 -0
  81. package/dist/ui/spinner.d.ts.map +1 -0
  82. package/dist/ui/spinner.js +136 -0
  83. package/dist/ui/spinner.js.map +1 -0
  84. package/dist/ui/table.d.ts +142 -0
  85. package/dist/ui/table.d.ts.map +1 -0
  86. package/dist/ui/table.js +213 -0
  87. package/dist/ui/table.js.map +1 -0
  88. package/dist/utils/constants.d.ts +152 -0
  89. package/dist/utils/constants.d.ts.map +1 -0
  90. package/dist/utils/constants.js +160 -0
  91. package/dist/utils/constants.js.map +1 -0
  92. package/dist/utils/error.d.ts +109 -0
  93. package/dist/utils/error.d.ts.map +1 -0
  94. package/dist/utils/error.js +212 -0
  95. package/dist/utils/error.js.map +1 -0
  96. package/dist/utils/index.d.ts +8 -0
  97. package/dist/utils/index.d.ts.map +1 -0
  98. package/dist/utils/index.js +44 -0
  99. package/dist/utils/index.js.map +1 -0
  100. package/dist/utils/validation.d.ts +122 -0
  101. package/dist/utils/validation.d.ts.map +1 -0
  102. package/dist/utils/validation.js +248 -0
  103. package/dist/utils/validation.js.map +1 -0
  104. 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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"}
@@ -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;;;GAGG;AAKH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAuB,MAAM,mBAAmB,CAAC;AAahF;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;GAGG;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,CAcrD;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,CAoC9D;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB3E;AAWD;;;;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"}
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"}
@@ -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
- /** grf 根目录名称 */
24
- const GRF_DIR_NAME = ".gitreference";
25
- /** 全局配置文件名 */
26
- const CONFIG_FILE_NAME = "config.json";
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
- const CONFIG_VERSION = "1.0.0";
41
+ // ============================================================================
42
+ // 路径相关函数(保持向后兼容)
43
+ // ============================================================================
33
44
  /**
34
45
  * 获取 grf 根目录路径
35
46
  * @returns grf 根目录的绝对路径 (~/.gitreference/)
36
47
  */
37
48
  function getGrfRoot() {
38
- return path_1.default.join(os_1.default.homedir(), GRF_DIR_NAME);
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 path_1.default.join(getGrfRoot(), CONFIG_FILE_NAME);
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: CONFIG_VERSION,
61
- defaultBranch: "main",
62
- shallowClone: true,
63
- shallowDepth: 1,
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
- const grfRoot = getGrfRoot();
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
- const exists = await fs_extra_1.default.pathExists(configPath);
91
- if (!exists) {
92
- return getDefaultConfig();
93
- }
94
- const content = await fs_extra_1.default.readFile(configPath, "utf-8");
95
- const config = JSON.parse(content);
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
- ...getDefaultConfig(),
99
- ...config,
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.code === "ENOENT") {
104
- return getDefaultConfig();
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
- const configPath = getConfigPath();
121
- const content = JSON.stringify(config, null, 2);
122
- await fs_extra_1.default.writeFile(configPath, content, "utf-8");
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 仓库目录路径
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
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"}