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