1- const { posix } = require ( 'path' )
1+ const { posix} = require ( 'path' )
22const fs = require ( 'fs' ) . promises
33const yaml = require ( 'yaml' )
44const semver = require ( 'semver' )
@@ -8,25 +8,24 @@ const log = require('./log')
88
99const DOCS_PATH = 'cli'
1010
11- const updateNav = async ( updates , { nav, path } ) => {
12- const variants = updates . map ( ( release ) => ( {
11+ const updateNav = async ( updates , { nav, path} ) => {
12+ const variants = updates . map ( release => ( {
1313 title : release . title ,
1414 shortName : release . id ,
1515 url : release . url ,
1616 default : release . default ,
1717 children : release . nav ,
1818 } ) )
1919
20- const index = nav . contents . items
21- . findIndex ( n => posix . basename ( n . get ( 'url' ) ) === DOCS_PATH )
20+ const index = nav . contents . items . findIndex ( n => posix . basename ( n . get ( 'url' ) ) === DOCS_PATH )
2221 const key = [ index , 'variants' ]
2322 const current = nav . getIn ( key )
2423
2524 if ( ! current ) {
2625 nav . setIn ( key , nav . createNode ( variants ) )
2726 } else {
2827 for ( const variant of variants ) {
29- const vIndex = current . items . findIndex ( ( n ) => n . get ( 'url' ) === variant . url )
28+ const vIndex = current . items . findIndex ( n => n . get ( 'url' ) === variant . url )
3029 if ( vIndex === - 1 ) {
3130 nav . addIn ( key , nav . createNode ( variant ) )
3231 } else {
@@ -38,29 +37,24 @@ const updateNav = async (updates, { nav, path }) => {
3837 return fs . writeFile ( path , nav . toString ( ) , 'utf-8' )
3938}
4039
41- const getCurrentVersions = ( nav ) => {
40+ const getCurrentVersions = nav => {
4241 // the only place the current versions are stored is in the nav
4342 const currentSections = nav . find ( s => s . url === `/${ DOCS_PATH } ` ) . variants
4443
45- const currentVersions = currentSections . map ( ( v ) => {
46- const version = v . title ?. match ( / ^ V e r s i o n \s ( .* ?) \s / ) [ 1 ]
47- return version
48- } ) . sort ( semver . compare )
44+ const currentVersions = currentSections
45+ . map ( v => {
46+ const version = v . title ?. match ( / ^ V e r s i o n \s ( .* ?) \s / ) [ 1 ]
47+ return version
48+ } )
49+ . sort ( semver . compare )
4950
5051 return {
5152 versions : currentVersions ,
5253 latest : currentVersions [ currentVersions . length - 1 ] ,
5354 }
5455}
5556
56- const main = async ( {
57- loglevel,
58- releases : rawReleases ,
59- useCurrent,
60- navPath,
61- contentPath,
62- prerelease,
63- } ) => {
57+ const main = async ( { loglevel, releases : rawReleases , useCurrent, navPath, contentPath, prerelease} ) => {
6458 /* istanbul ignore next */
6559 if ( loglevel ) {
6660 log . on ( loglevel )
@@ -72,32 +66,40 @@ const main = async ({
7266
7367 const pack = useCurrent
7468 ? getCurrentVersions ( navData )
75- : await pacote . packument ( 'npm' , { preferOnline : true } ) . then ( p => ( {
76- versions : Object . keys ( p . versions ) ,
77- latest : p [ 'dist-tags' ] . latest ,
78- } ) )
79-
80- const releaseVersions = rawReleases . map ( release => {
81- const major = Number ( release . id . replace ( / ^ v / , '' ) )
82- const range = `>=${ major } .0.0-a <${ major + 1 } .0.0` // include all prereleases
83- const version = semver . parse ( semver . maxSatisfying ( pack . versions , range ) )
84-
85- return version && {
86- ...release ,
87- version : version . toString ( ) ,
88- // the default release is always controlled by the latest dist-tag
89- default : semver . eq ( version , pack . latest ) ,
90- prerelease : version . prerelease . length > 0 ,
91- }
92- } ) . filter ( Boolean )
93-
94- const latestRelease = releaseVersions . find ( r => r . default ) ??
69+ : await pacote . packument ( 'npm' , { preferOnline : true } ) . then ( p => ( {
70+ versions : Object . keys ( p . versions ) ,
71+ latest : p [ 'dist-tags' ] . latest ,
72+ } ) )
73+
74+ const releaseVersions = rawReleases
75+ . map ( release => {
76+ const major = Number ( release . id . replace ( / ^ v / , '' ) )
77+ const range = `>=${ major } .0.0-a <${ major + 1 } .0.0` // include all prereleases
78+ const version = semver . parse ( semver . maxSatisfying ( pack . versions , range ) )
79+
80+ return (
81+ version && {
82+ ...release ,
83+ version : version . toString ( ) ,
84+ // the default release is always controlled by the latest dist-tag
85+ default : semver . eq ( version , pack . latest ) ,
86+ prerelease : version . prerelease . length > 0 ,
87+ }
88+ )
89+ } )
90+ . filter ( Boolean )
91+
92+ const latestRelease =
93+ releaseVersions . find ( r => r . default ) ??
9594 releaseVersions . slice ( 0 ) . sort ( ( a , b ) => semver . compare ( b . version , a . version ) ) [ 0 ]
9695
97- const releases = releaseVersions . map ( ( release ) => {
98- const type = release . default ? 'Latest Release'
99- : release . prerelease ? 'Prerelease'
100- : semver . gt ( release . version , latestRelease . version ) ? 'Current Release'
96+ const releases = releaseVersions . map ( release => {
97+ const type = release . default
98+ ? 'Latest Release'
99+ : release . prerelease
100+ ? 'Prerelease'
101+ : semver . gt ( release . version , latestRelease . version )
102+ ? 'Current Release'
101103 : 'Legacy Release'
102104
103105 return {
@@ -110,12 +112,10 @@ const main = async ({
110112 } )
111113
112114 const updates = await Promise . all (
113- releases . map ( ( r ) =>
114- extractRelease ( r , { contentPath, baseNav : navData , prerelease } )
115- )
116- ) . then ( ( r ) => r . filter ( Boolean ) )
115+ releases . map ( r => extractRelease ( r , { contentPath, baseNav : navData , prerelease} ) ) ,
116+ ) . then ( r => r . filter ( Boolean ) )
117117
118- await updateNav ( updates , { nav : navDoc , path : navPath } )
118+ await updateNav ( updates , { nav : navDoc , path : navPath } )
119119}
120120
121121module . exports = main
0 commit comments