@@ -3,7 +3,7 @@ const yargs_parser = require("yargs-parser");
3
3
const path = require ( "path" ) ;
4
4
const chalk = require ( "chalk" ) ;
5
5
const langsList = require ( "./countries.json" ) ;
6
- const prompts = require ( "prompts " ) ;
6
+ const inquirer = require ( "inquirer " ) ;
7
7
const fuzzy = require ( "fuzzy" ) ;
8
8
const ora = require ( "ora" ) ;
9
9
const { extract } = require ( "pacote" ) ;
@@ -14,7 +14,11 @@ const packageName = "html5-boilerplate";
14
14
const tempDir = os . tmpdir ( ) + `/${ packageName } -staging` ;
15
15
const elapsed = require ( "elapsed-time-logger" ) ;
16
16
const compareVersions = require ( "compare-versions" ) ;
17
-
17
+ let spinner ;
18
+ inquirer . registerPrompt (
19
+ "autocomplete" ,
20
+ require ( "inquirer-autocomplete-prompt" )
21
+ ) ;
18
22
module . exports = async ( argvs ) => {
19
23
const argv = yargs_parser ( argvs , {
20
24
alias : { release : [ "r" ] , yes : [ "y" ] } ,
@@ -27,7 +31,7 @@ module.exports = async (argvs) => {
27
31
console . log ( chalk . red ( "Aborted" ) ) ;
28
32
return ;
29
33
}
30
- let spinner = ora (
34
+ spinner = ora (
31
35
`Downloading ${ packageName } version '${ version } ' to ${ targetDir } `
32
36
) . start ( ) ;
33
37
await fs . ensureDir ( tempDir ) ;
@@ -39,32 +43,28 @@ module.exports = async (argvs) => {
39
43
) ;
40
44
await fs . copy ( tempDir + "/dist" , targetDir ) ;
41
45
const timerDownloaded = timer . get ( ) ;
42
- spinner . stop ( ) ;
43
46
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!`
47
49
) ;
48
50
return ;
49
51
} catch ( err ) {
50
- spinner . stop ( ) ;
51
52
if ( err . code === "ETARGET" ) {
52
53
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`
54
55
) ;
55
- console . log ( msg + err . versions . reverse ( ) . join ( " | " ) ) ;
56
+ spinner . fail ( msg + err . versions . reverse ( ) . join ( " | " ) ) ;
56
57
throw err . code ;
57
58
}
58
- console . error ( err ) ;
59
- console . log ( chalk . red ( "✖ Unexpected error" ) ) ;
59
+ spinner . fail ( "✖ Unexpected error" ) ;
60
60
throw new Error ( err ) ;
61
61
} finally {
62
62
await fs . remove ( tempDir ) ;
63
63
}
64
64
} ;
65
65
66
66
const checkFolder = async ( targetDir , argv ) => {
67
- const folderExists = await fs . exists ( targetDir ) ;
67
+ const folderExists = await fs . pathExists ( targetDir ) ;
68
68
if ( ! folderExists ) {
69
69
return true ;
70
70
}
@@ -73,11 +73,11 @@ const checkFolder = async (targetDir, argv) => {
73
73
}
74
74
const folderFiles = await fs . readdir ( targetDir ) ;
75
75
if ( folderFiles . length !== - 1 ) {
76
- const { override } = await prompts ( {
76
+ const { override } = await inquirer . prompt ( {
77
77
type : "confirm" ,
78
78
name : "override" ,
79
79
message : `${ targetDir } is not an empty folder, proceed?` ,
80
- initial : true ,
80
+ default : true ,
81
81
} ) ;
82
82
return override ;
83
83
}
@@ -96,46 +96,44 @@ const onLoad = async (targetDir, version, argv) => {
96
96
if ( skipPrompts ) {
97
97
return ;
98
98
}
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 = [ ] ;
104
101
/* 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
+ {
107
113
type : "autocomplete" ,
108
114
name : "langChoice" ,
109
115
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
+ {
132
127
type : "confirm" ,
133
128
name : "removeJquery" ,
134
129
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 ;
139
137
try {
140
138
const indexFile = targetDir + "/index.html" ;
141
139
const sourceHTML = await fs . readFile ( indexFile , "utf-8" ) ;
@@ -150,6 +148,7 @@ const onLoad = async (targetDir, version, argv) => {
150
148
) ;
151
149
}
152
150
await fs . writeFile ( indexFile , resultHTML ) ;
151
+ return ;
153
152
} catch ( err ) {
154
153
/* istanbul ignore next */
155
154
throw new Error ( err ) ;
0 commit comments