@done-coding/cli-utils 0.8.0 → 0.8.2-alpha.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.
- package/README.md +104 -2
- package/es/index.mjs +341 -334
- package/package.json +3 -3
- package/types/index.d.ts +100 -35
package/es/index.mjs
CHANGED
|
@@ -1,56 +1,55 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
10
|
-
import { execSync as u } from "node:child_process";
|
|
2
|
+
import q from "chalk";
|
|
3
|
+
import f from "node:path";
|
|
4
|
+
import m, { existsSync as v, mkdirSync as z, writeFileSync as b, readFileSync as _ } from "node:fs";
|
|
5
|
+
import R from "crypto";
|
|
6
|
+
import Q from "prompts";
|
|
7
|
+
import Z from "yargs";
|
|
8
|
+
import { hideBin as tt } from "yargs/helpers";
|
|
9
|
+
import { execSync as g } from "node:child_process";
|
|
11
10
|
import F from "json5";
|
|
12
11
|
export * from "json5";
|
|
13
|
-
import { default as
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import { tmpdir as
|
|
12
|
+
import { default as we } from "json5";
|
|
13
|
+
import et from "lodash.merge";
|
|
14
|
+
import rt from "semver";
|
|
15
|
+
import { tmpdir as st, homedir as nt } from "node:os";
|
|
17
16
|
import { v4 as ot } from "uuid";
|
|
18
|
-
import { v4 as
|
|
19
|
-
import { default as
|
|
20
|
-
import { default as
|
|
21
|
-
import { default as
|
|
22
|
-
import
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
{
|
|
17
|
+
import { v4 as Ne } from "uuid";
|
|
18
|
+
import { default as Le } from "lodash.get";
|
|
19
|
+
import { default as Fe } from "lodash.set";
|
|
20
|
+
import { default as je } from "lodash.curry";
|
|
21
|
+
import E from "pinyin";
|
|
22
|
+
const x = (t) => {
|
|
23
|
+
const e = (...[r, ...n]) => t(q[r](...n));
|
|
24
|
+
return Object.assign(e, {
|
|
26
25
|
/** 成功 */
|
|
27
|
-
success: (...
|
|
26
|
+
success: (...r) => e("green", ...r),
|
|
28
27
|
/** /步骤 */
|
|
29
|
-
stage: (...
|
|
28
|
+
stage: (...r) => e("blue", ...r),
|
|
30
29
|
/** 提示信息 */
|
|
31
|
-
info: (...
|
|
30
|
+
info: (...r) => e("cyan", ...r),
|
|
32
31
|
/** 警告 */
|
|
33
|
-
warn: (...
|
|
32
|
+
warn: (...r) => e("yellow", ...r),
|
|
34
33
|
/** 错误 */
|
|
35
|
-
error: (...
|
|
34
|
+
error: (...r) => e("red", ...r),
|
|
36
35
|
/** 跳过 */
|
|
37
|
-
skip: (...
|
|
38
|
-
}
|
|
39
|
-
),
|
|
36
|
+
skip: (...r) => e("gray", ...r)
|
|
37
|
+
});
|
|
38
|
+
}, a = x(console.log), ee = x((t) => t), re = (t, {
|
|
40
39
|
/** 当前目录 */
|
|
41
40
|
currentDir: e = process.cwd(),
|
|
42
41
|
/** 优先找最远的父目录 */
|
|
43
42
|
isFindFarthest: r = !0
|
|
44
43
|
} = {}) => {
|
|
45
|
-
const
|
|
46
|
-
for (;
|
|
47
|
-
const s = r ?
|
|
48
|
-
if (m.existsSync(
|
|
44
|
+
const n = f.resolve(e).split(f.sep).map((s, o, c) => c.slice(0, o).concat(s).join(f.sep) || f.sep);
|
|
45
|
+
for (; n.length; ) {
|
|
46
|
+
const s = r ? n.shift() : n.pop(), o = f.join(s, t);
|
|
47
|
+
if (m.existsSync(o))
|
|
49
48
|
return s;
|
|
50
49
|
}
|
|
51
|
-
},
|
|
52
|
-
function
|
|
53
|
-
return
|
|
50
|
+
}, j = "aes-256-cbc", k = 16, C = "hex", T = ":";
|
|
51
|
+
function U(t) {
|
|
52
|
+
return R.pbkdf2Sync(
|
|
54
53
|
t,
|
|
55
54
|
"done-coding-cli-salt",
|
|
56
55
|
// 使用固定的盐值
|
|
@@ -61,55 +60,67 @@ function k(t) {
|
|
|
61
60
|
"sha256"
|
|
62
61
|
);
|
|
63
62
|
}
|
|
64
|
-
function
|
|
63
|
+
function se({
|
|
65
64
|
text: t,
|
|
66
65
|
secretKey: e
|
|
67
66
|
}) {
|
|
68
67
|
try {
|
|
69
|
-
const r =
|
|
70
|
-
let
|
|
71
|
-
|
|
72
|
-
const c =
|
|
73
|
-
return `${c}${
|
|
68
|
+
const r = U(e), n = R.randomBytes(k), s = R.createCipheriv(j, r, n);
|
|
69
|
+
let o = s.update(t);
|
|
70
|
+
o = Buffer.concat([o, s.final()]);
|
|
71
|
+
const c = n.toString(C), i = o.toString(C);
|
|
72
|
+
return `${c}${T}${i}`;
|
|
74
73
|
} catch (r) {
|
|
75
|
-
return
|
|
74
|
+
return a.error(
|
|
76
75
|
`加密失败: ${r instanceof Error ? r.message : String(r)}`
|
|
77
76
|
), "";
|
|
78
77
|
}
|
|
79
78
|
}
|
|
80
|
-
function
|
|
79
|
+
function ne({
|
|
81
80
|
encryptedText: t,
|
|
82
81
|
secretKey: e
|
|
83
82
|
}) {
|
|
84
83
|
try {
|
|
85
|
-
if (!t.includes(
|
|
84
|
+
if (!t.includes(T))
|
|
86
85
|
return "";
|
|
87
|
-
const r =
|
|
88
|
-
if (
|
|
86
|
+
const r = U(e), [n, s] = t.split(T);
|
|
87
|
+
if (n.length !== k * 2)
|
|
89
88
|
return "";
|
|
90
|
-
const
|
|
91
|
-
let
|
|
92
|
-
return
|
|
89
|
+
const o = Buffer.from(n, C), c = Buffer.from(s, C), i = R.createDecipheriv(j, r, o);
|
|
90
|
+
let u = i.update(c);
|
|
91
|
+
return u = Buffer.concat([u, i.final()]), u.toString();
|
|
93
92
|
} catch (r) {
|
|
94
|
-
return
|
|
93
|
+
return a.error(
|
|
95
94
|
`解密失败: ${r instanceof Error ? r.message : String(r)}`
|
|
96
95
|
), "";
|
|
97
96
|
}
|
|
98
97
|
}
|
|
99
|
-
const
|
|
98
|
+
const I = (...t) => {
|
|
100
99
|
const [e, r = {}] = t;
|
|
101
|
-
return
|
|
102
|
-
onCancel(
|
|
103
|
-
return
|
|
100
|
+
return Q(e, {
|
|
101
|
+
onCancel(n) {
|
|
102
|
+
return a.error(`退出${n == null ? void 0 : n.name}输入`), process.exit(1);
|
|
104
103
|
},
|
|
105
104
|
...r
|
|
106
105
|
});
|
|
107
|
-
},
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
106
|
+
}, oe = async ({
|
|
107
|
+
isMCP: t,
|
|
108
|
+
key: e,
|
|
109
|
+
presetAnswer: r,
|
|
110
|
+
defaultValue: n,
|
|
111
|
+
questionConfig: s
|
|
112
|
+
}) => {
|
|
113
|
+
if (t) {
|
|
114
|
+
const o = r == null ? void 0 : r[e];
|
|
115
|
+
return o === void 0 ? (a.error("MCP场景的约束值不能为空"), process.exit(1)) : o;
|
|
116
|
+
} else
|
|
117
|
+
return (r == null ? void 0 : r[e]) ?? n ?? (await I(s))[e];
|
|
118
|
+
}, ie = async (t, e) => (await I(e))[t], it = (t, e) => {
|
|
119
|
+
t ? a.error(t) : a.error(e.message), e != null && e.stack && a.error(e.stack), process.exit(1);
|
|
120
|
+
}, ct = () => {
|
|
121
|
+
const t = tt(process.argv);
|
|
122
|
+
return Z(t);
|
|
123
|
+
}, ce = ({
|
|
113
124
|
rootScriptName: t,
|
|
114
125
|
packageJson: e
|
|
115
126
|
}) => {
|
|
@@ -117,51 +128,51 @@ const H = (...t) => {
|
|
|
117
128
|
return t;
|
|
118
129
|
if (!e)
|
|
119
130
|
return;
|
|
120
|
-
const { bin: r, name:
|
|
131
|
+
const { bin: r, name: n } = e;
|
|
121
132
|
if (r) {
|
|
122
133
|
if (typeof r == "string")
|
|
123
|
-
return
|
|
134
|
+
return n.includes("/") ? void 0 : n;
|
|
124
135
|
if (typeof r == "object") {
|
|
125
|
-
const s = Object.entries(r),
|
|
136
|
+
const s = Object.entries(r), o = process.argv[1], c = s.filter(([, u]) => o == null ? void 0 : o.endsWith(u));
|
|
126
137
|
if (c.length !== 1)
|
|
127
138
|
return;
|
|
128
139
|
const [i] = c[0];
|
|
129
140
|
return process.platform === "win32" ? i.toLowerCase() : i;
|
|
130
141
|
}
|
|
131
142
|
}
|
|
132
|
-
},
|
|
143
|
+
}, H = (t, {
|
|
133
144
|
usage: e,
|
|
134
145
|
version: r,
|
|
135
|
-
demandCommandCount:
|
|
146
|
+
demandCommandCount: n,
|
|
136
147
|
options: s,
|
|
137
|
-
positionals:
|
|
148
|
+
positionals: o,
|
|
138
149
|
subcommands: c,
|
|
139
150
|
rootScriptName: i
|
|
140
|
-
},
|
|
141
|
-
let
|
|
142
|
-
e && (
|
|
143
|
-
const
|
|
144
|
-
return
|
|
145
|
-
},
|
|
146
|
-
const r = await
|
|
147
|
-
|
|
151
|
+
}, u) => {
|
|
152
|
+
let l = t.strict();
|
|
153
|
+
e && (l = l.usage(`Usage: ${e}`)), n && (l = l.demandCommand(n));
|
|
154
|
+
const p = "help";
|
|
155
|
+
return l = l.help(p), r ? l = l.version(r).alias("h", p).alias("v", "version") : l = l.alias("h", p), s && (l = l.options(s)), o && (l = Object.entries(o).reduce((S, [M, h]) => S.positional(M, h), l)), c && (l = l.command(c)), u && i && (l = l.scriptName(i)), l;
|
|
156
|
+
}, ae = async ({ handler: t, ...e }) => {
|
|
157
|
+
const r = await H(ct(), e, !0).fail(
|
|
158
|
+
it
|
|
148
159
|
).argv;
|
|
149
160
|
return t ? t(r) : r;
|
|
150
|
-
},
|
|
151
|
-
const { command: e, describe: r, handler:
|
|
161
|
+
}, fe = (t) => {
|
|
162
|
+
const { command: e, describe: r, handler: n = () => {
|
|
152
163
|
}, ...s } = t;
|
|
153
164
|
return {
|
|
154
165
|
command: e,
|
|
155
166
|
describe: r,
|
|
156
|
-
builder(
|
|
157
|
-
return
|
|
167
|
+
builder(o) {
|
|
168
|
+
return H(o, s, !1);
|
|
158
169
|
},
|
|
159
|
-
handler:
|
|
170
|
+
handler: n
|
|
160
171
|
};
|
|
161
172
|
};
|
|
162
|
-
var
|
|
163
|
-
const
|
|
164
|
-
const { editorType: t } = await
|
|
173
|
+
var at = /* @__PURE__ */ ((t) => (t.VSCODE = "VsCode", t.CURSOR = "Cursor", t.OTHER = "其他", t))(at || {});
|
|
174
|
+
const ft = async () => {
|
|
175
|
+
const { editorType: t } = await I([
|
|
165
176
|
{
|
|
166
177
|
name: "editorType",
|
|
167
178
|
type: "select",
|
|
@@ -181,29 +192,29 @@ const at = async () => {
|
|
|
181
192
|
}, lt = {
|
|
182
193
|
Cursor: "cursor",
|
|
183
194
|
VsCode: "code"
|
|
184
|
-
},
|
|
195
|
+
}, ut = (t, e, r) => {
|
|
185
196
|
try {
|
|
186
|
-
|
|
197
|
+
g(`${t} -v`, { stdio: "ignore" }), g(`${t} ${e}`);
|
|
187
198
|
} catch {
|
|
188
199
|
r();
|
|
189
200
|
}
|
|
190
201
|
}, gt = (t, e) => {
|
|
191
|
-
const r = (
|
|
192
|
-
${
|
|
202
|
+
const r = (n) => a.info(`
|
|
203
|
+
${n}, 请用编辑器打开 ${t} 进行编辑
|
|
193
204
|
`);
|
|
194
205
|
switch (e) {
|
|
195
206
|
case "Cursor":
|
|
196
207
|
case "VsCode": {
|
|
197
|
-
const
|
|
198
|
-
|
|
199
|
-
r(`${
|
|
208
|
+
const n = lt[e];
|
|
209
|
+
ut(n, t, () => {
|
|
210
|
+
r(`${n}命令未安装`);
|
|
200
211
|
});
|
|
201
212
|
break;
|
|
202
213
|
}
|
|
203
214
|
default:
|
|
204
215
|
r("其他编辑器");
|
|
205
216
|
}
|
|
206
|
-
},
|
|
217
|
+
}, mt = (t = process.cwd()) => ({
|
|
207
218
|
/** 必须保留 */
|
|
208
219
|
rootDir: {
|
|
209
220
|
type: "string",
|
|
@@ -212,12 +223,12 @@ const at = async () => {
|
|
|
212
223
|
/** 必须设置默认值 */
|
|
213
224
|
default: t
|
|
214
225
|
}
|
|
215
|
-
}),
|
|
226
|
+
}), le = ({
|
|
216
227
|
configPathDefault: t,
|
|
217
228
|
rootDirDefault: e
|
|
218
229
|
}) => ({
|
|
219
230
|
/** 必须保留 */
|
|
220
|
-
...
|
|
231
|
+
...mt(e),
|
|
221
232
|
/** 必须保留 */
|
|
222
233
|
configPath: {
|
|
223
234
|
type: "string",
|
|
@@ -226,31 +237,31 @@ const at = async () => {
|
|
|
226
237
|
/** 必须设置默认值 */
|
|
227
238
|
default: t
|
|
228
239
|
}
|
|
229
|
-
}),
|
|
230
|
-
const { configPath: r, rootDir:
|
|
231
|
-
return
|
|
240
|
+
}), pt = async (t, e) => {
|
|
241
|
+
const { configPath: r, rootDir: n } = e, s = f.resolve(n, r), o = f.dirname(s);
|
|
242
|
+
return v(o) || z(o, {
|
|
232
243
|
recursive: !0
|
|
233
|
-
}), s.endsWith(".json5") ? (
|
|
234
|
-
},
|
|
244
|
+
}), s.endsWith(".json5") ? (a.info(`json5模式写入 ${s}`), b(s, F.stringify(t, null, 2)), s) : (a.info(`json模式写入 ${s}`), b(s, JSON.stringify(t, null, 2)), s);
|
|
245
|
+
}, ue = async (t, e, {
|
|
235
246
|
onFileGenerated: r,
|
|
236
|
-
edit:
|
|
247
|
+
edit: n = !1
|
|
237
248
|
} = {}) => {
|
|
238
|
-
const s = await
|
|
239
|
-
if (r == null || r(s),
|
|
240
|
-
const
|
|
241
|
-
gt(e.configPath,
|
|
249
|
+
const s = await pt(t, e);
|
|
250
|
+
if (r == null || r(s), n) {
|
|
251
|
+
const o = await ft();
|
|
252
|
+
gt(e.configPath, o);
|
|
242
253
|
}
|
|
243
|
-
},
|
|
244
|
-
const { configPath: r, rootDir:
|
|
245
|
-
if (!
|
|
254
|
+
}, ge = async (t, e) => {
|
|
255
|
+
const { configPath: r, rootDir: n } = t, s = f.resolve(n, r);
|
|
256
|
+
if (!v(s)) {
|
|
246
257
|
if (e)
|
|
247
|
-
return
|
|
248
|
-
const
|
|
249
|
-
throw new Error(
|
|
258
|
+
return a.info("配置文件不存在,使用onNotExists返回值"), e();
|
|
259
|
+
const o = `配置文件不存在 ${s}`;
|
|
260
|
+
throw new Error(o);
|
|
250
261
|
}
|
|
251
|
-
return s.endsWith(".json5") ? (
|
|
252
|
-
},
|
|
253
|
-
const { useDefaultConfig: t } = await
|
|
262
|
+
return s.endsWith(".json5") ? (a.info(`json5模式解析 ${s}`), F.parse(_(s, "utf8"))) : (a.info(`json模式解析 ${s}`), JSON.parse(_(s, "utf8")));
|
|
263
|
+
}, me = async () => {
|
|
264
|
+
const { useDefaultConfig: t } = await I({
|
|
254
265
|
name: "useDefaultConfig",
|
|
255
266
|
type: "confirm",
|
|
256
267
|
message: "使用默认模板配置",
|
|
@@ -260,245 +271,241 @@ const at = async () => {
|
|
|
260
271
|
}, J = "package.json", D = ({
|
|
261
272
|
rootDir: t
|
|
262
273
|
}) => {
|
|
263
|
-
const e =
|
|
264
|
-
if (!
|
|
274
|
+
const e = f.resolve(t, J);
|
|
275
|
+
if (!v(e))
|
|
265
276
|
throw new Error(`${t}未找到package.json文件`);
|
|
266
|
-
const r =
|
|
277
|
+
const r = _(e, "utf-8");
|
|
267
278
|
return JSON.parse(r);
|
|
268
|
-
},
|
|
279
|
+
}, ht = ({
|
|
269
280
|
rootDir: t,
|
|
270
281
|
pkgJson: e,
|
|
271
282
|
pkgName: r,
|
|
272
|
-
isDevPkg:
|
|
283
|
+
isDevPkg: n
|
|
273
284
|
}) => {
|
|
274
|
-
const s = e || D({ rootDir: t }),
|
|
275
|
-
let c =
|
|
285
|
+
const s = e || D({ rootDir: t }), o = n ? s.devDependencies : s.dependencies;
|
|
286
|
+
let c = o == null ? void 0 : o[r];
|
|
276
287
|
if (!c) {
|
|
277
|
-
const i =
|
|
278
|
-
c = i == null ? void 0 : i[r], c &&
|
|
279
|
-
|
|
280
|
-
`${o ? "开发" : "生产"}依赖包${r}可能错误的安装在${o ? "dependencies" : "devDependencies"}`
|
|
281
|
-
)
|
|
288
|
+
const i = n ? s.dependencies : s.devDependencies;
|
|
289
|
+
c = i == null ? void 0 : i[r], c && a.warn(
|
|
290
|
+
`${n ? "开发" : "生产"}依赖包${r}可能错误的安装在${n ? "dependencies" : "devDependencies"}`
|
|
282
291
|
);
|
|
283
292
|
return;
|
|
284
293
|
}
|
|
285
|
-
return c ||
|
|
286
|
-
},
|
|
294
|
+
return c || a.info(`依赖包${r}未安装`), c;
|
|
295
|
+
}, pe = ({
|
|
287
296
|
patchConfig: t,
|
|
288
297
|
rootDir: e
|
|
289
298
|
}) => {
|
|
290
299
|
if (!t)
|
|
291
300
|
return;
|
|
292
|
-
const r = D({ rootDir: e }),
|
|
293
|
-
b(s, JSON.stringify(
|
|
301
|
+
const r = D({ rootDir: e }), n = et(r, t), s = f.resolve(e, J);
|
|
302
|
+
b(s, JSON.stringify(n, null, 2), "utf-8");
|
|
294
303
|
}, $ = (t) => {
|
|
295
|
-
const r =
|
|
304
|
+
const r = g("git rev-parse --show-toplevel", {
|
|
296
305
|
cwd: t
|
|
297
306
|
}).toString();
|
|
298
307
|
if (!r)
|
|
299
308
|
throw new Error("获取git根目录失败");
|
|
300
309
|
return r.trim();
|
|
301
|
-
},
|
|
310
|
+
}, he = () => {
|
|
302
311
|
var t;
|
|
303
312
|
try {
|
|
304
|
-
const e =
|
|
313
|
+
const e = g("git symbolic-ref --short HEAD", {
|
|
305
314
|
stdio: "ignore"
|
|
306
315
|
});
|
|
307
316
|
return (t = e == null ? void 0 : e.toString()) == null ? void 0 : t.trim();
|
|
308
317
|
} catch {
|
|
309
318
|
try {
|
|
310
|
-
const r =
|
|
311
|
-
|
|
319
|
+
const r = g("git rev-parse --short HEAD").toString().trim();
|
|
320
|
+
a.skip(`当前未指向具体某个分支, 当前commit hash: ${r}`);
|
|
312
321
|
} finally {
|
|
313
322
|
return;
|
|
314
323
|
}
|
|
315
324
|
}
|
|
316
|
-
},
|
|
325
|
+
}, dt = (t) => {
|
|
317
326
|
const e = t.match(/moving\s+from\s+(.*)\s+to\s+(.*)/);
|
|
318
327
|
if (e) {
|
|
319
|
-
const [, r,
|
|
328
|
+
const [, r, n] = e;
|
|
320
329
|
return {
|
|
321
330
|
fromBranch: r.trim(),
|
|
322
|
-
toBranch:
|
|
331
|
+
toBranch: n.trim()
|
|
323
332
|
};
|
|
324
333
|
}
|
|
325
|
-
},
|
|
334
|
+
}, A = 73, St = (t) => {
|
|
326
335
|
const r = m.statSync(t).mode;
|
|
327
|
-
if ((r &
|
|
336
|
+
if ((r & A) === A)
|
|
328
337
|
return;
|
|
329
|
-
|
|
330
|
-
const
|
|
331
|
-
m.chmodSync(t,
|
|
338
|
+
a.stage(`${t} 没有执行权限 添加... `);
|
|
339
|
+
const n = r | A;
|
|
340
|
+
m.chmodSync(t, n), a.success(`${t} 添加执行权限成功`);
|
|
332
341
|
}, V = (t) => m.existsSync(t), N = async (t) => {
|
|
333
342
|
try {
|
|
334
343
|
return await m.promises.lstat(t), !0;
|
|
335
344
|
} catch (e) {
|
|
336
345
|
return e.code !== "ENOENT";
|
|
337
346
|
}
|
|
338
|
-
},
|
|
347
|
+
}, yt = (t, e = !1) => {
|
|
339
348
|
V(t) && m.rmSync(t, { recursive: !0, force: e });
|
|
340
|
-
},
|
|
349
|
+
}, Et = async (t, e = !1) => {
|
|
341
350
|
await N(t) && await m.promises.rm(t, { recursive: !0, force: e });
|
|
342
|
-
},
|
|
343
|
-
var
|
|
344
|
-
const
|
|
345
|
-
const e = $(t), r =
|
|
351
|
+
}, _t = (t) => m.readFileSync(t, "utf-8"), Rt = (t) => m.promises.readFile(t, "utf-8"), de = (t, e) => JSON.parse(_t(t)) || e, K = async (t, e) => JSON.parse(await Rt(t)) || e;
|
|
352
|
+
var d = /* @__PURE__ */ ((t) => (t.PRE_COMMIT = "pre-commit", t.PRE_MERGE_COMMIT = "pre-merge-commit", t.PREPARE_COMMIT_MSG = "prepare-commit-msg", t.COMMIT_MSG = "commit-msg", t.PRE_REBASE = "pre-rebase", t.POST_COMMIT = "post-commit", t.POST_MERGE = "post-merge", t.PRE_PUSH = "pre-push", t))(d || {});
|
|
353
|
+
const Ct = "husky", Ot = ".husky", vt = ({ rootDir: t }) => {
|
|
354
|
+
const e = $(t), r = ht({
|
|
346
355
|
rootDir: e,
|
|
347
356
|
pkgJson: D({ rootDir: e }),
|
|
348
|
-
pkgName:
|
|
357
|
+
pkgName: Ct,
|
|
349
358
|
isDevPkg: !0
|
|
350
359
|
});
|
|
351
360
|
if (!r)
|
|
352
361
|
throw new Error("husky版本获取失败, 可能husky未安装");
|
|
353
|
-
const
|
|
354
|
-
return
|
|
355
|
-
. "$(dirname -- "$0")/_/husky.sh"`) : (
|
|
356
|
-
},
|
|
362
|
+
const n = r.replace(/^(\^|~)/, ""), s = "<9.0.0";
|
|
363
|
+
return rt.satisfies(n, s) ? (a.info(`${n}符合${s}`), `#!/usr/bin/env sh
|
|
364
|
+
. "$(dirname -- "$0")/_/husky.sh"`) : (a.info(`${n}不符合${s}`), "");
|
|
365
|
+
}, It = ({ rootDir: t }) => {
|
|
357
366
|
const e = $(t);
|
|
358
|
-
return
|
|
359
|
-
},
|
|
367
|
+
return f.resolve(e, Ot);
|
|
368
|
+
}, Se = ({
|
|
360
369
|
hookNames: t,
|
|
361
370
|
rootDir: e,
|
|
362
371
|
getCode: r
|
|
363
372
|
}) => {
|
|
364
|
-
const
|
|
365
|
-
m.existsSync(
|
|
366
|
-
const
|
|
373
|
+
const n = It({ rootDir: e });
|
|
374
|
+
m.existsSync(n) || m.mkdirSync(n, { recursive: !0 }), t.forEach((s) => {
|
|
375
|
+
const o = f.resolve(n, s), c = m.existsSync(o);
|
|
367
376
|
let i = r(s);
|
|
368
377
|
if (c)
|
|
369
|
-
m.readFileSync(
|
|
370
|
-
|
|
371
|
-
) : (m.appendFileSync(
|
|
372
|
-
n,
|
|
378
|
+
m.readFileSync(o, "utf-8").includes(i) ? a.skip(`${o} ${s}相关调用 ${i} 已存在 跳过`) : (m.appendFileSync(
|
|
379
|
+
o,
|
|
373
380
|
`
|
|
374
381
|
${i}
|
|
375
382
|
`
|
|
376
|
-
),
|
|
383
|
+
), a.success(`${o} 添加 ${s}相关调用成功`));
|
|
377
384
|
else {
|
|
378
|
-
const
|
|
385
|
+
const u = vt({
|
|
379
386
|
rootDir: e
|
|
380
387
|
});
|
|
381
388
|
m.writeFileSync(
|
|
382
|
-
|
|
383
|
-
`${
|
|
389
|
+
o,
|
|
390
|
+
`${u}
|
|
384
391
|
|
|
385
392
|
${i}
|
|
386
393
|
`,
|
|
387
394
|
"utf-8"
|
|
388
|
-
),
|
|
395
|
+
), a.success(`${o} 添加 ${s}相关调用成功`);
|
|
389
396
|
}
|
|
390
|
-
|
|
397
|
+
St(o);
|
|
391
398
|
});
|
|
392
|
-
},
|
|
399
|
+
}, ye = [
|
|
393
400
|
// HooksNameEnum.PRE_MERGE_COMMIT,
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
],
|
|
401
|
+
d.PREPARE_COMMIT_MSG,
|
|
402
|
+
d.COMMIT_MSG
|
|
403
|
+
], Ee = ({
|
|
397
404
|
hookName: t,
|
|
398
405
|
rootDir: e
|
|
399
406
|
}) => {
|
|
400
|
-
const r = $(e),
|
|
407
|
+
const r = $(e), n = f.resolve(r, ".git");
|
|
401
408
|
switch (t) {
|
|
402
|
-
case
|
|
403
|
-
case
|
|
404
|
-
const s =
|
|
405
|
-
if (
|
|
406
|
-
return
|
|
409
|
+
case d.PREPARE_COMMIT_MSG:
|
|
410
|
+
case d.COMMIT_MSG: {
|
|
411
|
+
const s = f.resolve(n, "MERGE_MSG");
|
|
412
|
+
if (v(s))
|
|
413
|
+
return _(s, "utf-8");
|
|
407
414
|
}
|
|
408
415
|
}
|
|
409
416
|
return "";
|
|
410
|
-
},
|
|
417
|
+
}, _e = ({
|
|
411
418
|
remoteAlias: t = "origin"
|
|
412
419
|
} = {}) => {
|
|
413
420
|
try {
|
|
414
|
-
const e =
|
|
415
|
-
let
|
|
421
|
+
const e = g("git rev-parse HEAD").toString().trim(), r = g('git log -1 --pretty=format:"%an"').toString().trim(), n = g('git log -1 --pretty=format:"%ae"').toString().trim(), s = g('git log -1 --pretty=format:"%s"').toString().trim(), o = g("git config user.name").toString().trim(), c = g("git config user.email").toString().trim(), i = g("git rev-parse --abbrev-ref HEAD").toString().trim();
|
|
422
|
+
let u = "";
|
|
416
423
|
try {
|
|
417
|
-
|
|
424
|
+
u = g(`git config --get remote.${t}.url`).toString().trim();
|
|
418
425
|
} catch {
|
|
419
|
-
|
|
426
|
+
a.warn("git远程仓库地址获取失败或者不存在");
|
|
420
427
|
}
|
|
421
428
|
return {
|
|
422
429
|
lastHash: e,
|
|
423
430
|
lastCommitter: r,
|
|
424
|
-
lastCommitterPinYin:
|
|
425
|
-
style:
|
|
431
|
+
lastCommitterPinYin: E(r, {
|
|
432
|
+
style: E.STYLE_NORMAL,
|
|
426
433
|
heteronym: !1
|
|
427
434
|
}).join(""),
|
|
428
|
-
lastCommitEmail:
|
|
435
|
+
lastCommitEmail: n,
|
|
429
436
|
lastCommitMsg: s,
|
|
430
|
-
userName:
|
|
431
|
-
userNamePinYin:
|
|
432
|
-
style:
|
|
437
|
+
userName: o,
|
|
438
|
+
userNamePinYin: E(o, {
|
|
439
|
+
style: E.STYLE_NORMAL,
|
|
433
440
|
heteronym: !1
|
|
434
441
|
}).join(""),
|
|
435
442
|
userEmail: c,
|
|
436
443
|
branchName: i,
|
|
437
|
-
remoteInfo:
|
|
444
|
+
remoteInfo: u ? {
|
|
438
445
|
alias: t,
|
|
439
|
-
url:
|
|
446
|
+
url: u
|
|
440
447
|
} : void 0
|
|
441
448
|
};
|
|
442
449
|
} catch (e) {
|
|
443
|
-
throw
|
|
450
|
+
throw a.error("获取git最后提交信息失败"), e;
|
|
444
451
|
}
|
|
445
452
|
}, Y = (t = "") => {
|
|
446
453
|
const e = /\s*Merge\s+branch\s+['|"](.+)['|"]\s+into\s+['|"](.+)['|"]\s*/i, r = t.match(e);
|
|
447
454
|
if (r) {
|
|
448
|
-
const [, i,
|
|
455
|
+
const [, i, u] = r;
|
|
449
456
|
return {
|
|
450
457
|
fromBranch: i,
|
|
451
|
-
toBranch:
|
|
458
|
+
toBranch: u
|
|
452
459
|
};
|
|
453
460
|
}
|
|
454
|
-
const
|
|
461
|
+
const n = /\s*Merge\s+branch\s+['|"](.+)['|"]\s+of\s+.+\s+into\s+['|"](.+)['|"]\s*/i, s = t.match(n);
|
|
455
462
|
if (s) {
|
|
456
|
-
const [, i,
|
|
463
|
+
const [, i, u] = s;
|
|
457
464
|
return {
|
|
458
465
|
fromBranch: i,
|
|
459
|
-
toBranch:
|
|
466
|
+
toBranch: u
|
|
460
467
|
};
|
|
461
468
|
}
|
|
462
|
-
const
|
|
469
|
+
const o = /\s*Merge\s+branch\s+['|"](.+)['|"](\s+of)?\s*/i, c = t.match(o);
|
|
463
470
|
if (c) {
|
|
464
471
|
const [, i] = c;
|
|
465
472
|
return {
|
|
466
473
|
fromBranch: i
|
|
467
474
|
};
|
|
468
475
|
}
|
|
469
|
-
},
|
|
470
|
-
if (t.startsWith(
|
|
476
|
+
}, $t = (t) => {
|
|
477
|
+
if (t.startsWith(w.MERGE))
|
|
471
478
|
return {
|
|
472
|
-
fromBranch: t.replace(
|
|
479
|
+
fromBranch: t.replace(w.MERGE, "").trim()
|
|
473
480
|
};
|
|
474
|
-
},
|
|
481
|
+
}, Re = () => {
|
|
475
482
|
const t = process.env.GIT_REFLOG_ACTION || "";
|
|
476
483
|
if (!t)
|
|
477
484
|
return;
|
|
478
485
|
const e = /merge\s+([^\s]+)\s*/i, r = t.match(e);
|
|
479
486
|
if (r) {
|
|
480
|
-
const [,
|
|
487
|
+
const [, o] = r;
|
|
481
488
|
return {
|
|
482
|
-
fromBranch:
|
|
489
|
+
fromBranch: o
|
|
483
490
|
};
|
|
484
491
|
}
|
|
485
|
-
const
|
|
492
|
+
const n = /pull\s+([^\s]+)\s+([^\s]+)/, s = t.match(n);
|
|
486
493
|
if (s) {
|
|
487
|
-
const [, ,
|
|
494
|
+
const [, , o] = s;
|
|
488
495
|
return {
|
|
489
|
-
fromBranch:
|
|
496
|
+
fromBranch: o
|
|
490
497
|
};
|
|
491
498
|
}
|
|
492
499
|
};
|
|
493
|
-
var
|
|
494
|
-
const
|
|
500
|
+
var w = /* @__PURE__ */ ((t) => (t.CHECKOUT = "checkout", t.MERGE = "merge", t.COMMIT = "commit", t.COMMIT_MERGE = "commit (merge)", t.PULL = "pull", t.RESET = "reset", t.REBASE_START = "rebase (start)", t.REBASE_FINISH = "rebase (finish)", t.REBASE_ABORT = "rebase (abort)", t.REBASE_CONTINUE = "rebase (continue)", t))(w || {});
|
|
501
|
+
const B = "__GIT_REPLACE_MARK__", O = {
|
|
495
502
|
stringify(t) {
|
|
496
|
-
return JSON.stringify(t).replace(/"/g,
|
|
503
|
+
return JSON.stringify(t).replace(/"/g, B);
|
|
497
504
|
},
|
|
498
505
|
parse(t) {
|
|
499
|
-
return JSON.parse(t.replace(new RegExp(
|
|
506
|
+
return JSON.parse(t.replace(new RegExp(B, "g"), '"'));
|
|
500
507
|
}
|
|
501
|
-
},
|
|
508
|
+
}, Ce = ({
|
|
502
509
|
count: t = 100
|
|
503
510
|
} = {}) => {
|
|
504
511
|
if (t <= 0)
|
|
@@ -520,19 +527,19 @@ const L = "__GIT_REPLACE_MARK__", v = {
|
|
|
520
527
|
/** 提交日期 */
|
|
521
528
|
commitTime: "%ci"
|
|
522
529
|
};
|
|
523
|
-
return
|
|
524
|
-
`git --no-pager log --oneline -n ${t} --pretty=format:"${
|
|
530
|
+
return g(
|
|
531
|
+
`git --no-pager log --oneline -n ${t} --pretty=format:"${O.stringify(
|
|
525
532
|
e
|
|
526
533
|
)}"`
|
|
527
534
|
).toString().split(`
|
|
528
|
-
`).map((
|
|
529
|
-
const c =
|
|
535
|
+
`).map((o) => {
|
|
536
|
+
const c = O.parse(o);
|
|
530
537
|
return {
|
|
531
538
|
...c,
|
|
532
539
|
mergeInfo: Y(c.message)
|
|
533
540
|
};
|
|
534
541
|
});
|
|
535
|
-
},
|
|
542
|
+
}, Oe = ({
|
|
536
543
|
count: t = 100,
|
|
537
544
|
filterItem: e = () => !0
|
|
538
545
|
} = {}) => {
|
|
@@ -545,201 +552,201 @@ const L = "__GIT_REPLACE_MARK__", v = {
|
|
|
545
552
|
committerEmail: "%ce",
|
|
546
553
|
commitTime: "%ci"
|
|
547
554
|
};
|
|
548
|
-
return
|
|
549
|
-
`git --no-pager reflog -n ${t} --pretty=format:"${
|
|
555
|
+
return g(
|
|
556
|
+
`git --no-pager reflog -n ${t} --pretty=format:"${O.stringify(
|
|
550
557
|
r
|
|
551
558
|
)}"`
|
|
552
559
|
).toString().split(`
|
|
553
|
-
`).map((i) =>
|
|
554
|
-
const { fullMessage:
|
|
555
|
-
let
|
|
556
|
-
if (
|
|
560
|
+
`).map((i) => O.parse(i)).filter(e).map((i) => {
|
|
561
|
+
const { fullMessage: u, ...l } = i, p = ":", [S] = u.split(p, 1), M = u.slice(`${S}${p}`.length), h = S.trim(), y = M.trim();
|
|
562
|
+
let P, G, X;
|
|
563
|
+
if (h.startsWith(
|
|
557
564
|
"checkout"
|
|
558
565
|
/* CHECKOUT */
|
|
559
566
|
))
|
|
560
|
-
|
|
561
|
-
else if (
|
|
567
|
+
G = dt(y);
|
|
568
|
+
else if (h.startsWith(
|
|
562
569
|
"merge"
|
|
563
570
|
/* MERGE */
|
|
564
571
|
))
|
|
565
|
-
|
|
566
|
-
else if (
|
|
572
|
+
P = $t(h);
|
|
573
|
+
else if (h.startsWith(
|
|
567
574
|
"commit (merge)"
|
|
568
575
|
/* COMMIT_MERGE */
|
|
569
576
|
)) {
|
|
570
|
-
const
|
|
571
|
-
|
|
572
|
-
`${i.hash} 是合并提交 但是未从提交信息(${
|
|
573
|
-
),
|
|
577
|
+
const L = Y(y);
|
|
578
|
+
L || a.warn(
|
|
579
|
+
`${i.hash} 是合并提交 但是未从提交信息(${y})中检测到合并分支信息,推测手动更改了提交内容`
|
|
580
|
+
), P = L;
|
|
574
581
|
}
|
|
575
582
|
return {
|
|
576
|
-
...
|
|
577
|
-
type:
|
|
578
|
-
message:
|
|
579
|
-
mergeInfo:
|
|
580
|
-
checkoutInfo:
|
|
583
|
+
...l,
|
|
584
|
+
type: h,
|
|
585
|
+
message: y,
|
|
586
|
+
mergeInfo: P,
|
|
587
|
+
checkoutInfo: G,
|
|
581
588
|
rebaseInfo: X
|
|
582
589
|
};
|
|
583
590
|
});
|
|
584
|
-
},
|
|
585
|
-
const e = $(t), r =
|
|
586
|
-
if (m.existsSync(
|
|
591
|
+
}, ve = (t) => {
|
|
592
|
+
const e = $(t), r = f.resolve(e, ".git"), n = f.resolve(r, "rebase-merge");
|
|
593
|
+
if (m.existsSync(n))
|
|
587
594
|
return !0;
|
|
588
|
-
const s =
|
|
595
|
+
const s = f.resolve(r, "rebase-apply");
|
|
589
596
|
if (m.existsSync(s))
|
|
590
597
|
return !0;
|
|
591
|
-
const
|
|
592
|
-
return !!m.existsSync(
|
|
593
|
-
},
|
|
598
|
+
const o = f.resolve(r, "REBASE_HEAD");
|
|
599
|
+
return !!m.existsSync(o);
|
|
600
|
+
}, Ie = ({
|
|
594
601
|
branchName: t,
|
|
595
602
|
version: e,
|
|
596
603
|
remoteInfo: r
|
|
597
604
|
}) => {
|
|
598
|
-
r && (
|
|
605
|
+
r && (g(`git push ${r.alias} v${e}`, {
|
|
599
606
|
stdio: "inherit"
|
|
600
|
-
}),
|
|
607
|
+
}), g(`git push ${r.alias} ${t}`, {
|
|
601
608
|
stdio: "inherit"
|
|
602
609
|
}));
|
|
603
|
-
},
|
|
610
|
+
}, Mt = (t) => /^https?:\/\//.test(t), Pt = (t) => /^git@/.test(t), $e = (t) => {
|
|
604
611
|
const { hostname: e, pathname: r } = new URL(t);
|
|
605
612
|
return `git@${e}:${r.replace("/", "")}`;
|
|
606
|
-
}, W = ".done-coding",
|
|
613
|
+
}, At = (t) => f.resolve(t, ".git"), Me = (t) => Et(At(t)), W = ".done-coding", bt = `${W}/cli/assets-config`, Tt = "assets", wt = "index.json", Dt = `${W}/config.json`, Nt = "https://gitee.com/justsosu/done-coding-cli-assets-config.git", Gt = ({
|
|
607
614
|
dir: t,
|
|
608
615
|
fn: e,
|
|
609
616
|
endClear: r = !0,
|
|
610
|
-
exitClear:
|
|
617
|
+
exitClear: n = !0
|
|
611
618
|
}) => {
|
|
612
619
|
if (V(t))
|
|
613
|
-
return
|
|
620
|
+
return a.error(`${t} 已存在,请手动删除该目录再试`), process.exit(1);
|
|
614
621
|
const s = () => {
|
|
615
|
-
|
|
622
|
+
a.stage("正在清理临时目录...", t), yt(t);
|
|
616
623
|
};
|
|
617
|
-
|
|
618
|
-
|
|
624
|
+
n && process.once("exit", () => {
|
|
625
|
+
a.stage("发现进程退出,正在清理临时目录...", t), s();
|
|
619
626
|
});
|
|
620
|
-
let
|
|
627
|
+
let o;
|
|
621
628
|
try {
|
|
622
|
-
|
|
629
|
+
o = e(t);
|
|
623
630
|
} catch (c) {
|
|
624
631
|
throw r && s(), c;
|
|
625
632
|
}
|
|
626
|
-
return r && (
|
|
633
|
+
return r && (o instanceof Promise ? o.finally(s) : s()), o;
|
|
627
634
|
};
|
|
628
|
-
var
|
|
629
|
-
const
|
|
630
|
-
|
|
631
|
-
|
|
635
|
+
var Lt = /* @__PURE__ */ ((t) => (t.ASSETS_CONFIG_REPO_URL = "ASSETS_CONFIG_REPO_URL", t))(Lt || {});
|
|
636
|
+
const Bt = (t) => f.resolve(
|
|
637
|
+
st(),
|
|
638
|
+
bt,
|
|
632
639
|
`${t}-${ot()}`
|
|
633
|
-
),
|
|
634
|
-
const t =
|
|
635
|
-
|
|
636
|
-
const e = {
|
|
637
|
-
ASSETS_CONFIG_REPO_URL: wt
|
|
640
|
+
), Ft = () => f.resolve(nt(), Dt), xt = async () => {
|
|
641
|
+
const t = Ft(), e = {
|
|
642
|
+
ASSETS_CONFIG_REPO_URL: Nt
|
|
638
643
|
};
|
|
639
644
|
try {
|
|
640
645
|
if (await N(t)) {
|
|
641
646
|
const r = await K(t, {});
|
|
642
|
-
Object.entries(r).forEach(([
|
|
643
|
-
e[
|
|
647
|
+
Object.entries(r).forEach(([n, s]) => {
|
|
648
|
+
e[n] = s;
|
|
644
649
|
});
|
|
645
650
|
}
|
|
646
651
|
} catch {
|
|
647
652
|
}
|
|
648
|
-
return
|
|
649
|
-
},
|
|
650
|
-
if (
|
|
651
|
-
return
|
|
652
|
-
p.red(`${t} 已存在,请手动删除该目录再试`)
|
|
653
|
-
), process.exit(1);
|
|
653
|
+
return e;
|
|
654
|
+
}, jt = async (t) => {
|
|
655
|
+
if (await N(t))
|
|
656
|
+
return a.error(`${t} 已存在,请手动删除该目录再试`), process.exit(1);
|
|
654
657
|
const {
|
|
655
658
|
[
|
|
656
659
|
"ASSETS_CONFIG_REPO_URL"
|
|
657
660
|
/* ASSETS_CONFIG_REPO_URL */
|
|
658
661
|
]: e
|
|
659
|
-
} = await
|
|
660
|
-
return
|
|
662
|
+
} = await xt();
|
|
663
|
+
return Pt(e) || Mt(e) ? g(`git clone ${e} ${t} --depth=1`) : (m.mkdirSync(t, { recursive: !0 }), g(`cp -r ${e}/ ${t}/`)), {
|
|
661
664
|
assetConfigRepoUrl: e
|
|
662
665
|
};
|
|
663
|
-
},
|
|
666
|
+
}, Pe = async ({
|
|
664
667
|
moduleName: t,
|
|
665
668
|
onSuccess: e
|
|
666
|
-
}) => (
|
|
669
|
+
}) => (a.stage(`拉取${t}配置,请稍等...`), Gt({
|
|
667
670
|
// 资源配置仓库临时文件夹
|
|
668
|
-
dir:
|
|
671
|
+
dir: Bt(t),
|
|
669
672
|
fn: async (r) => {
|
|
670
|
-
const { assetConfigRepoUrl:
|
|
671
|
-
|
|
673
|
+
const { assetConfigRepoUrl: n } = await jt(r), s = f.join(
|
|
674
|
+
Tt,
|
|
672
675
|
t
|
|
673
|
-
),
|
|
676
|
+
), o = f.join(
|
|
674
677
|
s,
|
|
675
|
-
|
|
676
|
-
), c =
|
|
678
|
+
wt
|
|
679
|
+
), c = f.resolve(r, o), i = await K(c);
|
|
677
680
|
return await e({
|
|
678
|
-
repoUrl:
|
|
681
|
+
repoUrl: n,
|
|
679
682
|
config: i,
|
|
680
683
|
moduleDirFileRelativePath: s,
|
|
681
|
-
moduleEntryFileRelativePath:
|
|
684
|
+
moduleEntryFileRelativePath: o,
|
|
682
685
|
assetsConfigRepoTempDir: r
|
|
683
686
|
}), i;
|
|
684
687
|
}
|
|
685
688
|
}));
|
|
686
689
|
export {
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
690
|
+
Lt as DoneCodingCliGlobalConfigKeyEnum,
|
|
691
|
+
at as EditorTypeEnum,
|
|
692
|
+
w as GitRefLogTypeEnum,
|
|
693
|
+
d as HooksNameEnum,
|
|
694
|
+
ye as SUPPORT_GET_COMMIT_BY_HOOKS_NAMES,
|
|
695
|
+
je as _curry,
|
|
696
|
+
Le as _get,
|
|
697
|
+
Fe as _set,
|
|
698
|
+
Se as addHuskyHooks,
|
|
699
|
+
pe as addPackageConfig,
|
|
700
|
+
Gt as applyUseTempDir,
|
|
698
701
|
V as assetIsExits,
|
|
699
702
|
N as assetIsExitsAsync,
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
703
|
+
ve as checkCurrentIsRebasing,
|
|
704
|
+
ae as createMainCommand,
|
|
705
|
+
fe as createSubcommand,
|
|
706
|
+
ne as decryptAES,
|
|
707
|
+
se as encryptAES,
|
|
708
|
+
St as fileAddX,
|
|
709
|
+
ie as getAnswerSwift,
|
|
710
|
+
oe as getAnswerWithMCP,
|
|
711
|
+
Bt as getCliModuleTempDir,
|
|
712
|
+
Ee as getCommitByHookName,
|
|
713
|
+
le as getConfigFileCommonOptions,
|
|
714
|
+
Ce as getCurrentBranchLastCommitList,
|
|
715
|
+
he as getCurrentBranchName,
|
|
716
|
+
ft as getEditorType,
|
|
717
|
+
_e as getGitLastCommitInfo,
|
|
718
|
+
At as getGitPath,
|
|
714
719
|
$ as getGitProjectDir,
|
|
715
|
-
|
|
720
|
+
Oe as getLastReflogList,
|
|
721
|
+
ee as getLogText,
|
|
716
722
|
D as getPackageJson,
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
723
|
+
ht as getRelyPkgVersion,
|
|
724
|
+
mt as getRootDirOptions,
|
|
725
|
+
ce as getRootScriptName,
|
|
726
|
+
me as getUseDefaultConfig,
|
|
727
|
+
$e as http2sshGitUrl,
|
|
728
|
+
pt as initConfigFile,
|
|
729
|
+
ue as initHandlerCommon,
|
|
730
|
+
Mt as isHttpGitUrl,
|
|
731
|
+
Pt as isSshGitUrl,
|
|
732
|
+
we as json5,
|
|
733
|
+
a as log,
|
|
734
|
+
re as lookForParentTarget,
|
|
729
735
|
gt as openFileInEditor,
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
+
Ie as pushGitPublishInfoToRemote,
|
|
737
|
+
Pe as readCliModuleAssetsConfig,
|
|
738
|
+
ge as readConfigFile,
|
|
739
|
+
_t as readFile,
|
|
740
|
+
Rt as readFileAsync,
|
|
741
|
+
de as readJsonFile,
|
|
736
742
|
K as readJsonFileAsync,
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
743
|
+
yt as removeAsset,
|
|
744
|
+
Et as removeAssetAsync,
|
|
745
|
+
dt as resolveCheckoutInfoByRefInfo,
|
|
740
746
|
Y as resolveMergeInfoByCommitMsg,
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
747
|
+
Re as resolveMergeInfoByGitReflogAction,
|
|
748
|
+
$t as resolveMergeInfoByRefType,
|
|
749
|
+
Me as rmGitCtrlAsync,
|
|
750
|
+
Ne as uuidv4,
|
|
751
|
+
I as xPrompts
|
|
745
752
|
};
|