feat(版號解析): parse 接受小寫 v 前綴,只取 v 之後的版本號

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Jeffery
2026-07-16 11:26:57 +08:00
co-authored by Claude Fable 5
parent ea75d1adcd
commit 9f6c2a2556
+7 -5
View File
@@ -1,7 +1,7 @@
'use strict'; 'use strict';
// 版號格式:X.Y.Z 或 X.Y.Z-beta.N不帶前綴) // 版號格式:X.Y.Z 或 X.Y.Z-beta.N可帶小寫 v 前綴,如 v1.2.3;解析時忽略前綴)
const VERSION_PATTERN = /^(\d+)\.(\d+)\.(\d+)(?:-beta\.(\d+))?$/; const VERSION_PATTERN = /^v?(\d+)\.(\d+)\.(\d+)(?:-beta\.(\d+))?$/;
// major / minor / patch 各位數上限;beta 號碼無上限 // major / minor / patch 各位數上限;beta 號碼無上限
const MAX_DIGIT = 9; const MAX_DIGIT = 9;
@@ -9,17 +9,19 @@ const MAX_DIGIT = 9;
/** /**
* 解析版號字串為版號物件。 * 解析版號字串為版號物件。
* *
* 支援正式版(X.Y.Z)與 beta 版(X.Y.Z-beta.N)兩種格式 * 支援正式版(X.Y.Z)與 beta 版(X.Y.Z-beta.N)兩種格式
* 皆可帶小寫 v 前綴(如 v1.2.3),解析時忽略前綴、只取 v 之後的版本號;
* 用於逐一解析 git tag,把 tag 字串轉成可比較、可計算的結構化物件。 * 用於逐一解析 git tag,把 tag 字串轉成可比較、可計算的結構化物件。
* 不符合格式(含 null、非字串轉出的值)一律回傳 null,不拋出例外。 * 不符合格式(含 null、非字串轉出的值)一律回傳 null,不拋出例外。
* *
* @param {string} text - 待解析的版號字串,格式為 X.Y.Z 或 X.Y.Z-beta.N * @param {string} text - 待解析的版號字串,格式為 X.Y.Z 或 X.Y.Z-beta.N(可帶 v 前綴)
* @returns {?{major: number, minor: number, patch: number, beta: ?number}} * @returns {?{major: number, minor: number, patch: number, beta: ?number}}
* 版號物件;beta 為 null 表示正式版,為數字表示 beta 序號。 * 版號物件;beta 為 null 表示正式版,為數字表示 beta 序號。
* 輸入不符合版號格式時回傳 null。 * 輸入不符合版號格式時回傳 null。前綴 v 不會出現在回傳物件中。
* *
* @example * @example
* parse('1.2.3'); // => { major: 1, minor: 2, patch: 3, beta: null } * parse('1.2.3'); // => { major: 1, minor: 2, patch: 3, beta: null }
* parse('v1.2.3'); // => { major: 1, minor: 2, patch: 3, beta: null }(忽略 v 前綴)
* parse('1.2.3-beta.5'); // => { major: 1, minor: 2, patch: 3, beta: 5 } * parse('1.2.3-beta.5'); // => { major: 1, minor: 2, patch: 3, beta: 5 }
* parse('v1.2'); // => null(不符合格式) * parse('v1.2'); // => null(不符合格式)
*/ */