dnmp 0.0.0-alpha.0.2 → 0.0.0-alpha.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.mjs CHANGED
@@ -1,12 +1,17 @@
1
- import { cancel, intro, isCancel, outro, select, text } from "@clack/prompts";
1
+ import * as process$2 from "node:process";
2
+ import process$1 from "node:process";
2
3
  import cac from "cac";
4
+ import { readFile, writeFile } from "node:fs/promises";
3
5
  import { resolve } from "node:path";
4
- import { x } from "tinyexec";
5
- import { writeFile } from "node:fs/promises";
6
- import { createJiti } from "jiti";
7
- import fs from "node:fs";
6
+ import { cancel, confirm, intro, isCancel, outro, select, text } from "@clack/prompts";
7
+ import { findUp } from "find-up";
8
+ import fs, { readFileSync } from "node:fs";
9
+ import { glob } from "glob";
10
+ import { parse } from "yaml";
8
11
  import boxen from "boxen";
9
- import * as process$1 from "node:process";
12
+ import { createJiti } from "jiti";
13
+ import { x } from "tinyexec";
14
+ import semver from "semver";
10
15
 
11
16
  //#region rolldown:runtime
12
17
  var __create = Object.create;
@@ -111,27 +116,7 @@ const CACHE_FOLDER_NAME = ".cache";
111
116
  const CACHE_FILE_NAME = "token.ts";
112
117
  const CACHE_TOKEN_FILE_PATH = `${CACHE_FOLDER_NAME}/${CACHE_FILE_NAME}`;
113
118
  const CUSTOM_RELEASE_PREFIX = "custom";
114
-
115
- //#endregion
116
- //#region src/config.ts
117
- const CURRENT_PATH = resolve(import.meta.dirname, "../");
118
- const resolveConfig = async () => {
119
- return {
120
- cwd: CURRENT_PATH,
121
- root: process.cwd(),
122
- tokenFile: resolve(CURRENT_PATH, `${CACHE_TOKEN_FILE_PATH}`),
123
- token: ""
124
- };
125
- };
126
-
127
- //#endregion
128
- //#region src/runCommand.ts
129
- const runCommand = async (config, command, args) => {
130
- await x(command, args, { nodeOptions: {
131
- stdio: "inherit",
132
- cwd: config.root
133
- } });
134
- };
119
+ const CANCEL_PROCESS = "Current operation canceled.";
135
120
 
136
121
  //#endregion
137
122
  //#region src/utils.ts
@@ -147,136 +132,420 @@ const printWarning = (message) => console.log(boxen(message, {
147
132
  borderStyle: "round",
148
133
  borderColor: "yellow"
149
134
  }));
135
+ const isCancelProcess = (value, message = CANCEL_PROCESS) => {
136
+ if (isCancel(value)) {
137
+ cancel(message);
138
+ return process.exit(0);
139
+ }
140
+ };
141
+ const loaderTs = async (path) => {
142
+ return await createJiti(path).import(path, { default: true });
143
+ };
150
144
 
151
145
  //#endregion
152
146
  //#region src/token.ts
