Skip to content

Commit ecb393c

Browse files
committed
fixing conflicts
2 parents 5597e30 + e4c35e8 commit ecb393c

File tree

3 files changed

+169
-58
lines changed

3 files changed

+169
-58
lines changed

lib/cli.js

Lines changed: 49 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ 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");
7+
const fuzzy = require("fuzzy");
78
const ora = require("ora");
89
const { extract } = require("pacote");
910
const glob = require("fast-glob");
@@ -13,7 +14,11 @@ const packageName = "html5-boilerplate";
1314
const tempDir = os.tmpdir() + `/${packageName}-staging`;
1415
const elapsed = require("elapsed-time-logger");
1516
const compareVersions = require("compare-versions");
16-
17+
let spinner;
18+
inquirer.registerPrompt(
19+
"autocomplete",
20+
require("inquirer-autocomplete-prompt")
21+
);
1722
module.exports = async (argvs) => {
1823
const argv = yargs_parser(argvs, {
1924
alias: { release: ["r"], yes: ["y"] },
@@ -26,7 +31,7 @@ module.exports = async (argvs) => {
2631
console.log(chalk.red("Aborted"));
2732
return;
2833
}
29-
let spinner = ora(
34+
spinner = ora(
3035
`Downloading ${packageName} version '${version}' to ${targetDir}`
3136
).start();
3237
await fs.ensureDir(tempDir);
@@ -38,24 +43,20 @@ module.exports = async (argvs) => {
3843
);
3944
await fs.copy(tempDir + "/dist", targetDir);
4045
const timerDownloaded = timer.get();
41-
spinner.stop();
4246
await onLoad(targetDir, version, argv);
43-
console.log(
44-
chalk.green("✔") +
45-
` ${nameWithVersion} copied to ${targetDir} in ${timerDownloaded}. Have fun!`
47+
spinner.succeed(
48+
` ${nameWithVersion} copied to ${targetDir} in ${timerDownloaded}. Have fun!`
4649
);
4750
return;
4851
} catch (err) {
49-
spinner.stop();
5052
if (err.code === "ETARGET") {
5153
const msg = chalk.red(
52-
`version '${err.wanted}' not found in npm registry\navailable versions:\n`
54+
`version '${err.wanted}' not found in npm registry\navailable versions:\n`
5355
);
54-
console.log(msg + err.versions.reverse().join(" | "));
56+
spinner.fail(msg + err.versions.reverse().join(" | "));
5557
throw err.code;
5658
}
57-
console.error(err);
58-
console.log(chalk.red("✖ Unexpected error"));
59+
spinner.fail("✖ Unexpected error");
5960
throw new Error(err);
6061
} finally {
6162
await fs.remove(tempDir);
@@ -64,7 +65,7 @@ module.exports = async (argvs) => {
6465
};
6566

6667
const checkFolder = async (targetDir, argv) => {
67-
const folderExists = await fs.exists(targetDir);
68+
const folderExists = await fs.pathExists(targetDir);
6869
if (!folderExists) {
6970
return true;
7071
}
@@ -73,11 +74,11 @@ const checkFolder = async (targetDir, argv) => {
7374
}
7475
const folderFiles = await fs.readdir(targetDir);
7576
if (folderFiles.length !== -1) {
76-
const { override } = await prompts({
77+
const { override } = await inquirer.prompt({
7778
type: "confirm",
7879
name: "override",
7980
message: `${targetDir} is not an empty folder, proceed?`,
80-
initial: true,
81+
default: true,
8182
});
8283
return override;
8384
}
@@ -96,41 +97,44 @@ const onLoad = async (targetDir, version, argv) => {
9697
if (skipPrompts) {
9798
return;
9899
}
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;
100+
const langListMap = {};
101+
const langListOut = [];
104102
/* istanbul ignore if */
105-
if (!lang) {
106-
let langChoice = await prompts({
107-
type: "select",
108-
name: "langChoice",
109-
message: "Select language",
110-
choices: langListOut,
111-
});
112-
if (langChoice === "custom") {
113-
let customLang = await prompts({
114-
type: "text",
115-
name: "customLang",
116-
message: "Enter custom language code",
117-
});
118-
langChoice = customLang;
103+
if (!argv.lang) {
104+
for (const { title, value } of langsList) {
105+
const text = `${title} (${value})`;
106+
langListMap[text] = value;
107+
langListOut.push(text);
119108
}
120-
lang = langChoice || "";
109+
langListOut.splice(1, 0, "Enter custom");
121110
}
122-
const isJqueryIncluded =
123-
version !== "latest" && compareVersions(version, "8.0.0"); // jQuery removed in >= v8
124-
let removeJqueryFlag = false;
125-
if (isJqueryIncluded) {
126-
let { removeJquery } = await prompts({
111+
spinner.stop();
112+
const { langChoice, customLang, removeJquery } = await inquirer.prompt([
113+
{
114+
type: "autocomplete",
115+
name: "langChoice",
116+
message: "Select language",
117+
when: !argv.lang,
118+
source: async (answers, input = "") =>
119+
fuzzy.filter(input, langListOut).map(({ original }) => original),
120+
},
121+
{
122+
type: "input",
123+
name: "customLang",
124+
message: "Enter custom language code",
125+
when: ({ langChoice }) => !argv.lang && langChoice === langListOut[1],
126+
},
127+
{
127128
type: "confirm",
128129
name: "removeJquery",
129130
message: "Remove jQuery?",
130-
initial: true,
131-
});
132-
removeJqueryFlag = removeJquery;
133-
}
131+
when: version !== "latest" && compareVersions(version, "8.0.0"),
132+
default: true,
133+
},
134+
]);
135+
spinner.start();
136+
const lang = argv.lang || langListMap[langChoice] || customLang || "";
137+
const removeJqueryFlag = removeJquery !== undefined ? removeJquery : false;
134138
try {
135139
const indexFile = targetDir + "/index.html";
136140
const sourceHTML = await fs.readFile(indexFile, "utf-8");
@@ -145,6 +149,7 @@ const onLoad = async (targetDir, version, argv) => {
145149
);
146150
}
147151
await fs.writeFile(indexFile, resultHTML);
152+
return;
148153
} catch (err) {
149154
/* istanbul ignore next */
150155
throw new Error(err);

0 commit comments

Comments
 (0)