@done-coding/cli-utils 0.8.2-alpha.0 → 0.8.2-alpha.1

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 (3) hide show
  1. package/es/index.mjs +607 -345
  2. package/package.json +2 -4
  3. package/types/index.d.ts +153 -7
package/es/index.mjs CHANGED
@@ -1,55 +1,227 @@
1
1
  #!/usr/bin/env node
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";
10
- import F from "json5";
2
+ import { randomUUID as Ct } from "node:crypto";
3
+ import { homedir as W, tmpdir as z } from "node:os";
4
+ import l from "node:path";
5
+ import g, { existsSync as A, mkdirSync as yt, writeFileSync as G, readFileSync as v } from "node:fs";
6
+ import M from "crypto";
7
+ import X from "chalk";
8
+ import Ot from "prompts";
9
+ import Rt from "yargs";
10
+ import { hideBin as vt } from "yargs/helpers";
11
+ import { execSync as Y } from "node:child_process";
12
+ import Z from "json5";
11
13
  export * from "json5";
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";
16
- import { v4 as ot } from "uuid";
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, {
25
- /** 成功 */
26
- success: (...r) => e("green", ...r),
27
- /** /步骤 */
28
- stage: (...r) => e("blue", ...r),
29
- /** 提示信息 */
30
- info: (...r) => e("cyan", ...r),
31
- /** 警告 */
32
- warn: (...r) => e("yellow", ...r),
33
- /** 错误 */
34
- error: (...r) => e("red", ...r),
35
- /** 跳过 */
36
- skip: (...r) => e("gray", ...r)
14
+ import { default as Cr } from "json5";
15
+ import Mt from "lodash.merge";
16
+ import It from "semver";
17
+ import { default as Or } from "lodash.get";
18
+ import { default as vr } from "lodash.set";
19
+ import { default as Ir } from "lodash.curry";
20
+ import R from "pinyin";
21
+ const q = "__DONE_CODING_ENV_CONFIG__", Q = Symbol.for(
22
+ q
23
+ ), F = ".done-coding", $t = `${F}/cli/assets-config`, At = "assets", Pt = "index.json", Nt = `${F}/config.json`, Lt = "output/log", Dt = "default", Tt = "https://gitee.com/justsosu/done-coding-cli-assets-config.git", Gt = /[^a-zA-Z0-9._\-]/, wt = /[^a-zA-Z0-9._\-]/g, xe = (t) => t ? !Gt.test(t) : !1, bt = (t) => (t || "_").replace(wt, "_"), tt = () => {
24
+ const t = /* @__PURE__ */ new Date();
25
+ return `${t.getFullYear()}-${String(t.getMonth() + 1).padStart(2, "0")}-${String(t.getDate()).padStart(2, "0")} ${String(t.getHours()).padStart(2, "0")}:${String(t.getMinutes()).padStart(2, "0")}:${String(t.getSeconds()).padStart(2, "0")}`;
26
+ }, et = () => Ct();
27
+ var Ft = /* @__PURE__ */ ((t) => (t.DEFAULT = "DEFAULT", t.MCP = "MCP", t))(Ft || {}), Bt = /* @__PURE__ */ ((t) => (t.GLOBAL_CONFIG_IMAGE = "GLOBAL_CONFIG_IMAGE", t))(Bt || {});
28
+ const rt = (t) => `${q}_${t}`, st = (t, e) => {
29
+ const r = process.env[rt(t)];
30
+ if (r !== void 0)
31
+ try {
32
+ return JSON.parse(r).value;
33
+ } catch {
34
+ return e;
35
+ }
36
+ else
37
+ return e;
38
+ }, Ut = (t, e) => {
39
+ if (st(t) !== void 0)
40
+ return !1;
41
+ const s = rt(t), n = { value: e };
42
+ return process.env[s] = JSON.stringify(n), !0;
43
+ }, B = () => globalThis[Q], U = (t) => {
44
+ const e = B();
45
+ if (e)
46
+ return e;
47
+ const r = Object.freeze({
48
+ ...t
37
49
  });
38
- }, a = x(console.log), ee = x((t) => t), re = (t, {
50
+ return Object.defineProperty(globalThis, Q, {
51
+ value: r,
52
+ writable: !1,
53
+ enumerable: !1,
54
+ configurable: !1
55
+ }), Ut("GLOBAL_CONFIG_IMAGE", r), r;
56
+ }, nt = () => st(
57
+ "GLOBAL_CONFIG_IMAGE"
58
+ /* GLOBAL_CONFIG_IMAGE */
59
+ ), jt = typeof process.send == "function", ot = (t = Dt) => {
60
+ const e = bt(t);
61
+ return {
62
+ callMode: "DEFAULT",
63
+ series: e,
64
+ consoleLog: !0,
65
+ logOutputDir: `${F}/${e}/${Lt}`,
66
+ processLogFileNameList: []
67
+ };
68
+ }, j = `${tt()}-${et()}`, it = (t) => {
69
+ const e = {
70
+ ...t,
71
+ processLogFileNameList: [
72
+ j,
73
+ ...t.processLogFileNameList
74
+ ].slice(0, 10)
75
+ };
76
+ return U(e);
77
+ }, C = () => {
78
+ const t = B();
79
+ if (t)
80
+ return t;
81
+ const e = nt();
82
+ if (e)
83
+ return it(e);
84
+ {
85
+ const s = {
86
+ ...ot(),
87
+ processLogFileNameList: [j]
88
+ };
89
+ return U(s);
90
+ }
91
+ }, ke = ({
92
+ series: t,
93
+ ...e
94
+ }) => {
95
+ if (jt)
96
+ throw new Error("非顶级进程不允许调用该方法");
97
+ if (B())
98
+ throw new Error(`内存全局配置存在,说明是以下某个原因:
99
+ 1. 顶级进程重复调用initEnvConfig
100
+ 2. 顶级进程在调用该方法之前调用了getApplyConfig, 即获取配置应用的同时会冻结配置 不会后续变化
101
+ ------
102
+ 如果是顶级进程 请第一时间调用,请给对应调用包专门顶级进程才会调用的入口 并调用此方法
103
+ 如 mcp模式入口 需要第一时间调用此方法
104
+ `);
105
+ {
106
+ const s = nt();
107
+ if (s)
108
+ return it(s);
109
+ {
110
+ const o = {
111
+ ...ot(t),
112
+ ...e,
113
+ processLogFileNameList: [j]
114
+ };
115
+ return U(o);
116
+ }
117
+ }
118
+ }, ct = () => C().callMode, xt = () => ct() === "MCP", at = () => xt() ? !1 : C().consoleLog, kt = (t = !1) => l.resolve(
119
+ t ? W() : z(),
120
+ C().logOutputDir
121
+ ), Ht = () => C().processLogFileNameList[0], Jt = () => C().processLogFileNameList[1];
122
+ var m = /* @__PURE__ */ ((t) => (t.SYSTEM = "magenta", t.SUCCESS = "greenBright", t.STAGE = "blue", t.INFO = "white", t.WARN = "yellow", t.ERROR = "redBright", t.SKIP = "dim", t.TABLE = "table", t))(m || {});
123
+ const Yt = Object.entries(m).reduce(
124
+ (t, [e, r]) => (t[r] = e, t),
125
+ {}
126
+ ), Vt = (t) => Yt[t] ?? t, E = /* @__PURE__ */ new Map(), Kt = (t) => {
127
+ const e = l.resolve(t), r = l.dirname(e), s = E.get(e);
128
+ if (s) {
129
+ if (!s.destroyed && s.writable)
130
+ return s;
131
+ E.delete(e);
132
+ }
133
+ g.existsSync(r) || g.mkdirSync(r, { recursive: !0 });
134
+ const n = g.openSync(e, "a"), o = g.createWriteStream(e, {
135
+ fd: n,
136
+ autoClose: !0,
137
+ // 关键:stream 销毁时自动关 fd
138
+ encoding: "utf8",
139
+ highWaterMark: 64 * 1024
140
+ });
141
+ if (o.on("error", () => {
142
+ E.delete(e), o.destroy();
143
+ }), o.on("close", () => {
144
+ E.delete(e);
145
+ }), E.set(e, o), typeof o.fd != "number")
146
+ throw new Error(
147
+ `Failed to get file descriptor from stream for ${o.path}`
148
+ );
149
+ return o;
150
+ };
151
+ process.once("exit", () => {
152
+ for (const t of E.values())
153
+ try {
154
+ t.destroyed || t.end();
155
+ } catch {
156
+ }
157
+ });
158
+ const d = ({
159
+ stream: t,
160
+ type: e,
161
+ content: r
162
+ }) => t.write(
163
+ `[${tt()}] [${Vt(e)}] ${r}
164
+ `
165
+ );
166
+ let V = !1;
167
+ const ft = () => {
168
+ const t = kt(), e = l.resolve(t, Ht()), r = Kt(e);
169
+ if (!V) {
170
+ const s = Jt();
171
+ s && d({
172
+ stream: r,
173
+ type: m.SYSTEM,
174
+ content: `父进程日志文件: ${s}`
175
+ });
176
+ const n = ct();
177
+ d({
178
+ stream: r,
179
+ type: m.SYSTEM,
180
+ content: `当前调用模式: ${n}`
181
+ }), V = !0;
182
+ }
183
+ return r;
184
+ }, Wt = (t, e) => {
185
+ const r = ft(), s = t.map((n) => n instanceof Error ? n.stack || n.message : typeof n == "object" && n !== null ? JSON.stringify(n) : String(n)).join(" ");
186
+ d({
187
+ stream: r,
188
+ type: e,
189
+ content: s
190
+ });
191
+ }, zt = (...[t, ...e]) => at() ? t === m.TABLE ? console.table(...e) : console.log(X[t](...e)) : Wt(e, t), lt = (t) => Object.assign(t, {
192
+ /** 系统 */
193
+ system: (...e) => t(m.SYSTEM, ...e),
194
+ /** 成功 */
195
+ success: (...e) => t(m.SUCCESS, ...e),
196
+ /** /步骤 */
197
+ stage: (...e) => t(m.STAGE, ...e),
198
+ /** 提示信息 */
199
+ info: (...e) => t(m.INFO, ...e),
200
+ /** 警告 */
201
+ warn: (...e) => t(m.WARN, ...e),
202
+ /** 错误 */
203
+ error: (...e) => t(m.ERROR, ...e),
204
+ /** 跳过 */
205
+ skip: (...e) => t(m.SKIP, ...e),
206
+ /** 表格 */
207
+ table: (...e) => t(m.TABLE, ...e)
208
+ }), a = lt(zt), He = lt(
209
+ (t, ...e) => t === m.TABLE ? JSON.stringify(e) : X[t](...e)
210
+ ), Je = (t, {
39
211
  /** 当前目录 */
40
212
  currentDir: e = process.cwd(),
41
213
  /** 优先找最远的父目录 */
42
214
  isFindFarthest: r = !0
43
215
  } = {}) => {
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))
48
- return s;
216
+ const s = l.resolve(e).split(l.sep).map((n, o, c) => c.slice(0, o).concat(n).join(l.sep) || l.sep);
217
+ for (; s.length; ) {
218
+ const n = r ? s.shift() : s.pop(), o = l.join(n, t);
219
+ if (g.existsSync(o))
220
+ return n;
49
221
  }
50
- }, j = "aes-256-cbc", k = 16, C = "hex", T = ":";
51
- function U(t) {
52
- return R.pbkdf2Sync(
222
+ }, ut = "aes-256-cbc", gt = 16, I = "hex", w = ":";
223
+ function pt(t) {
224
+ return M.pbkdf2Sync(
53
225
  t,
54
226
  "done-coding-cli-salt",
55
227
  // 使用固定的盐值
@@ -60,67 +232,67 @@ function U(t) {
60
232
  "sha256"
61
233
  );
62
234
  }
63
- function se({
235
+ function Ye({
64
236
  text: t,
65
237
  secretKey: e
66
238
  }) {
67
239
  try {
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}`;
240
+ const r = pt(e), s = M.randomBytes(gt), n = M.createCipheriv(ut, r, s);
241
+ let o = n.update(t);
242
+ o = Buffer.concat([o, n.final()]);
243
+ const c = s.toString(I), i = o.toString(I);
244
+ return `${c}${w}${i}`;
73
245
  } catch (r) {
74
246
  return a.error(
75
247
  `加密失败: ${r instanceof Error ? r.message : String(r)}`
76
248
  ), "";
77
249
  }
78
250
  }
79
- function ne({
251
+ function Ve({
80
252
  encryptedText: t,
81
253
  secretKey: e
82
254
  }) {
83
255
  try {
84
- if (!t.includes(T))
256
+ if (!t.includes(w))
85
257
  return "";
86
- const r = U(e), [n, s] = t.split(T);
87
- if (n.length !== k * 2)
258
+ const r = pt(e), [s, n] = t.split(w);
259
+ if (s.length !== gt * 2)
88
260
  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();
261
+ const o = Buffer.from(s, I), c = Buffer.from(n, I), i = M.createDecipheriv(ut, r, o);
262
+ let f = i.update(c);
263
+ return f = Buffer.concat([f, i.final()]), f.toString();
92
264
  } catch (r) {
93
265
  return a.error(
94
266
  `解密失败: ${r instanceof Error ? r.message : String(r)}`
95
267
  ), "";
96
268
  }
97
269
  }
98
- const I = (...t) => {
270
+ const P = (...t) => {
99
271
  const [e, r = {}] = t;
100
- return Q(e, {
101
- onCancel(n) {
102
- return a.error(`退出${n == null ? void 0 : n.name}输入`), process.exit(1);
272
+ return Ot(e, {
273
+ onCancel(s) {
274
+ return a.error(`退出${s == null ? void 0 : s.name}输入`), process.exit(1);
103
275
  },
104
276
  ...r
105
277
  });
106
- }, oe = async ({
278
+ }, Ke = async ({
107
279
  isMCP: t,
108
280
  key: e,
109
281
  presetAnswer: r,
110
- defaultValue: n,
111
- questionConfig: s
282
+ defaultValue: s,
283
+ questionConfig: n
112
284
  }) => {
113
285
  if (t) {
114
286
  const o = r == null ? void 0 : r[e];
115
287
  return o === void 0 ? (a.error("MCP场景的约束值不能为空"), process.exit(1)) : o;
116
288
  } 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) => {
289
+ return (r == null ? void 0 : r[e]) ?? s ?? (await P(n))[e];
290
+ }, We = async (t, e) => (await P(e))[t], Xt = (t, e) => {
119
291
  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 = ({
292
+ }, Zt = () => {
293
+ const t = vt(process.argv);
294
+ return Rt(t);
295
+ }, ze = ({
124
296
  rootScriptName: t,
125
297
  packageJson: e
126
298
  }) => {
@@ -128,51 +300,109 @@ const I = (...t) => {
128
300
  return t;
129
301
  if (!e)
130
302
  return;
131
- const { bin: r, name: n } = e;
303
+ const { bin: r, name: s } = e;
132
304
  if (r) {
133
305
  if (typeof r == "string")
134
- return n.includes("/") ? void 0 : n;
306
+ return s.includes("/") ? void 0 : s;
135
307
  if (typeof r == "object") {
136
- const s = Object.entries(r), o = process.argv[1], c = s.filter(([, u]) => o == null ? void 0 : o.endsWith(u));
308
+ const n = Object.entries(r), o = process.argv[1], c = n.filter(([, f]) => o == null ? void 0 : o.endsWith(f));
137
309
  if (c.length !== 1)
138
310
  return;
139
311
  const [i] = c[0];
140
312
  return process.platform === "win32" ? i.toLowerCase() : i;
141
313
  }
142
314
  }
143
- }, H = (t, {
315
+ }, mt = (t, {
144
316
  usage: e,
145
317
  version: r,
146
- demandCommandCount: n,
147
- options: s,
318
+ demandCommandCount: s,
319
+ options: n,
148
320
  positionals: o,
149
321
  subcommands: c,
150
322
  rootScriptName: i
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
323
+ }, f) => {
324
+ let u = t.strict();
325
+ e && (u = u.usage(`Usage: ${e}`)), s && (u = u.demandCommand(s));
326
+ const S = "help";
327
+ return u = u.help(S), r ? u = u.version(r).alias("h", S).alias("v", "version") : u = u.alias("h", S), n && (u = u.options(n)), o && (u = Object.entries(o).reduce((y, [L, h]) => y.positional(L, h), u)), c && (u = u.command(c)), f && i && (u = u.scriptName(i)), u;
328
+ }, Xe = async ({ handler: t, ...e }) => {
329
+ const r = await mt(Zt(), e, !0).fail(
330
+ Xt
159
331
  ).argv;
160
332
  return t ? t(r) : r;
161
- }, fe = (t) => {
162
- const { command: e, describe: r, handler: n = () => {
163
- }, ...s } = t;
333
+ }, Ze = (t) => {
334
+ const { command: e, describe: r, handler: s = () => {
335
+ }, ...n } = t;
164
336
  return {
165
337
  command: e,
166
338
  describe: r,
167
339
  builder(o) {
168
- return H(o, s, !1);
340
+ return mt(o, n, !1);
169
341
  },
170
- handler: n
342
+ handler: s
171
343
  };
344
+ }, qt = (t) => {
345
+ if (!t)
346
+ return ["pipe", "pipe", "pipe"];
347
+ if (typeof t == "string")
348
+ switch (t) {
349
+ case "ignore":
350
+ return ["ignore", "ignore", "ignore"];
351
+ case "inherit":
352
+ return ["inherit", "inherit", "inherit"];
353
+ case "overlapped":
354
+ return ["overlapped", "overlapped", "overlapped"];
355
+ default:
356
+ return ["pipe", "pipe", "pipe"];
357
+ }
358
+ if (Array.isArray(t)) {
359
+ const e = [...t];
360
+ for (let r = 0; r < 3; r++)
361
+ e[r] === void 0 && (e[r] = "pipe");
362
+ return e;
363
+ }
364
+ return ["pipe", "pipe", "pipe"];
365
+ }, p = (t, e) => {
366
+ if (at() || (e == null ? void 0 : e.stdio) === "ignore")
367
+ return Y(t, e);
368
+ const s = ft(), n = s.fd, o = qt(e == null ? void 0 : e.stdio), c = o.map((i, f) => f === 0 ? "ignore" : (f === 1 || f === 2) && (i === "inherit" || i === "overlapped") ? n : i);
369
+ try {
370
+ d({
371
+ stream: s,
372
+ type: m.SYSTEM,
373
+ content: `[子进程任务开始执行] ${t}`
374
+ });
375
+ const i = Y(t, {
376
+ maxBuffer: 1024 * 1024 * 100,
377
+ // 增加到 100MB,防止 pipe 模式下大数据溢出
378
+ ...e,
379
+ stdio: c,
380
+ encoding: (e == null ? void 0 : e.encoding) || "utf-8"
381
+ });
382
+ return i && o[1] === "pipe" ? d({
383
+ stream: s,
384
+ type: m.SYSTEM,
385
+ content: `[任务执行成功返回]: ${i.toString().trim()}`
386
+ }) : d({
387
+ stream: s,
388
+ type: m.SYSTEM,
389
+ content: "[任务执行成功]"
390
+ }), i;
391
+ } catch (i) {
392
+ const f = i.stderr ? `
393
+ STDERR: ${i.stderr}` : "";
394
+ throw d({
395
+ stream: s,
396
+ type: m.ERROR,
397
+ content: `[任务执行失败]: ${t}
398
+ STATUS: ${i.status}
399
+ MSG: ${i.message}${f}`
400
+ }), i;
401
+ }
172
402
  };
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([
403
+ var Qt = /* @__PURE__ */ ((t) => (t.VSCODE = "VsCode", t.CURSOR = "Cursor", t.OTHER = "其他", t))(Qt || {});
404
+ const te = async () => {
405
+ const { editorType: t } = await P([
176
406
  {
177
407
  name: "editorType",
178
408
  type: "select",
@@ -189,32 +419,32 @@ const ft = async () => {
189
419
  }
190
420
  ]);
191
421
  return t;
192
- }, lt = {
422
+ }, ee = {
193
423
  Cursor: "cursor",
194
424
  VsCode: "code"
195
- }, ut = (t, e, r) => {
425
+ }, re = (t, e, r) => {
196
426
  try {
197
- g(`${t} -v`, { stdio: "ignore" }), g(`${t} ${e}`);
427
+ p(`${t} -v`, { stdio: "ignore" }), p(`${t} ${e}`);
198
428
  } catch {
199
429
  r();
200
430
  }
201
- }, gt = (t, e) => {
202
- const r = (n) => a.info(`
203
- ${n}, 请用编辑器打开 ${t} 进行编辑
431
+ }, se = (t, e) => {
432
+ const r = (s) => a.info(`
433
+ ${s}, 请用编辑器打开 ${t} 进行编辑
204
434
  `);
205
435
  switch (e) {
206
436
  case "Cursor":
207
437
  case "VsCode": {
208
- const n = lt[e];
209
- ut(n, t, () => {
210
- r(`${n}命令未安装`);
438
+ const s = ee[e];
439
+ re(s, t, () => {
440
+ r(`${s}命令未安装`);
211
441
  });
212
442
  break;
213
443
  }
214
444
  default:
215
445
  r("其他编辑器");
216
446
  }
217
- }, mt = (t = process.cwd()) => ({
447
+ }, ne = (t = process.cwd()) => ({
218
448
  /** 必须保留 */
219
449
  rootDir: {
220
450
  type: "string",
@@ -223,12 +453,12 @@ const ft = async () => {
223
453
  /** 必须设置默认值 */
224
454
  default: t
225
455
  }
226
- }), le = ({
456
+ }), qe = ({
227
457
  configPathDefault: t,
228
458
  rootDirDefault: e
229
459
  }) => ({
230
460
  /** 必须保留 */
231
- ...mt(e),
461
+ ...ne(e),
232
462
  /** 必须保留 */
233
463
  configPath: {
234
464
  type: "string",
@@ -237,233 +467,243 @@ const ft = async () => {
237
467
  /** 必须设置默认值 */
238
468
  default: t
239
469
  }
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, {
470
+ }), oe = async (t, e) => {
471
+ const { configPath: r, rootDir: s } = e, n = l.resolve(s, r), o = l.dirname(n);
472
+ return A(o) || yt(o, {
243
473
  recursive: !0
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, {
474
+ }), n.endsWith(".json5") ? (a.info(`json5模式写入 ${n}`), G(n, Z.stringify(t, null, 2)), n) : (a.info(`json模式写入 ${n}`), G(n, JSON.stringify(t, null, 2)), n);
475
+ }, Qe = async (t, e, {
246
476
  onFileGenerated: r,
247
- edit: n = !1
477
+ edit: s = !1
248
478
  } = {}) => {
249
- const s = await pt(t, e);
250
- if (r == null || r(s), n) {
251
- const o = await ft();
252
- gt(e.configPath, o);
479
+ const n = await oe(t, e);
480
+ if (r == null || r(n), s) {
481
+ const o = await te();
482
+ se(e.configPath, o);
253
483
  }
254
- }, ge = async (t, e) => {
255
- const { configPath: r, rootDir: n } = t, s = f.resolve(n, r);
256
- if (!v(s)) {
484
+ }, tr = async (t, e) => {
485
+ const { configPath: r, rootDir: s } = t, n = l.resolve(s, r);
486
+ if (!A(n)) {
257
487
  if (e)
258
488
  return a.info("配置文件不存在,使用onNotExists返回值"), e();
259
- const o = `配置文件不存在 ${s}`;
489
+ const o = `配置文件不存在 ${n}`;
260
490
  throw new Error(o);
261
491
  }
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({
492
+ return n.endsWith(".json5") ? (a.info(`json5模式解析 ${n}`), Z.parse(v(n, "utf8"))) : (a.info(`json模式解析 ${n}`), JSON.parse(v(n, "utf8")));
493
+ }, er = async () => {
494
+ const { useDefaultConfig: t } = await P({
265
495
  name: "useDefaultConfig",
266
496
  type: "confirm",
267
497
  message: "使用默认模板配置",
268
498
  initial: !0
269
499
  });
270
500
  return t;
271
- }, J = "package.json", D = ({
501
+ }, St = "package.json", x = ({
272
502
  rootDir: t
273
503
  }) => {
274
- const e = f.resolve(t, J);
275
- if (!v(e))
504
+ const e = l.resolve(t, St);
505
+ if (!A(e))
276
506
  throw new Error(`${t}未找到package.json文件`);
277
- const r = _(e, "utf-8");
507
+ const r = v(e, "utf-8");
278
508
  return JSON.parse(r);
279
- }, ht = ({
509
+ }, ie = ({
280
510
  rootDir: t,
281
511
  pkgJson: e,
282
512
  pkgName: r,
283
- isDevPkg: n
513
+ isDevPkg: s
284
514
  }) => {
285
- const s = e || D({ rootDir: t }), o = n ? s.devDependencies : s.dependencies;
515
+ const n = e || x({ rootDir: t }), o = s ? n.devDependencies : n.dependencies;
286
516
  let c = o == null ? void 0 : o[r];
287
517
  if (!c) {
288
- const i = n ? s.dependencies : s.devDependencies;
518
+ const i = s ? n.dependencies : n.devDependencies;
289
519
  c = i == null ? void 0 : i[r], c && a.warn(
290
- `${n ? "开发" : "生产"}依赖包${r}可能错误的安装在${n ? "dependencies" : "devDependencies"}`
520
+ `${s ? "开发" : "生产"}依赖包${r}可能错误的安装在${s ? "dependencies" : "devDependencies"}`
291
521
  );
292
522
  return;
293
523
  }
294
524
  return c || a.info(`依赖包${r}未安装`), c;
295
- }, pe = ({
525
+ }, rr = ({
296
526
  patchConfig: t,
297
527
  rootDir: e
298
528
  }) => {
299
529
  if (!t)
300
530
  return;
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");
303
- }, $ = (t) => {
304
- const r = g("git rev-parse --show-toplevel", {
531
+ const r = x({ rootDir: e }), s = Mt(r, t), n = l.resolve(e, St);
532
+ G(n, JSON.stringify(s, null, 2), "utf-8");
533
+ }, N = (t) => {
534
+ const r = p("git rev-parse --show-toplevel", {
305
535
  cwd: t
306
536
  }).toString();
307
537
  if (!r)
308
538
  throw new Error("获取git根目录失败");
309
539
  return r.trim();
310
- }, he = () => {
540
+ }, sr = () => {
311
541
  var t;
312
542
  try {
313
- const e = g("git symbolic-ref --short HEAD", {
543
+ const e = p("git symbolic-ref --short HEAD", {
314
544
  stdio: "ignore"
315
545
  });
316
546
  return (t = e == null ? void 0 : e.toString()) == null ? void 0 : t.trim();
317
547
  } catch {
318
548
  try {
319
- const r = g("git rev-parse --short HEAD").toString().trim();
549
+ const r = p("git rev-parse --short HEAD").toString().trim();
320
550
  a.skip(`当前未指向具体某个分支, 当前commit hash: ${r}`);
321
551
  } finally {
322
552
  return;
323
553
  }
324
554
  }
325
- }, dt = (t) => {
555
+ }, ce = (t) => {
326
556
  const e = t.match(/moving\s+from\s+(.*)\s+to\s+(.*)/);
327
557
  if (e) {
328
- const [, r, n] = e;
558
+ const [, r, s] = e;
329
559
  return {
330
560
  fromBranch: r.trim(),
331
- toBranch: n.trim()
561
+ toBranch: s.trim()
332
562
  };
333
563
  }
334
- }, A = 73, St = (t) => {
335
- const r = m.statSync(t).mode;
336
- if ((r & A) === A)
564
+ }, T = 73, ae = (t) => {
565
+ const r = g.statSync(t).mode;
566
+ if ((r & T) === T)
337
567
  return;
338
568
  a.stage(`${t} 没有执行权限 添加... `);
339
- const n = r | A;
340
- m.chmodSync(t, n), a.success(`${t} 添加执行权限成功`);
341
- }, V = (t) => m.existsSync(t), N = async (t) => {
569
+ const s = r | T;
570
+ g.chmodSync(t, s), a.success(`${t} 添加执行权限成功`);
571
+ }, ht = (t) => g.existsSync(t), k = async (t) => {
342
572
  try {
343
- return await m.promises.lstat(t), !0;
573
+ return await g.promises.lstat(t), !0;
344
574
  } catch (e) {
345
575
  return e.code !== "ENOENT";
346
576
  }
347
- }, yt = (t, e = !1) => {
348
- V(t) && m.rmSync(t, { recursive: !0, force: e });
349
- }, Et = async (t, e = !1) => {
350
- await N(t) && await m.promises.rm(t, { recursive: !0, force: e });
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({
577
+ }, fe = (t, e = !1) => {
578
+ ht(t) && g.rmSync(t, { recursive: !0, force: e });
579
+ }, le = async (t, e = !1) => {
580
+ await k(t) && await g.promises.rm(t, { recursive: !0, force: e });
581
+ }, ue = (t) => g.readFileSync(t, "utf-8"), ge = (t) => g.promises.readFile(t, "utf-8"), nr = (t, e) => JSON.parse(ue(t)) || e, dt = async (t, e) => JSON.parse(await ge(t)) || e;
582
+ var _ = /* @__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))(_ || {});
583
+ const pe = "husky", me = ".husky", Se = ({ rootDir: t }) => {
584
+ const e = N(t), r = ie({
355
585
  rootDir: e,
356
- pkgJson: D({ rootDir: e }),
357
- pkgName: Ct,
586
+ pkgJson: x({ rootDir: e }),
587
+ pkgName: pe,
358
588
  isDevPkg: !0
359
589
  });
360
590
  if (!r)
361
591
  throw new Error("husky版本获取失败, 可能husky未安装");
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 }) => {
366
- const e = $(t);
367
- return f.resolve(e, Ot);
368
- }, Se = ({
592
+ const s = r.replace(/^(\^|~)/, ""), n = "<9.0.0";
593
+ return It.satisfies(s, n) ? (a.info(`${s}符合${n}`), `#!/usr/bin/env sh
594
+ . "$(dirname -- "$0")/_/husky.sh"`) : (a.info(`${s}不符合${n}`), "");
595
+ }, he = ({ rootDir: t }) => {
596
+ const e = N(t);
597
+ return l.resolve(e, me);
598
+ }, or = ({
369
599
  hookNames: t,
370
600
  rootDir: e,
371
601
  getCode: r
372
602
  }) => {
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);
376
- let i = r(s);
603
+ const s = he({ rootDir: e });
604
+ g.existsSync(s) || g.mkdirSync(s, { recursive: !0 }), t.forEach((n) => {
605
+ const o = l.resolve(s, n), c = g.existsSync(o);
606
+ let i = r(n);
377
607
  if (c)
378
- m.readFileSync(o, "utf-8").includes(i) ? a.skip(`${o} ${s}相关调用 ${i} 已存在 跳过`) : (m.appendFileSync(
608
+ g.readFileSync(o, "utf-8").includes(i) ? a.skip(`${o} ${n}相关调用 ${i} 已存在 跳过`) : (g.appendFileSync(
379
609
  o,
380
610
  `
381
611
  ${i}
382
612
  `
383
- ), a.success(`${o} 添加 ${s}相关调用成功`));
613
+ ), a.success(`${o} 添加 ${n}相关调用成功`));
384
614
  else {
385
- const u = vt({
615
+ const f = Se({
386
616
  rootDir: e
387
617
  });
388
- m.writeFileSync(
618
+ g.writeFileSync(
389
619
  o,
390
- `${u}
620
+ `${f}
391
621
 
392
622
  ${i}
393
623
  `,
394
624
  "utf-8"
395
- ), a.success(`${o} 添加 ${s}相关调用成功`);
625
+ ), a.success(`${o} 添加 ${n}相关调用成功`);
396
626
  }
397
- St(o);
627
+ ae(o);
398
628
  });
399
- }, ye = [
629
+ }, ir = [
400
630
  // HooksNameEnum.PRE_MERGE_COMMIT,
401
- d.PREPARE_COMMIT_MSG,
402
- d.COMMIT_MSG
403
- ], Ee = ({
631
+ _.PREPARE_COMMIT_MSG,
632
+ _.COMMIT_MSG
633
+ ], cr = ({
404
634
  hookName: t,
405
635
  rootDir: e
406
636
  }) => {
407
- const r = $(e), n = f.resolve(r, ".git");
637
+ const r = N(e), s = l.resolve(r, ".git");
408
638
  switch (t) {
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");
639
+ case _.PREPARE_COMMIT_MSG:
640
+ case _.COMMIT_MSG: {
641
+ const n = l.resolve(s, "MERGE_MSG");
642
+ if (A(n))
643
+ return v(n, "utf-8");
414
644
  }
415
645
  }
416
646
  return "";
417
- }, _e = ({
647
+ }, ar = ({
418
648
  remoteAlias: t = "origin"
419
649
  } = {}) => {
420
650
  try {
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 = "";
651
+ const e = p("git rev-parse HEAD").toString().trim(), r = p(
652
+ 'git log -1 --pretty=format:"%an"'
653
+ ).toString().trim(), s = p(
654
+ 'git log -1 --pretty=format:"%ae"'
655
+ ).toString().trim(), n = p(
656
+ 'git log -1 --pretty=format:"%s"'
657
+ ).toString().trim(), o = p("git config user.name").toString().trim(), c = p("git config user.email").toString().trim(), i = p(
658
+ "git rev-parse --abbrev-ref HEAD"
659
+ ).toString().trim();
660
+ let f = "";
423
661
  try {
424
- u = g(`git config --get remote.${t}.url`).toString().trim();
662
+ f = p(
663
+ `git config --get remote.${t}.url`
664
+ ).toString().trim();
425
665
  } catch {
426
666
  a.warn("git远程仓库地址获取失败或者不存在");
427
667
  }
428
668
  return {
429
669
  lastHash: e,
430
670
  lastCommitter: r,
431
- lastCommitterPinYin: E(r, {
432
- style: E.STYLE_NORMAL,
671
+ lastCommitterPinYin: R(r, {
672
+ style: R.STYLE_NORMAL,
433
673
  heteronym: !1
434
674
  }).join(""),
435
- lastCommitEmail: n,
436
- lastCommitMsg: s,
675
+ lastCommitEmail: s,
676
+ lastCommitMsg: n,
437
677
  userName: o,
438
- userNamePinYin: E(o, {
439
- style: E.STYLE_NORMAL,
678
+ userNamePinYin: R(o, {
679
+ style: R.STYLE_NORMAL,
440
680
  heteronym: !1
441
681
  }).join(""),
442
682
  userEmail: c,
443
683
  branchName: i,
444
- remoteInfo: u ? {
684
+ remoteInfo: f ? {
445
685
  alias: t,
446
- url: u
686
+ url: f
447
687
  } : void 0
448
688
  };
449
689
  } catch (e) {
450
690
  throw a.error("获取git最后提交信息失败"), e;
451
691
  }
452
- }, Y = (t = "") => {
692
+ }, Et = (t = "") => {
453
693
  const e = /\s*Merge\s+branch\s+['|"](.+)['|"]\s+into\s+['|"](.+)['|"]\s*/i, r = t.match(e);
454
694
  if (r) {
455
- const [, i, u] = r;
695
+ const [, i, f] = r;
456
696
  return {
457
697
  fromBranch: i,
458
- toBranch: u
698
+ toBranch: f
459
699
  };
460
700
  }
461
- const n = /\s*Merge\s+branch\s+['|"](.+)['|"]\s+of\s+.+\s+into\s+['|"](.+)['|"]\s*/i, s = t.match(n);
462
- if (s) {
463
- const [, i, u] = s;
701
+ const s = /\s*Merge\s+branch\s+['|"](.+)['|"]\s+of\s+.+\s+into\s+['|"](.+)['|"]\s*/i, n = t.match(s);
702
+ if (n) {
703
+ const [, i, f] = n;
464
704
  return {
465
705
  fromBranch: i,
466
- toBranch: u
706
+ toBranch: f
467
707
  };
468
708
  }
469
709
  const o = /\s*Merge\s+branch\s+['|"](.+)['|"](\s+of)?\s*/i, c = t.match(o);
@@ -473,12 +713,12 @@ ${i}
473
713
  fromBranch: i
474
714
  };
475
715
  }
476
- }, $t = (t) => {
477
- if (t.startsWith(w.MERGE))
716
+ }, de = (t) => {
717
+ if (t.startsWith(b.MERGE))
478
718
  return {
479
- fromBranch: t.replace(w.MERGE, "").trim()
719
+ fromBranch: t.replace(b.MERGE, "").trim()
480
720
  };
481
- }, Re = () => {
721
+ }, fr = () => {
482
722
  const t = process.env.GIT_REFLOG_ACTION || "";
483
723
  if (!t)
484
724
  return;
@@ -489,23 +729,23 @@ ${i}
489
729
  fromBranch: o
490
730
  };
491
731
  }
492
- const n = /pull\s+([^\s]+)\s+([^\s]+)/, s = t.match(n);
493
- if (s) {
494
- const [, , o] = s;
732
+ const s = /pull\s+([^\s]+)\s+([^\s]+)/, n = t.match(s);
733
+ if (n) {
734
+ const [, , o] = n;
495
735
  return {
496
736
  fromBranch: o
497
737
  };
498
738
  }
499
739
  };
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 = {
740
+ var b = /* @__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))(b || {});
741
+ const K = "__GIT_REPLACE_MARK__", $ = {
502
742
  stringify(t) {
503
- return JSON.stringify(t).replace(/"/g, B);
743
+ return JSON.stringify(t).replace(/"/g, K);
504
744
  },
505
745
  parse(t) {
506
- return JSON.parse(t.replace(new RegExp(B, "g"), '"'));
746
+ return JSON.parse(t.replace(new RegExp(K, "g"), '"'));
507
747
  }
508
- }, Ce = ({
748
+ }, lr = ({
509
749
  count: t = 100
510
750
  } = {}) => {
511
751
  if (t <= 0)
@@ -527,19 +767,19 @@ const B = "__GIT_REPLACE_MARK__", O = {
527
767
  /** 提交日期 */
528
768
  commitTime: "%ci"
529
769
  };
530
- return g(
531
- `git --no-pager log --oneline -n ${t} --pretty=format:"${O.stringify(
770
+ return p(
771
+ `git --no-pager log --oneline -n ${t} --pretty=format:"${$.stringify(
532
772
  e
533
773
  )}"`
534
774
  ).toString().split(`
535
775
  `).map((o) => {
536
- const c = O.parse(o);
776
+ const c = $.parse(o);
537
777
  return {
538
778
  ...c,
539
- mergeInfo: Y(c.message)
779
+ mergeInfo: Et(c.message)
540
780
  };
541
781
  });
542
- }, Oe = ({
782
+ }, ur = ({
543
783
  count: t = 100,
544
784
  filterItem: e = () => !0
545
785
  } = {}) => {
@@ -552,201 +792,223 @@ const B = "__GIT_REPLACE_MARK__", O = {
552
792
  committerEmail: "%ce",
553
793
  commitTime: "%ci"
554
794
  };
555
- return g(
556
- `git --no-pager reflog -n ${t} --pretty=format:"${O.stringify(
795
+ return p(
796
+ `git --no-pager reflog -n ${t} --pretty=format:"${$.stringify(
557
797
  r
558
798
  )}"`
559
799
  ).toString().split(`
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;
800
+ `).map((i) => $.parse(i)).filter(e).map((i) => {
801
+ const { fullMessage: f, ...u } = i, S = ":", [y] = f.split(S, 1), L = f.slice(`${y}${S}`.length), h = y.trim(), O = L.trim();
802
+ let D, H, _t;
563
803
  if (h.startsWith(
564
804
  "checkout"
565
805
  /* CHECKOUT */
566
806
  ))
567
- G = dt(y);
807
+ H = ce(O);
568
808
  else if (h.startsWith(
569
809
  "merge"
570
810
  /* MERGE */
571
811
  ))
572
- P = $t(h);
812
+ D = de(h);
573
813
  else if (h.startsWith(
574
814
  "commit (merge)"
575
815
  /* COMMIT_MERGE */
576
816
  )) {
577
- const L = Y(y);
578
- L || a.warn(
579
- `${i.hash} 是合并提交 但是未从提交信息(${y})中检测到合并分支信息,推测手动更改了提交内容`
580
- ), P = L;
817
+ const J = Et(O);
818
+ J || a.warn(
819
+ `${i.hash} 是合并提交 但是未从提交信息(${O})中检测到合并分支信息,推测手动更改了提交内容`
820
+ ), D = J;
581
821
  }
582
822
  return {
583
- ...l,
823
+ ...u,
584
824
  type: h,
585
- message: y,
586
- mergeInfo: P,
587
- checkoutInfo: G,
588
- rebaseInfo: X
825
+ message: O,
826
+ mergeInfo: D,
827
+ checkoutInfo: H,
828
+ rebaseInfo: _t
589
829
  };
590
830
  });
591
- }, ve = (t) => {
592
- const e = $(t), r = f.resolve(e, ".git"), n = f.resolve(r, "rebase-merge");
593
- if (m.existsSync(n))
831
+ }, gr = (t) => {
832
+ const e = N(t), r = l.resolve(e, ".git"), s = l.resolve(r, "rebase-merge");
833
+ if (g.existsSync(s))
594
834
  return !0;
595
- const s = f.resolve(r, "rebase-apply");
596
- if (m.existsSync(s))
835
+ const n = l.resolve(r, "rebase-apply");
836
+ if (g.existsSync(n))
597
837
  return !0;
598
- const o = f.resolve(r, "REBASE_HEAD");
599
- return !!m.existsSync(o);
600
- }, Ie = ({
838
+ const o = l.resolve(r, "REBASE_HEAD");
839
+ return !!g.existsSync(o);
840
+ }, pr = ({
601
841
  branchName: t,
602
842
  version: e,
603
843
  remoteInfo: r
604
844
  }) => {
605
- r && (g(`git push ${r.alias} v${e}`, {
845
+ r && (p(`git push ${r.alias} v${e}`, {
606
846
  stdio: "inherit"
607
- }), g(`git push ${r.alias} ${t}`, {
847
+ }), p(`git push ${r.alias} ${t}`, {
608
848
  stdio: "inherit"
609
849
  }));
610
- }, Mt = (t) => /^https?:\/\//.test(t), Pt = (t) => /^git@/.test(t), $e = (t) => {
850
+ }, Ee = (t) => /^https?:\/\//.test(t), _e = (t) => /^git@/.test(t), mr = (t) => {
611
851
  const { hostname: e, pathname: r } = new URL(t);
612
852
  return `git@${e}:${r.replace("/", "")}`;
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 = ({
853
+ }, Ce = (t) => l.resolve(t, ".git"), Sr = (t) => le(Ce(t)), ye = ({
614
854
  dir: t,
615
855
  fn: e,
616
856
  endClear: r = !0,
617
- exitClear: n = !0
857
+ exitClear: s = !0
618
858
  }) => {
619
- if (V(t))
859
+ if (ht(t))
620
860
  return a.error(`${t} 已存在,请手动删除该目录再试`), process.exit(1);
621
- const s = () => {
622
- a.stage("正在清理临时目录...", t), yt(t);
861
+ const n = () => {
862
+ a.stage("正在清理临时目录...", t), fe(t);
623
863
  };
624
- n && process.once("exit", () => {
625
- a.stage("发现进程退出,正在清理临时目录...", t), s();
864
+ s && process.once("exit", () => {
865
+ a.stage("发现进程退出,正在清理临时目录...", t), n();
626
866
  });
627
867
  let o;
628
868
  try {
629
869
  o = e(t);
630
870
  } catch (c) {
631
- throw r && s(), c;
871
+ throw r && n(), c;
632
872
  }
633
- return r && (o instanceof Promise ? o.finally(s) : s()), o;
873
+ return r && (o instanceof Promise ? o.finally(n) : n()), o;
634
874
  };
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,
639
- `${t}-${ot()}`
640
- ), Ft = () => f.resolve(nt(), Dt), xt = async () => {
641
- const t = Ft(), e = {
642
- ASSETS_CONFIG_REPO_URL: Nt
875
+ var Oe = /* @__PURE__ */ ((t) => (t.ASSETS_CONFIG_REPO_URL = "ASSETS_CONFIG_REPO_URL", t))(Oe || {});
876
+ const Re = (t) => l.resolve(
877
+ z(),
878
+ $t,
879
+ `${t}-${et()}`
880
+ ), ve = () => l.resolve(W(), Nt), Me = async () => {
881
+ const t = ve(), e = {
882
+ ASSETS_CONFIG_REPO_URL: Tt
643
883
  };
644
884
  try {
645
- if (await N(t)) {
646
- const r = await K(t, {});
647
- Object.entries(r).forEach(([n, s]) => {
648
- e[n] = s;
885
+ if (await k(t)) {
886
+ const r = await dt(t, {});
887
+ Object.entries(r).forEach(([s, n]) => {
888
+ e[s] = n;
649
889
  });
650
890
  }
651
891
  } catch {
652
892
  }
653
893
  return e;
654
- }, jt = async (t) => {
655
- if (await N(t))
894
+ }, Ie = async (t) => {
895
+ if (await k(t))
656
896
  return a.error(`${t} 已存在,请手动删除该目录再试`), process.exit(1);
657
897
  const {
658
898
  [
659
899
  "ASSETS_CONFIG_REPO_URL"
660
900
  /* ASSETS_CONFIG_REPO_URL */
661
901
  ]: e
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}/`)), {
902
+ } = await Me();
903
+ return _e(e) || Ee(e) ? p(
904
+ `git clone ${e} ${t} --depth=1`
905
+ ) : (g.mkdirSync(t, { recursive: !0 }), p(
906
+ `cp -r ${e}/ ${t}/`
907
+ )), {
664
908
  assetConfigRepoUrl: e
665
909
  };
666
- }, Pe = async ({
910
+ }, hr = async ({
667
911
  moduleName: t,
668
912
  onSuccess: e
669
- }) => (a.stage(`拉取${t}配置,请稍等...`), Gt({
913
+ }) => (a.stage(`拉取${t}配置,请稍等...`), ye({
670
914
  // 资源配置仓库临时文件夹
671
- dir: Bt(t),
915
+ dir: Re(t),
672
916
  fn: async (r) => {
673
- const { assetConfigRepoUrl: n } = await jt(r), s = f.join(
674
- Tt,
917
+ const { assetConfigRepoUrl: s } = await Ie(r), n = l.join(
918
+ At,
675
919
  t
676
- ), o = f.join(
677
- s,
678
- wt
679
- ), c = f.resolve(r, o), i = await K(c);
920
+ ), o = l.join(
921
+ n,
922
+ Pt
923
+ ), c = l.resolve(r, o), i = await dt(c);
680
924
  return await e({
681
- repoUrl: n,
925
+ repoUrl: s,
682
926
  config: i,
683
- moduleDirFileRelativePath: s,
927
+ moduleDirFileRelativePath: n,
684
928
  moduleEntryFileRelativePath: o,
685
929
  assetsConfigRepoTempDir: r
686
930
  }), i;
687
931
  }
688
932
  }));
689
933
  export {
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,
701
- V as assetIsExits,
702
- N as assetIsExitsAsync,
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,
719
- $ as getGitProjectDir,
720
- Oe as getLastReflogList,
721
- ee as getLogText,
722
- D as getPackageJson,
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,
934
+ Oe as DoneCodingCliGlobalConfigKeyEnum,
935
+ Qt as EditorTypeEnum,
936
+ Ft as EnvConfigCallModeEnum,
937
+ Bt as EnvConfigProcessKeyEnum,
938
+ b as GitRefLogTypeEnum,
939
+ _ as HooksNameEnum,
940
+ m as LogTypeEnum,
941
+ ir as SUPPORT_GET_COMMIT_BY_HOOKS_NAMES,
942
+ Ir as _curry,
943
+ Or as _get,
944
+ vr as _set,
945
+ or as addHuskyHooks,
946
+ rr as addPackageConfig,
947
+ at as allowConsoleLog,
948
+ ye as applyUseTempDir,
949
+ ht as assetIsExits,
950
+ k as assetIsExitsAsync,
951
+ gr as checkCurrentIsRebasing,
952
+ Xe as createMainCommand,
953
+ Ze as createSubcommand,
954
+ Ve as decryptAES,
955
+ Ye as encryptAES,
956
+ p as execSyncWithLogDispatch,
957
+ ae as fileAddX,
958
+ d as formatLogSteamWrite,
959
+ We as getAnswerSwift,
960
+ Ke as getAnswerWithMCP,
961
+ ct as getCallMode,
962
+ Re as getCliModuleTempDir,
963
+ cr as getCommitByHookName,
964
+ qe as getConfigFileCommonOptions,
965
+ lr as getCurrentBranchLastCommitList,
966
+ sr as getCurrentBranchName,
967
+ Ht as getCurrentProcessLogFileName,
968
+ te as getEditorType,
969
+ ar as getGitLastCommitInfo,
970
+ Ce as getGitPath,
971
+ N as getGitProjectDir,
972
+ ur as getLastReflogList,
973
+ kt as getLogOutputDir,
974
+ He as getLogText,
975
+ tt as getLogTime,
976
+ Vt as getLogTypeByValue,
977
+ x as getPackageJson,
978
+ Jt as getParentProcessLogFileName,
979
+ st as getProcessEnv,
980
+ ft as getProcessLogStream,
981
+ ie as getRelyPkgVersion,
982
+ ne as getRootDirOptions,
983
+ ze as getRootScriptName,
984
+ bt as getSafePath,
985
+ er as getUseDefaultConfig,
986
+ mr as http2sshGitUrl,
987
+ oe as initConfigFile,
988
+ ke as initEnvConfig,
989
+ Qe as initHandlerCommon,
990
+ Ee as isHttpGitUrl,
991
+ xt as isMcpMode,
992
+ _e as isSshGitUrl,
993
+ Cr as json5,
733
994
  a as log,
734
- re as lookForParentTarget,
735
- gt as openFileInEditor,
736
- Ie as pushGitPublishInfoToRemote,
737
- Pe as readCliModuleAssetsConfig,
738
- ge as readConfigFile,
739
- _t as readFile,
740
- Rt as readFileAsync,
741
- de as readJsonFile,
742
- K as readJsonFileAsync,
743
- yt as removeAsset,
744
- Et as removeAssetAsync,
745
- dt as resolveCheckoutInfoByRefInfo,
746
- Y as resolveMergeInfoByCommitMsg,
747
- Re as resolveMergeInfoByGitReflogAction,
748
- $t as resolveMergeInfoByRefType,
749
- Me as rmGitCtrlAsync,
750
- Ne as uuidv4,
751
- I as xPrompts
995
+ Je as lookForParentTarget,
996
+ se as openFileInEditor,
997
+ xe as pathIsSafe,
998
+ pr as pushGitPublishInfoToRemote,
999
+ hr as readCliModuleAssetsConfig,
1000
+ tr as readConfigFile,
1001
+ ue as readFile,
1002
+ ge as readFileAsync,
1003
+ nr as readJsonFile,
1004
+ dt as readJsonFileAsync,
1005
+ fe as removeAsset,
1006
+ le as removeAssetAsync,
1007
+ ce as resolveCheckoutInfoByRefInfo,
1008
+ Et as resolveMergeInfoByCommitMsg,
1009
+ fr as resolveMergeInfoByGitReflogAction,
1010
+ de as resolveMergeInfoByRefType,
1011
+ Sr as rmGitCtrlAsync,
1012
+ et as uuidv4,
1013
+ P as xPrompts
752
1014
  };