/
cli.js
executable file
·108 lines (87 loc) · 2.6 KB
/
cli.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
#!/usr/bin/env node
import figlet from "figlet";
import { program } from "commander";
import chalk from "chalk";
import useGradient from "./src/utils/useGradient.js";
import { createBackendProject } from "./src/utils/create-backend-project.js";
import {
promptBackendFramework,
promptDatabase,
promptFrontendFramework,
promptFrontendLanguage,
promptInitDatabase,
promptOrm,
promptProjectName,
promptProjectStack,
promptDependenciesInstall
} from "./src/utils/prompts.js";
import { createFrontendProject } from "./src/utils/create-frontend-project.js";
import { validateProjectName } from "./src/utils/helper.js";
import { sendQueuedStats } from "./src/utils/stat.js";
const toolName = "StartEase";
const jsBackendStacks = ["expressjs", "nestjs"];
program.version("1.0.0").description("StartEase CLI");
program
.description("Scaffold a new project with StartEase")
.action(async () => {
await startProject();
});
program.parse(process.argv);
async function startProject() {
let framework;
let projectName;
let projectStack;
let initDB;
let database;
let orm;
let language;
let installDependencies;
const initialMsg = `Simplify Project Setup with the. ${chalk.green(
toolName,
)} CLI Tool.`;
// render cli title
renderTitle();
console.log(chalk.white(initialMsg));
projectName = await promptProjectName();
validateProjectName(projectName);
projectStack = await promptProjectStack();
// process sending of stats in background
sendQueuedStats();
/**
* start prompts
*/
if (projectStack === "frontend") {
language = await promptFrontendLanguage();
framework = await promptFrontendFramework();
if (framework === "html-x-css-x-javascript") {
return await createFrontendProject(projectName, framework, "javascript");
}
return await createFrontendProject(projectName, framework, language);
} else if (projectStack === "backend") {
framework = await promptBackendFramework();
initDB = await promptInitDatabase();
if (initDB) {
database = await promptDatabase(framework);
if (jsBackendStacks.includes(framework)) {
orm = await promptOrm(database);
}
}
installDependencies = await promptDependenciesInstall();
await createBackendProject(projectName, framework, database, orm, installDependencies);
}
}
/**
* Render cli title
*/
function renderTitle() {
const figletConfig = {
font: "Big",
horizontalLayout: "default",
verticalLayout: "default",
width: 80,
whitespaceBreak: true,
};
useGradient({
title: figlet.textSync("StartEase", figletConfig),
});
}