From 9f6c2a2556f09244a6803294676aa4f4e1317ba6 Mon Sep 17 00:00:00 2001 From: Jeffery Date: Thu, 16 Jul 2026 11:26:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E7=89=88=E8=99=9F=E8=A7=A3=E6=9E=90):=20p?= =?UTF-8?q?arse=20=E6=8E=A5=E5=8F=97=E5=B0=8F=E5=AF=AB=20v=20=E5=89=8D?= =?UTF-8?q?=E7=B6=B4=EF=BC=8C=E5=8F=AA=E5=8F=96=20v=20=E4=B9=8B=E5=BE=8C?= =?UTF-8?q?=E7=9A=84=E7=89=88=E6=9C=AC=E8=99=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- src/version.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/version.js b/src/version.js index 8a6c428..2ec06bd 100644 --- a/src/version.js +++ b/src/version.js @@ -1,7 +1,7 @@ 'use strict'; -// 版號格式:X.Y.Z 或 X.Y.Z-beta.N(不帶前綴) -const VERSION_PATTERN = /^(\d+)\.(\d+)\.(\d+)(?:-beta\.(\d+))?$/; +// 版號格式:X.Y.Z 或 X.Y.Z-beta.N(可帶小寫 v 前綴,如 v1.2.3;解析時忽略前綴) +const VERSION_PATTERN = /^v?(\d+)\.(\d+)\.(\d+)(?:-beta\.(\d+))?$/; // major / minor / patch 各位數上限;beta 號碼無上限 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 字串轉成可比較、可計算的結構化物件。 * 不符合格式(含 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}} * 版號物件;beta 為 null 表示正式版,為數字表示 beta 序號。 - * 輸入不符合版號格式時回傳 null。 + * 輸入不符合版號格式時回傳 null。前綴 v 不會出現在回傳物件中。 * * @example * 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('v1.2'); // => null(不符合格式) */