11import { describe , expect , it } from "vite-plus/test" ;
22
3- import { compareSemverVersions , normalizeSemverVersion , satisfiesSemverRange } from "./semver.ts" ;
3+ import {
4+ compareSemverVersions ,
5+ normalizeSemverVersion ,
6+ parseSemver ,
7+ satisfiesSemverRange ,
8+ } from "./semver.ts" ;
49
510describe ( "semver helpers" , ( ) => {
611 it ( "matches supported range groups" , ( ) => {
@@ -18,6 +23,25 @@ describe("semver helpers", () => {
1823 expect ( normalizeSemverVersion ( "2.1" ) ) . toBe ( "2.1.0" ) ;
1924 } ) ;
2025
26+ it ( "normalizes and parses shorthand major-only versions" , ( ) => {
27+ expect ( normalizeSemverVersion ( "20" ) ) . toBe ( "20.0.0" ) ;
28+ expect ( normalizeSemverVersion ( "v18" ) ) . toBe ( "v18.0.0" ) ;
29+ expect ( normalizeSemverVersion ( "20-rc.1" ) ) . toBe ( "20.0.0-rc.1" ) ;
30+ expect ( parseSemver ( "20" ) ) . toEqual ( { major : 20 , minor : 0 , patch : 0 , prerelease : [ ] } ) ;
31+ } ) ;
32+
33+ it ( "compares shorthand versions numerically instead of lexically" , ( ) => {
34+ // Regression: "20" vs "9" previously fell back to string comparison, which
35+ // ordered "20" before "9" ("2" < "9").
36+ expect ( compareSemverVersions ( "20" , "9" ) ) . toBeGreaterThan ( 0 ) ;
37+ expect ( compareSemverVersions ( "18" , "18.0.0" ) ) . toBe ( 0 ) ;
38+ } ) ;
39+
40+ it ( "still rejects non-numeric shorthand and keeps empty input empty" , ( ) => {
41+ expect ( parseSemver ( "abc" ) ) . toBeNull ( ) ;
42+ expect ( normalizeSemverVersion ( "" ) ) . toBe ( "" ) ;
43+ } ) ;
44+
2145 it ( "compares prerelease versions before stable versions" , ( ) => {
2246 expect ( compareSemverVersions ( "2.1.111-beta.1" , "2.1.111" ) ) . toBeLessThan ( 0 ) ;
2347 } ) ;
0 commit comments