Skip to content

Commit 9e03cf2

Browse files
authored
Merge pull request #62 from h5bp/release-0-2-0
Release Branch for 0.2.0
2 parents 4086218 + c48f38e commit 9e03cf2

File tree

3 files changed

+168
-63
lines changed

3 files changed

+168
-63
lines changed

lib/cli.js

Lines changed: 47 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const yargs_parser = require("yargs-parser");
33
const path = require("path");
44
const chalk = require("chalk");
55
const langsList = require("./countries.json");
6-
const prompts = require("prompts");
6+
const inquirer = require("inquirer");
77
const fuzzy = require("fuzzy");
88
const ora = require("ora");
99
const { extract } = require("pacote");
@@ -14,7 +14,11 @@ const packageName = "html5-boilerplate";
1414
const tempDir = os.tmpdir() + `/${packageName}-staging`;
1515
const elapsed = require("elapsed-time-logger");
1616
const compareVersions = require("compare-versions");
17-
17+
let spinner;
18+
inquirer.registerPrompt(
19+
"autocomplete",
20+
require("inquirer-autocomplete-prompt")
21+
);
1822
module.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

6666
const 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

Comments
 (0)