-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinterfaceCommand.js
144 lines (120 loc) · 3.13 KB
/
interfaceCommand.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
import fs from "fs";
import path from "path";
import arg from "arg";
import inquirer from "inquirer";
import chalk from "chalk";
import { createBoilerplate } from "./main.js";
function argumentOptionsParser(rawArguments) {
const args = arg(
{
"--name": String,
"--dir": String,
"--template": String,
"--install": Boolean,
"--noInstall": Boolean,
"--help": Boolean,
},
{
argv: rawArguments.slice(2),
}
);
return {
name: args["--name"],
dir: args["--dir"],
template: args["--template"],
install: args["--install"] || false,
noInstall: args["--noInstall"] || false,
help: args["--help"],
};
}
async function getTemplatesList() {
try {
const list = fs.readdirSync(path.resolve(__dirname, "templates"));
if (list.length === 0) {
throw "NO_TEMPLATE";
}
return list;
} catch (err) {
if (err === "NO_TEMPLATE") {
console.error(
chalk.red("Não foi encontrado nenhum framework disponível no momento.")
);
} else {
console.error(chalk.red("Falha ao buscar os frameworks disponíveis."));
console.error(chalk.yellow(err));
}
process.exit(1);
}
}
async function inquireUndeclaredItems(args, templatesList) {
const displayOptions = [];
if (!args.name) {
displayOptions.push({
type: "input",
name: "name",
message: "Digite o nome do seu projeto.",
default: "my-app",
});
}
if (!args.dir) {
displayOptions.push({
type: "input",
name: "dir",
message:
"Digite o local de instalação do projeto. Deixe em branco caso queira instalar nesta mesma pasta.",
});
}
if (
!args.template ||
(args.template &&
!templatesList.find((template) => template === args.template))
) {
displayOptions.push({
type: "list",
name: "template",
message: "Qual modelo você está pensando em usar?",
choices: templatesList,
});
}
if (!args.install && !args.noInstall) {
displayOptions.push({
type: "confirm",
name: "install",
message: "Deseja instalar os pacotes necessários?",
default: false,
});
}
const userInput = await inquirer.prompt(displayOptions);
const getTrulyArg = (arg, noArg, userInput) => {
if (arg) {
return true;
} else if (noArg) {
return false;
}
return userInput;
};
const getTemplateByInput = (input) => {
return templatesList.find((template) => input && template === input);
};
return {
name: args["name"] || userInput["name"],
dir: args["dir"] || userInput["dir"],
template:
getTemplateByInput(args["template"]) ||
getTemplateByInput(userInput["template"]),
install: getTrulyArg(
args["install"],
args["noInstall"],
userInput["install"]
),
};
}
export async function interfaceCommand(args) {
const parsedArgs = argumentOptionsParser(args);
if (parsedArgs.help) {
return console.log("HEEELLLPPP!!!");
}
const templatesList = await getTemplatesList();
const opts = await inquireUndeclaredItems(parsedArgs, templatesList);
await createBoilerplate(opts);
}