@mznjs/mbump 2.1.0 → 2.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +106 -0
- package/README.md +275 -1462
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +255 -87
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +72 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -43
- package/dist/index.js.map +1 -1
- package/dist/{VersionManager-CwsuNWyP.js → path-BvKf4Pq-.js} +427 -37
- package/dist/path-BvKf4Pq-.js.map +1 -0
- package/package.json +14 -13
- package/dist/VersionManager-CwsuNWyP.js.map +0 -1
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","names":[],"sources":["../src/cli/index.ts"],"sourcesContent":null,"mappings":";;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","names":[],"sources":["../src/cli/index.ts"],"sourcesContent":null,"mappings":";;iBA6RgB,QAAA,CAAA;;;AAAhB"}
|
package/dist/cli.js
CHANGED
|
@@ -1,15 +1,24 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { VersionManager, loadConfigAsync, logger_default } from "./
|
|
2
|
+
import { RustManager, VersionManager, clearConfigCache, isPathLike, loadConfigAsync, logger_default } from "./path-BvKf4Pq-.js";
|
|
3
3
|
import { existsSync, readFileSync } from "node:fs";
|
|
4
4
|
import { dirname, join, resolve } from "node:path";
|
|
5
5
|
import { execSync } from "node:child_process";
|
|
6
|
-
import process from "node:process";
|
|
7
6
|
import semver from "semver";
|
|
7
|
+
import process from "node:process";
|
|
8
8
|
import { fileURLToPath } from "node:url";
|
|
9
9
|
import inquirer from "inquirer";
|
|
10
10
|
|
|
11
11
|
//#region src/cli/interactive.ts
|
|
12
|
-
async function selectVersionInteractive(config, packageName, currentVersion) {
|
|
12
|
+
async function selectVersionInteractive(config, packageName, currentVersion, rootDir) {
|
|
13
|
+
let displayName = packageName;
|
|
14
|
+
if (rootDir && packageName !== "default") {
|
|
15
|
+
const pkgPath = config.packagePaths[packageName];
|
|
16
|
+
if (pkgPath) try {
|
|
17
|
+
const fullPath = resolve(rootDir, pkgPath);
|
|
18
|
+
const pkgContent = JSON.parse(readFileSync(fullPath, "utf8"));
|
|
19
|
+
if (pkgContent.name) displayName = pkgContent.name;
|
|
20
|
+
} catch {}
|
|
21
|
+
}
|
|
13
22
|
const choices = [
|
|
14
23
|
{
|
|
15
24
|
name: `major ${semver.inc(currentVersion, "major")}`,
|
|
@@ -55,7 +64,7 @@ async function selectVersionInteractive(config, packageName, currentVersion) {
|
|
|
55
64
|
const answers = await inquirer.prompt([{
|
|
56
65
|
type: "list",
|
|
57
66
|
name: "versionType",
|
|
58
|
-
message: `[${
|
|
67
|
+
message: `[${displayName}] Current version ${currentVersion} »`,
|
|
59
68
|
choices,
|
|
60
69
|
default: config.defaults?.releaseType || "patch"
|
|
61
70
|
}]);
|
|
@@ -85,7 +94,7 @@ async function selectAllVersionsInteractive(config, rootDir) {
|
|
|
85
94
|
for (const packageName of allPackageNames) {
|
|
86
95
|
const currentVersion = versionManager.getPackageVersion(packageName);
|
|
87
96
|
if (currentVersion) {
|
|
88
|
-
const selection = await selectVersionInteractive(config, packageName, currentVersion);
|
|
97
|
+
const selection = await selectVersionInteractive(config, packageName, currentVersion, rootDir);
|
|
89
98
|
selections[packageName] = selection;
|
|
90
99
|
}
|
|
91
100
|
}
|
|
@@ -94,14 +103,11 @@ async function selectAllVersionsInteractive(config, rootDir) {
|
|
|
94
103
|
|
|
95
104
|
//#endregion
|
|
96
105
|
//#region src/cli/parser.ts
|
|
97
|
-
function isPathLike(arg) {
|
|
98
|
-
return arg.startsWith("./") || arg.startsWith("../") || arg.startsWith(".\\") || arg.startsWith("..\\") || arg.startsWith("/") || arg.startsWith("\\") || /^[A-Za-z]:[\\/].*/.test(arg) || arg.startsWith("~") || arg === "." || arg.startsWith("\\\\") || arg.startsWith("//") || arg.includes("/") || arg.includes("\\") || arg.includes(".");
|
|
99
|
-
}
|
|
100
106
|
function parseArgs(args, defaults = {}) {
|
|
101
107
|
const parsed = {
|
|
102
108
|
package: null,
|
|
103
109
|
projectPath: null,
|
|
104
|
-
type:
|
|
110
|
+
type: void 0,
|
|
105
111
|
dryRun: defaults.dryRun || false,
|
|
106
112
|
help: false,
|
|
107
113
|
version: false,
|
|
@@ -110,7 +116,11 @@ function parseArgs(args, defaults = {}) {
|
|
|
110
116
|
push: defaults.git?.push !== false,
|
|
111
117
|
allowUncommitted: defaults.allowUncommitted || false,
|
|
112
118
|
npm: defaults.npm || false,
|
|
113
|
-
showConfig: false
|
|
119
|
+
showConfig: false,
|
|
120
|
+
rust: false,
|
|
121
|
+
tag: defaults.git?.tag !== false,
|
|
122
|
+
tagPrefix: defaults.git?.tagPrefix || "v",
|
|
123
|
+
changelog: defaults.git?.changelog !== false
|
|
114
124
|
};
|
|
115
125
|
const allowedTypes = [
|
|
116
126
|
"major",
|
|
@@ -147,6 +157,9 @@ function parseArgs(args, defaults = {}) {
|
|
|
147
157
|
} else if (arg === "--show-config" || arg === "-c") {
|
|
148
158
|
parsed.showConfig = true;
|
|
149
159
|
i++;
|
|
160
|
+
} else if (arg === "--rust" || arg === "-r") {
|
|
161
|
+
parsed.rust = true;
|
|
162
|
+
i++;
|
|
150
163
|
} else if (arg === "--version" || arg === "-V") {
|
|
151
164
|
parsed.version = true;
|
|
152
165
|
i++;
|
|
@@ -177,6 +190,21 @@ function parseArgs(args, defaults = {}) {
|
|
|
177
190
|
//#region src/cli/index.ts
|
|
178
191
|
const __filename = fileURLToPath(import.meta.url);
|
|
179
192
|
const __dirname = dirname(__filename);
|
|
193
|
+
function renderPreview(preview) {
|
|
194
|
+
logger_default.info("🔍 Dry-run 模式 - 以下操作将被执行:\n");
|
|
195
|
+
for (const pkg of preview.packages) {
|
|
196
|
+
logger_default.info(` 📦 ${pkg.name}`);
|
|
197
|
+
logger_default.info(` 当前版本: ${pkg.oldVersion}`);
|
|
198
|
+
logger_default.info(` 新版本: ${pkg.newVersion}`);
|
|
199
|
+
logger_default.info(` Tag: ${pkg.tagName}`);
|
|
200
|
+
logger_default.info(` CHANGELOG: ${pkg.changelogEnabled ? "是" : pkg.isDefaultPackage ? "否(配置禁用)" : "跳过(子包)"}`);
|
|
201
|
+
logger_default.info("");
|
|
202
|
+
}
|
|
203
|
+
logger_default.info(` Git Commit: ${preview.autoCommit ? "是" : "否"}`);
|
|
204
|
+
logger_default.info(` Git Push: ${preview.push ? "是" : "否"}`);
|
|
205
|
+
logger_default.info(` NPM Publish: ${preview.npm ? "是" : "否"}`);
|
|
206
|
+
logger_default.info("\n✅ 以上为预览,未执行任何实际操作");
|
|
207
|
+
}
|
|
180
208
|
let packageVersion = "1.0.0";
|
|
181
209
|
const possiblePaths = [
|
|
182
210
|
join(__dirname, "..", "..", "package.json"),
|
|
@@ -216,6 +244,54 @@ function getFriendlyErrorMessage(error) {
|
|
|
216
244
|
message: "❌ 无效的包名",
|
|
217
245
|
solution: "💡 请检查配置文件中的 packagePaths 是否正确设置"
|
|
218
246
|
};
|
|
247
|
+
if (errorMessage.includes("不支持的版本类型")) return {
|
|
248
|
+
message: "❌ 不支持的版本类型",
|
|
249
|
+
solution: "💡 支持的版本类型: major, minor, patch, pre-patch, pre-minor, pre-major, next, as-is, conventional"
|
|
250
|
+
};
|
|
251
|
+
if (errorMessage.includes("无效的自定义版本号")) return {
|
|
252
|
+
message: "❌ 无效的自定义版本号",
|
|
253
|
+
solution: "💡 请使用符合 semver 规范的版本号,如 1.0.0, 1.0.1-beta.1"
|
|
254
|
+
};
|
|
255
|
+
if (errorMessage.includes("版本计算失败")) return {
|
|
256
|
+
message: "❌ 版本计算失败",
|
|
257
|
+
solution: "💡 请检查当前版本号是否符合 semver 规范,或使用 --verbose 模式查看详细错误"
|
|
258
|
+
};
|
|
259
|
+
if (errorMessage.includes("无法计算新版本号")) return {
|
|
260
|
+
message: "❌ 无法计算新版本号",
|
|
261
|
+
solution: "💡 请检查当前版本号是否符合 semver 规范,或尝试使用不同的版本类型"
|
|
262
|
+
};
|
|
263
|
+
if (errorMessage.includes("读取文件失败")) return {
|
|
264
|
+
message: "📁 文件读取失败",
|
|
265
|
+
solution: "💡 请检查文件路径是否正确,文件是否存在且有读取权限"
|
|
266
|
+
};
|
|
267
|
+
if (errorMessage.includes("写入文件失败")) return {
|
|
268
|
+
message: "📁 文件写入失败",
|
|
269
|
+
solution: "💡 请检查文件路径是否正确,是否有写入权限,磁盘空间是否充足"
|
|
270
|
+
};
|
|
271
|
+
if (errorMessage.includes("Git") && errorMessage.includes("失败")) return {
|
|
272
|
+
message: "🔧 Git 操作失败",
|
|
273
|
+
solution: "💡 请检查 Git 仓库状态,确保有提交权限,或使用 --verbose 模式查看详细错误"
|
|
274
|
+
};
|
|
275
|
+
if (errorMessage.includes("发布失败")) return {
|
|
276
|
+
message: "🚀 NPM 发布失败",
|
|
277
|
+
solution: "💡 请检查 NPM 配置、认证状态和网络连接,或使用 --verbose 模式查看详细错误"
|
|
278
|
+
};
|
|
279
|
+
if (errorMessage.includes("Cargo.toml")) return {
|
|
280
|
+
message: "🦀 Cargo.toml 操作失败",
|
|
281
|
+
solution: "💡 请检查 Cargo.toml 文件是否存在,格式是否正确,或使用 --verbose 模式查看详细错误"
|
|
282
|
+
};
|
|
283
|
+
if (errorMessage.includes("不存在 package.json")) return {
|
|
284
|
+
message: "📦 package.json 不存在",
|
|
285
|
+
solution: "💡 请确保指定的路径是一个有效的 Node.js 项目目录"
|
|
286
|
+
};
|
|
287
|
+
if (errorMessage.includes("路径") && errorMessage.includes("不存在") && !errorMessage.includes("package.json")) return {
|
|
288
|
+
message: "📂 路径不存在",
|
|
289
|
+
solution: "💡 请检查路径是否正确,确保目录存在"
|
|
290
|
+
};
|
|
291
|
+
if (errorMessage.includes("配置错误")) return {
|
|
292
|
+
message: "⚙️ 配置错误",
|
|
293
|
+
solution: "💡 请检查配置文件是否正确,或使用 --show-config 查看当前配置"
|
|
294
|
+
};
|
|
219
295
|
return {
|
|
220
296
|
message: `❌ ${errorMessage}`,
|
|
221
297
|
solution: "💡 请检查错误信息,或使用 --verbose 模式查看更多详情"
|
|
@@ -284,6 +360,7 @@ function showHelp() {
|
|
|
284
360
|
--allow-uncommitted, -u 允许在有未提交更改的情况下继续操作
|
|
285
361
|
--npm, -N 启用npm包发布功能(默认不发布)
|
|
286
362
|
--show-config, -c 显示当前加载的完整配置信息
|
|
363
|
+
--rust, -r 启用 Rust 项目模式,更新 Cargo.toml 中的版本号
|
|
287
364
|
--version, -V 显示版本信息
|
|
288
365
|
--help, -h 显示此帮助信息
|
|
289
366
|
|
|
@@ -298,6 +375,13 @@ function showHelp() {
|
|
|
298
375
|
mbump ./packages/my-pkg # 更新 ./packages/my-pkg 目录下的 package.json
|
|
299
376
|
mbump ./packages/my-pkg patch # 指定版本类型
|
|
300
377
|
mbump ../other-project minor # 更新上级目录的项目
|
|
378
|
+
|
|
379
|
+
# Rust 项目模式(更新 Cargo.toml)
|
|
380
|
+
mbump --rust patch # 更新当前目录 Rust 项目的补丁版本
|
|
381
|
+
mbump -r minor # 更新当前目录 Rust 项目的小版本
|
|
382
|
+
mbump -r major --dry-run # 试运行升级当前目录 Rust 项目的主版本
|
|
383
|
+
mbump ./backend -r patch # 更新指定目录下的 Rust 项目
|
|
384
|
+
mbump ./backend -r -d # 试运行模式更新指定目录下的 Rust 项目
|
|
301
385
|
`;
|
|
302
386
|
logger_default.info(helpText);
|
|
303
387
|
}
|
|
@@ -324,48 +408,147 @@ async function main() {
|
|
|
324
408
|
process.exit(0);
|
|
325
409
|
}
|
|
326
410
|
const parsedArgs = parseArgs(args);
|
|
411
|
+
if (parsedArgs.rust) {
|
|
412
|
+
const rootDir$1 = parsedArgs.projectPath ? resolve(process.cwd(), parsedArgs.projectPath) : process.cwd();
|
|
413
|
+
if (parsedArgs.projectPath && !existsSync(rootDir$1)) {
|
|
414
|
+
displayError(new Error(`路径 "${parsedArgs.projectPath}" 不存在`), { operation: "路径验证" });
|
|
415
|
+
process.exit(1);
|
|
416
|
+
}
|
|
417
|
+
const rustManager = new RustManager(rootDir$1);
|
|
418
|
+
if (parsedArgs.projectPath) logger_default.info(`切换到项目路径: ${rootDir$1}`);
|
|
419
|
+
if (hasUncommittedChanges()) if (!parsedArgs.allowUncommitted) {
|
|
420
|
+
logger_default.warn("警告: 检测到未提交的Git更改");
|
|
421
|
+
const inquirer$1 = await import("inquirer");
|
|
422
|
+
const answers = await inquirer$1.default.prompt([{
|
|
423
|
+
type: "confirm",
|
|
424
|
+
name: "continue",
|
|
425
|
+
message: parsedArgs.dryRun ? "是否继续(dry-run模式不会实际提交更改)?" : "是否提交这些更改并继续?",
|
|
426
|
+
default: true
|
|
427
|
+
}]);
|
|
428
|
+
if (!answers.continue) {
|
|
429
|
+
logger_default.info("操作已取消");
|
|
430
|
+
process.exit(0);
|
|
431
|
+
}
|
|
432
|
+
if (!parsedArgs.dryRun) {
|
|
433
|
+
const commitMessage = "chore: update mbump config and settings";
|
|
434
|
+
execSync(`git add . && git commit -m "${commitMessage}"`, {
|
|
435
|
+
encoding: "utf8",
|
|
436
|
+
stdio: "pipe"
|
|
437
|
+
});
|
|
438
|
+
logger_default.success(`已提交更改: ${commitMessage}`);
|
|
439
|
+
} else logger_default.info("dry-run模式: 跳过实际提交操作");
|
|
440
|
+
} else logger_default.warn("警告: 存在未提交的Git更改,您选择了忽略此检查。请注意这可能导致不一致的版本状态。");
|
|
441
|
+
if (!rustManager.exists()) {
|
|
442
|
+
displayError(new Error(`Cargo.toml 文件不存在于路径 "${rootDir$1}"`), { operation: "Rust 项目检测" });
|
|
443
|
+
logger_default.info(`💡 请确保指定的路径是 Rust 项目根目录`);
|
|
444
|
+
process.exit(1);
|
|
445
|
+
}
|
|
446
|
+
const currentVersion = rustManager.getCurrentVersion();
|
|
447
|
+
if (!currentVersion) {
|
|
448
|
+
displayError(new Error(`Cargo.toml 文件中未找到 [package] 部分的 version 字段`), { operation: "版本读取" });
|
|
449
|
+
process.exit(1);
|
|
450
|
+
}
|
|
451
|
+
let selectedType$1 = parsedArgs.type;
|
|
452
|
+
let customVersion$1 = null;
|
|
453
|
+
if (!parsedArgs.type) {
|
|
454
|
+
const config$1 = {
|
|
455
|
+
defaults: { releaseType: "patch" },
|
|
456
|
+
packagePaths: {}
|
|
457
|
+
};
|
|
458
|
+
const selection = await selectVersionInteractive(config$1, "rust", currentVersion);
|
|
459
|
+
selectedType$1 = selection.type;
|
|
460
|
+
customVersion$1 = selection.customVersion;
|
|
461
|
+
}
|
|
462
|
+
try {
|
|
463
|
+
rustManager.updateVersion(selectedType$1, {
|
|
464
|
+
dryRun: parsedArgs.dryRun,
|
|
465
|
+
verbose: parsedArgs.verbose,
|
|
466
|
+
autoCommit: parsedArgs.autoCommit,
|
|
467
|
+
push: parsedArgs.push,
|
|
468
|
+
customVersion: customVersion$1,
|
|
469
|
+
tag: parsedArgs.tag,
|
|
470
|
+
changelog: parsedArgs.changelog,
|
|
471
|
+
allowUncommitted: parsedArgs.allowUncommitted
|
|
472
|
+
});
|
|
473
|
+
process.exit(0);
|
|
474
|
+
} catch (error) {
|
|
475
|
+
displayError(error, { operation: "Rust 版本更新" });
|
|
476
|
+
process.exit(1);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
327
479
|
if (parsedArgs.projectPath) {
|
|
328
480
|
const resolvedProjectPath = resolve(process.cwd(), parsedArgs.projectPath);
|
|
329
|
-
if (!existsSync(resolvedProjectPath))
|
|
481
|
+
if (!existsSync(resolvedProjectPath)) {
|
|
482
|
+
displayError(new Error(`路径 "${parsedArgs.projectPath}" 不存在`), { operation: "路径验证" });
|
|
483
|
+
process.exit(1);
|
|
484
|
+
}
|
|
330
485
|
const pkgJsonPath = join(resolvedProjectPath, "package.json");
|
|
331
|
-
if (!existsSync(pkgJsonPath))
|
|
486
|
+
if (!existsSync(pkgJsonPath)) {
|
|
487
|
+
displayError(new Error(`路径 "${parsedArgs.projectPath}" 中不存在 package.json`), { operation: "package.json 检测" });
|
|
488
|
+
logger_default.info(`💡 请确保指定的路径是一个有效的 Node.js 项目目录`);
|
|
489
|
+
process.exit(1);
|
|
490
|
+
}
|
|
332
491
|
logger_default.info(`切换到项目路径: ${resolvedProjectPath}`);
|
|
492
|
+
const pkgJsonContent = JSON.parse(readFileSync(pkgJsonPath, "utf8"));
|
|
493
|
+
const packageName = pkgJsonContent.name || "default";
|
|
494
|
+
parsedArgs.package = packageName;
|
|
495
|
+
clearConfigCache(resolvedProjectPath);
|
|
333
496
|
const projectConfig = await loadConfigAsync(resolvedProjectPath);
|
|
334
|
-
|
|
497
|
+
projectConfig.packagePaths = { [packageName]: pkgJsonPath };
|
|
335
498
|
const projectVersionManager = new VersionManager({
|
|
336
499
|
config: projectConfig,
|
|
337
500
|
rootDir: resolvedProjectPath
|
|
338
501
|
});
|
|
339
502
|
logger_default.setLevel(parsedArgs.verbose ? "debug" : "info");
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
503
|
+
if (hasUncommittedChanges()) if (!parsedArgs.allowUncommitted) {
|
|
504
|
+
logger_default.warn("警告: 检测到未提交的Git更改");
|
|
505
|
+
const inquirer$1 = await import("inquirer");
|
|
506
|
+
const answers = await inquirer$1.default.prompt([{
|
|
507
|
+
type: "confirm",
|
|
508
|
+
name: "continue",
|
|
509
|
+
message: parsedArgs.dryRun ? "是否继续(dry-run模式不会实际提交更改)?" : "是否提交这些更改并继续?",
|
|
510
|
+
default: true
|
|
511
|
+
}]);
|
|
512
|
+
if (!answers.continue) {
|
|
513
|
+
logger_default.info("操作已取消");
|
|
514
|
+
process.exit(0);
|
|
515
|
+
}
|
|
516
|
+
if (!parsedArgs.dryRun) {
|
|
517
|
+
const commitMessage = "chore: update mbump config and settings";
|
|
518
|
+
execSync(`git add . && git commit -m "${commitMessage}"`, {
|
|
519
|
+
encoding: "utf8",
|
|
520
|
+
stdio: "pipe"
|
|
521
|
+
});
|
|
522
|
+
logger_default.success(`已提交更改: ${commitMessage}`);
|
|
523
|
+
} else logger_default.info("dry-run模式: 跳过实际提交操作");
|
|
524
|
+
} else logger_default.warn("警告: 存在未提交的Git更改,您选择了忽略此检查。请注意这可能导致不一致的版本状态。");
|
|
525
|
+
let selectedType$1 = parsedArgs.type;
|
|
526
|
+
let customVersion$1 = null;
|
|
527
|
+
if (!parsedArgs.type) {
|
|
528
|
+
const currentVersion = projectVersionManager.getPackageVersion(packageName);
|
|
529
|
+
if (currentVersion) {
|
|
530
|
+
const selection = await selectVersionInteractive(projectConfig, packageName, currentVersion, resolvedProjectPath);
|
|
531
|
+
selectedType$1 = selection.type;
|
|
532
|
+
customVersion$1 = selection.customVersion;
|
|
533
|
+
}
|
|
346
534
|
}
|
|
347
|
-
const isDefaultPackage = parsedArgs.package === "default" || pkgPath === "package.json";
|
|
348
|
-
const tagPrefix = projectConfig.git?.tagPrefix || "v";
|
|
349
|
-
const tagName = isDefaultPackage ? `${tagPrefix}${newVersion}` : `${pkg.name}@${newVersion}`;
|
|
350
535
|
if (parsedArgs.dryRun) {
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
logger_default.info(` Git Push: ${parsedArgs.push ? "是" : "否"}`);
|
|
359
|
-
logger_default.info(` NPM Publish: ${parsedArgs.npm ? "是" : "否"}`);
|
|
360
|
-
logger_default.info("\n✅ 以上为预览,未执行任何实际操作");
|
|
536
|
+
const preview = await projectVersionManager.previewUpdate(parsedArgs.package, selectedType$1, {
|
|
537
|
+
customVersion: customVersion$1,
|
|
538
|
+
autoCommit: parsedArgs.autoCommit,
|
|
539
|
+
push: parsedArgs.push,
|
|
540
|
+
npm: parsedArgs.npm
|
|
541
|
+
});
|
|
542
|
+
renderPreview(preview);
|
|
361
543
|
process.exit(0);
|
|
362
544
|
}
|
|
363
|
-
await projectVersionManager.updateVersion(parsedArgs.package,
|
|
545
|
+
await projectVersionManager.updateVersion(parsedArgs.package, selectedType$1, {
|
|
364
546
|
dryRun: parsedArgs.dryRun,
|
|
365
547
|
verbose: parsedArgs.verbose,
|
|
366
548
|
autoCommit: parsedArgs.autoCommit,
|
|
367
549
|
push: parsedArgs.push,
|
|
368
|
-
npm: parsedArgs.npm
|
|
550
|
+
npm: parsedArgs.npm,
|
|
551
|
+
customVersion: customVersion$1
|
|
369
552
|
});
|
|
370
553
|
logger_default.success(`版本更新完成`);
|
|
371
554
|
process.exit(0);
|
|
@@ -420,40 +603,43 @@ async function main() {
|
|
|
420
603
|
const pkgJsonPath = join(resolvedPath, "package.json");
|
|
421
604
|
if (existsSync(resolvedPath) && existsSync(pkgJsonPath)) {
|
|
422
605
|
logger_default.info(`切换到项目路径: ${resolvedPath}`);
|
|
606
|
+
const pkgJsonContent = JSON.parse(readFileSync(pkgJsonPath, "utf8"));
|
|
607
|
+
const packageName = pkgJsonContent.name || "default";
|
|
608
|
+
clearConfigCache(resolvedPath);
|
|
423
609
|
const projectConfig = await loadConfigAsync(resolvedPath);
|
|
610
|
+
projectConfig.packagePaths = { [packageName]: pkgJsonPath };
|
|
424
611
|
const projectVersionManager = new VersionManager({
|
|
425
612
|
config: projectConfig,
|
|
426
613
|
rootDir: resolvedPath
|
|
427
614
|
});
|
|
428
615
|
logger_default.setLevel(parsedArgsWithDefaults.verbose ? "debug" : "info");
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
616
|
+
let selectedType$1 = parsedArgsWithDefaults.type;
|
|
617
|
+
let customVersion$1 = null;
|
|
618
|
+
if (!parsedArgsWithDefaults.type) {
|
|
619
|
+
const currentVersion = projectVersionManager.getPackageVersion(packageName);
|
|
620
|
+
if (currentVersion) {
|
|
621
|
+
const selection = await selectVersionInteractive(projectConfig, packageName, currentVersion, resolvedPath);
|
|
622
|
+
selectedType$1 = selection.type;
|
|
623
|
+
customVersion$1 = selection.customVersion;
|
|
624
|
+
}
|
|
435
625
|
}
|
|
436
|
-
const tagPrefix = projectConfig.git?.tagPrefix || "v";
|
|
437
|
-
const tagName = `${tagPrefix}${newVersion}`;
|
|
438
626
|
if (parsedArgsWithDefaults.dryRun) {
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
logger_default.info(` Git Push: ${parsedArgsWithDefaults.push ? "是" : "否"}`);
|
|
447
|
-
logger_default.info(` NPM Publish: ${parsedArgsWithDefaults.npm ? "是" : "否"}`);
|
|
448
|
-
logger_default.info("\n✅ 以上为预览,未执行任何实际操作");
|
|
627
|
+
const preview = await projectVersionManager.previewUpdate(packageName, selectedType$1, {
|
|
628
|
+
customVersion: customVersion$1,
|
|
629
|
+
autoCommit: parsedArgsWithDefaults.autoCommit,
|
|
630
|
+
push: parsedArgsWithDefaults.push,
|
|
631
|
+
npm: parsedArgsWithDefaults.npm
|
|
632
|
+
});
|
|
633
|
+
renderPreview(preview);
|
|
449
634
|
process.exit(0);
|
|
450
635
|
}
|
|
451
|
-
await projectVersionManager.updateVersion(
|
|
636
|
+
await projectVersionManager.updateVersion(packageName, selectedType$1, {
|
|
452
637
|
dryRun: parsedArgsWithDefaults.dryRun,
|
|
453
638
|
verbose: parsedArgsWithDefaults.verbose,
|
|
454
639
|
autoCommit: parsedArgsWithDefaults.autoCommit,
|
|
455
640
|
push: parsedArgsWithDefaults.push,
|
|
456
|
-
npm: parsedArgsWithDefaults.npm
|
|
641
|
+
npm: parsedArgsWithDefaults.npm,
|
|
642
|
+
customVersion: customVersion$1
|
|
457
643
|
});
|
|
458
644
|
logger_default.success(`版本更新完成`);
|
|
459
645
|
process.exit(0);
|
|
@@ -506,7 +692,7 @@ async function main() {
|
|
|
506
692
|
let selectedType = parsedArgsWithDefaults.type;
|
|
507
693
|
let customVersion = null;
|
|
508
694
|
const packageVersionSelections = {};
|
|
509
|
-
if (!
|
|
695
|
+
if (!parsedArgsWithDefaults.type) if (parsedArgsWithDefaults.package === "all") {
|
|
510
696
|
const selections = await selectAllVersionsInteractive(config, rootDir);
|
|
511
697
|
Object.assign(packageVersionSelections, selections);
|
|
512
698
|
} else {
|
|
@@ -520,22 +706,13 @@ async function main() {
|
|
|
520
706
|
}
|
|
521
707
|
if (parsedArgsWithDefaults.package === "all" && Object.keys(packageVersionSelections).length > 0) {
|
|
522
708
|
if (parsedArgsWithDefaults.dryRun) {
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
const tagName = isDefaultPackage ? `${tagPrefix}${newVersion}` : `${pkg.name}@${newVersion}`;
|
|
531
|
-
logger_default.info(` 📦 ${packageName}`);
|
|
532
|
-
logger_default.info(` 当前版本: ${pkg.version}`);
|
|
533
|
-
logger_default.info(` 新版本: ${newVersion}`);
|
|
534
|
-
logger_default.info(` Tag: ${tagName}`);
|
|
535
|
-
logger_default.info(` CHANGELOG: ${isDefaultPackage && config.git?.changelog !== false ? "是" : "跳过(子包或配置禁用)"}`);
|
|
536
|
-
logger_default.info("");
|
|
537
|
-
}
|
|
538
|
-
logger_default.info("✅ 以上为预览,未执行任何实际操作");
|
|
709
|
+
const preview = await versionManager.previewUpdate("all", "patch", {
|
|
710
|
+
packageVersionSelections,
|
|
711
|
+
autoCommit: parsedArgsWithDefaults.autoCommit,
|
|
712
|
+
push: parsedArgsWithDefaults.push,
|
|
713
|
+
npm: parsedArgsWithDefaults.npm
|
|
714
|
+
});
|
|
715
|
+
renderPreview(preview);
|
|
539
716
|
process.exit(0);
|
|
540
717
|
}
|
|
541
718
|
const updatedPackagesInfo = [];
|
|
@@ -625,22 +802,13 @@ async function main() {
|
|
|
625
802
|
}
|
|
626
803
|
} else {
|
|
627
804
|
if (parsedArgsWithDefaults.dryRun && parsedArgsWithDefaults.package) {
|
|
628
|
-
const
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
logger_default.info(` 📦 ${parsedArgsWithDefaults.package}`);
|
|
636
|
-
logger_default.info(` 当前版本: ${pkg.version}`);
|
|
637
|
-
logger_default.info(` 新版本: ${newVersion}`);
|
|
638
|
-
logger_default.info(` Tag: ${tagName}`);
|
|
639
|
-
logger_default.info(` CHANGELOG: ${config.git?.changelog !== false ? "是" : "否(配置禁用)"}`);
|
|
640
|
-
logger_default.info(` Git Commit: ${parsedArgsWithDefaults.autoCommit ? "是" : "否"}`);
|
|
641
|
-
logger_default.info(` Git Push: ${parsedArgsWithDefaults.push ? "是" : "否"}`);
|
|
642
|
-
logger_default.info(` NPM Publish: ${parsedArgsWithDefaults.npm ? "是" : "否"}`);
|
|
643
|
-
logger_default.info("\n✅ 以上为预览,未执行任何实际操作");
|
|
805
|
+
const preview = await versionManager.previewUpdate(parsedArgsWithDefaults.package, selectedType, {
|
|
806
|
+
customVersion,
|
|
807
|
+
autoCommit: parsedArgsWithDefaults.autoCommit,
|
|
808
|
+
push: parsedArgsWithDefaults.push,
|
|
809
|
+
npm: parsedArgsWithDefaults.npm
|
|
810
|
+
});
|
|
811
|
+
renderPreview(preview);
|
|
644
812
|
process.exit(0);
|
|
645
813
|
}
|
|
646
814
|
await versionManager.updateVersion(parsedArgsWithDefaults.package, selectedType, {
|