dnmp 0.0.0-alpha.0.2 → 0.0.0-alpha.0.3

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,411 @@ 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.3";
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;
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/update-files.ts
264
+ const JSON_SPACING = 2;
265
+ const updatePackageJson = async (path, version$1) => {
266
+ const updatePackage = JSON.parse(await readFile(path, "utf-8"));
267
+ updatePackage.version = version$1;
268
+ await writeFile(path, JSON.stringify(updatePackage, null, JSON_SPACING));
269
+ };
270
+ const updateFiles = async (config) => {
271
+ if (config.monorepo.is) for (const pkg of config.monorepo.updatePackages) await updatePackageJson(pkg.path, pkg.newVersion);
272
+ else await updatePackageJson(config.packages, config.release);
273
+ };
274
+
275
+ //#endregion
276
+ //#region src/version/current.ts
277
+ const getCurrentVersion = async (config) => {
278
+ const { packages } = config;
279
+ if (typeof packages === "object") {} else config.currentVersion = JSON.parse(await readFile(packages, { encoding: "utf-8" })).version || "";
159
280
  };
160
281
 
161
282
  //#endregion
162
- //#region src/version.ts
283
+ //#region src/version/new.version.ts
163
284
  const PADDING = 13;
164
- const promptForNewVersion = async (config) => {
165
- let custom = "";
285
+ const validateVersion = (version$1) => !!semver.valid(version$1);
286
+ const DEFAULT_STYLE = {
287
+ label: "next",
288
+ color: import_picocolors.default.cyan
289
+ };
290
+ const UI_STYLE_MAP = {
291
+ major: {
292
+ label: "major",
293
+ color: import_picocolors.default.cyan
294
+ },
295
+ minor: {
296
+ label: "minor",
297
+ color: import_picocolors.default.cyan
298
+ },
299
+ patch: {
300
+ label: "patch",
301
+ color: import_picocolors.default.cyan
302
+ },
303
+ next: {
304
+ label: "next",
305
+ color: import_picocolors.default.cyan
306
+ },
307
+ rc: {
308
+ label: "rc",
309
+ color: import_picocolors.default.green
310
+ },
311
+ beta: {
312
+ label: "pre-beta",
313
+ color: import_picocolors.default.magenta
314
+ },
315
+ alpha: {
316
+ label: "alpha",
317
+ color: import_picocolors.default.yellow
318
+ }
319
+ };
320
+ /**
321
+ * 核心逻辑:增量处理预发布版本
322
+ * 解决 TS2345: 使用 readonly 修饰符接受 semver 的返回类型
323
+ */
324
+ const processIncrementalPre = (preParts, base, prefix, expectedLen, fallback) => {
325
+ if (preParts[0] !== prefix) return `${base}-${fallback}`;
326
+ const newPre = [...preParts].slice(0, expectedLen);
327
+ while (newPre.length < expectedLen) newPre.push(0);
328
+ const lastIdx = expectedLen - 1;
329
+ const lastVal = newPre[lastIdx];
330
+ const numericVal = typeof lastVal === "number" ? lastVal : Number.parseInt(String(lastVal), 10);
331
+ newPre[lastIdx] = preParts.length < expectedLen ? 1 : Number.isNaN(numericVal) ? 1 : numericVal + 1;
332
+ return `${base}-${newPre.join(".")}`;
333
+ };
334
+ const getNextVersions = (version$1) => {
335
+ const s = semver.parse(version$1);
336
+ if (!s) throw new Error(`[Invalid SemVer]: ${version$1}`);
337
+ const { major: M, minor: m, patch: p, prerelease: pre } = s;
338
+ const base = `${M}.${m}.${p}`;
339
+ return {
340
+ "major": `${M + 1}.0.0`,
341
+ "minor": `${M}.${m + 1}.0`,
342
+ "patch": `${M}.${m}.${p + 1}`,
343
+ "next": `${M}.${m}.${p + 1}`,
344
+ "rc": processIncrementalPre(pre, base, "rc", 2, "rc.1"),
345
+ "beta-major": processIncrementalPre(pre, base, "beta", 2, "beta.1"),
346
+ "beta-minor": processIncrementalPre(pre, base, "beta", 3, "beta.0.1"),
347
+ "beta-patch": processIncrementalPre(pre, base, "beta", 4, "beta.0.0.1"),
348
+ "pre-beta": `${base}-beta`,
349
+ "alpha-beta": `${base}-alpha.beta`,
350
+ "alpha-major": processIncrementalPre(pre, base, "alpha", 2, "alpha.1"),
351
+ "alpha-minor": processIncrementalPre(pre, base, "alpha", 3, "alpha.0.1"),
352
+ "alpha-patch": processIncrementalPre(pre, base, "alpha", 4, "alpha.0.0.1")
353
+ };
354
+ };
355
+ async function promptForNewVersion(config, pkg, index) {
356
+ const version$1 = config.monorepo.is && pkg !== void 0 ? pkg.newVersion : config.currentVersion;
357
+ const next = getNextVersions(version$1);
358
+ const options = Object.keys(next).map((key) => {
359
+ const versionStr = next[key];
360
+ return {
361
+ value: key,
362
+ label: `${(UI_STYLE_MAP[key.split("-")[0] ?? "next"] ?? DEFAULT_STYLE).label.padStart(PADDING, " ")} ${versionStr.replace(/(rc|beta|alpha)/g, (match) => {
363
+ return (UI_STYLE_MAP[match] ?? DEFAULT_STYLE).color(match);
364
+ })}`
365
+ };
366
+ });
367
+ options.push({
368
+ value: CUSTOM_RELEASE_PREFIX,
369
+ label: `${"custom".padStart(PADDING, " ")} ...`
370
+ });
166
371
  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
- ],
372
+ message: `Current version ${import_picocolors.default.bold(version$1)}`,
373
+ options,
222
374
  initialValue: "next"
223
375
  });
