ルーズなバージョン文字列を有効なSemVerに変換
v2.1、3、1.2.3.4のようなルーズなバージョン文字列を有効なsemverに変換します。変換ルールと自動変換が安全な場合を解説。
Validation
詳細な説明
ルーズなバージョン文字列の変換
実世界のバージョン文字列は混沌としています。アプリケーション、API、レガシーシステムは有効なSemVerではないフォーマットを使用することが多いです。変換(coercion)は、これらのルーズな文字列から有効なsemverを抽出するプロセスです。
よくあるルーズなフォーマット
| ルーズな文字列 | 変換後のSemVer | 適用ルール |
|---|---|---|
v2.1.0 |
2.1.0 |
"v"プレフィックスを除去 |
2.1 |
2.1.0 |
欠けているPATCHを0として追加 |
3 |
3.0.0 |
欠けているMINORとPATCHを追加 |
1.2.3.4 |
1.2.3 |
余分なコンポーネントを削除 |
変換が安全な場合
変換がうまく機能する場合:
- バージョンの表示: ユーザー表示のためにGitタグ(
v1.2.3)を変換 - 混在フォーマットのソート: 異なるソースからのバージョンリストを正規化
- ルーズな入力フィールド: SemVerに「十分近い」ユーザー入力を受け入れる
変換が危険な場合
変換を避けるべき場合:
- パッケージの公開: パッケージレジストリには常に厳密なSemVerを要求
- 等価比較:
1.2を1.2.0に変換しても作者の意図と異なる可能性 - 4部構成バージョン:
1.2.3.4は.NETアセンブリバージョンで4番目が重要な場合がある
npmのアプローチ
npmのsemver.coerce()関数は、文字列内の最初の数値出現をスキャンし、そこからバージョンを構築しようとします。これは散文やファイル名に埋め込まれたバージョン文字列を処理するため意図的に積極的です。
ユースケース
Gitタグ、Dockerイメージタグ、APIヘッダー、厳密なSemVerに準拠しないユーザー提供文字列など、異種ソースからの入力を受け入れるバージョンパーサーを構築する場合。