@@ -3,7 +3,7 @@ const yargs_parser = require("yargs-parser");
33const path = require ( "path" ) ;
44const chalk = require ( "chalk" ) ;
55const langsList = require ( "./countries.json" ) ;
6- const prompts = require ( "prompts " ) ;
6+ const inquirer = require ( "inquirer " ) ;
77const fuzzy = require ( "fuzzy" ) ;
88const ora = require ( "ora" ) ;
99const { extract } = require ( "pacote" ) ;
@@ -14,7 +14,11 @@ const packageName = "html5-boilerplate";
1414const tempDir = os . tmpdir ( ) + `/${ packageName } -staging` ;
1515const elapsed = require ( "elapsed-time-logger" ) ;
1616const compareVersions = require ( "compare-versions" ) ;
17-
17+ let spinner ;
18+ inquirer . registerPrompt (
19+ "autocomplete" ,
20+ require ( "inquirer-autocomplete-prompt" )
21+ ) ;
1822module . exports = async ( argvs ) => {
1923 const argv = yargs_parser ( argvs , {
2024 alias : { release : [ "r" ] , yes : [ "y" ] } ,
@@ -27,7 +31,7 @@ module.exports = async (argvs) => {
2731 console . log ( chalk . red ( "Aborted" ) ) ;
2832 return ;
2933 }
30- let spinner = ora (
34+ spinner = ora (
3135 `Downloading ${ packageName } version '${ version } ' to ${ targetDir } `
3236 ) . start ( ) ;
3337 await fs . ensureDir ( tempDir ) ;
@@ -39,32 +43,28 @@ module.exports = async (argvs) => {
3943 ) ;
4044 await fs . copy ( tempDir + "/dist" , targetDir ) ;
4145 const timerDownloaded = timer . get ( ) ;
42- spinner . stop ( ) ;
4346 await onLoad ( targetDir , version , argv ) ;
44- console . log (
45- chalk . green ( "✔" ) +
46- ` ${ nameWithVersion } copied to ${ targetDir } in ${ timerDownloaded } . Have fun!`
47+ spinner . succeed (
48+ ` ${ nameWithVersion } copied to ${ targetDir } in ${ timerDownloaded } . Have fun!`
4749 ) ;
4850 return ;
4951 } catch ( err ) {
50- spinner . stop ( ) ;
5152 if ( err . code === "ETARGET" ) {
5253 const msg = chalk . red (
53- `✖ version '${ err . wanted } ' not found in npm registry\navailable versions:\n`
54+ `version '${ err . wanted } ' not found in npm registry\navailable versions:\n`
5455 ) ;
55- console . log ( msg + err . versions . reverse ( ) . join ( " | " ) ) ;
56+ spinner . fail ( msg + err . versions . reverse ( ) . join ( " | " ) ) ;
5657 throw err . code ;
5758 }
58- console . error ( err ) ;
59- console . log ( chalk . red ( "✖ Unexpected error" ) ) ;
59+ spinner . fail ( "✖ Unexpected error" ) ;
6060 throw new Error ( err ) ;
6161 } finally {
6262 await fs . remove ( tempDir ) ;
6363 }
6464} ;
6565
6666const checkFolder = async ( targetDir , argv ) => {
67- const folderExists = await fs . exists ( targetDir ) ;
67+ const folderExists = await fs . pathExists ( targetDir ) ;
6868 if ( ! folderExists ) {
6969 return true ;
7070 }
@@ -73,11 +73,11 @@ const checkFolder = async (targetDir, argv) => {
7373 }
7474 const folderFiles = await fs . readdir ( targetDir ) ;
7575 if ( folderFiles . length !== - 1 ) {
76- const { override } = await prompts ( {
76+ const { override } = await inquirer . prompt ( {
7777 type : "confirm" ,
7878 name : "override" ,
7979 message : `${ targetDir } is not an empty folder, proceed?` ,
80- initial : true ,
80+ default : true ,
8181 } ) ;
8282 return override ;
8383 }
@@ -96,46 +96,44 @@ const onLoad = async (targetDir, version, argv) => {
9696 if ( skipPrompts ) {
9797 return ;
9898 }
99- let langListOut = langsList . map ( ( v ) => {
100- return { title : `${ v . title } (${ v . value } )` , value : v . value } ;
101- } ) ;
102- langListOut . splice ( 1 , 0 , { title : "Enter custom" , value : "custom" } ) ;
103- let lang = argv . lang ;
99+ const langListMap = { } ;
100+ const langListOut = [ ] ;
104101 /* istanbul ignore if */
105- if ( ! lang ) {
106- let { langChoice } = await prompts ( {
102+ if ( ! argv . lang ) {
103+ for ( const { title, value } of langsList ) {
104+ const text = `${ title } (${ value } )` ;
105+ langListMap [ text ] = value ;
106+ langListOut . push ( text ) ;
107+ }
108+ langListOut . splice ( 1 , 0 , "Enter custom" ) ;
109+ }
110+ spinner . stop ( ) ;
111+ const { langChoice, customLang, removeJquery } = await inquirer . prompt ( [
112+ {
107113 type : "autocomplete" ,
108114 name : "langChoice" ,
109115 message : "Select language" ,
110- choices : langListOut ,
111- suggest : /* istanbul ignore next */ async ( input , choices ) => {
112- return fuzzy
113- . filter ( input , choices , { extract : ( el ) => el . title } )
114- . map ( ( v ) => v . original ) ;
115- } ,
116- } ) ;
117- if ( langChoice === "custom" ) {
118- let { customLang } = await prompts ( {
119- type : "text" ,
120- name : "customLang" ,
121- message : "Enter custom language code" ,
122- } ) ;
123- langChoice = customLang ;
124- }
125- lang = langChoice || "" ;
126- }
127- const isJqueryIncluded =
128- version !== "latest" && compareVersions ( version , "8.0.0" ) ; // jQuery removed in >= v8
129- let removeJqueryFlag = false ;
130- if ( isJqueryIncluded ) {
131- let { removeJquery } = await prompts ( {
116+ when : ! argv . lang ,
117+ source : async ( answers , input = "" ) =>
118+ fuzzy . filter ( input , langListOut ) . map ( ( { original } ) => original ) ,
119+ } ,
120+ {
121+ type : "input" ,
122+ name : "customLang" ,
123+ message : "Enter custom language code" ,
124+ when : ( { langChoice } ) => ! argv . lang && langChoice === langListOut [ 1 ] ,
125+ } ,
126+ {
132127 type : "confirm" ,
133128 name : "removeJquery" ,
134129 message : "Remove jQuery?" ,
135- initial : true ,
136- } ) ;
137- removeJqueryFlag = removeJquery ;
138- }
130+ when : version !== "latest" && compareVersions ( version , "8.0.0" ) ,
131+ default : true ,
132+ } ,
133+ ] ) ;
134+ spinner . start ( ) ;
135+ const lang = argv . lang || langListMap [ langChoice ] || customLang || "" ;
136+ const removeJqueryFlag = removeJquery !== undefined ? removeJquery : false ;
139137 try {
140138 const indexFile = targetDir + "/index.html" ;
141139 const sourceHTML = await fs . readFile ( indexFile , "utf-8" ) ;
@@ -150,6 +148,7 @@ const onLoad = async (targetDir, version, argv) => {
150148 ) ;
151149 }
152150 await fs . writeFile ( indexFile , resultHTML ) ;
151+ return ;
153152 } catch ( err ) {
154153 /* istanbul ignore next */
155154 throw new Error ( err ) ;
0 commit comments