long-git-cli 1.0.0 → 1.0.2

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 (48) hide show
  1. package/README.md +63 -45
  2. package/dist/commands/commit.d.ts +5 -0
  3. package/dist/commands/commit.d.ts.map +1 -0
  4. package/dist/commands/commit.js +133 -0
  5. package/dist/commands/commit.js.map +1 -0
  6. package/dist/commands/tag.d.ts +3 -3
  7. package/dist/commands/tag.d.ts.map +1 -1
  8. package/dist/commands/tag.js +76 -276
  9. package/dist/commands/tag.js.map +1 -1
  10. package/dist/constants.d.ts +6 -0
  11. package/dist/constants.d.ts.map +1 -0
  12. package/dist/constants.js +16 -0
  13. package/dist/constants.js.map +1 -0
  14. package/dist/index.js +9 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/types.d.ts +13 -0
  17. package/dist/types.d.ts.map +1 -0
  18. package/dist/types.js +3 -0
  19. package/dist/types.js.map +1 -0
  20. package/dist/utils/error.d.ts +7 -0
  21. package/dist/utils/error.d.ts.map +1 -0
  22. package/dist/utils/error.js +21 -0
  23. package/dist/utils/error.js.map +1 -0
  24. package/dist/utils/git-remote.d.ts +22 -0
  25. package/dist/utils/git-remote.d.ts.map +1 -0
  26. package/dist/utils/git-remote.js +77 -0
  27. package/dist/utils/git-remote.js.map +1 -0
  28. package/dist/utils/git.d.ts +29 -0
  29. package/dist/utils/git.d.ts.map +1 -0
  30. package/dist/utils/git.js +129 -0
  31. package/dist/utils/git.js.map +1 -0
  32. package/dist/utils/loading.d.ts +14 -0
  33. package/dist/utils/loading.d.ts.map +1 -0
  34. package/dist/utils/loading.js +33 -0
  35. package/dist/utils/loading.js.map +1 -0
  36. package/dist/utils/message.d.ts +8 -0
  37. package/dist/utils/message.d.ts.map +1 -0
  38. package/dist/utils/message.js +36 -0
  39. package/dist/utils/message.js.map +1 -0
  40. package/dist/utils/prompt.d.ts +22 -0
  41. package/dist/utils/prompt.d.ts.map +1 -0
  42. package/dist/utils/prompt.js +63 -0
  43. package/dist/utils/prompt.js.map +1 -0
  44. package/dist/utils/tag.d.ts +10 -0
  45. package/dist/utils/tag.d.ts.map +1 -0
  46. package/dist/utils/tag.js +41 -0
  47. package/dist/utils/tag.js.map +1 -0
  48. package/package.json +18 -6
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.REMOTE_TYPES = void 0;
7
+ exports.detectRemoteType = detectRemoteType;
8
+ exports.showRemoteSpecificTips = showRemoteSpecificTips;
9
+ const simple_git_1 = require("simple-git");
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ exports.REMOTE_TYPES = {
12
+ GITHUB: 'github',
13
+ BITBUCKET: 'bitbucket',
14
+ GITLAB: 'gitlab',
15
+ UNKNOWN: 'unknown'
16
+ };
17
+ const git = (0, simple_git_1.simpleGit)();
18
+ /**
19
+ * 检测远程仓库类型(GitHub、Bitbucket、GitLab 等)
20
+ * @returns {Promise<RemoteInfo | null>} 远程仓库信息,如果没有配置远程仓库则返回 null
21
+ */
22
+ async function detectRemoteType() {
23
+ try {
24
+ const remotes = await git.getRemotes(true);
25
+ if (remotes.length === 0) {
26
+ return null;
27
+ }
28
+ const origin = remotes.find(remote => remote.name === 'origin');
29
+ if (!origin) {
30
+ return null;
31
+ }
32
+ const url = origin.refs.push || origin.refs.fetch;
33
+ if (!url) {
34
+ return null;
35
+ }
36
+ let type = exports.REMOTE_TYPES.UNKNOWN;
37
+ if (url.includes('github.com')) {
38
+ type = exports.REMOTE_TYPES.GITHUB;
39
+ }
40
+ else if (url.includes('bitbucket.org') || url.includes('bitbucket.com')) {
41
+ type = exports.REMOTE_TYPES.BITBUCKET;
42
+ }
43
+ else if (url.includes('gitlab.com')) {
44
+ type = exports.REMOTE_TYPES.GITLAB;
45
+ }
46
+ return {
47
+ name: origin.name,
48
+ url,
49
+ type
50
+ };
51
+ }
52
+ catch (error) {
53
+ console.log(chalk_1.default.yellow('⚠️ 无法检测远程仓库类型'));
54
+ return null;
55
+ }
56
+ }
57
+ /**
58
+ * 根据远程仓库类型显示特定的提示信息
59
+ * @param {RemoteInfo['type']} remoteType - 远程仓库类型
60
+ */
61
+ function showRemoteSpecificTips(remoteType) {
62
+ switch (remoteType) {
63
+ case exports.REMOTE_TYPES.BITBUCKET:
64
+ console.log(chalk_1.default.blue('🔗 你可以在 Bitbucket 上查看新创建的内容'));
65
+ console.log(chalk_1.default.blue('💡 提示:在 Bitbucket 中,你可以在 "Tags" 或 "Commits" 页面查看'));
66
+ break;
67
+ case exports.REMOTE_TYPES.GITHUB:
68
+ console.log(chalk_1.default.blue('🔗 你可以在 GitHub 上查看新创建的内容'));
69
+ console.log(chalk_1.default.blue('💡 提示:在 GitHub 中,你可以在 "Releases" 或 "Commits" 页面查看'));
70
+ break;
71
+ case exports.REMOTE_TYPES.GITLAB:
72
+ console.log(chalk_1.default.blue('🔗 你可以在 GitLab 上查看新创建的内容'));
73
+ console.log(chalk_1.default.blue('💡 提示:在 GitLab 中,你可以在 "Repository > Tags" 或 "Commits" 页面查看'));
74
+ break;
75
+ }
76
+ }
77
+ //# sourceMappingURL=git-remote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-remote.js","sourceRoot":"","sources":["../../src/utils/git-remote.ts"],"names":[],"mappings":";;;;;;AAsBA,4CA+BC;AAMD,wDAeC;AA1ED,2CAAkD;AAClD,kDAA0B;AAEb,QAAA,YAAY,GAAG;IAC1B,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;CACV,CAAC;AAQX,MAAM,GAAG,GAAc,IAAA,sBAAS,GAAE,CAAC;AAEnC;;;GAGG;AACI,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QAClD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,GAAuB,oBAAY,CAAC,OAAO,CAAC;QACpD,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/B,IAAI,GAAG,oBAAY,CAAC,MAAM,CAAC;QAC7B,CAAC;aAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC1E,IAAI,GAAG,oBAAY,CAAC,SAAS,CAAC;QAChC,CAAC;aAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACtC,IAAI,GAAG,oBAAY,CAAC,MAAM,CAAC;QAC7B,CAAC;QACD,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG;YACH,IAAI;SACL,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,UAA8B;IACnE,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,oBAAY,CAAC,SAAS;YACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC,CAAC;YAC5E,MAAM;QACR,KAAK,oBAAY,CAAC,MAAM;YACtB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC,CAAC;YAC7E,MAAM;QACR,KAAK,oBAAY,CAAC,MAAM;YACtB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC,CAAC;YACtF,MAAM;IACV,CAAC;AACH,CAAC"}
@@ -0,0 +1,29 @@
1
+ /** 检查当前目录是否为有效的 Git 仓库 */
2
+ export declare function checkGitRepository(): Promise<void>;
3
+ /** 获取当前分支名称 */
4
+ export declare function getCurrentBranch(): Promise<string>;
5
+ /** 拉取最新的远程 tag 信息(带 loading) */
6
+ export declare function fetchLatestTags(): Promise<void>;
7
+ /** 推送所有 tag(带 loading) */
8
+ export declare function pushTags(): Promise<void>;
9
+ /** 推送当前分支(带 loading) */
10
+ export declare function pushCurrentBranch(): Promise<void>;
11
+ /** 获取最新的 tag(test-v 格式) */
12
+ export declare function getLatestTag(): Promise<string | null>;
13
+ /** 拉取远程并 rebase(带 loading),指定远程和分支名,精准判断冲突 */
14
+ export declare function pullRebaseWithLoading(): Promise<void>;
15
+ /** 拉取远程(带 loading),不加 --rebase */
16
+ export declare function pullWithLoading(): Promise<void>;
17
+ /** 检查是否有待提交的文件 */
18
+ export declare function checkHasStagedFiles(): Promise<string[]>;
19
+ /** 检查是否有未暂存的修改 */
20
+ export declare function checkHasUnstagedChanges(): Promise<{
21
+ notAdded: string[];
22
+ modified: string[];
23
+ hasChanges: boolean;
24
+ }>;
25
+ /** 自动 add 所有文件 */
26
+ export declare function addAllFiles(): Promise<void>;
27
+ /** 生成规范化的 commit message */
28
+ export declare function formatCommitMessage(type: string, subject: string, scope?: string, body?: string, footer?: string): string;
29
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AASA,0BAA0B;AAC1B,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAMxD;AAED,eAAe;AACf,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAMxD;AAED,gCAAgC;AAChC,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAErD;AAED,0BAA0B;AAC1B,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAE9C;AAED,wBAAwB;AACxB,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEvD;AAED,2BAA2B;AAC3B,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiB3D;AAED,8CAA8C;AAC9C,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAiB3D;AAED,kCAAkC;AAClC,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAQrD;AAED,kBAAkB;AAClB,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAG7D;AAED,kBAAkB;AAClB,wBAAsB,uBAAuB;;;;GAO5C;AAED,kBAAkB;AAClB,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAEjD;AAED,4BAA4B;AAC5B,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAgBR"}
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkGitRepository = checkGitRepository;
4
+ exports.getCurrentBranch = getCurrentBranch;
5
+ exports.fetchLatestTags = fetchLatestTags;
6
+ exports.pushTags = pushTags;
7
+ exports.pushCurrentBranch = pushCurrentBranch;
8
+ exports.getLatestTag = getLatestTag;
9
+ exports.pullRebaseWithLoading = pullRebaseWithLoading;
10
+ exports.pullWithLoading = pullWithLoading;
11
+ exports.checkHasStagedFiles = checkHasStagedFiles;
12
+ exports.checkHasUnstagedChanges = checkHasUnstagedChanges;
13
+ exports.addAllFiles = addAllFiles;
14
+ exports.formatCommitMessage = formatCommitMessage;
15
+ const simple_git_1 = require("simple-git");
16
+ const loading_1 = require("./loading");
17
+ const tag_1 = require("../utils/tag");
18
+ const git = (0, simple_git_1.simpleGit)();
19
+ /** 检查当前目录是否为有效的 Git 仓库 */
20
+ async function checkGitRepository() {
21
+ try {
22
+ await git.status();
23
+ }
24
+ catch (error) {
25
+ throw new Error('傻逼没有git你执行什么,你他妈先关联好仓库行吗?');
26
+ }
27
+ }
28
+ /** 获取当前分支名称 */
29
+ async function getCurrentBranch() {
30
+ const status = await git.status();
31
+ if (!status.current) {
32
+ throw new Error('无法获取当前分支名称,请确认已在有效的 git 分支上');
33
+ }
34
+ return status.current;
35
+ }
36
+ /** 拉取最新的远程 tag 信息(带 loading) */
37
+ async function fetchLatestTags() {
38
+ await (0, loading_1.withLoading)(() => git.fetch(['--tags']), '正在拉取最新的远程 tag...');
39
+ }
40
+ /** 推送所有 tag(带 loading) */
41
+ async function pushTags() {
42
+ await (0, loading_1.withLoading)(() => git.pushTags(), '正在推送 tag 到远程仓库...');
43
+ }
44
+ /** 推送当前分支(带 loading) */
45
+ async function pushCurrentBranch() {
46
+ await (0, loading_1.withLoading)(() => git.push(), '正在 push 当前分支...');
47
+ }
48
+ /** 获取最新的 tag(test-v 格式) */
49
+ async function getLatestTag() {
50
+ try {
51
+ const tags = await git.tags();
52
+ const testTags = tags.all.filter(tag => tag.startsWith('test-v'));
53
+ if (testTags.length === 0) {
54
+ return null;
55
+ }
56
+ // 按版本号排序,获取最新的
57
+ testTags.sort((a, b) => {
58
+ const aInfo = (0, tag_1.parseTag)(a);
59
+ const bInfo = (0, tag_1.parseTag)(b);
60
+ return (0, tag_1.compareVersions)(aInfo, bInfo);
61
+ });
62
+ return testTags[testTags.length - 1];
63
+ }
64
+ catch (error) {
65
+ throw new Error('获取 tag 列表失败');
66
+ }
67
+ }
68
+ /** 拉取远程并 rebase(带 loading),指定远程和分支名,精准判断冲突 */
69
+ async function pullRebaseWithLoading() {
70
+ const status = await git.status();
71
+ const branch = status.current;
72
+ if (!branch)
73
+ throw new Error('无法获取当前分支名');
74
+ try {
75
+ await (0, loading_1.withLoading)(() => git.pull('origin', branch, { '--rebase': null }), '正在拉取远程最新代码并 rebase...');
76
+ }
77
+ catch (e) {
78
+ const msg = e && e.message ? e.message : String(e);
79
+ if (/conflict|CONFLICT|冲突/.test(msg)) {
80
+ throw new Error('pull --rebase 失败,检测到冲突,请手动解决冲突后再提交!');
81
+ }
82
+ else {
83
+ throw new Error('pull --rebase 失败,原因:' + msg);
84
+ }
85
+ }
86
+ }
87
+ /** 拉取远程(带 loading),不加 --rebase */
88
+ async function pullWithLoading() {
89
+ const status = await git.status();
90
+ const branch = status.current;
91
+ if (!branch)
92
+ throw new Error('无法获取当前分支名');
93
+ await (0, loading_1.withLoading)(() => git.pull('origin', branch), '正在拉取远程最新代码...');
94
+ }
95
+ /** 检查是否有待提交的文件 */
96
+ async function checkHasStagedFiles() {
97
+ const status = await git.status();
98
+ return status.staged;
99
+ }
100
+ /** 检查是否有未暂存的修改 */
101
+ async function checkHasUnstagedChanges() {
102
+ const status = await git.status();
103
+ return {
104
+ notAdded: status.not_added,
105
+ modified: status.modified,
106
+ hasChanges: status.not_added.length > 0 || status.modified.length > 0
107
+ };
108
+ }
109
+ /** 自动 add 所有文件 */
110
+ async function addAllFiles() {
111
+ await git.add('.');
112
+ }
113
+ /** 生成规范化的 commit message */
114
+ function formatCommitMessage(type, subject, scope, body, footer) {
115
+ let header = type;
116
+ if (scope && scope.trim()) {
117
+ header += `(${scope.trim()})`;
118
+ }
119
+ header += `: ${subject.trim()}`;
120
+ let message = header;
121
+ if (body && body.trim()) {
122
+ message += `\n\n${body.trim()}`;
123
+ }
124
+ if (footer && footer.trim()) {
125
+ message += `\n\n${footer.trim()}`;
126
+ }
127
+ return message;
128
+ }
129
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { Ora } from 'ora';
2
+ /**
3
+ * 启动一个 loading 动画
4
+ */
5
+ export declare function startLoading(text: string): Ora;
6
+ /**
7
+ * 包裹异步函数,自动处理 loading 生命周期
8
+ * @param fn 需要执行的异步函数
9
+ * @param message loading 文案
10
+ */
11
+ export declare function withLoading<T>(fn: () => Promise<T>, message: string): Promise<T>;
12
+ declare const _default: {};
13
+ export default _default;
14
+ //# sourceMappingURL=loading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading.d.ts","sourceRoot":"","sources":["../../src/utils/loading.ts"],"names":[],"mappings":"AAAA,OAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/B;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAE9C;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAUtF;;AACD,wBAAkB"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.startLoading = startLoading;
7
+ exports.withLoading = withLoading;
8
+ const ora_1 = __importDefault(require("ora"));
9
+ /**
10
+ * 启动一个 loading 动画
11
+ */
12
+ function startLoading(text) {
13
+ return (0, ora_1.default)(text).start();
14
+ }
15
+ /**
16
+ * 包裹异步函数,自动处理 loading 生命周期
17
+ * @param fn 需要执行的异步函数
18
+ * @param message loading 文案
19
+ */
20
+ async function withLoading(fn, message) {
21
+ const spinner = (0, ora_1.default)(message).start();
22
+ try {
23
+ const result = await fn();
24
+ spinner.succeed();
25
+ return result;
26
+ }
27
+ catch (error) {
28
+ spinner.fail();
29
+ throw error;
30
+ }
31
+ }
32
+ exports.default = {};
33
+ //# sourceMappingURL=loading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading.js","sourceRoot":"","sources":["../../src/utils/loading.ts"],"names":[],"mappings":";;;;;AAKA,oCAEC;AAOD,kCAUC;AAxBD,8CAA+B;AAE/B;;GAEG;AACH,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO,IAAA,aAAG,EAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,WAAW,CAAI,EAAoB,EAAE,OAAe;IACxE,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;QAC1B,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AACD,kBAAe,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare function printDivider(): void;
2
+ export declare function printSuccess(msg: string): void;
3
+ export declare function printWarning(msg: string): void;
4
+ export declare function printError(msg: string): void;
5
+ export declare function printInfo(msg: string): void;
6
+ export declare function printFileList(title: string, files: string[]): void;
7
+ export declare function printErrorMessage(prefix: string, error: unknown): void;
8
+ //# sourceMappingURL=message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/utils/message.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,SAE3B;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,QAEvC;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,QAEvC;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,QAErC;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,QAEpC;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAG3D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,QAE/D"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.printDivider = printDivider;
7
+ exports.printSuccess = printSuccess;
8
+ exports.printWarning = printWarning;
9
+ exports.printError = printError;
10
+ exports.printInfo = printInfo;
11
+ exports.printFileList = printFileList;
12
+ exports.printErrorMessage = printErrorMessage;
13
+ const chalk_1 = __importDefault(require("chalk"));
14
+ function printDivider() {
15
+ console.log(chalk_1.default.gray('----------------------------------------'));
16
+ }
17
+ function printSuccess(msg) {
18
+ console.log(chalk_1.default.green('✅ ' + msg));
19
+ }
20
+ function printWarning(msg) {
21
+ console.log(chalk_1.default.yellow('⚠️ ' + msg));
22
+ }
23
+ function printError(msg) {
24
+ console.log(chalk_1.default.red('❌ ' + msg));
25
+ }
26
+ function printInfo(msg) {
27
+ console.log(chalk_1.default.blue(msg));
28
+ }
29
+ function printFileList(title, files) {
30
+ console.log(chalk_1.default.blue(title));
31
+ files.forEach(f => console.log(' ' + chalk_1.default.green(f)));
32
+ }
33
+ function printErrorMessage(prefix, error) {
34
+ console.error(chalk_1.default.red(prefix), error instanceof Error ? error.message : String(error));
35
+ }
36
+ //# sourceMappingURL=message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/utils/message.ts"],"names":[],"mappings":";;;;;AAEA,oCAEC;AAED,oCAEC;AAED,oCAEC;AAED,gCAEC;AAED,8BAEC;AAED,sCAGC;AAED,8CAEC;AA7BD,kDAA0B;AAE1B,SAAgB,YAAY;IAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,SAAgB,YAAY,CAAC,GAAW;IACtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,SAAgB,YAAY,CAAC,GAAW;IACtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,SAAgB,UAAU,CAAC,GAAW;IACpC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,SAAgB,SAAS,CAAC,GAAW;IACnC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,SAAgB,aAAa,CAAC,KAAa,EAAE,KAAe;IAC1D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,eAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,SAAgB,iBAAiB,CAAC,MAAc,EAAE,KAAc;IAC9D,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3F,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * 通用确认交互
3
+ * @param message 提示信息
4
+ * @param def 默认值
5
+ */
6
+ export declare function confirm(message: string, def?: boolean): Promise<boolean>;
7
+ /**
8
+ * 通用输入交互
9
+ * @param message 提示信息
10
+ * @param validate 校验函数
11
+ */
12
+ export declare function input(message: string, validate?: (input: string) => boolean | string): Promise<string>;
13
+ /**
14
+ * 通用选择交互
15
+ * @param message 提示信息
16
+ * @param choices 选项
17
+ */
18
+ export declare function select<T = string>(message: string, choices: {
19
+ name: string;
20
+ value: T;
21
+ }[]): Promise<T>;
22
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/utils/prompt.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,UAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAU3E;AAED;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAe5G;AAED;;;;GAIG;AACH,wBAAsB,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAU3G"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.confirm = confirm;
7
+ exports.input = input;
8
+ exports.select = select;
9
+ const inquirer_1 = __importDefault(require("inquirer"));
10
+ /**
11
+ * 通用确认交互
12
+ * @param message 提示信息
13
+ * @param def 默认值
14
+ */
15
+ async function confirm(message, def = true) {
16
+ const { result } = await inquirer_1.default.prompt([
17
+ {
18
+ type: 'confirm',
19
+ name: 'result',
20
+ message,
21
+ default: def
22
+ }
23
+ ]);
24
+ return result;
25
+ }
26
+ /**
27
+ * 通用输入交互
28
+ * @param message 提示信息
29
+ * @param validate 校验函数
30
+ */
31
+ async function input(message, validate) {
32
+ if (typeof validate !== 'function') {
33
+ // inquirer 9.x 某些实现会尝试调用 undefined.apply
34
+ // 这里强制传递一个恒为 true 的函数,彻底避免 undefined
35
+ validate = () => true;
36
+ }
37
+ const { result } = await inquirer_1.default.prompt([
38
+ {
39
+ type: 'input',
40
+ name: 'result',
41
+ message,
42
+ validate
43
+ }
44
+ ]);
45
+ return result;
46
+ }
47
+ /**
48
+ * 通用选择交互
49
+ * @param message 提示信息
50
+ * @param choices 选项
51
+ */
52
+ async function select(message, choices) {
53
+ const { result } = await inquirer_1.default.prompt([
54
+ {
55
+ type: 'list',
56
+ name: 'result',
57
+ message,
58
+ choices
59
+ }
60
+ ]);
61
+ return result;
62
+ }
63
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/utils/prompt.ts"],"names":[],"mappings":";;;;;AAOA,0BAUC;AAOD,sBAeC;AAOD,wBAUC;AAxDD,wDAAgC;AAEhC;;;;GAIG;AACI,KAAK,UAAU,OAAO,CAAC,OAAe,EAAE,GAAG,GAAG,IAAI;IACvD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QACvC;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,OAAO;YACP,OAAO,EAAE,GAAG;SACb;KACF,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,KAAK,CAAC,OAAe,EAAE,QAA8C;IACzF,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QACnC,yCAAyC;QACzC,qCAAqC;QACrC,QAAQ,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;IACxB,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QACvC;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,OAAO;YACP,QAAQ;SACT;KACF,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,MAAM,CAAa,OAAe,EAAE,OAAqC;IAC7F,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QACvC;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO;YACP,OAAO;SACR;KACF,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { TagInfo } from '../types';
2
+ /** 解析 tag 字符串,提取版本号信息 */
3
+ export declare function parseTag(tag: string): TagInfo;
4
+ /** 递增版本号,将 build 和 patch 版本号加 1 */
5
+ export declare function incrementVersion(tagInfo: TagInfo): TagInfo;
6
+ /** 格式化版本信息为 tag 字符串 */
7
+ export declare function formatTag(tagInfo: TagInfo): string;
8
+ /** 比较两个版本号的大小 */
9
+ export declare function compareVersions(a: TagInfo, b: TagInfo): number;
10
+ //# sourceMappingURL=tag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../src/utils/tag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,yBAAyB;AACzB,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAY7C;AAED,mCAAmC;AACnC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAM1D;AAED,uBAAuB;AACvB,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAElD;AAED,iBAAiB;AACjB,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CAI9D"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseTag = parseTag;
4
+ exports.incrementVersion = incrementVersion;
5
+ exports.formatTag = formatTag;
6
+ exports.compareVersions = compareVersions;
7
+ /** 解析 tag 字符串,提取版本号信息 */
8
+ function parseTag(tag) {
9
+ const match = tag.match(/^test-v(\d+)\.(\d+)\.(\d{4})$/);
10
+ if (!match) {
11
+ throw new Error(`无效的 tag 格式: ${tag},期望格式: test-v00.00.0000`);
12
+ }
13
+ return {
14
+ version: tag,
15
+ major: parseInt(match[1], 10),
16
+ minor: parseInt(match[2], 10),
17
+ patch: parseInt(match[3], 10),
18
+ build: parseInt(match[3], 10)
19
+ };
20
+ }
21
+ /** 递增版本号,将 build 和 patch 版本号加 1 */
22
+ function incrementVersion(tagInfo) {
23
+ return {
24
+ ...tagInfo,
25
+ build: tagInfo.build + 1,
26
+ patch: tagInfo.build + 1
27
+ };
28
+ }
29
+ /** 格式化版本信息为 tag 字符串 */
30
+ function formatTag(tagInfo) {
31
+ return `test-v${tagInfo.major.toString().padStart(2, '0')}.${tagInfo.minor.toString().padStart(2, '0')}.${tagInfo.build.toString().padStart(4, '0')}`;
32
+ }
33
+ /** 比较两个版本号的大小 */
34
+ function compareVersions(a, b) {
35
+ if (a.major !== b.major)
36
+ return a.major - b.major;
37
+ if (a.minor !== b.minor)
38
+ return a.minor - b.minor;
39
+ return a.build - b.build;
40
+ }
41
+ //# sourceMappingURL=tag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag.js","sourceRoot":"","sources":["../../src/utils/tag.ts"],"names":[],"mappings":";;AAGA,4BAYC;AAGD,4CAMC;AAGD,8BAEC;AAGD,0CAIC;AAlCD,yBAAyB;AACzB,SAAgB,QAAQ,CAAC,GAAW;IAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,yBAAyB,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO;QACL,OAAO,EAAE,GAAG;QACZ,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED,mCAAmC;AACnC,SAAgB,gBAAgB,CAAC,OAAgB;IAC/C,OAAO;QACL,GAAG,OAAO;QACV,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC;QACxB,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC;KACzB,CAAC;AACJ,CAAC;AAED,uBAAuB;AACvB,SAAgB,SAAS,CAAC,OAAgB;IACxC,OAAO,SAAS,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACxJ,CAAC;AAED,iBAAiB;AACjB,SAAgB,eAAe,CAAC,CAAU,EAAE,CAAU;IACpD,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;IAClD,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;IAClD,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;AAC3B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "long-git-cli",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "A CLI tool for Git tag management.",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -16,9 +16,18 @@
16
16
  "dev": "ts-node src/index.ts",