224
- if (isCancel(release)) {
225
- cancel("No version selected");
226
- return process$1.exit(0);
227
- }
376
+ isCancelProcess(release);
377
+ let finalVersion;
228
378
  if (release === CUSTOM_RELEASE_PREFIX) {
229
- custom = await text({
379
+ const custom = await text({
230
380
  message: "Enter the new version number",
231
- placeholder: "e.g. major, minor, patch, pre-alpha, pre-beta, rc, ..."
381
+ validate: (val) => !validateVersion(val) ? "Invalid semver" : void 0
232
382
  });
233
383
  if (isCancel(custom)) {
234
- cancel("No version enter");
235
- return process$1.exit(0);
384
+ cancel("No version entered");
385
+ return process.exit(0);
386
+ }
387
+ finalVersion = custom;
388
+ } else finalVersion = next[release];
389
+ if (config.monorepo.is && pkg !== void 0 && index !== void 0 && Array.isArray(config.monorepo.updatePackages)) config.monorepo.updatePackages[index].newVersion = finalVersion;
390
+ else config.release = finalVersion;
391
+ }
392
+
393
+ //#endregion
394
+ //#region src/command/bump.ts
395
+ /**
396
+ * 创建包选择选项
397
+ */
398
+ const createPackageOptions = (packageContexts) => {
399
+ return packageContexts.map((file) => {
400
+ return {
401
+ value: file.name,
402
+ label: file.name,
403
+ hint: `${import_picocolors.default.red(file.version)} - ${file.file}`
404
+ };
405
+ });
406
+ };
407
+ /**
408
+ * 处理单个包的选择流程
409
+ */
410
+ const processPackageSelection = async (config, selectedPackageName, packageContexts) => {
411
+ const selectedPackage = packageContexts.find((opt) => opt.name === selectedPackageName);
412
+ const resolvePackage = {
413
+ name: selectedPackageName,
414
+ path: resolve(config.cwd, selectedPackage.file),
415
+ currentVersion: selectedPackage.version,
416
+ newVersion: selectedPackage.version
417
+ };
418
+ (config.monorepo.updatePackages ??= []).push(resolvePackage);
419
+ await promptForNewVersion(config, resolvePackage, config.monorepo.updatePackages.length - 1);
420
+ };
421
+ /**
422
+ * 处理 monorepo 包的选择逻辑
423
+ */
424
+ const handleMonorepoPackageSelection = async (config) => {
425
+ let availableOptions = [...createPackageOptions(config.monorepo.packageContexts)];
426
+ while (availableOptions.length > 0) {
427
+ const selectedPackage = await select({
428
+ message: "请选择要升级版本的包:",
429
+ options: availableOptions
430
+ });
431
+ isCancelProcess(selectedPackage);
432
+ await processPackageSelection(config, selectedPackage, config.monorepo.packageContexts);
433
+ availableOptions = availableOptions.filter((opt) => opt.value !== selectedPackage);
434
+ if (availableOptions.length > 0) {
435
+ const continueSelection = await confirm({
436
+ message: "是否继续选择其他包?",
437
+ initialValue: true
438
+ });
439
+ isCancelProcess(continueSelection);
440
+ if (!continueSelection) break;
236
441
  }
237
442
  }
238
- console.log({
239
- release,
240
- custom
443
+ };
444
+ /**
445
+ * 获取缓存文件路径
446
+ */
447
+ const getCachePath = async (cwd) => {
448
+ return await findUp("node_modules/.cache/dnmp.ts", { cwd }) || null;
449
+ };
450
+ /**
451
+ * 读取或设置统一更新版本选项
452
+ */
453
+ const getOrUpdateAllUpdateVersion = async (config) => {
454
+ const cachePath = await getCachePath(config.cwd);
455
+ if (cachePath) return Boolean(await loaderTs(cachePath));
456
+ const allUpdateVersion = await confirm({
457
+ message: "是否以根 package.json 为主版本统一更新 workspace 所有版本",
458
+ initialValue: true
241
459
  });
460
+ isCancelProcess(allUpdateVersion, CANCEL_PROCESS);
461
+ await writeFile(resolve(config.cwd, "./node_modules/.cache/dnmp.ts"), `export default ${allUpdateVersion}`);
462
+ return allUpdateVersion;
242
463
  };
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) => {
464
+ /**
465
+ * 读取包文件内容
466
+ */
467
+ const readPackageFile = async (filePath) => {
468
+ return JSON.parse(await readFile(filePath, "utf-8"));
469
+ };
470
+ /**
471
+ * 统一更新所有包的版本
472
+ */
473
+ const updateAllPackagesVersion = async (config) => {
474
+ config.currentVersion = (await readPackageFile(config.packages)).version;
475
+ await promptForNewVersion(config);
476
+ for (const item of config.monorepo.packageContexts) {
477
+ const resolvePkgPath = resolve(config.cwd, item.file);
478
+ const packageInfo = await readPackageFile(resolvePkgPath);
479
+ (config.monorepo.updatePackages ??= []).push({
480
+ name: item.name,
481
+ path: resolvePkgPath,
482
+ currentVersion: packageInfo.version,
483
+ newVersion: config.release
484
+ });
485
+ }
486
+ };
487
+ const bumpVersion = async () => {
253
488
  const config = await resolveConfig();
254
- config.token = await loaderToken(config);
255
- console.log(config);
256
- console.log(import.meta);
257
489
  intro(import_picocolors.default.bgCyan(` dnmp ${version} `));
258
- await promptForNewVersion(config);
490
+ if (!config.token.value) {
491
+ outro("请先设置 release token");
492
+ return process$1.exit(0);
493
+ }
494
+ if (config.monorepo.is) if (await getOrUpdateAllUpdateVersion(config)) await updateAllPackagesVersion(config);
495
+ else await handleMonorepoPackageSelection(config);
496
+ else {
497
+ await getCurrentVersion(config);
498
+ await promptForNewVersion(config);
499
+ }
259
500
  console.log("npm", [
260
501
  "publish",
261
- `--//registry.npmjs.org/:_authToken=${config.token}`,
502
+ `--//registry.npmjs.org/:_authToken=${config.token.value}`,
262
503
  "--access",
263
504
  "public"
264
505
  ].join(" "));
265
- await runCommand(config, "npm", [
266
- "publish",
267
- `--//registry.npmjs.org/:_authToken=${config.token}`,
268
- "--access",
269
- "public"
270
- ]);
506
+ const isConfirmUpdate = await confirm({
507
+ message: "是否确认更新 package.json ?",
508
+ initialValue: true
509
+ });
510
+ isCancelProcess(isConfirmUpdate);
511
+ if (!isConfirmUpdate) {
512
+ outro("用户取消操作,后续进程停止");
513
+ return process$1.exit(0);
514
+ }
515
+ await updateFiles(config);
516
+ await gitCommit(config);
517
+ await gitTags(config);
271
518
  outro("Done.");
272
- });
273
- cli.command("set <token>", "Set the local release Token").action(async (token = "") => {
519
+ };
520
+
521
+ //#endregion
522
+ //#region src/command/token.ts
523
+ const token = async (token$1 = "") => {
274
524
  try {
275
- await setToken(await resolveConfig(), token);
525
+ await setToken(await resolveConfig(), token$1);
276
526
  } catch (error) {
277
527
  printWarning(error.message);
278
- process.exit(1);
528
+ process$1.exit(0);
279
529
  }
530
+ };
531
+
532
+ //#endregion
533
+ //#region src/cli.ts
534
+ const cli = cac(name);
535
+ cli.command("").action(async (options) => {
536
+ await bumpVersion();
537
+ });
538
+ cli.command("set <token>", "Set the local release Token").action(async (token$1 = "") => {
539
+ await token(token$1);
280
540
  });
281
541
  cli.help();
282
542
  cli.version(version);
@@ -284,7 +544,7 @@ try {
284
544
  cli.parse();
285
545
  } catch (error) {
286
546
  printWarning(error.message);
287
- process.exit(1);
547
+ process$2.exit(0);
288
548
  }
289
549
 
290
550
  //#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/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\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 { 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 { 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 console.log('npm', [\n 'publish',\n `--//registry.npmjs.org/:_authToken=${config.token.value}`,\n '--access',\n 'public',\n ].join(' '))\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}`,\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.3",
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",