@@ -40,27 +40,26 @@ function main () {
40
40
// go through directory that contains all languages
41
41
util . listdirsSync ( rootDir ) . forEach ( function ( langId ) {
42
42
const langPath = path . join ( rootDir , langId ) ;
43
- let versionNames = util . listdirsSync ( langPath ) ;
44
43
45
- // Remove dev version for semver sort. We'll add it back later.
46
- versionNames . splice ( versionNames . indexOf ( 'dev' ) , 1 ) ;
44
+ // Get all directories, excluding dev, and make sure it is in lexicographically order.
45
+ const versionNames = util . listdirsSync ( langPath )
46
+ . filter ( dir => dir !== 'dev' )
47
+ . sort ( ( a , b ) => a . localeCompare ( b ) ) ;
47
48
48
- // semver doesn't like a value of 10.x, so we'll coerce the values into proper 10.0.0,
49
- // and store a map to easily convert map our sorted away back to our desired text.
50
- const coercionMap = { } ;
51
- versionNames = versionNames . map ( ( v ) => {
52
- const coerced = semver . coerce ( v ) . toString ( ) ;
53
- coercionMap [ coerced ] = v ;
54
- return coerced ;
49
+ // Semver cant sort invalid values. E.g. 10.x or 12.x-2025.01
50
+ // Will create an array of objects containing the coerce value (10.0.0) for sorting and
51
+ // the original readable name for display.
52
+ const versionMap = versionNames . map ( ( readable ) => {
53
+ const [ versionPart ] = readable . split ( '-' ) ;
54
+ const coerced = semver . coerce ( versionPart ) ?. toString ( ) || versionPart ;
55
+ return { readable , semantic : coerced } ;
55
56
} ) ;
56
57
57
- versionNames = semver . sort ( versionNames ) ;
58
+ const sortedVersions = versionMap . filter ( v => semver . valid ( v . semantic ) )
59
+ . sort ( ( a , b ) => semver . compare ( a . semantic , b . semantic ) )
60
+ . map ( v => v . readable ) ;
58
61
59
- // Now we can restore our desired labelling
60
- versionNames = versionNames . map ( ( v ) => coercionMap [ v ] ) ;
61
-
62
- // Finally, don't forget to restore our dev version
63
- versionNames . push ( 'dev' ) ;
62
+ sortedVersions . push ( 'dev' ) ; // add back dev
64
63
65
64
// get language ID
66
65
const langName = LANGUAGE_MAP [ langId ] ;
@@ -72,7 +71,7 @@ function main () {
72
71
// set the language name and the versions it has
73
72
config [ langId ] = {
74
73
name : langName ,
75
- versions : versionNames
74
+ versions : sortedVersions
76
75
} ;
77
76
} ) ;
78
77
0 commit comments