17
17
  "start": "node dist/index.js",
18
18
  "clean": "rm -rf dist",
19
- "prebuild": "npm run clean"
19
+ "prebuild": "npm run clean",
20
+ "publish": "npm version patch && npm run build && npm publish --access public"
20
21
  },
21
- "keywords": ["cli", "git", "tag", "versioning", "bitbucket", "github", "automation"],
22
+ "keywords": [
23
+ "cli",
24
+ "git",
25
+ "tag",
26
+ "versioning",
27
+ "bitbucket",
28
+ "github",
29
+ "automation"
30
+ ],
22
31
  "author": "WenTao.Long <815473953@qq.com>",
23
32
  "license": "MIT",
24
33
  "engines": {
@@ -30,11 +39,14 @@
30
39
  "dependencies": {
31
40
  "commander": "^11.1.0",
32
41
  "simple-git": "^3.22.0",
33
- "chalk": "^4.1.2"
42
+ "chalk": "^4.1.2",
43
+ "inquirer": "^9.2.16",
44
+ "ora": "^7.0.1"
34
45
  },
35
46
  "devDependencies": {
36
47
  "@types/node": "^20.10.0",
37
48
  "typescript": "^5.3.0",
38
- "ts-node": "^10.9.0"
49
+ "ts-node": "^10.9.0",
50
+ "@types/inquirer": "^9.0.4"
39
51
  }
40
- }
52
+ }