153
- const setToken = async (config, token) => {
147
+ const setToken = async (config, token$1) => {
154
148
  createDir(resolve(config.cwd, CACHE_FOLDER_NAME));
155
- await writeFile(config.tokenFile, `export default "${token}"`);
149
+ await writeFile(config.token.file, `export default "${token$1}"`);
156
150
  };
157
151
  const loaderToken = async (config) => {
158
- return await createJiti(config.cwd).import(config.tokenFile, { default: true });
152
+ return await loaderTs(config.token.file);
153
+ };
154
+
155
+ //#endregion
156
+ //#region package.json
157
+ var name = "dnmp";
158
+ var version = "0.0.0-alpha.0.4";
159
+
160
+ //#endregion
161
+ //#region src/config.ts
162
+ const CURRENT_PATH = resolve(import.meta.dirname, "../");
163
+ const defaultConfig = {
164
+ root: "",
165
+ cwd: "",
166
+ token: {
167
+ name: "token.ts",
168
+ file: resolve(CURRENT_PATH, `${CACHE_TOKEN_FILE_PATH}`),
169
+ value: ""
170
+ },
171
+ release: "",
172
+ currentVersion: "",
173
+ monorepo: {
174
+ is: false,
175
+ workspacePath: "",
176
+ packages: [],
177
+ packageContexts: [],
178
+ updatePackages: []
179
+ },
180
+ packages: ""
181
+ };
182
+ const collectPackageFiles = async (config, packages) => {
183
+ const files = ["package.json"];
184
+ files.push(...await glob(packages, {
185
+ cwd: config.cwd,
186
+ ignore: ["**/node_modules/**"]
187
+ }));
188
+ return [...files];
189
+ };
190
+ const isMonorepo = async (config) => {
191
+ const workspacePath = await findUp("pnpm-workspace.yaml", { cwd: config.cwd });
192
+ if (!workspacePath) return {
193
+ is: false,
194
+ workspacePath: "",
195
+ packageContexts: [],
196
+ packages: []
197
+ };
198
+ const is = !!(workspacePath ? parse(readFileSync(workspacePath, "utf-8")) : { packages: [] })?.packages?.length || false;
199
+ const { packages: workSpacePackages } = parse(readFileSync(workspacePath, "utf-8"));
200
+ let packages = [];
201
+ let packageContexts = [];
202
+ if (workSpacePackages) {
203
+ packages = workSpacePackages.map((item) => item.indexOf("*") ? `${item.replace("/*", "")}/**/package.json` : `${item}/**/package.json`);
204
+ packageContexts = (await collectPackageFiles(config, packages)).map((file) => {
205
+ const files = JSON.parse(readFileSync(resolve(config.cwd, file), "utf-8"));
206
+ return {
207
+ name: `${files.name}`,
208
+ file,
209
+ version: files?.version || "",
210
+ context: files
211
+ };
212
+ });
213
+ }
214
+ return {
215
+ is,
216
+ workspacePath,
217
+ packageContexts,
218
+ packages
219
+ };
220
+ };
221
+ const resolveConfig = async () => {
222
+ const { loadConfig } = await import("c12");
223
+ const config = await loadConfig({
224
+ name,
225
+ defaultConfig
226
+ }).then((r) => ({
227
+ ...r.config,
228
+ cwd: process$2.cwd(),
229
+ root: CURRENT_PATH
230
+ }));
231
+ config.token.value = await loaderToken(config) || "";
232
+ config.monorepo = await isMonorepo(config);
233
+ config.packages = resolve(config.cwd, "package.json");
234
+ return config;
235
+ };
236
+
237
+ //#endregion
238
+ //#region src/git.ts
239
+ const gitCommit = async (config) => {
240
+ const args = [];
241
+ args.push("--message", `release: v${config.release}`);
242
+ args.push("--allow-empty");
243
+ args.push(config.packages);
244
+ await x("git", ["commit", ...args], { nodeOptions: {
245
+ cwd: config.cwd,
246
+ stdio: "pipe"
247
+ } });
248
+ };
249
+ const gitTags = async (config) => {
250
+ await x("git", [
251
+ "tag",
252
+ "--annotate",
253
+ "--message",
254
+ "",
255
+ `v${config.release}`
256
+ ], { nodeOptions: {
257
+ cwd: config.cwd,
258
+ stdio: "pipe"
259
+ } });
260
+ };
261
+
262
+ //#endregion
263
+ //#region src/runCommand.ts
264
+ const runCommand = async (config, command, args) => {
265
+ await x(command, args, { nodeOptions: {
266
+ stdio: "inherit",
267
+ cwd: config.cwd
268
+ } });
269
+ };
270
+
271
+ //#endregion
272
+ //#region src/update-files.ts
273
+ const JSON_SPACING = 2;
274
+ const updatePackageJson = async (path, version$1) => {
275
+ const updatePackage = JSON.parse(await readFile(path, "utf-8"));
276
+ updatePackage.version = version$1;
277
+ await writeFile(path, JSON.stringify(updatePackage, null, JSON_SPACING));
278
+ };
279
+ const updateFiles = async (config) => {
280
+ if (config.monorepo.is) for (const pkg of config.monorepo.updatePackages) await updatePackageJson(pkg.path, pkg.newVersion);
281
+ else await updatePackageJson(config.packages, config.release);
282
+ };
283
+
284
+ //#endregion
285
+ //#region src/version/current.ts
286
+ const getCurrentVersion = async (config) => {
287
+ const { packages } = config;
288
+ if (typeof packages === "object") {} else config.currentVersion = JSON.parse(await readFile(packages, { encoding: "utf-8" })).version || "";
159
289
  };
160
290
 
161
291
  //#endregion
162
- //#region src/version.ts
292
+ //#region src/version/new.version.ts
163
293
  const PADDING = 13;
164
- const promptForNewVersion = async (config) => {
165
- let custom = "";
294
+ const validateVersion = (version$1) => !!semver.valid(version$1);
295
+ const DEFAULT_STYLE = {
296
+ label: "next",
297
+ color: import_picocolors.default.cyan
298
+ };
299
+ const UI_STYLE_MAP = {
300
+ major: {
301
+ label: "major",
302
+ color: import_picocolors.default.cyan
303
+ },
304
+ minor: {
305
+ label: "minor",
306
+ color: import_picocolors.default.cyan
307
+ },
308
+ patch: {
309
+ label: "patch",
310
+ color: import_picocolors.default.cyan
311
+ },
312
+ next: {
313
+ label: "next",
314
+ color: import_picocolors.default.cyan
315
+ },
316
+ rc: {
317
+ label: "rc",
318
+ color: import_picocolors.default.green
319
+ },
320
+ beta: {
321
+ label: "pre-beta",
322
+ color: import_picocolors.default.magenta
323
+ },
324
+ alpha: {
325
+ label: "alpha",
326
+ color: import_picocolors.default.yellow
327
+ }
328
+ };
329
+ /**
330
+ * 核心逻辑:增量处理预发布版本
331
+ * 解决 TS2345: 使用 readonly 修饰符接受 semver 的返回类型
332
+ */
333
+ const processIncrementalPre = (preParts, base, prefix, expectedLen, fallback) => {
334
+ if (preParts[0] !== prefix) return `${base}-${fallback}`;
335
+ const newPre = [...preParts].slice(0, expectedLen);
336
+ while (newPre.length < expectedLen) newPre.push(0);
337
+ const lastIdx = expectedLen - 1;
338
+ const lastVal = newPre[lastIdx];
339
+ const numericVal = typeof lastVal === "number" ? lastVal : Number.parseInt(String(lastVal), 10);
340
+ newPre[lastIdx] = preParts.length < expectedLen ? 1 : Number.isNaN(numericVal) ? 1 : numericVal + 1;
341
+ return `${base}-${newPre.join(".")}`;
342
+ };
343
+ const getNextVersions = (version$1) => {
344
+ const s = semver.parse(version$1);
345
+ if (!s) throw new Error(`[Invalid SemVer]: ${version$1}`);
346
+ const { major: M, minor: m, patch: p, prerelease: pre } = s;
347
+ const base = `${M}.${m}.${p}`;
348
+ return {
349
+ "major": `${M + 1}.0.0`,
350
+ "minor": `${M}.${m + 1}.0`,
351
+ "patch": `${M}.${m}.${p + 1}`,
352
+ "next": `${M}.${m}.${p + 1}`,
353
+ "rc": processIncrementalPre(pre, base, "rc", 2, "rc.1"),
354
+ "beta-major": processIncrementalPre(pre, base, "beta", 2, "beta.1"),
355
+ "beta-minor": processIncrementalPre(pre, base, "beta", 3, "beta.0.1"),
356
+ "beta-patch": processIncrementalPre(pre, base, "beta", 4, "beta.0.0.1"),
357
+ "pre-beta": `${base}-beta`,
358
+ "alpha-beta": `${base}-alpha.beta`,
359
+ "alpha-major": processIncrementalPre(pre, base, "alpha", 2, "alpha.1"),
360
+ "alpha-minor": processIncrementalPre(pre, base, "alpha", 3, "alpha.0.1"),
361
+ "alpha-patch": processIncrementalPre(pre, base, "alpha", 4, "alpha.0.0.1")
362
+ };
363
+ };
364
+ async function promptForNewVersion(config, pkg, index) {
365
+ const version$1 = config.monorepo.is && pkg !== void 0 ? pkg.newVersion : config.currentVersion;
366
+ const next = getNextVersions(version$1);
367
+ const options = Object.keys(next).map((key) => {
368
+ const versionStr = next[key];
369
+ return {
370
+ value: key,
371
+ label: `${(UI_STYLE_MAP[key.split("-")[0] ?? "next"] ?? DEFAULT_STYLE).label.padStart(PADDING, " ")} ${versionStr.replace(/(rc|beta|alpha)/g, (match) => {
372
+ return (UI_STYLE_MAP[match] ?? DEFAULT_STYLE).color(match);
373
+ })}`
374
+ };
375
+ });
376
+ options.push({
377
+ value: CUSTOM_RELEASE_PREFIX,
378
+ label: `${"custom".padStart(PADDING, " ")} ...`
379
+ });
166
380
  const release = await select({
167
- message: "Current version 0.0.0",
168
- options: [
169
- {
170
- value: "major",
171
- label: `${"major".padStart(PADDING, " ")} 0.0.0`
172
- },
173
- {
174
- value: "minor",
175
- label: `${"minor".padStart(PADDING, " ")} 0.0.0`
176
- },
177
- {
178
- value: "patch",
179
- label: `${"patch".padStart(PADDING, " ")} 0.0.0`
180
- },
181
- {
182
- value: "next",
183
- label: `${"next".padStart(PADDING, " ")} 0.0.0`
184
- },
185
- {
186
- value: "rc",
187
- label: `${"rc".padStart(PADDING, " ")} 0.0.0-${import_picocolors.default.green("rc")}.1`
188
- },
189
- {
190
- value: "pre-beta-major",
191
- label: `${"pre-major".padStart(PADDING, " ")} 0.0.0-${import_picocolors.default.magenta("beta")}.1`
192
- },
193
- {
194
- value: "pre-beta-minor",
195
- label: `${"pre-minor".padStart(PADDING, " ")} 0.0.0-${import_picocolors.default.magenta("beta")}.1`
196
- },
197
- {
198
- value: "pre-beta-patch",
199
- label: `${"pre-patch".padStart(PADDING, " ")} 0.0.0-${import_picocolors.default.magenta("beta")}.1`
200
- },
201
- {
202
- value: "pre-beta",
203
- label: `${"pre-beta".padStart(PADDING, " ")} 0.0.0-${import_picocolors.default.magenta("beta")}`
204
- },
205
- {
206
- value: "pre-alpha-major",
207
- label: `${"alpha".padStart(PADDING, " ")} 0.0.0-${import_picocolors.default.yellow("alpha")}.beta`
208
- },
209
- {
210
- value: "pre-alpha-minor",
211
- label: `${"alpha".padStart(PADDING, " ")} 0.0.0-${import_picocolors.default.yellow("alpha")}.1`
212
- },
213
- {
214
- value: "pre-alpha-patch",
215
- label: `${"alpha".padStart(PADDING, " ")} 0.0.0-${import_picocolors.default.yellow("alpha")}`
216
- },
217
- {
218
- value: CUSTOM_RELEASE_PREFIX,
219
- label: `${"custom".padStart(PADDING, " ")} ...`
220
- }
221
- ],
381
+ message: `Current version ${import_picocolors.default.bold(version$1)}`,
382
+ options,
222
383
  initialValue: "next"
223
384
  });
224
- if (isCancel(release)) {
225
- cancel("No version selected");
226
- return process$1.exit(0);
227
- }
385
+ isCancelProcess(release);
386
+ let finalVersion;
228
387
  if (release === CUSTOM_RELEASE_PREFIX) {
229
- custom = await text({
388
+ const custom = await text({
230
389
  message: "Enter the new version number",
231
- placeholder: "e.g. major, minor, patch, pre-alpha, pre-beta, rc, ..."
390
+ validate: (val) => !validateVersion(val) ? "Invalid semver" : void 0
232
391
  });
233
392
  if (isCancel(custom)) {
234
- cancel("No version enter");
235
- return process$1.exit(0);
393
+ cancel("No version entered");
394
+ return process.exit(0);
395
+ }
396
+ finalVersion = custom;
397
+ } else finalVersion = next[release];
398
+ if (config.monorepo.is && pkg !== void 0 && index !== void 0 && Array.isArray(config.monorepo.updatePackages)) config.monorepo.updatePackages[index].newVersion = finalVersion;
399
+ else config.release = finalVersion;
400
+ }
401
+
402
+ //#endregion
403
+ //#region src/command/bump.ts
404
+ /**
405
+ * 创建包选择选项
406
+ */
407
+ const createPackageOptions = (packageContexts) => {
408
+ return packageContexts.map((file) => {
409
+ return {
410
+ value: file.name,
411
+ label: file.name,
412
+ hint: `${import_picocolors.default.red(file.version)} - ${file.file}`
413
+ };
414
+ });
415
+ };
416
+ /**
417
+ * 处理单个包的选择流程
418
+ */
419
+ const processPackageSelection = async (config, selectedPackageName, packageContexts) => {
420
+ const selectedPackage = packageContexts.find((opt) => opt.name === selectedPackageName);
421
+ const resolvePackage = {
422
+ name: selectedPackageName,
423
+ path: resolve(config.cwd, selectedPackage.file),
424
+ currentVersion: selectedPackage.version,
425
+ newVersion: selectedPackage.version
426
+ };
427
+ (config.monorepo.updatePackages ??= []).push(resolvePackage);
428
+ await promptForNewVersion(config, resolvePackage, config.monorepo.updatePackages.length - 1);
429
+ };
430
+ /**
431
+ * 处理 monorepo 包的选择逻辑
432
+ */
433
+ const handleMonorepoPackageSelection = async (config) => {
434
+ let availableOptions = [...createPackageOptions(config.monorepo.packageContexts)];
435
+ while (availableOptions.length > 0) {
436
+ const selectedPackage = await select({
437
+ message: "请选择要升级版本的包:",
438
+ options: availableOptions
439
+ });
440
+ isCancelProcess(selectedPackage);
441
+ await processPackageSelection(config, selectedPackage, config.monorepo.packageContexts);
442
+ availableOptions = availableOptions.filter((opt) => opt.value !== selectedPackage);
443
+ if (availableOptions.length > 0) {
444
+ const continueSelection = await confirm({
445
+ message: "是否继续选择其他包?",
446
+ initialValue: true
447
+ });
448
+ isCancelProcess(continueSelection);
449
+ if (!continueSelection) break;
236
450
  }
237
451
  }
238
- console.log({
239
- release,
240
- custom
452
+ };
453
+ /**
454
+ * 获取缓存文件路径
455
+ */
456
+ const getCachePath = async (cwd) => {
457
+ return await findUp("node_modules/.cache/dnmp.ts", { cwd }) || null;
458
+ };
459
+ /**
460
+ * 读取或设置统一更新版本选项
461
+ */
462
+ const getOrUpdateAllUpdateVersion = async (config) => {
463
+ const cachePath = await getCachePath(config.cwd);
464
+ if (cachePath) return Boolean(await loaderTs(cachePath));
465
+ const allUpdateVersion = await confirm({
466
+ message: "是否以根 package.json 为主版本统一更新 workspace 所有版本",
467
+ initialValue: true
241
468
  });
469
+ isCancelProcess(allUpdateVersion, CANCEL_PROCESS);
470
+ await writeFile(resolve(config.cwd, "./node_modules/.cache/dnmp.ts"), `export default ${allUpdateVersion}`);
471
+ return allUpdateVersion;
242
472
  };
243
-
244
- //#endregion
245
- //#region package.json
246
- var name = "dnmp";
247
- var version = "0.0.0-alpha.0.2";
248
-
249
- //#endregion
250
- //#region src/cli.ts
251
- const cli = cac(name);
252
- cli.command("").action(async (options) => {
473
+ /**
474
+ * 读取包文件内容
475
+ */
476
+ const readPackageFile = async (filePath) => {
477
+ return JSON.parse(await readFile(filePath, "utf-8"));
478
+ };
479
+ /**
480
+ * 统一更新所有包的版本
481
+ */
482
+ const updateAllPackagesVersion = async (config) => {
483
+ config.currentVersion = (await readPackageFile(config.packages)).version;
484
+ await promptForNewVersion(config);
485
+ for (const item of config.monorepo.packageContexts) {
486
+ const resolvePkgPath = resolve(config.cwd, item.file);
487
+ const packageInfo = await readPackageFile(resolvePkgPath);
488
+ (config.monorepo.updatePackages ??= []).push({
489
+ name: item.name,
490
+ path: resolvePkgPath,
491
+ currentVersion: packageInfo.version,
492
+ newVersion: config.release
493
+ });
494
+ }
495
+ };
496
+ const bumpVersion = async () => {
253
497
  const config = await resolveConfig();
254
- config.token = await loaderToken(config);
255
- console.log(config);
256
- console.log(import.meta);
257
498
  intro(import_picocolors.default.bgCyan(` dnmp ${version} `));
258
- await promptForNewVersion(config);
259
- console.log("npm", [
260
- "publish",
261
- `--//registry.npmjs.org/:_authToken=${config.token}`,
262
- "--access",
263
- "public"
264
- ].join(" "));
499
+ if (!config.token.value) {
500
+ outro("请先设置 release token");
501
+ return process$1.exit(0);
502
+ }
503
+ if (config.monorepo.is) if (await getOrUpdateAllUpdateVersion(config)) await updateAllPackagesVersion(config);
504
+ else await handleMonorepoPackageSelection(config);
505
+ else {
506
+ await getCurrentVersion(config);
507
+ await promptForNewVersion(config);
508
+ }
509
+ const isConfirmUpdate = await confirm({
510
+ message: "是否确认更新 package.json ?",
511
+ initialValue: true
512
+ });
513
+ isCancelProcess(isConfirmUpdate);
514
+ if (!isConfirmUpdate) {
515
+ outro("用户取消操作,后续进程停止");
516
+ return process$1.exit(0);
517
+ }
518
+ await updateFiles(config);
519
+ await gitCommit(config);
520
+ await gitTags(config);
265
521
  await runCommand(config, "npm", [
266
522
  "publish",
267
- `--//registry.npmjs.org/:_authToken=${config.token}`,
523
+ `--//registry.npmjs.org/:_authToken=${config.token.value}`,
268
524
  "--access",
269
525
  "public"
270
526
  ]);
271
527
  outro("Done.");
272
- });
273
- cli.command("set <token>", "Set the local release Token").action(async (token = "") => {
528
+ };
529
+
530
+ //#endregion
531
+ //#region src/command/token.ts
532
+ const token = async (token$1 = "") => {
274
533
  try {
275
- await setToken(await resolveConfig(), token);
534
+ await setToken(await resolveConfig(), token$1);
276
535
  } catch (error) {
277
536
  printWarning(error.message);
278
- process.exit(1);
537
+ process$1.exit(0);
279
538
  }
539
+ };
540
+
541
+ //#endregion
542
+ //#region src/cli.ts
543
+ const cli = cac(name);
544
+ cli.command("").action(async (options) => {
545
+ await bumpVersion();
546
+ });
547
+ cli.command("set <token>", "Set the local release Token").action(async (token$1 = "") => {
548
+ await token(token$1);
280
549
  });
281
550
  cli.help();
282
551
  cli.version(version);
@@ -284,7 +553,7 @@ try {
284
553
  cli.parse();
285
554
  } catch (error) {
286
555
  printWarning(error.message);
287
- process.exit(1);
556
+ process$2.exit(0);
288
557
  }
289
558
 
290
559
  //#endregion
package/dist/cli.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.mjs","names":["custom: string","pc","process","pc","error: any"],"sources":["../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js","../src/constant.ts","../src/config.ts","../src/runCommand.ts","../src/utils.ts","../src/token.ts","../src/version.ts","../package.json","../src/cli.ts"],"sourcesContent":["let p = process || {}, argv = p.argv || [], env = p.env || {}\nlet isColorSupported =\n\t!(!!env.NO_COLOR || argv.includes(\"--no-color\")) &&\n\t(!!env.FORCE_COLOR || argv.includes(\"--color\") || p.platform === \"win32\" || ((p.stdout || {}).isTTY && env.TERM !== \"dumb\") || !!env.CI)\n\nlet formatter = (open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input, index = string.indexOf(close, open.length)\n\t\treturn ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet result = \"\", cursor = 0\n\tdo {\n\t\tresult += string.substring(cursor, index) + replace\n\t\tcursor = index + close.length\n\t\tindex = string.indexOf(close, cursor)\n\t} while (~index)\n\treturn result + string.substring(cursor)\n}\n\nlet createColors = (enabled = isColorSupported) => {\n\tlet f = enabled ? formatter : () => String\n\treturn {\n\t\tisColorSupported: enabled,\n\t\treset: f(\"\\x1b[0m\", \"\\x1b[0m\"),\n\t\tbold: f(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\"),\n\t\tdim: f(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\"),\n\t\titalic: f(\"\\x1b[3m\", \"\\x1b[23m\"),\n\t\tunderline: f(\"\\x1b[4m\", \"\\x1b[24m\"),\n\t\tinverse: f(\"\\x1b[7m\", \"\\x1b[27m\"),\n\t\thidden: f(\"\\x1b[8m\", \"\\x1b[28m\"),\n\t\tstrikethrough: f(\"\\x1b[9m\", \"\\x1b[29m\"),\n\n\t\tblack: f(\"\\x1b[30m\", \"\\x1b[39m\"),\n\t\tred: f(\"\\x1b[31m\", \"\\x1b[39m\"),\n\t\tgreen: f(\"\\x1b[32m\", \"\\x1b[39m\"),\n\t\tyellow: f(\"\\x1b[33m\", \"\\x1b[39m\"),\n\t\tblue: f(\"\\x1b[34m\", \"\\x1b[39m\"),\n\t\tmagenta: f(\"\\x1b[35m\", \"\\x1b[39m\"),\n\t\tcyan: f(\"\\x1b[36m\", \"\\x1b[39m\"),\n\t\twhite: f(\"\\x1b[37m\", \"\\x1b[39m\"),\n\t\tgray: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\n\t\tbgBlack: f(\"\\x1b[40m\", \"\\x1b[49m\"),\n\t\tbgRed: f(\"\\x1b[41m\", \"\\x1b[49m\"),\n\t\tbgGreen: f(\"\\x1b[42m\", \"\\x1b[49m\"),\n\t\tbgYellow: f(\"\\x1b[43m\", \"\\x1b[49m\"),\n\t\tbgBlue: f(\"\\x1b[44m\", \"\\x1b[49m\"),\n\t\tbgMagenta: f(\"\\x1b[45m\", \"\\x1b[49m\"),\n\t\tbgCyan: f(\"\\x1b[46m\", \"\\x1b[49m\"),\n\t\tbgWhite: f(\"\\x1b[47m\", \"\\x1b[49m\"),\n\n\t\tblackBright: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\t\tredBright: f(\"\\x1b[91m\", \"\\x1b[39m\"),\n\t\tgreenBright: f(\"\\x1b[92m\", \"\\x1b[39m\"),\n\t\tyellowBright: f(\"\\x1b[93m\", \"\\x1b[39m\"),\n\t\tblueBright: f(\"\\x1b[94m\", \"\\x1b[39m\"),\n\t\tmagentaBright: f(\"\\x1b[95m\", \"\\x1b[39m\"),\n\t\tcyanBright: f(\"\\x1b[96m\", \"\\x1b[39m\"),\n\t\twhiteBright: f(\"\\x1b[97m\", \"\\x1b[39m\"),\n\n\t\tbgBlackBright: f(\"\\x1b[100m\", \"\\x1b[49m\"),\n\t\tbgRedBright: f(\"\\x1b[101m\", \"\\x1b[49m\"),\n\t\tbgGreenBright: f(\"\\x1b[102m\", \"\\x1b[49m\"),\n\t\tbgYellowBright: f(\"\\x1b[103m\", \"\\x1b[49m\"),\n\t\tbgBlueBright: f(\"\\x1b[104m\", \"\\x1b[49m\"),\n\t\tbgMagentaBright: f(\"\\x1b[105m\", \"\\x1b[49m\"),\n\t\tbgCyanBright: f(\"\\x1b[106m\", \"\\x1b[49m\"),\n\t\tbgWhiteBright: f(\"\\x1b[107m\", \"\\x1b[49m\"),\n\t}\n}\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n","export const CACHE_FOLDER_NAME = '.cache'\nexport const CACHE_FILE_NAME = 'token.ts'\nexport const CACHE_TOKEN_FILE_PATH = `${CACHE_FOLDER_NAME}/${CACHE_FILE_NAME}`\nexport const CUSTOM_RELEASE_PREFIX = 'custom'\n","import type { IConfig } from '@/types'\nimport { resolve } from 'node:path'\nimport { CACHE_TOKEN_FILE_PATH } from '@/constant.ts'\n\nconst CURRENT_PATH = resolve(import.meta.dirname, '../')\nexport const resolveConfig = async (): Promise<IConfig> => {\n const root = process.cwd()\n const tokenPath = resolve(CURRENT_PATH, `${CACHE_TOKEN_FILE_PATH}`)\n\n return {\n cwd: CURRENT_PATH,\n root,\n tokenFile: tokenPath,\n token: '',\n }\n}\n","import type { IConfig } from '@/types'\nimport { x } from 'tinyexec'\n\nexport const runCommand = async (config: IConfig, command: string, args: string[]) => {\n await x(command, args, {\n nodeOptions: {\n stdio: 'inherit',\n cwd: config.root,\n },\n })\n}\n","import fs from 'node:fs'\nimport boxen from 'boxen'\n\nexport const checkDirExist = (dirPath: string) => {\n return fs.existsSync(dirPath)\n}\n\nexport const createDir = (dirPath: string) => {\n if (!checkDirExist(dirPath)) {\n fs.mkdirSync(dirPath)\n }\n}\n\nexport const printWarning = (message: string) =>\n console.log(boxen(message, {\n title: 'Warning',\n padding: 1,\n borderStyle: 'round',\n borderColor: 'yellow',\n }))\n","import type { IConfig } from '@/types'\nimport { writeFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport { createJiti } from 'jiti'\nimport { CACHE_FOLDER_NAME } from '@/constant.ts'\nimport { createDir } from '@/utils.ts'\n\nexport const setToken = async (config: IConfig, token: string): Promise<void> => {\n createDir(resolve(config.cwd, CACHE_FOLDER_NAME))\n await writeFile(config.tokenFile, `export default \"${token}\"`)\n}\n\nexport const loaderToken = async (config: IConfig): Promise<string> => {\n const loader = createJiti(config.cwd)\n return await loader.import(config.tokenFile, { default: true })\n}\n","import type { IConfig } from '@/types'\nimport * as process from 'node:process'\nimport { cancel, isCancel, select, text } from '@clack/prompts'\nimport pc from 'picocolors'\nimport { CUSTOM_RELEASE_PREFIX } from '@/constant.ts'\n\n// https://semver.org/\n\nconst PADDING = 13\n\nexport const promptForNewVersion = async (config: IConfig) => {\n let custom: string = ''\n const release = await select({\n message: 'Current version 0.0.0',\n options: [\n { value: 'major', label: `${'major'.padStart(PADDING, ' ')} 0.0.0` },\n { value: 'minor', label: `${'minor'.padStart(PADDING, ' ')} 0.0.0` },\n { value: 'patch', label: `${'patch'.padStart(PADDING, ' ')} 0.0.0` },\n { value: 'next', label: `${'next'.padStart(PADDING, ' ')} 0.0.0` },\n { value: 'rc', label: `${'rc'.padStart(PADDING, ' ')} 0.0.0-${pc.green('rc')}.1` },\n { value: 'pre-beta-major', label: `${'pre-major'.padStart(PADDING, ' ')} 0.0.0-${pc.magenta('beta')}.1` },\n { value: 'pre-beta-minor', label: `${'pre-minor'.padStart(PADDING, ' ')} 0.0.0-${pc.magenta('beta')}.1` },\n { value: 'pre-beta-patch', label: `${'pre-patch'.padStart(PADDING, ' ')} 0.0.0-${pc.magenta('beta')}.1` },\n { value: 'pre-beta', label: `${'pre-beta'.padStart(PADDING, ' ')} 0.0.0-${pc.magenta('beta')}` },\n { value: 'pre-alpha-major', label: `${'alpha'.padStart(PADDING, ' ')} 0.0.0-${pc.yellow('alpha')}.beta` },\n { value: 'pre-alpha-minor', label: `${'alpha'.padStart(PADDING, ' ')} 0.0.0-${pc.yellow('alpha')}.1` },\n { value: 'pre-alpha-patch', label: `${'alpha'.padStart(PADDING, ' ')} 0.0.0-${pc.yellow('alpha')}` },\n { value: CUSTOM_RELEASE_PREFIX, label: `${'custom'.padStart(PADDING, ' ')} ...` },\n ],\n initialValue: 'next',\n })\n\n if (isCancel(release)) {\n cancel('No version selected')\n return process.exit(0)\n }\n\n if (release === CUSTOM_RELEASE_PREFIX) {\n custom = await text({\n message: 'Enter the new version number',\n placeholder: 'e.g. major, minor, patch, pre-alpha, pre-beta, rc, ...',\n }) as string\n\n if (isCancel(custom)) {\n cancel('No version enter')\n return process.exit(0)\n }\n }\n console.log({\n release,\n custom,\n })\n}\n","","import { intro, outro } from '@clack/prompts'\nimport cac from 'cac'\nimport pc from 'picocolors'\nimport { resolveConfig } from '@/config.ts'\nimport { runCommand } from '@/runCommand.ts'\nimport { loaderToken, setToken } from '@/token.ts'\nimport { printWarning } from '@/utils.ts'\nimport { promptForNewVersion } from '@/version.ts'\nimport { name, version } from '../package.json'\n\nconst cli = cac(name)\n\n// TODO 完成主目录下的 package.json 版本发布\n// TODO 完成 monorepo 相关版本,多选版本发布\n\ncli.command('')\n .action(async (options) => {\n const config = await resolveConfig()\n config.token = await loaderToken(config)\n console.log(config)\n console.log(import.meta)\n // await setToken(config, 'asdasdasd')\n // console.log(await loaderToken(config))\n\n intro(pc.bgCyan(` dnmp ${version} `))\n\n await promptForNewVersion(config)\n\n console.log('npm', [\n 'publish',\n `--//registry.npmjs.org/:_authToken=${config.token}`,\n '--access',\n 'public',\n ].join(' '))\n\n await runCommand(config, 'npm', [\n 'publish',\n `--//registry.npmjs.org/:_authToken=${config.token}`,\n '--access',\n 'public',\n ])\n\n outro('Done.')\n })\n\ncli.command('set <token>', 'Set the local release Token')\n .action(async (token: string = '') => {\n try {\n const config = await resolveConfig()\n await setToken(config, token)\n }\n catch (error: any) {\n printWarning(error.message)\n process.exit(1)\n }\n })\n\ncli.help()\ncli.version(version)\n\ntry {\n cli.parse()\n}\ncatch (error: any) {\n printWarning(error.message)\n process.exit(1)\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"cli.mjs","names":["token","defaultConfig: IConfigOptions","packageContexts: IPackageContexts[]","process","version","version","DEFAULT_STYLE: UIStyle","pc","UI_STYLE_MAP: Record<string, UIStyle>","finalVersion: string","pc","resolvePackage: IUpdatePackages","process","token","error: any","setToken","token","error: any"],"sources":["../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js","../src/constant.ts","../src/utils.ts","../src/token.ts","../package.json","../src/config.ts","../src/git.ts","../src/runCommand.ts","../src/update-files.ts","../src/version/current.ts","../src/version/new.version.ts","../src/command/bump.ts","../src/command/token.ts","../src/cli.ts"],"sourcesContent":["let p = process || {}, argv = p.argv || [], env = p.env || {}\nlet isColorSupported =\n\t!(!!env.NO_COLOR || argv.includes(\"--no-color\")) &&\n\t(!!env.FORCE_COLOR || argv.includes(\"--color\") || p.platform === \"win32\" || ((p.stdout || {}).isTTY && env.TERM !== \"dumb\") || !!env.CI)\n\nlet formatter = (open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input, index = string.indexOf(close, open.length)\n\t\treturn ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet result = \"\", cursor = 0\n\tdo {\n\t\tresult += string.substring(cursor, index) + replace\n\t\tcursor = index + close.length\n\t\tindex = string.indexOf(close, cursor)\n\t} while (~index)\n\treturn result + string.substring(cursor)\n}\n\nlet createColors = (enabled = isColorSupported) => {\n\tlet f = enabled ? formatter : () => String\n\treturn {\n\t\tisColorSupported: enabled,\n\t\treset: f(\"\\x1b[0m\", \"\\x1b[0m\"),\n\t\tbold: f(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\"),\n\t\tdim: f(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\"),\n\t\titalic: f(\"\\x1b[3m\", \"\\x1b[23m\"),\n\t\tunderline: f(\"\\x1b[4m\", \"\\x1b[24m\"),\n\t\tinverse: f(\"\\x1b[7m\", \"\\x1b[27m\"),\n\t\thidden: f(\"\\x1b[8m\", \"\\x1b[28m\"),\n\t\tstrikethrough: f(\"\\x1b[9m\", \"\\x1b[29m\"),\n\n\t\tblack: f(\"\\x1b[30m\", \"\\x1b[39m\"),\n\t\tred: f(\"\\x1b[31m\", \"\\x1b[39m\"),\n\t\tgreen: f(\"\\x1b[32m\", \"\\x1b[39m\"),\n\t\tyellow: f(\"\\x1b[33m\", \"\\x1b[39m\"),\n\t\tblue: f(\"\\x1b[34m\", \"\\x1b[39m\"),\n\t\tmagenta: f(\"\\x1b[35m\", \"\\x1b[39m\"),\n\t\tcyan: f(\"\\x1b[36m\", \"\\x1b[39m\"),\n\t\twhite: f(\"\\x1b[37m\", \"\\x1b[39m\"),\n\t\tgray: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\n\t\tbgBlack: f(\"\\x1b[40m\", \"\\x1b[49m\"),\n\t\tbgRed: f(\"\\x1b[41m\", \"\\x1b[49m\"),\n\t\tbgGreen: f(\"\\x1b[42m\", \"\\x1b[49m\"),\n\t\tbgYellow: f(\"\\x1b[43m\", \"\\x1b[49m\"),\n\t\tbgBlue: f(\"\\x1b[44m\", \"\\x1b[49m\"),\n\t\tbgMagenta: f(\"\\x1b[45m\", \"\\x1b[49m\"),\n\t\tbgCyan: f(\"\\x1b[46m\", \"\\x1b[49m\"),\n\t\tbgWhite: f(\"\\x1b[47m\", \"\\x1b[49m\"),\n\n\t\tblackBright: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\t\tredBright: f(\"\\x1b[91m\", \"\\x1b[39m\"),\n\t\tgreenBright: f(\"\\x1b[92m\", \"\\x1b[39m\"),\n\t\tyellowBright: f(\"\\x1b[93m\", \"\\x1b[39m\"),\n\t\tblueBright: f(\"\\x1b[94m\", \"\\x1b[39m\"),\n\t\tmagentaBright: f(\"\\x1b[95m\", \"\\x1b[39m\"),\n\t\tcyanBright: f(\"\\x1b[96m\", \"\\x1b[39m\"),\n\t\twhiteBright: f(\"\\x1b[97m\", \"\\x1b[39m\"),\n\n\t\tbgBlackBright: f(\"\\x1b[100m\", \"\\x1b[49m\"),\n\t\tbgRedBright: f(\"\\x1b[101m\", \"\\x1b[49m\"),\n\t\tbgGreenBright: f(\"\\x1b[102m\", \"\\x1b[49m\"),\n\t\tbgYellowBright: f(\"\\x1b[103m\", \"\\x1b[49m\"),\n\t\tbgBlueBright: f(\"\\x1b[104m\", \"\\x1b[49m\"),\n\t\tbgMagentaBright: f(\"\\x1b[105m\", \"\\x1b[49m\"),\n\t\tbgCyanBright: f(\"\\x1b[106m\", \"\\x1b[49m\"),\n\t\tbgWhiteBright: f(\"\\x1b[107m\", \"\\x1b[49m\"),\n\t}\n}\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n","export const CACHE_FOLDER_NAME = '.cache'\nexport const CACHE_FILE_NAME = 'token.ts'\nexport const CACHE_TOKEN_FILE_PATH = `${CACHE_FOLDER_NAME}/${CACHE_FILE_NAME}`\nexport const CUSTOM_RELEASE_PREFIX = 'custom'\nexport const CANCEL_PROCESS = 'Current operation canceled.'\n","import fs from 'node:fs'\nimport { cancel, isCancel } from '@clack/prompts'\nimport boxen from 'boxen'\nimport { createJiti } from 'jiti'\nimport { CANCEL_PROCESS } from '@/constant.ts'\n\nexport const checkDirExist = (dirPath: string) => {\n return fs.existsSync(dirPath)\n}\n\nexport const createDir = (dirPath: string) => {\n if (!checkDirExist(dirPath)) {\n fs.mkdirSync(dirPath)\n }\n}\n\nexport const printWarning = (message: string) =>\n console.log(boxen(message, {\n title: 'Warning',\n padding: 1,\n borderStyle: 'round',\n borderColor: 'yellow',\n }))\n\nexport const isCancelProcess = (value: unknown, message: string = CANCEL_PROCESS) => {\n if (isCancel(value)) {\n cancel(message)\n return process.exit(0)\n }\n}\n\nexport const loaderTs = async (path: string): Promise<string> => {\n const loader = createJiti(path)\n return await loader.import(path, { default: true })\n}\n","import type { IConfigOptions } from '@/types'\nimport { writeFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport { CACHE_FOLDER_NAME } from '@/constant.ts'\nimport { createDir, loaderTs } from '@/utils.ts'\n\nexport const setToken = async (config: IConfigOptions, token: string): Promise<void> => {\n createDir(resolve(config.cwd, CACHE_FOLDER_NAME))\n await writeFile(config.token.file, `export default \"${token}\"`)\n}\n\nexport const loaderToken = async (config: IConfigOptions): Promise<string> => {\n return await loaderTs(config.token.file)\n}\n","","import type { IConfigOptions, IPackage, IPackageContexts } from '@/types'\nimport { readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport * as process from 'node:process'\nimport { findUp } from 'find-up'\nimport { glob } from 'glob'\nimport { parse } from 'yaml'\nimport { CACHE_TOKEN_FILE_PATH } from '@/constant.ts'\nimport { loaderToken } from '@/token.ts'\nimport { name } from '../package.json'\n\nconst CURRENT_PATH = resolve(import.meta.dirname, '../')\n\nconst defaultConfig: IConfigOptions = {\n root: '',\n cwd: '',\n token: {\n name: 'token.ts',\n file: resolve(CURRENT_PATH, `${CACHE_TOKEN_FILE_PATH}`),\n value: '',\n },\n release: '',\n currentVersion: '',\n monorepo: {\n is: false,\n workspacePath: '',\n packages: [],\n packageContexts: [],\n updatePackages: [],\n },\n packages: '',\n}\n\nconst collectPackageFiles = async (config: IConfigOptions, packages: string[]) => {\n const files = ['package.json']\n files.push(...await glob(packages, {\n cwd: config.cwd,\n ignore: ['**/node_modules/**'],\n }))\n\n return [...files]\n}\n\nexport const isMonorepo = async (\n config: IConfigOptions,\n): Promise<IConfigOptions['monorepo']> => {\n const workspacePath = await findUp('pnpm-workspace.yaml', {\n cwd: config.cwd,\n }) as string\n\n if (!workspacePath) {\n return {\n is: false,\n workspacePath: '',\n packageContexts: [],\n packages: [],\n }\n }\n\n const workspaceYaml = workspacePath ? parse(readFileSync(workspacePath, 'utf-8')) : { packages: [] }\n\n const is = !!workspaceYaml?.packages?.length || false\n\n const { packages: workSpacePackages } = parse(readFileSync(workspacePath, 'utf-8'))\n\n let packages = []\n let packageContexts: IPackageContexts[] = []\n if (workSpacePackages) {\n packages = workSpacePackages.map(\n (item: string) =>\n item.indexOf('*')\n ? `${item.replace('/*', '')}/**/package.json`\n : `${item}/**/package.json`,\n )\n\n const packageFiles = await collectPackageFiles(config, packages)\n packageContexts = packageFiles.map((file) => {\n const files = JSON.parse(readFileSync(resolve(config.cwd, file), 'utf-8')) as IPackage\n\n return {\n name: `${files.name}`,\n file,\n version: files?.version || '',\n context: files,\n }\n }) as IPackageContexts[]\n }\n\n return {\n is,\n workspacePath,\n packageContexts,\n packages,\n }\n}\n\nexport const resolveConfig = async (): Promise<IConfigOptions> => {\n const { loadConfig } = await import('c12')\n\n const config = await loadConfig<IConfigOptions>({\n name,\n defaultConfig,\n }).then(r => ({\n ...r.config,\n cwd: process.cwd(),\n root: CURRENT_PATH,\n }))\n\n config.token.value = await loaderToken(config) || ''\n\n config.monorepo = await isMonorepo(config)\n\n config.packages = resolve(config.cwd, 'package.json')\n\n return config\n}\n","import type { IConfigOptions } from '@/types'\nimport { x } from 'tinyexec'\n\nexport const gitCommit = async (config: IConfigOptions) => {\n const args = []\n\n args.push('--message', `release: v${config.release}`)\n\n args.push('--allow-empty')\n\n // if (typeof config.packages === 'object') {\n // args.push(config.packages.map(r => basename(r)).join(' '))\n // }\n // else {\n args.push(config.packages)\n // }\n\n await x('git', ['commit', ...args], {\n nodeOptions: {\n cwd: config.cwd,\n stdio: 'pipe',\n },\n })\n}\n\nexport const gitTags = async (config: IConfigOptions) => {\n await x('git', [\n 'tag',\n '--annotate',\n '--message',\n '',\n `v${config.release}`,\n ], {\n nodeOptions: {\n cwd: config.cwd,\n stdio: 'pipe',\n },\n })\n}\n\nexport const gitPush = async (config: IConfigOptions) => {\n await x('git', ['push', '--tags'], {\n throwOnError: true,\n nodeOptions: {\n cwd: config.cwd,\n stdio: 'pipe',\n },\n })\n}\n","import type { IConfigOptions } from '@/types'\nimport { x } from 'tinyexec'\n\nexport const runCommand = async (config: IConfigOptions, command: string, args: string[]) => {\n await x(command, args, {\n nodeOptions: {\n stdio: 'inherit',\n cwd: config.cwd,\n },\n })\n}\n","import type { IConfigOptions } from '@/types'\nimport { readFile, writeFile } from 'node:fs/promises'\n\nconst JSON_SPACING = 2\n\nconst updatePackageJson = async (path: string, version: string) => {\n const updatePackage = JSON.parse(await readFile(path, 'utf-8'))\n updatePackage.version = version\n await writeFile(path, JSON.stringify(updatePackage, null, JSON_SPACING))\n}\n\nexport const updateFiles = async (config: IConfigOptions) => {\n if (config.monorepo.is) {\n for (const pkg of config.monorepo.updatePackages!) {\n await updatePackageJson(pkg.path, pkg.newVersion)\n }\n }\n else {\n await updatePackageJson(config.packages, config.release)\n }\n}\n","import type { IConfigOptions } from '@/types'\nimport { readFile } from 'node:fs/promises'\n\nexport const getCurrentVersion = async (config: IConfigOptions) => {\n const { packages } = config\n\n if (typeof packages === 'object') {\n // TODO load monorepo package version\n }\n else {\n const manifest = JSON.parse(await readFile(packages, {\n encoding: 'utf-8',\n })) as {\n version?: string\n }\n\n config.currentVersion = manifest.version || ''\n }\n}\n","import type { releaseType, ReleaseTypes } from '@/release-type.ts'\nimport type { IConfigOptions, IUpdatePackages } from '@/types'\nimport { cancel, isCancel, select, text } from '@clack/prompts'\nimport pc from 'picocolors'\nimport semver from 'semver'\nimport { CUSTOM_RELEASE_PREFIX } from '@/constant.ts'\nimport { isCancelProcess } from '@/utils.ts'\n\n// https://semver.org/\n\nconst PADDING = 13\nexport const validateVersion = (version: string) => !!semver.valid(version)\n\ninterface UIStyle {\n label: string\n color: (t: string) => string\n}\n\nconst DEFAULT_STYLE: UIStyle = { label: 'next', color: pc.cyan }\n\nconst UI_STYLE_MAP: Record<string, UIStyle> = {\n major: { label: 'major', color: pc.cyan },\n minor: { label: 'minor', color: pc.cyan },\n patch: { label: 'patch', color: pc.cyan },\n next: { label: 'next', color: pc.cyan },\n rc: { label: 'rc', color: pc.green },\n beta: { label: 'pre-beta', color: pc.magenta },\n alpha: { label: 'alpha', color: pc.yellow },\n}\n\n// --- 工具函数 ---\n\n/**\n * 核心逻辑:增量处理预发布版本\n * 解决 TS2345: 使用 readonly 修饰符接受 semver 的返回类型\n */\nconst processIncrementalPre = (preParts: readonly (string | number)[], base: string, prefix: string, expectedLen: number, fallback: string): string => {\n if (preParts[0] !== prefix) {\n return `${base}-${fallback}`\n }\n\n const newPre = [...preParts].slice(0, expectedLen)\n while (newPre.length < expectedLen) {\n newPre.push(0)\n }\n\n const lastIdx = expectedLen - 1\n const lastVal = newPre[lastIdx]\n const numericVal = typeof lastVal === 'number' ? lastVal : Number.parseInt(String(lastVal), 10)\n\n const isExtension = preParts.length < expectedLen\n // 逻辑:如果是补位产生的 0,则起始为 1;如果是已有的数字,则递增\n newPre[lastIdx] = isExtension ? 1 : (Number.isNaN(numericVal) ? 1 : numericVal + 1)\n\n return `${base}-${newPre.join('.')}`\n}\n\nexport const getNextVersions = (version: string): ReleaseTypes => {\n const s = semver.parse(version)\n if (!s)\n throw new Error(`[Invalid SemVer]: ${version}`)\n\n const { major: M, minor: m, patch: p, prerelease: pre } = s\n const base = `${M}.${m}.${p}`\n\n return {\n 'major': `${M + 1}.0.0`,\n 'minor': `${M}.${m + 1}.0`,\n 'patch': `${M}.${m}.${p + 1}`,\n 'next': `${M}.${m}.${p + 1}`,\n 'rc': processIncrementalPre(pre, base, 'rc', 2, 'rc.1'),\n 'beta-major': processIncrementalPre(pre, base, 'beta', 2, 'beta.1'),\n 'beta-minor': processIncrementalPre(pre, base, 'beta', 3, 'beta.0.1'),\n 'beta-patch': processIncrementalPre(pre, base, 'beta', 4, 'beta.0.0.1'),\n 'pre-beta': `${base}-beta`,\n 'alpha-beta': `${base}-alpha.beta`,\n 'alpha-major': processIncrementalPre(pre, base, 'alpha', 2, 'alpha.1'),\n 'alpha-minor': processIncrementalPre(pre, base, 'alpha', 3, 'alpha.0.1'),\n 'alpha-patch': processIncrementalPre(pre, base, 'alpha', 4, 'alpha.0.0.1'),\n }\n}\n\nexport async function promptForNewVersion(config: IConfigOptions): Promise<string | void>\nexport async function promptForNewVersion(config: IConfigOptions, pkg: IUpdatePackages, index: number): Promise<string | void>\nexport async function promptForNewVersion(config: IConfigOptions, pkg?: IUpdatePackages, index?: number): Promise<string | void> {\n const version = config.monorepo.is && pkg !== undefined ? pkg.newVersion : config.currentVersion\n\n const next = getNextVersions(version)\n\n // 动态生成选项\n const options = (Object.keys(next) as releaseType[]).map((key) => {\n const versionStr = next[key]\n\n // 1. 获取前缀(如 'alpha')\n const prefix = key.split('-')[0] ?? 'next'\n\n // 2. 彻底解决 TS18048: 即使 prefix 在 Map 里,TS 仍认为可能返回 undefined\n // 使用空值合并运算符 (??) 确保 style 永远是 UIStyle 类型\n const style = UI_STYLE_MAP[prefix] ?? DEFAULT_STYLE\n\n const label = style.label.padStart(PADDING, ' ')\n\n // 渲染版本颜色,同样处理关键字匹配的安全性\n const coloredVersion = versionStr.replace(/(rc|beta|alpha)/g, (match) => {\n const matchStyle = UI_STYLE_MAP[match] ?? DEFAULT_STYLE\n return matchStyle.color(match)\n })\n\n return {\n value: key as string,\n label: `${label} ${coloredVersion}`,\n }\n })\n\n options.push({\n value: CUSTOM_RELEASE_PREFIX,\n label: `${'custom'.padStart(PADDING, ' ')} ...`,\n })\n\n const release = await select({\n message: `Current version ${pc.bold(version)}`,\n options,\n initialValue: 'next',\n }) as releaseType | 'custom'\n\n isCancelProcess(release)\n\n let finalVersion: string\n\n if (release === CUSTOM_RELEASE_PREFIX) {\n const custom = await text({\n message: 'Enter the new version number',\n validate: val => !validateVersion(val) ? 'Invalid semver' : undefined,\n }) as string\n\n if (isCancel(custom)) {\n cancel('No version entered')\n return process.exit(0)\n }\n finalVersion = custom\n }\n else {\n // 这里的 release 已经排除了 CUSTOM 且必定属于 releaseType\n finalVersion = next[release]\n }\n\n if (\n config.monorepo.is\n && pkg !== undefined\n && index !== undefined\n && Array.isArray(config.monorepo.updatePackages)\n ) {\n config.monorepo.updatePackages[index]!.newVersion = finalVersion\n }\n else {\n config.release = finalVersion\n }\n}\n","import type { IConfigOptions, IPackageContexts, IUpdatePackages } from '@/types'\nimport { readFile, writeFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport process from 'node:process'\nimport { confirm, intro, outro, select } from '@clack/prompts'\nimport { findUp } from 'find-up'\nimport pc from 'picocolors'\nimport { resolveConfig } from '@/config.ts'\nimport { CANCEL_PROCESS } from '@/constant.ts'\nimport { gitCommit, gitTags } from '@/git.ts'\nimport { runCommand } from '@/runCommand.ts'\nimport { updateFiles } from '@/update-files.ts'\nimport { isCancelProcess, loaderTs } from '@/utils.ts'\nimport { getCurrentVersion } from '@/version/current.ts'\nimport { promptForNewVersion } from '@/version/new.version.ts'\nimport { version } from '../../package.json'\n\n/**\n * 创建包选择选项\n */\nconst createPackageOptions = (packageContexts: IPackageContexts[]) => {\n return packageContexts.map((file) => {\n return {\n value: file.name,\n label: file.name,\n hint: `${pc.red(file.version)} - ${file.file}`,\n }\n })\n}\n\n/**\n * 处理单个包的选择流程\n */\nconst processPackageSelection = async (\n config: IConfigOptions,\n selectedPackageName: string,\n packageContexts: IPackageContexts[],\n): Promise<void> => {\n const selectedPackage = packageContexts.find(opt => opt.name === selectedPackageName) as IPackageContexts\n\n const resolvePackage: IUpdatePackages = {\n name: selectedPackageName,\n path: resolve(config.cwd, selectedPackage.file),\n currentVersion: selectedPackage.version,\n newVersion: selectedPackage.version,\n };\n\n (config.monorepo.updatePackages ??= []).push(resolvePackage)\n\n await promptForNewVersion(config, resolvePackage, config.monorepo.updatePackages.length - 1)\n}\n\n/**\n * 处理 monorepo 包的选择逻辑\n */\nconst handleMonorepoPackageSelection = async (config: IConfigOptions): Promise<void> => {\n const options = createPackageOptions(config.monorepo.packageContexts)\n let availableOptions = [...options]\n\n while (availableOptions.length > 0) {\n const selectedPackage = await select({\n message: '请选择要升级版本的包:',\n options: availableOptions,\n }) as string\n\n isCancelProcess(selectedPackage)\n\n await processPackageSelection(config, selectedPackage, config.monorepo.packageContexts)\n\n // 从可用选项中移除已选择的包\n availableOptions = availableOptions.filter(opt => opt.value !== selectedPackage)\n\n if (availableOptions.length > 0) {\n const continueSelection = await confirm({\n message: '是否继续选择其他包?',\n initialValue: true,\n })\n isCancelProcess(continueSelection)\n\n if (!continueSelection) {\n break\n }\n }\n }\n}\n\n/**\n * 获取缓存文件路径\n */\nconst getCachePath = async (cwd: string): Promise<string | null> => {\n const path = await findUp('node_modules/.cache/dnmp.ts', {\n cwd,\n })\n return path || null\n}\n\n/**\n * 读取或设置统一更新版本选项\n */\nconst getOrUpdateAllUpdateVersion = async (config: IConfigOptions): Promise<boolean> => {\n const cachePath = await getCachePath(config.cwd)\n\n if (cachePath) {\n return Boolean(await loaderTs(cachePath))\n }\n\n const allUpdateVersion = await confirm({\n message: '是否以根 package.json 为主版本统一更新 workspace 所有版本',\n initialValue: true,\n }) as boolean\n\n isCancelProcess(allUpdateVersion, CANCEL_PROCESS)\n\n const cacheFilePath = resolve(config.cwd, './node_modules/.cache/dnmp.ts')\n await writeFile(cacheFilePath, `export default ${allUpdateVersion}`)\n\n return allUpdateVersion\n}\n\n/**\n * 读取包文件内容\n */\nconst readPackageFile = async (filePath: string): Promise<{ version: string }> => {\n return JSON.parse(await readFile(filePath, 'utf-8')) as { version: string }\n}\n\n/**\n * 统一更新所有包的版本\n */\nconst updateAllPackagesVersion = async (config: IConfigOptions): Promise<void> => {\n const pkg = await readPackageFile(config.packages)\n config.currentVersion = pkg.version\n\n await promptForNewVersion(config)\n\n for (const item of config.monorepo.packageContexts) {\n const resolvePkgPath = resolve(config.cwd, item.file)\n const packageInfo = await readPackageFile(resolvePkgPath);\n\n (config.monorepo.updatePackages ??= []).push({\n name: item.name,\n path: resolvePkgPath,\n currentVersion: packageInfo.version,\n newVersion: config.release,\n })\n }\n}\n\nexport const bumpVersion = async () => {\n const config = await resolveConfig()\n\n intro(pc.bgCyan(` dnmp ${version} `))\n\n if (!config.token.value) {\n outro('请先设置 release token')\n return process.exit(0)\n }\n\n if (config.monorepo.is) {\n const allUpdateVersion = await getOrUpdateAllUpdateVersion(config)\n\n if (allUpdateVersion) {\n await updateAllPackagesVersion(config)\n }\n else {\n await handleMonorepoPackageSelection(config)\n }\n }\n else {\n await getCurrentVersion(config)\n await promptForNewVersion(config)\n }\n\n const isConfirmUpdate = await confirm({\n message: '是否确认更新 package.json ?',\n initialValue: true,\n })\n\n isCancelProcess(isConfirmUpdate)\n\n if (!isConfirmUpdate) {\n outro('用户取消操作,后续进程停止')\n return process.exit(0)\n }\n\n await updateFiles(config)\n\n await gitCommit(config)\n await gitTags(config)\n\n await runCommand(config, 'npm', [\n 'publish',\n `--//registry.npmjs.org/:_authToken=${config.token.value}`,\n '--access',\n 'public',\n ])\n\n outro('Done.')\n}\n","import process from 'node:process'\nimport { resolveConfig } from '@/config.ts'\nimport { setToken } from '@/token.ts'\nimport { printWarning } from '@/utils.ts'\n\nexport const token = async (token: string = '') => {\n try {\n const config = await resolveConfig()\n await setToken(config, token)\n }\n catch (error: any) {\n printWarning(error.message)\n process.exit(0)\n }\n}\n","import * as process from 'node:process'\nimport cac from 'cac'\nimport { bumpVersion } from '@/command/bump.ts'\nimport { token as setToken } from '@/command/token.ts'\nimport { printWarning } from '@/utils.ts'\nimport { name, version } from '../package.json'\n\nconst cli = cac(name)\n\n// TODO 完成主目录下的 package.json 版本发布\n// TODO 完成 monorepo 相关版本,多选版本发布\n\ncli.command('')\n .action(async (options) => {\n await bumpVersion()\n })\n\ncli.command('set <token>', 'Set the local release Token')\n .action(async (token: string = '') => {\n await setToken(token)\n })\n\ncli.help()\ncli.version(version)\n\ntry {\n cli.parse()\n}\ncatch (error: any) {\n printWarning(error.message)\n process.exit(0)\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dnmp",
3
3
  "type": "module",
4
- "version": "0.0.0-alpha.0.2",
4
+ "version": "0.0.0-alpha.0.4",
5
5
  "packageManager": "pnpm@10.15.1",
6
6
  "description": "Interactive CLI that bumps your version numbers and more",
7
7
  "author": "lonewolfyx <olddrivero.king@qq.com>",
@@ -39,13 +39,15 @@
39
39
  "dependencies": {
40
40
  "@clack/prompts": "^0.11.0",
41
41
  "boxen": "^8.0.1",
42
+ "c12": "^3.3.3",
42
43
  "cac": "^6.7.14",
43
44
  "defu": "^6.1.4",
44
45
  "find-up": "^8.0.0",
45
46
  "glob": "^13.0.0",
46
47
  "jiti": "^2.6.1",
47
48
  "semver": "^7.7.3",
48
- "tinyexec": "^1.0.2"
49
+ "tinyexec": "^1.0.2",
50
+ "yaml": "^2.8.2"
49
51
  },
50
52
  "devDependencies": {
51
53
  "@antfu/eslint-config": "^6.7.3",