grf-cli 1.0.0

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 (68) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +503 -0
  3. package/README.zh-CN.md +503 -0
  4. package/dist/cli.d.ts +3 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +74 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/add.d.ts +7 -0
  9. package/dist/commands/add.d.ts.map +1 -0
  10. package/dist/commands/add.js +92 -0
  11. package/dist/commands/add.js.map +1 -0
  12. package/dist/commands/clean.d.ts +7 -0
  13. package/dist/commands/clean.d.ts.map +1 -0
  14. package/dist/commands/clean.js +171 -0
  15. package/dist/commands/clean.js.map +1 -0
  16. package/dist/commands/config.d.ts +7 -0
  17. package/dist/commands/config.d.ts.map +1 -0
  18. package/dist/commands/config.js +170 -0
  19. package/dist/commands/config.js.map +1 -0
  20. package/dist/commands/list.d.ts +7 -0
  21. package/dist/commands/list.d.ts.map +1 -0
  22. package/dist/commands/list.js +149 -0
  23. package/dist/commands/list.js.map +1 -0
  24. package/dist/commands/load.d.ts +8 -0
  25. package/dist/commands/load.d.ts.map +1 -0
  26. package/dist/commands/load.js +239 -0
  27. package/dist/commands/load.js.map +1 -0
  28. package/dist/commands/unload.d.ts +7 -0
  29. package/dist/commands/unload.d.ts.map +1 -0
  30. package/dist/commands/unload.js +738 -0
  31. package/dist/commands/unload.js.map +1 -0
  32. package/dist/commands/update.d.ts +7 -0
  33. package/dist/commands/update.d.ts.map +1 -0
  34. package/dist/commands/update.js +471 -0
  35. package/dist/commands/update.js.map +1 -0
  36. package/dist/commands/use.d.ts +8 -0
  37. package/dist/commands/use.d.ts.map +1 -0
  38. package/dist/commands/use.js +224 -0
  39. package/dist/commands/use.js.map +1 -0
  40. package/dist/core/config.d.ts +55 -0
  41. package/dist/core/config.d.ts.map +1 -0
  42. package/dist/core/config.js +179 -0
  43. package/dist/core/config.js.map +1 -0
  44. package/dist/core/filesystem.d.ts +74 -0
  45. package/dist/core/filesystem.d.ts.map +1 -0
  46. package/dist/core/filesystem.js +300 -0
  47. package/dist/core/filesystem.js.map +1 -0
  48. package/dist/core/git.d.ts +75 -0
  49. package/dist/core/git.d.ts.map +1 -0
  50. package/dist/core/git.js +169 -0
  51. package/dist/core/git.js.map +1 -0
  52. package/dist/core/loading.d.ts +85 -0
  53. package/dist/core/loading.d.ts.map +1 -0
  54. package/dist/core/loading.js +224 -0
  55. package/dist/core/loading.js.map +1 -0
  56. package/dist/core/repository.d.ts +120 -0
  57. package/dist/core/repository.d.ts.map +1 -0
  58. package/dist/core/repository.js +374 -0
  59. package/dist/core/repository.js.map +1 -0
  60. package/dist/core/sync.d.ts +72 -0
  61. package/dist/core/sync.d.ts.map +1 -0
  62. package/dist/core/sync.js +226 -0
  63. package/dist/core/sync.js.map +1 -0
  64. package/dist/types/index.d.ts +135 -0
  65. package/dist/types/index.d.ts.map +1 -0
  66. package/dist/types/index.js +63 -0
  67. package/dist/types/index.js.map +1 -0
  68. package/package.json +59 -0
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ /**
3
+ * loading.json 管理模块
4
+ * 用于追踪已加载的参考代码仓库
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.getLoadingFilePath = getLoadingFilePath;
41
+ exports.readLoadingConfig = readLoadingConfig;
42
+ exports.writeLoadingConfig = writeLoadingConfig;
43
+ exports.addEntry = addEntry;
44
+ exports.getEntries = getEntries;
45
+ exports.getEntryById = getEntryById;
46
+ exports.getEntryByTargetPath = getEntryByTargetPath;
47
+ exports.getEntriesByRepoName = getEntriesByRepoName;
48
+ exports.removeEntry = removeEntry;
49
+ exports.removeEntryByTargetPath = removeEntryByTargetPath;
50
+ exports.clearAllEntries = clearAllEntries;
51
+ exports.updateEntry = updateEntry;
52
+ const fs = __importStar(require("fs/promises"));
53
+ const path = __importStar(require("path"));
54
+ const crypto_1 = require("crypto");
55
+ /** loading.json 文件名 */
56
+ const LOADING_FILE_NAME = "loading.json";
57
+ /** .gitreference 目录名 */
58
+ const GITREFERENCE_DIR = ".gitreference";
59
+ /** 当前配置版本 */
60
+ const CONFIG_VERSION = "1.0.0";
61
+ /**
62
+ * 获取 loading.json 文件路径
63
+ * @param projectRoot 项目根目录,默认为当前工作目录
64
+ * @returns loading.json 的绝对路径
65
+ */
66
+ function getLoadingFilePath(projectRoot = process.cwd()) {
67
+ return path.join(projectRoot, GITREFERENCE_DIR, LOADING_FILE_NAME);
68
+ }
69
+ /**
70
+ * 读取 loading.json 配置
71
+ * @param projectRoot 项目根目录
72
+ * @returns 加载配置,如果文件不存在则返回空配置
73
+ */
74
+ async function readLoadingConfig(projectRoot = process.cwd()) {
75
+ const filePath = getLoadingFilePath(projectRoot);
76
+ try {
77
+ const content = await fs.readFile(filePath, "utf-8");
78
+ return JSON.parse(content);
79
+ }
80
+ catch (error) {
81
+ // 文件不存在或解析失败,返回空配置
82
+ return {
83
+ version: CONFIG_VERSION,
84
+ entries: [],
85
+ };
86
+ }
87
+ }
88
+ /**
89
+ * 写入 loading.json 配置
90
+ * @param config 加载配置
91
+ * @param projectRoot 项目根目录
92
+ */
93
+ async function writeLoadingConfig(config, projectRoot = process.cwd()) {
94
+ const filePath = getLoadingFilePath(projectRoot);
95
+ const dirPath = path.dirname(filePath);
96
+ // 确保目录存在
97
+ await fs.mkdir(dirPath, { recursive: true });
98
+ // 写入文件
99
+ await fs.writeFile(filePath, JSON.stringify(config, null, 2), "utf-8");
100
+ }
101
+ /**
102
+ * 添加加载条目
103
+ * @param entry 加载条目(不含 id 和 loadedAt)
104
+ * @param projectRoot 项目根目录
105
+ * @returns 添加的完整条目
106
+ */
107
+ async function addEntry(entry, projectRoot = process.cwd()) {
108
+ const config = await readLoadingConfig(projectRoot);
109
+ const newEntry = {
110
+ ...entry,
111
+ id: (0, crypto_1.randomUUID)(),
112
+ loadedAt: new Date().toISOString(),
113
+ };
114
+ config.entries.push(newEntry);
115
+ await writeLoadingConfig(config, projectRoot);
116
+ return newEntry;
117
+ }
118
+ /**
119
+ * 获取所有加载条目
120
+ * @param projectRoot 项目根目录
121
+ * @returns 加载条目列表
122
+ */
123
+ async function getEntries(projectRoot = process.cwd()) {
124
+ const config = await readLoadingConfig(projectRoot);
125
+ return config.entries;
126
+ }
127
+ /**
128
+ * 根据 ID 获取加载条目
129
+ * @param id 条目 ID
130
+ * @param projectRoot 项目根目录
131
+ * @returns 加载条目,如果不存在则返回 undefined
132
+ */
133
+ async function getEntryById(id, projectRoot = process.cwd()) {
134
+ const config = await readLoadingConfig(projectRoot);
135
+ return config.entries.find((entry) => entry.id === id);
136
+ }
137
+ /**
138
+ * 根据目标路径获取加载条目
139
+ * @param targetPath 目标路径
140
+ * @param projectRoot 项目根目录
141
+ * @returns 加载条目,如果不存在则返回 undefined
142
+ */
143
+ async function getEntryByTargetPath(targetPath, projectRoot = process.cwd()) {
144
+ const config = await readLoadingConfig(projectRoot);
145
+ // 标准化路径进行比较
146
+ const normalizedTarget = path.normalize(targetPath);
147
+ return config.entries.find((entry) => path.normalize(entry.targetPath) === normalizedTarget);
148
+ }
149
+ /**
150
+ * 根据仓库名称获取加载条目
151
+ * @param repoName 仓库名称
152
+ * @param projectRoot 项目根目录
153
+ * @returns 匹配的加载条目列表
154
+ */
155
+ async function getEntriesByRepoName(repoName, projectRoot = process.cwd()) {
156
+ const config = await readLoadingConfig(projectRoot);
157
+ return config.entries.filter((entry) => entry.repoName.includes(repoName));
158
+ }
159
+ /**
160
+ * 删除加载条目
161
+ * @param id 条目 ID
162
+ * @param projectRoot 项目根目录
163
+ * @returns 是否成功删除
164
+ */
165
+ async function removeEntry(id, projectRoot = process.cwd()) {
166
+ const config = await readLoadingConfig(projectRoot);
167
+ const index = config.entries.findIndex((entry) => entry.id === id);
168
+ if (index === -1) {
169
+ return false;
170
+ }
171
+ config.entries.splice(index, 1);
172
+ await writeLoadingConfig(config, projectRoot);
173
+ return true;
174
+ }
175
+ /**
176
+ * 根据目标路径删除加载条目
177
+ * @param targetPath 目标路径
178
+ * @param projectRoot 项目根目录
179
+ * @returns 被删除的条目,如果不存在则返回 undefined
180
+ */
181
+ async function removeEntryByTargetPath(targetPath, projectRoot = process.cwd()) {
182
+ const config = await readLoadingConfig(projectRoot);
183
+ const normalizedTarget = path.normalize(targetPath);
184
+ const index = config.entries.findIndex((entry) => path.normalize(entry.targetPath) === normalizedTarget);
185
+ if (index === -1) {
186
+ return undefined;
187
+ }
188
+ const [removed] = config.entries.splice(index, 1);
189
+ await writeLoadingConfig(config, projectRoot);
190
+ return removed;
191
+ }
192
+ /**
193
+ * 清空所有加载条目
194
+ * @param projectRoot 项目根目录
195
+ */
196
+ async function clearAllEntries(projectRoot = process.cwd()) {
197
+ const config = {
198
+ version: CONFIG_VERSION,
199
+ entries: [],
200
+ };
201
+ await writeLoadingConfig(config, projectRoot);
202
+ }
203
+ /**
204
+ * 更新加载条目
205
+ * @param id 条目 ID
206
+ * @param updates 要更新的字段
207
+ * @param projectRoot 项目根目录
208
+ * @returns 更新后的条目,如果不存在则返回 undefined
209
+ */
210
+ async function updateEntry(id, updates, projectRoot = process.cwd()) {
211
+ const config = await readLoadingConfig(projectRoot);
212
+ const index = config.entries.findIndex((entry) => entry.id === id);
213
+ if (index === -1) {
214
+ return undefined;
215
+ }
216
+ config.entries[index] = {
217
+ ...config.entries[index],
218
+ ...updates,
219
+ updatedAt: new Date().toISOString(),
220
+ };
221
+ await writeLoadingConfig(config, projectRoot);
222
+ return config.entries[index];
223
+ }
224
+ //# sourceMappingURL=loading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading.js","sourceRoot":"","sources":["../../src/core/loading.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Repository 模块
3
+ * 负责仓库的增删改查操作,整合配置、Git 和文件系统模块
4
+ */
5
+ /**
6
+ * 添加仓库选项
7
+ */
8
+ export interface AddOptions {
9
+ /** 自定义仓库名称 */
10
+ name?: string;
11
+ /** 指定分支 */
12
+ branch?: string;
13
+ /** 是否浅克隆 */
14
+ shallow?: boolean;
15
+ /** 浅克隆深度 */
16
+ depth?: number;
17
+ }
18
+ /**
19
+ * 仓库信息(用于 list 命令返回)
20
+ */
21
+ export interface RepoInfo {
22
+ /** 仓库名称(如 github.com/user/repo) */
23
+ name: string;
24
+ /** 远程 URL */
25
+ url: string;
26
+ /** 本地路径 */
27
+ path: string;
28
+ /** 当前 commit ID */
29
+ commitId: string;
30
+ /** 分支名 */
31
+ branch?: string;
32
+ /** 添加时间 */
33
+ addedAt: string;
34
+ /** 更新时间 */
35
+ updatedAt: string;
36
+ }
37
+ /**
38
+ * 解析后的仓库 URL 信息
39
+ */
40
+ export interface ParsedRepoUrl {
41
+ /** 主机名(如 github.com) */
42
+ host: string;
43
+ /** 所有者/组织名 */
44
+ owner: string;
45
+ /** 仓库名 */
46
+ repo: string;
47
+ }
48
+ /**
49
+ * 解析 Git URL
50
+ * 支持 HTTPS 和 SSH 格式
51
+ * @param url Git 仓库 URL
52
+ * @returns 解析后的 URL 信息
53
+ * @throws GrfError 如果 URL 格式无效
54
+ *
55
+ * @example
56
+ * // HTTPS 格式
57
+ * parseRepoUrl('https://github.com/facebook/react.git')
58
+ * // -> { host: 'github.com', owner: 'facebook', repo: 'react' }
59
+ *
60
+ * // SSH 格式
61
+ * parseRepoUrl('git@github.com:facebook/react.git')
62
+ * // -> { host: 'github.com', owner: 'facebook', repo: 'react' }
63
+ */
64
+ export declare function parseRepoUrl(url: string): ParsedRepoUrl;
65
+ /**
66
+ * 根据 URL 生成本地存储路径
67
+ * @param url Git 仓库 URL
68
+ * @returns 本地存储路径
69
+ *
70
+ * @example
71
+ * getRepoStoragePath('https://github.com/facebook/react.git')
72
+ * // -> ~/.gitreference/repos/github.com/facebook/react
73
+ */
74
+ export declare function getRepoStoragePath(url: string): string;
75
+ /**
76
+ * 添加仓库
77
+ * @param url Git 仓库 URL
78
+ * @param options 添加选项
79
+ * @returns 仓库信息
80
+ */
81
+ export declare function add(url: string, options?: AddOptions): Promise<RepoInfo>;
82
+ /**
83
+ * 根据名称获取仓库信息
84
+ * @param name 仓库名称(完整路径或简短名称)
85
+ * @returns 仓库信息,不存在返回 null
86
+ */
87
+ export declare function get(name: string): Promise<RepoInfo | null>;
88
+ /**
89
+ * 列出所有仓库
90
+ * @returns 仓库信息数组
91
+ */
92
+ export declare function list(): Promise<RepoInfo[]>;
93
+ /**
94
+ * 删除仓库
95
+ * @param name 仓库名称
96
+ * @throws GrfError 如果仓库不存在
97
+ */
98
+ export declare function remove(name: string): Promise<void>;
99
+ /**
100
+ * 检查仓库是否存在
101
+ * @param name 仓库名称
102
+ * @returns 是否存在
103
+ */
104
+ export declare function exists(name: string): Promise<boolean>;
105
+ /**
106
+ * 将仓库名称解析为本地路径
107
+ * @param name 仓库名称(完整名称或简短名称)
108
+ * @returns 本地路径
109
+ * @throws GrfError 如果仓库不存在
110
+ */
111
+ export declare function resolvePath(name: string): Promise<string>;
112
+ /**
113
+ * 切换仓库分支
114
+ * @param name 仓库名称
115
+ * @param branch 目标分支
116
+ * @returns 更新后的仓库信息
117
+ * @throws GrfError 如果仓库不存在或切换失败
118
+ */
119
+ export declare function switchBranch(name: string, branch: string): Promise<RepoInfo>;
120
+ //# sourceMappingURL=repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/core/repository.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,cAAc;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU;IACV,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU;IACV,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CA8BvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGtD;AAWD;;;;;GAKG;AACH,wBAAsB,GAAG,CACvB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,QAAQ,CAAC,CA+DnB;AA0CD;;;;GAIG;AACH,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAyChE;AAED;;;GAGG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAoBhD;AAED;;;;GAIG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAcxD;AAED;;;;GAIG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAsB3D;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ/D;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,CAAC,CAsCnB"}