grf-cli 1.0.2 → 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/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 +1 -1
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 加载状态管理模块
|
|
4
|
+
* 管理仓库的加载状态,存储到独立的 loading.json 文件中
|
|
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.loadingState = exports.LoadingStateManager = void 0;
|
|
11
|
+
exports.getAllLoadingStates = getAllLoadingStates;
|
|
12
|
+
exports.getLoadingState = getLoadingState;
|
|
13
|
+
exports.markAsLoaded = markAsLoaded;
|
|
14
|
+
exports.markAsUnloaded = markAsUnloaded;
|
|
15
|
+
exports.isRepoLoaded = isRepoLoaded;
|
|
16
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
17
|
+
const paths_js_1 = require("./paths.js");
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// 加载状态管理类
|
|
20
|
+
// ============================================================================
|
|
21
|
+
/**
|
|
22
|
+
* 加载状态管理器
|
|
23
|
+
* 提供对仓库加载状态的 CRUD 操作
|
|
24
|
+
*/
|
|
25
|
+
class LoadingStateManager {
|
|
26
|
+
constructor() {
|
|
27
|
+
this.cache = null;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 读取加载状态文件
|
|
31
|
+
* @returns 加载状态索引
|
|
32
|
+
*/
|
|
33
|
+
async read() {
|
|
34
|
+
// 如果有缓存,直接返回
|
|
35
|
+
if (this.cache !== null) {
|
|
36
|
+
return this.cache;
|
|
37
|
+
}
|
|
38
|
+
const filePath = (0, paths_js_1.getLoadingStatePath)();
|
|
39
|
+
try {
|
|
40
|
+
const content = await fs_extra_1.default.readFile(filePath, "utf-8");
|
|
41
|
+
const parsed = JSON.parse(content);
|
|
42
|
+
// 验证数据格式,确保 loadedRepos 字段存在
|
|
43
|
+
// 兼容旧格式文件(可能包含 version 和 entries 而不是 loadedRepos)
|
|
44
|
+
if (!parsed.loadedRepos || typeof parsed.loadedRepos !== "object") {
|
|
45
|
+
this.cache = { loadedRepos: {} };
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
this.cache = parsed;
|
|
49
|
+
}
|
|
50
|
+
return this.cache;
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
// 文件不存在或解析失败,返回空结构
|
|
54
|
+
this.cache = { loadedRepos: {} };
|
|
55
|
+
return this.cache;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 写入加载状态文件
|
|
60
|
+
* @param data 加载状态索引
|
|
61
|
+
*/
|
|
62
|
+
async write(data) {
|
|
63
|
+
await (0, paths_js_1.ensureGrfDirs)();
|
|
64
|
+
const filePath = (0, paths_js_1.getLoadingStatePath)();
|
|
65
|
+
await fs_extra_1.default.writeFile(filePath, JSON.stringify(data, null, 2), "utf-8");
|
|
66
|
+
this.cache = data;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* 获取所有加载状态
|
|
70
|
+
* @returns 所有仓库的加载状态记录
|
|
71
|
+
*/
|
|
72
|
+
async getAll() {
|
|
73
|
+
const data = await this.read();
|
|
74
|
+
return data.loadedRepos;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 获取单个仓库的加载状态
|
|
78
|
+
* @param repoName 仓库名称
|
|
79
|
+
* @returns 仓库的加载状态,如果不存在则返回 undefined
|
|
80
|
+
*/
|
|
81
|
+
async get(repoName) {
|
|
82
|
+
const data = await this.read();
|
|
83
|
+
return data.loadedRepos[repoName];
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* 设置仓库的加载状态
|
|
87
|
+
* @param repoName 仓库名称
|
|
88
|
+
* @param state 加载状态
|
|
89
|
+
*/
|
|
90
|
+
async set(repoName, state) {
|
|
91
|
+
const data = await this.read();
|
|
92
|
+
data.loadedRepos[repoName] = state;
|
|
93
|
+
await this.write(data);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 移除仓库的加载状态
|
|
97
|
+
* @param repoName 仓库名称
|
|
98
|
+
* @returns 是否成功移除(如果仓库不存在则返回 false)
|
|
99
|
+
*/
|
|
100
|
+
async remove(repoName) {
|
|
101
|
+
const data = await this.read();
|
|
102
|
+
if (!(repoName in data.loadedRepos)) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
delete data.loadedRepos[repoName];
|
|
106
|
+
await this.write(data);
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* 检查仓库是否已加载
|
|
111
|
+
* @param repoName 仓库名称
|
|
112
|
+
* @returns 是否已加载
|
|
113
|
+
*/
|
|
114
|
+
async isLoaded(repoName) {
|
|
115
|
+
const data = await this.read();
|
|
116
|
+
return repoName in data.loadedRepos;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* 获取已加载的仓库数量
|
|
120
|
+
* @returns 已加载的仓库数量
|
|
121
|
+
*/
|
|
122
|
+
async count() {
|
|
123
|
+
const data = await this.read();
|
|
124
|
+
return Object.keys(data.loadedRepos).length;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* 获取所有已加载的仓库名称
|
|
128
|
+
* @returns 已加载的仓库名称列表
|
|
129
|
+
*/
|
|
130
|
+
async names() {
|
|
131
|
+
const data = await this.read();
|
|
132
|
+
return Object.keys(data.loadedRepos);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* 清空所有加载状态
|
|
136
|
+
*/
|
|
137
|
+
async clear() {
|
|
138
|
+
await this.write({ loadedRepos: {} });
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* 批量设置加载状态(用于迁移)
|
|
142
|
+
* @param states 加载状态记录
|
|
143
|
+
*/
|
|
144
|
+
async setAll(states) {
|
|
145
|
+
await this.write({ loadedRepos: states });
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* 清除缓存
|
|
149
|
+
*/
|
|
150
|
+
clearCache() {
|
|
151
|
+
this.cache = null;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
exports.LoadingStateManager = LoadingStateManager;
|
|
155
|
+
// ============================================================================
|
|
156
|
+
// 单例实例
|
|
157
|
+
// ============================================================================
|
|
158
|
+
/**
|
|
159
|
+
* 加载状态管理器单例实例
|
|
160
|
+
*/
|
|
161
|
+
exports.loadingState = new LoadingStateManager();
|
|
162
|
+
// ============================================================================
|
|
163
|
+
// 便捷函数
|
|
164
|
+
// ============================================================================
|
|
165
|
+
/**
|
|
166
|
+
* 获取所有加载状态
|
|
167
|
+
* @returns 所有仓库的加载状态记录
|
|
168
|
+
*/
|
|
169
|
+
async function getAllLoadingStates() {
|
|
170
|
+
return exports.loadingState.getAll();
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* 获取单个仓库的加载状态
|
|
174
|
+
* @param repoName 仓库名称
|
|
175
|
+
* @returns 仓库的加载状态,如果不存在则返回 undefined
|
|
176
|
+
*/
|
|
177
|
+
async function getLoadingState(repoName) {
|
|
178
|
+
return exports.loadingState.get(repoName);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* 标记仓库为已加载
|
|
182
|
+
* @param repoName 仓库名称
|
|
183
|
+
* @param targetPath 加载到的目标路径
|
|
184
|
+
* @param branch 加载的分支(可选)
|
|
185
|
+
*/
|
|
186
|
+
async function markAsLoaded(repoName, targetPath, branch) {
|
|
187
|
+
const state = {
|
|
188
|
+
targetPath,
|
|
189
|
+
loadedAt: new Date().toISOString(),
|
|
190
|
+
};
|
|
191
|
+
if (branch !== undefined) {
|
|
192
|
+
state.branch = branch;
|
|
193
|
+
}
|
|
194
|
+
await exports.loadingState.set(repoName, state);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* 标记仓库为已卸载
|
|
198
|
+
* @param repoName 仓库名称
|
|
199
|
+
* @returns 是否成功移除(如果仓库不存在则返回 false)
|
|
200
|
+
*/
|
|
201
|
+
async function markAsUnloaded(repoName) {
|
|
202
|
+
return exports.loadingState.remove(repoName);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* 检查仓库是否已加载
|
|
206
|
+
* @param repoName 仓库名称
|
|
207
|
+
* @returns 是否已加载
|
|
208
|
+
*/
|
|
209
|
+
async function isRepoLoaded(repoName) {
|
|
210
|
+
return exports.loadingState.isLoaded(repoName);
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=loading-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loading-state.js","sourceRoot":"","sources":["../../src/core/loading-state.ts"],"names":[],"mappings":"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"}
|
package/dist/core/loading.d.ts
CHANGED
|
@@ -1,85 +1,80 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* loading.json
|
|
2
|
+
* loading.json 管理模块(兼容层)
|
|
3
3
|
* 用于追踪已加载的参考代码仓库
|
|
4
|
+
*
|
|
5
|
+
* 此模块现在作为兼容层,内部使用 loading-state.ts 模块
|
|
6
|
+
* 保持原有 API 不变,确保向后兼容
|
|
4
7
|
*/
|
|
5
8
|
import type { LoadingEntry, LoadingConfig } from "../types/index.js";
|
|
6
9
|
/**
|
|
7
10
|
* 获取 loading.json 文件路径
|
|
8
|
-
* @
|
|
9
|
-
* @returns loading.json 的绝对路径
|
|
11
|
+
* @returns loading.json 的绝对路径(位于用户主目录下)
|
|
10
12
|
*/
|
|
11
|
-
export declare function getLoadingFilePath(
|
|
13
|
+
export declare function getLoadingFilePath(): string;
|
|
12
14
|
/**
|
|
13
15
|
* 读取 loading.json 配置
|
|
14
|
-
* @param projectRoot 项目根目录
|
|
15
16
|
* @returns 加载配置,如果文件不存在则返回空配置
|
|
16
17
|
*/
|
|
17
|
-
export declare function readLoadingConfig(
|
|
18
|
+
export declare function readLoadingConfig(): Promise<LoadingConfig>;
|
|
18
19
|
/**
|
|
19
20
|
* 写入 loading.json 配置
|
|
20
21
|
* @param config 加载配置
|
|
21
|
-
* @
|
|
22
|
+
* @deprecated 此函数保留用于兼容,但建议使用 addEntry/removeEntry 等函数
|
|
22
23
|
*/
|
|
23
|
-
export declare function writeLoadingConfig(config: LoadingConfig
|
|
24
|
+
export declare function writeLoadingConfig(config: LoadingConfig): Promise<void>;
|
|
24
25
|
/**
|
|
25
26
|
* 添加加载条目
|
|
26
27
|
* @param entry 加载条目(不含 id 和 loadedAt)
|
|
27
|
-
* @param projectRoot 项目根目录
|
|
28
28
|
* @returns 添加的完整条目
|
|
29
29
|
*/
|
|
30
|
-
export declare function addEntry(entry: Omit<LoadingEntry, "id" | "loadedAt"
|
|
30
|
+
export declare function addEntry(entry: Omit<LoadingEntry, "id" | "loadedAt">): Promise<LoadingEntry>;
|
|
31
31
|
/**
|
|
32
32
|
* 获取所有加载条目
|
|
33
|
-
* @param projectRoot 项目根目录
|
|
34
33
|
* @returns 加载条目列表
|
|
35
34
|
*/
|
|
36
|
-
export declare function getEntries(
|
|
35
|
+
export declare function getEntries(): Promise<LoadingEntry[]>;
|
|
37
36
|
/**
|
|
38
37
|
* 根据 ID 获取加载条目
|
|
39
38
|
* @param id 条目 ID
|
|
40
|
-
* @param projectRoot 项目根目录
|
|
41
39
|
* @returns 加载条目,如果不存在则返回 undefined
|
|
40
|
+
* @deprecated 新模块不支持按 ID 查询,此函数功能受限
|
|
42
41
|
*/
|
|
43
|
-
export declare function getEntryById(id: string
|
|
42
|
+
export declare function getEntryById(id: string): Promise<LoadingEntry | undefined>;
|
|
44
43
|
/**
|
|
45
44
|
* 根据目标路径获取加载条目
|
|
46
45
|
* @param targetPath 目标路径
|
|
47
|
-
* @param projectRoot 项目根目录
|
|
48
46
|
* @returns 加载条目,如果不存在则返回 undefined
|
|
49
47
|
*/
|
|
50
|
-
export declare function getEntryByTargetPath(targetPath: string
|
|
48
|
+
export declare function getEntryByTargetPath(targetPath: string): Promise<LoadingEntry | undefined>;
|
|
51
49
|
/**
|
|
52
50
|
* 根据仓库名称获取加载条目
|
|
53
51
|
* @param repoName 仓库名称
|
|
54
|
-
* @param projectRoot 项目根目录
|
|
55
52
|
* @returns 匹配的加载条目列表
|
|
56
53
|
*/
|
|
57
|
-
export declare function getEntriesByRepoName(repoName: string
|
|
54
|
+
export declare function getEntriesByRepoName(repoName: string): Promise<LoadingEntry[]>;
|
|
58
55
|
/**
|
|
59
56
|
* 删除加载条目
|
|
60
57
|
* @param id 条目 ID
|
|
61
|
-
* @param projectRoot 项目根目录
|
|
62
58
|
* @returns 是否成功删除
|
|
59
|
+
* @deprecated 新模块不支持按 ID 删除,此函数功能受限
|
|
63
60
|
*/
|
|
64
|
-
export declare function removeEntry(id: string
|
|
61
|
+
export declare function removeEntry(id: string): Promise<boolean>;
|
|
65
62
|
/**
|
|
66
63
|
* 根据目标路径删除加载条目
|
|
67
64
|
* @param targetPath 目标路径
|
|
68
|
-
* @param projectRoot 项目根目录
|
|
69
65
|
* @returns 被删除的条目,如果不存在则返回 undefined
|
|
70
66
|
*/
|
|
71
|
-
export declare function removeEntryByTargetPath(targetPath: string
|
|
67
|
+
export declare function removeEntryByTargetPath(targetPath: string): Promise<LoadingEntry | undefined>;
|
|
72
68
|
/**
|
|
73
69
|
* 清空所有加载条目
|
|
74
|
-
* @param projectRoot 项目根目录
|
|
75
70
|
*/
|
|
76
|
-
export declare function clearAllEntries(
|
|
71
|
+
export declare function clearAllEntries(): Promise<void>;
|
|
77
72
|
/**
|
|
78
73
|
* 更新加载条目
|
|
79
74
|
* @param id 条目 ID
|
|
80
75
|
* @param updates 要更新的字段
|
|
81
|
-
* @param projectRoot 项目根目录
|
|
82
76
|
* @returns 更新后的条目,如果不存在则返回 undefined
|
|
77
|
+
* @deprecated 新模块不支持按 ID 更新,此函数功能受限
|
|
83
78
|
*/
|
|
84
|
-
export declare function updateEntry(id: string, updates: Partial<Omit<LoadingEntry, "id" | "loadedAt"
|
|
79
|
+
export declare function updateEntry(id: string, updates: Partial<Omit<LoadingEntry, "id" | "loadedAt">>): Promise<LoadingEntry | undefined>;
|
|
85
80
|
//# sourceMappingURL=loading.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loading.d.ts","sourceRoot":"","sources":["../../src/core/loading.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"loading.d.ts","sourceRoot":"","sources":["../../src/core/loading.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AA2CrE;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAG3C;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,aAAa,CAAC,CAahE;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAW7E;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,UAAU,CAAC,GAC3C,OAAO,CAAC,YAAY,CAAC,CAcvB;AAED;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAG1D;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAInC;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAYnC;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,EAAE,CAAC,CAYzB;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAW9D;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAcnC;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAGrD;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,UAAU,CAAC,CAAC,GACtD,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CA4BnC"}
|
package/dist/core/loading.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* loading.json
|
|
3
|
+
* loading.json 管理模块(兼容层)
|
|
4
4
|
* 用于追踪已加载的参考代码仓库
|
|
5
|
+
*
|
|
6
|
+
* 此模块现在作为兼容层,内部使用 loading-state.ts 模块
|
|
7
|
+
* 保持原有 API 不变,确保向后兼容
|
|
5
8
|
*/
|
|
6
9
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
10
|
if (k2 === undefined) k2 = k;
|
|
@@ -49,176 +52,210 @@ exports.removeEntry = removeEntry;
|
|
|
49
52
|
exports.removeEntryByTargetPath = removeEntryByTargetPath;
|
|
50
53
|
exports.clearAllEntries = clearAllEntries;
|
|
51
54
|
exports.updateEntry = updateEntry;
|
|
52
|
-
const fs = __importStar(require("fs/promises"));
|
|
53
55
|
const path = __importStar(require("path"));
|
|
54
56
|
const crypto_1 = require("crypto");
|
|
55
|
-
|
|
56
|
-
const
|
|
57
|
-
/** .gitreference 目录名 */
|
|
58
|
-
const GITREFERENCE_DIR = ".gitreference";
|
|
57
|
+
const paths_js_1 = require("./paths.js");
|
|
58
|
+
const loading_state_js_1 = require("./loading-state.js");
|
|
59
59
|
/** 当前配置版本 */
|
|
60
60
|
const CONFIG_VERSION = "1.0.0";
|
|
61
|
+
/**
|
|
62
|
+
* 内部缓存:存储完整的 LoadingEntry 数据
|
|
63
|
+
* 由于新的 loading-state.ts 只存储简化的状态,
|
|
64
|
+
* 我们需要在内存中维护完整的条目信息
|
|
65
|
+
*/
|
|
66
|
+
let entriesCache = null;
|
|
67
|
+
/**
|
|
68
|
+
* 从 RepoLoadingState 和仓库名称构建 LoadingEntry
|
|
69
|
+
* @param repoName 仓库名称
|
|
70
|
+
* @param state 加载状态
|
|
71
|
+
* @returns LoadingEntry 对象
|
|
72
|
+
*/
|
|
73
|
+
function buildEntryFromState(repoName, state) {
|
|
74
|
+
return {
|
|
75
|
+
id: (0, crypto_1.randomUUID)(), // 每次构建时生成新 ID(兼容层限制)
|
|
76
|
+
repoName,
|
|
77
|
+
repoUrl: "", // 新模块不存储此信息
|
|
78
|
+
commitId: "", // 新模块不存储此信息
|
|
79
|
+
branch: state.branch,
|
|
80
|
+
targetPath: state.targetPath,
|
|
81
|
+
loadedAt: state.loadedAt,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
61
84
|
/**
|
|
62
85
|
* 获取 loading.json 文件路径
|
|
63
|
-
* @
|
|
64
|
-
* @returns loading.json 的绝对路径
|
|
86
|
+
* @returns loading.json 的绝对路径(位于用户主目录下)
|
|
65
87
|
*/
|
|
66
|
-
function getLoadingFilePath(
|
|
67
|
-
|
|
88
|
+
function getLoadingFilePath() {
|
|
89
|
+
// 使用新的路径管理模块
|
|
90
|
+
return (0, paths_js_1.getLoadingStatePath)();
|
|
68
91
|
}
|
|
69
92
|
/**
|
|
70
93
|
* 读取 loading.json 配置
|
|
71
|
-
* @param projectRoot 项目根目录
|
|
72
94
|
* @returns 加载配置,如果文件不存在则返回空配置
|
|
73
95
|
*/
|
|
74
|
-
async function readLoadingConfig(
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
version: CONFIG_VERSION,
|
|
84
|
-
entries: [],
|
|
85
|
-
};
|
|
86
|
-
}
|
|
96
|
+
async function readLoadingConfig() {
|
|
97
|
+
// 从新模块获取所有加载状态
|
|
98
|
+
const states = await (0, loading_state_js_1.getAllLoadingStates)();
|
|
99
|
+
// 转换为 LoadingEntry 格式
|
|
100
|
+
const entries = Object.entries(states).map(([repoName, state]) => buildEntryFromState(repoName, state));
|
|
101
|
+
return {
|
|
102
|
+
version: CONFIG_VERSION,
|
|
103
|
+
entries,
|
|
104
|
+
};
|
|
87
105
|
}
|
|
88
106
|
/**
|
|
89
107
|
* 写入 loading.json 配置
|
|
90
108
|
* @param config 加载配置
|
|
91
|
-
* @
|
|
109
|
+
* @deprecated 此函数保留用于兼容,但建议使用 addEntry/removeEntry 等函数
|
|
92
110
|
*/
|
|
93
|
-
async function writeLoadingConfig(config
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
//
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
111
|
+
async function writeLoadingConfig(config) {
|
|
112
|
+
// 清空现有状态
|
|
113
|
+
await loading_state_js_1.loadingState.clear();
|
|
114
|
+
// 逐个添加条目
|
|
115
|
+
for (const entry of config.entries) {
|
|
116
|
+
await (0, loading_state_js_1.markAsLoaded)(entry.repoName, entry.targetPath, entry.branch);
|
|
117
|
+
}
|
|
118
|
+
// 更新缓存
|
|
119
|
+
entriesCache = config.entries;
|
|
100
120
|
}
|
|
101
121
|
/**
|
|
102
122
|
* 添加加载条目
|
|
103
123
|
* @param entry 加载条目(不含 id 和 loadedAt)
|
|
104
|
-
* @param projectRoot 项目根目录
|
|
105
124
|
* @returns 添加的完整条目
|
|
106
125
|
*/
|
|
107
|
-
async function addEntry(entry
|
|
108
|
-
const
|
|
126
|
+
async function addEntry(entry) {
|
|
127
|
+
const loadedAt = new Date().toISOString();
|
|
128
|
+
// 使用新模块标记为已加载
|
|
129
|
+
await (0, loading_state_js_1.markAsLoaded)(entry.repoName, entry.targetPath, entry.branch);
|
|
130
|
+
// 构建完整的条目
|
|
109
131
|
const newEntry = {
|
|
110
132
|
...entry,
|
|
111
133
|
id: (0, crypto_1.randomUUID)(),
|
|
112
|
-
loadedAt
|
|
134
|
+
loadedAt,
|
|
113
135
|
};
|
|
114
|
-
config.entries.push(newEntry);
|
|
115
|
-
await writeLoadingConfig(config, projectRoot);
|
|
116
136
|
return newEntry;
|
|
117
137
|
}
|
|
118
138
|
/**
|
|
119
139
|
* 获取所有加载条目
|
|
120
|
-
* @param projectRoot 项目根目录
|
|
121
140
|
* @returns 加载条目列表
|
|
122
141
|
*/
|
|
123
|
-
async function getEntries(
|
|
124
|
-
const config = await readLoadingConfig(
|
|
142
|
+
async function getEntries() {
|
|
143
|
+
const config = await readLoadingConfig();
|
|
125
144
|
return config.entries;
|
|
126
145
|
}
|
|
127
146
|
/**
|
|
128
147
|
* 根据 ID 获取加载条目
|
|
129
148
|
* @param id 条目 ID
|
|
130
|
-
* @param projectRoot 项目根目录
|
|
131
149
|
* @returns 加载条目,如果不存在则返回 undefined
|
|
150
|
+
* @deprecated 新模块不支持按 ID 查询,此函数功能受限
|
|
132
151
|
*/
|
|
133
|
-
async function getEntryById(id
|
|
134
|
-
|
|
135
|
-
|
|
152
|
+
async function getEntryById(id) {
|
|
153
|
+
// 新模块不支持按 ID 查询,遍历所有条目
|
|
154
|
+
const entries = await getEntries();
|
|
155
|
+
return entries.find((entry) => entry.id === id);
|
|
136
156
|
}
|
|
137
157
|
/**
|
|
138
158
|
* 根据目标路径获取加载条目
|
|
139
159
|
* @param targetPath 目标路径
|
|
140
|
-
* @param projectRoot 项目根目录
|
|
141
160
|
* @returns 加载条目,如果不存在则返回 undefined
|
|
142
161
|
*/
|
|
143
|
-
async function getEntryByTargetPath(targetPath
|
|
144
|
-
const
|
|
145
|
-
// 标准化路径进行比较
|
|
162
|
+
async function getEntryByTargetPath(targetPath) {
|
|
163
|
+
const states = await (0, loading_state_js_1.getAllLoadingStates)();
|
|
146
164
|
const normalizedTarget = path.normalize(targetPath);
|
|
147
|
-
|
|
165
|
+
// 查找匹配的条目
|
|
166
|
+
for (const [repoName, state] of Object.entries(states)) {
|
|
167
|
+
if (path.normalize(state.targetPath) === normalizedTarget) {
|
|
168
|
+
return buildEntryFromState(repoName, state);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return undefined;
|
|
148
172
|
}
|
|
149
173
|
/**
|
|
150
174
|
* 根据仓库名称获取加载条目
|
|
151
175
|
* @param repoName 仓库名称
|
|
152
|
-
* @param projectRoot 项目根目录
|
|
153
176
|
* @returns 匹配的加载条目列表
|
|
154
177
|
*/
|
|
155
|
-
async function getEntriesByRepoName(repoName
|
|
156
|
-
const
|
|
157
|
-
|
|
178
|
+
async function getEntriesByRepoName(repoName) {
|
|
179
|
+
const states = await (0, loading_state_js_1.getAllLoadingStates)();
|
|
180
|
+
const results = [];
|
|
181
|
+
// 查找包含指定名称的仓库
|
|
182
|
+
for (const [name, state] of Object.entries(states)) {
|
|
183
|
+
if (name.includes(repoName)) {
|
|
184
|
+
results.push(buildEntryFromState(name, state));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return results;
|
|
158
188
|
}
|
|
159
189
|
/**
|
|
160
190
|
* 删除加载条目
|
|
161
191
|
* @param id 条目 ID
|
|
162
|
-
* @param projectRoot 项目根目录
|
|
163
192
|
* @returns 是否成功删除
|
|
193
|
+
* @deprecated 新模块不支持按 ID 删除,此函数功能受限
|
|
164
194
|
*/
|
|
165
|
-
async function removeEntry(id
|
|
166
|
-
|
|
167
|
-
const
|
|
168
|
-
|
|
195
|
+
async function removeEntry(id) {
|
|
196
|
+
// 新模块不支持按 ID 删除,需要先找到对应的仓库名称
|
|
197
|
+
const entries = await getEntries();
|
|
198
|
+
const entry = entries.find((e) => e.id === id);
|
|
199
|
+
if (!entry) {
|
|
169
200
|
return false;
|
|
170
201
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
return true;
|
|
202
|
+
// 使用仓库名称删除
|
|
203
|
+
return (0, loading_state_js_1.markAsUnloaded)(entry.repoName);
|
|
174
204
|
}
|
|
175
205
|
/**
|
|
176
206
|
* 根据目标路径删除加载条目
|
|
177
207
|
* @param targetPath 目标路径
|
|
178
|
-
* @param projectRoot 项目根目录
|
|
179
208
|
* @returns 被删除的条目,如果不存在则返回 undefined
|
|
180
209
|
*/
|
|
181
|
-
async function removeEntryByTargetPath(targetPath
|
|
182
|
-
const
|
|
210
|
+
async function removeEntryByTargetPath(targetPath) {
|
|
211
|
+
const states = await (0, loading_state_js_1.getAllLoadingStates)();
|
|
183
212
|
const normalizedTarget = path.normalize(targetPath);
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
213
|
+
// 查找匹配的条目
|
|
214
|
+
for (const [repoName, state] of Object.entries(states)) {
|
|
215
|
+
if (path.normalize(state.targetPath) === normalizedTarget) {
|
|
216
|
+
const entry = buildEntryFromState(repoName, state);
|
|
217
|
+
await (0, loading_state_js_1.markAsUnloaded)(repoName);
|
|
218
|
+
return entry;
|
|
219
|
+
}
|
|
187
220
|
}
|
|
188
|
-
|
|
189
|
-
await writeLoadingConfig(config, projectRoot);
|
|
190
|
-
return removed;
|
|
221
|
+
return undefined;
|
|
191
222
|
}
|
|
192
223
|
/**
|
|
193
224
|
* 清空所有加载条目
|
|
194
|
-
* @param projectRoot 项目根目录
|
|
195
225
|
*/
|
|
196
|
-
async function clearAllEntries(
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
entries: [],
|
|
200
|
-
};
|
|
201
|
-
await writeLoadingConfig(config, projectRoot);
|
|
226
|
+
async function clearAllEntries() {
|
|
227
|
+
await loading_state_js_1.loadingState.clear();
|
|
228
|
+
entriesCache = null;
|
|
202
229
|
}
|
|
203
230
|
/**
|
|
204
231
|
* 更新加载条目
|
|
205
232
|
* @param id 条目 ID
|
|
206
233
|
* @param updates 要更新的字段
|
|
207
|
-
* @param projectRoot 项目根目录
|
|
208
234
|
* @returns 更新后的条目,如果不存在则返回 undefined
|
|
235
|
+
* @deprecated 新模块不支持按 ID 更新,此函数功能受限
|
|
209
236
|
*/
|
|
210
|
-
async function updateEntry(id, updates
|
|
211
|
-
|
|
212
|
-
const
|
|
213
|
-
|
|
237
|
+
async function updateEntry(id, updates) {
|
|
238
|
+
// 新模块不支持按 ID 更新,需要先找到对应的仓库名称
|
|
239
|
+
const entries = await getEntries();
|
|
240
|
+
const entry = entries.find((e) => e.id === id);
|
|
241
|
+
if (!entry) {
|
|
214
242
|
return undefined;
|
|
215
243
|
}
|
|
216
|
-
|
|
217
|
-
|
|
244
|
+
// 更新加载状态
|
|
245
|
+
const newRepoName = updates.repoName ?? entry.repoName;
|
|
246
|
+
const newTargetPath = updates.targetPath ?? entry.targetPath;
|
|
247
|
+
const newBranch = updates.branch ?? entry.branch;
|
|
248
|
+
// 如果仓库名称变了,需要先删除旧的
|
|
249
|
+
if (updates.repoName && updates.repoName !== entry.repoName) {
|
|
250
|
+
await (0, loading_state_js_1.markAsUnloaded)(entry.repoName);
|
|
251
|
+
}
|
|
252
|
+
// 设置新的状态
|
|
253
|
+
await (0, loading_state_js_1.markAsLoaded)(newRepoName, newTargetPath, newBranch);
|
|
254
|
+
// 返回更新后的条目
|
|
255
|
+
return {
|
|
256
|
+
...entry,
|
|
218
257
|
...updates,
|
|
219
258
|
updatedAt: new Date().toISOString(),
|
|
220
259
|
};
|
|
221
|
-
await writeLoadingConfig(config, projectRoot);
|
|
222
|
-
return config.entries[index];
|
|
223
260
|
}
|
|
224
261
|
//# sourceMappingURL=loading.js.map
|