@usercli/clideveloper 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/expressjs.js +209 -0
- package/components/folderCreate.js +19 -0
- package/components/nestjs.js +51 -0
- package/components/nodejs.js +47 -0
- package/components/welcomeHeading.js +24 -0
- package/index.js +48 -0
- package/package.json +26 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
const { exec } = require("child_process");
|
|
2
|
+
const util = require("util");
|
|
3
|
+
const { createSpinner } = require("nanospinner");
|
|
4
|
+
const fs=require("fs").promises;
|
|
5
|
+
const inquire=require("inquirer").default;
|
|
6
|
+
|
|
7
|
+
const execPromise = util.promisify(exec);
|
|
8
|
+
|
|
9
|
+
async function expressjs(path) {
|
|
10
|
+
try {
|
|
11
|
+
let spinner = createSpinner("Installing Express...").start();
|
|
12
|
+
await execPromise("npm i express", { cwd: path }); // installing express
|
|
13
|
+
await execPromise("npm i nodemon --save-dev",{cwd:path}) // installing nodemon
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
// this is the express code
|
|
18
|
+
let expressCode=`
|
|
19
|
+
const express=require("express");
|
|
20
|
+
|
|
21
|
+
const app=express();
|
|
22
|
+
|
|
23
|
+
app.get("/",(_,res)=>{
|
|
24
|
+
|
|
25
|
+
res.status(200).json({success:"hello developer"});
|
|
26
|
+
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
app.listen(7000,()=> console.log("Server is on and running on port 7000"))
|
|
30
|
+
|
|
31
|
+
`
|
|
32
|
+
|
|
33
|
+
let clean=expressCode.trim();
|
|
34
|
+
try{
|
|
35
|
+
|
|
36
|
+
// we create a file index.js and that all code expresscode after triming we put inside it
|
|
37
|
+
await fs.writeFile(`${path}/index.js`,clean,(err)=>{
|
|
38
|
+
if(err) console.log(err);
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
//we are reading package file
|
|
42
|
+
let packageFile=await fs.readFile(`${path}/package.json`,"utf8");
|
|
43
|
+
|
|
44
|
+
//this package file is json that is why we use JSON.parse method
|
|
45
|
+
let pkg=JSON.parse(packageFile);
|
|
46
|
+
|
|
47
|
+
//we update inside package.json file we update the scripts
|
|
48
|
+
pkg.scripts={
|
|
49
|
+
"start":"node index.js",
|
|
50
|
+
"dev":"nodemon index.js"
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
await fs.writeFile(`${path}/package.json`,JSON.stringify(pkg,null,4));
|
|
55
|
+
|
|
56
|
+
spinner.success({ text: "Express installed successfully! 🎉" });
|
|
57
|
+
|
|
58
|
+
let downloadChoice=await inquire.prompt([
|
|
59
|
+
{
|
|
60
|
+
name:"mongooseInstall",
|
|
61
|
+
type:"rawlist",
|
|
62
|
+
message:"Yes or No to install mongoose in express?",
|
|
63
|
+
choices:["Yes","No"],
|
|
64
|
+
validate:(check)=>{
|
|
65
|
+
if(check.trim()=="Yes" || check.trim()=="No"){
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return "Yes or No only";
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
{
|
|
74
|
+
name:"cors",
|
|
75
|
+
type:"rawlist",
|
|
76
|
+
message:"Yes or No to install cors in express?",
|
|
77
|
+
choices:["Yes","No"],
|
|
78
|
+
validate:(check)=>{
|
|
79
|
+
if(check.trim()=="Yes" || check.trim()=="No"){
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return "Yes or No only";
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
{
|
|
88
|
+
name:"prisma",
|
|
89
|
+
type:"rawlist",
|
|
90
|
+
message:"Yes or No to install prisma in express?",
|
|
91
|
+
choices:["Yes","No"],
|
|
92
|
+
validate:(check)=>{
|
|
93
|
+
if(check.trim()=="Yes" || check.trim()=="No"){
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return "Yes or No only";
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
])
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
await userNpmInstall(downloadChoice,path);
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
}catch(err){
|
|
108
|
+
console.log(err);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
} catch (err) {
|
|
112
|
+
console.error("Error installing Express:", err);
|
|
113
|
+
throw err;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
async function userNpmInstall({mongooseInstall,cors,prisma},path){
|
|
120
|
+
try{
|
|
121
|
+
|
|
122
|
+
// mongoose installing process
|
|
123
|
+
if(mongooseInstall=="Yes"){
|
|
124
|
+
let spinner=createSpinner("Installing mongoose...").start();
|
|
125
|
+
await execPromise("npm i mongoose",{cwd:path});
|
|
126
|
+
|
|
127
|
+
spinner.success({text:"mongoose installed sucessfully enjoy!"});
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
// cors intall and update a index.js file and put cors code or express code in it
|
|
133
|
+
if(cors=="Yes"){
|
|
134
|
+
let spinner=createSpinner("Installing cors...").start();
|
|
135
|
+
await execPromise("npm i cors",{cwd:path});
|
|
136
|
+
|
|
137
|
+
let expressCode=`
|
|
138
|
+
const express=require("express");
|
|
139
|
+
const cors=require("cors");
|
|
140
|
+
|
|
141
|
+
const app=express();
|
|
142
|
+
|
|
143
|
+
app.use(cors());
|
|
144
|
+
|
|
145
|
+
app.get("/",(_,res)=>{
|
|
146
|
+
|
|
147
|
+
res.status(200).json({success:"hello developer"});
|
|
148
|
+
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
app.listen(7000,()=> console.log("Server is on and running on port 7000"))
|
|
152
|
+
|
|
153
|
+
`
|
|
154
|
+
|
|
155
|
+
let clean=expressCode.trim();
|
|
156
|
+
let readFile=await fs.readFile(`${path}/index.js`,"utf8");
|
|
157
|
+
|
|
158
|
+
readFile=readFile=clean;
|
|
159
|
+
|
|
160
|
+
await fs.writeFile(`${path}/index.js`,readFile);
|
|
161
|
+
|
|
162
|
+
spinner.success({text:"cors installed sucessfully enjoy!"});
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
// prisma installing process
|
|
167
|
+
if(prisma=="Yes"){
|
|
168
|
+
|
|
169
|
+
let spinner1 = createSpinner("Installing prisma...").start();
|
|
170
|
+
|
|
171
|
+
await execPromise("npm i prisma",{cwd:path});
|
|
172
|
+
|
|
173
|
+
spinner1.success({text:"prisma install suceessfully!"})
|
|
174
|
+
|
|
175
|
+
console.log("Doing setup of prisma");
|
|
176
|
+
|
|
177
|
+
let spinner2=createSpinner("Setup prisma...").start();
|
|
178
|
+
|
|
179
|
+
await execPromise("npx prisma init",{cwd:path});
|
|
180
|
+
|
|
181
|
+
spinner2.success({text:"Prisma setup done enjoy!"});
|
|
182
|
+
|
|
183
|
+
console.log("Prisma installed completely with prisma setup");
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
else{
|
|
188
|
+
if(mongooseInstall=="No"){
|
|
189
|
+
console.log("You do not installed mongoose");
|
|
190
|
+
}
|
|
191
|
+
if(cors=="No"){
|
|
192
|
+
console.log("You do not installed cors")
|
|
193
|
+
}
|
|
194
|
+
if(prisma=="No"){
|
|
195
|
+
console.log("You do not installed prisma");
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
else{
|
|
199
|
+
console.log("There is no option like this");
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
}catch(err){
|
|
205
|
+
console.log("npm packages not install")
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
module.exports = { expressjs };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const fs = require("fs").promises;
|
|
2
|
+
const path = require("path");
|
|
3
|
+
|
|
4
|
+
async function createFoldder(folderName) {
|
|
5
|
+
try {
|
|
6
|
+
let userPath = path.join(process.cwd(), folderName);
|
|
7
|
+
await fs.mkdir(userPath);
|
|
8
|
+
console.log(`✓ Folder "${folderName}" created successfully!`);
|
|
9
|
+
return userPath;
|
|
10
|
+
} catch (err) {
|
|
11
|
+
if (err.code === 'EEXIST') {
|
|
12
|
+
console.log(`Folder "${folderName}" already exists. Continuing...`);
|
|
13
|
+
return path.join(process.cwd(), folderName);
|
|
14
|
+
}
|
|
15
|
+
throw err;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
module.exports = { createFoldder };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
const { exec } = require("child_process");
|
|
2
|
+
const util = require("util");
|
|
3
|
+
const path = require("path");
|
|
4
|
+
const { createSpinner } = require("nanospinner");
|
|
5
|
+
|
|
6
|
+
const execPromise = util.promisify(exec);
|
|
7
|
+
|
|
8
|
+
async function createNestJs(folderName) {
|
|
9
|
+
try {
|
|
10
|
+
const userPath = path.join(process.cwd(), folderName);
|
|
11
|
+
|
|
12
|
+
console.log(`Creating NestJS project in: ${userPath}`);
|
|
13
|
+
|
|
14
|
+
// Start spinner
|
|
15
|
+
const spinner = createSpinner("Installing NestJS CLI globally...").start();
|
|
16
|
+
|
|
17
|
+
try {
|
|
18
|
+
// Install NestJS CLI globally (if not already installed)
|
|
19
|
+
await execPromise("npm install -g @nestjs/cli");
|
|
20
|
+
spinner.success({ text: "NestJS CLI installed globally" });
|
|
21
|
+
} catch (err) {
|
|
22
|
+
spinner.warn({ text: "NestJS CLI might already be installed or failed to install globally" });
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Create new spinner for project creation
|
|
26
|
+
const spinner2 = createSpinner("Creating NestJS project...").start();
|
|
27
|
+
|
|
28
|
+
// Create NestJS project
|
|
29
|
+
// Note: nest new will create a new folder, so we need to be careful with paths
|
|
30
|
+
await execPromise(`nest new ${folderName} --skip-git`, {
|
|
31
|
+
cwd: process.cwd() // Run from current directory, not inside the folder
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
spinner2.success({ text: "NestJS project created successfully!" });
|
|
35
|
+
|
|
36
|
+
console.log("\n✅ NestJS project created successfully!");
|
|
37
|
+
console.log(`📁 Location: ${userPath}`);
|
|
38
|
+
console.log("\n🚀 To start your NestJS app:");
|
|
39
|
+
console.log(` cd ${folderName}`);
|
|
40
|
+
console.log(" npm run start");
|
|
41
|
+
console.log(" npm run start:dev # for development with watch mode");
|
|
42
|
+
|
|
43
|
+
} catch (err) {
|
|
44
|
+
console.error("❌ Error creating NestJS project:", err.message);
|
|
45
|
+
if (err.stderr) {
|
|
46
|
+
console.error("Details:", err.stderr);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
module.exports = { createNestJs };
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const { exec } = require("child_process");
|
|
2
|
+
const path = require("path");
|
|
3
|
+
const { createSpinner } = require("nanospinner");
|
|
4
|
+
const util = require("util");
|
|
5
|
+
const inquire = require("inquirer").default;
|
|
6
|
+
const { expressjs } = require("./expressjs");
|
|
7
|
+
|
|
8
|
+
const execPromise = util.promisify(exec);
|
|
9
|
+
|
|
10
|
+
async function nodejs(fileName) {
|
|
11
|
+
try {
|
|
12
|
+
const folderPath = path.join(process.cwd(), fileName);
|
|
13
|
+
|
|
14
|
+
let spinner = createSpinner("Initializing npm project...").start();
|
|
15
|
+
|
|
16
|
+
await execPromise("npm init -y", { cwd: folderPath });
|
|
17
|
+
spinner.success({ text: "Project initialized successfully!" });
|
|
18
|
+
console.log("✅ Node.js project setup completed!");
|
|
19
|
+
|
|
20
|
+
const message = await inquire.prompt([
|
|
21
|
+
{
|
|
22
|
+
name: "useExpress",
|
|
23
|
+
type: "input",
|
|
24
|
+
message: "Do you want to install Express? (y/n):",
|
|
25
|
+
default: "n",
|
|
26
|
+
validate: (input) => {
|
|
27
|
+
if (input.trim().toLowerCase() === "y" || input.trim().toLowerCase() === "n") {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
return "Please enter 'y' or 'n' only";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
]);
|
|
34
|
+
|
|
35
|
+
if (message.useExpress.toLowerCase() === "y") {
|
|
36
|
+
await expressjs(folderPath);
|
|
37
|
+
}else{
|
|
38
|
+
console.log("You do not installed express");
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
} catch (err) {
|
|
42
|
+
console.error("Error during setup:", err);
|
|
43
|
+
throw err;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
module.exports = { nodejs };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const figlet = require("figlet");
|
|
2
|
+
const chalkAnimation = require('chalk-animation').default;
|
|
3
|
+
const util = require("util");
|
|
4
|
+
|
|
5
|
+
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
6
|
+
const figletText = util.promisify(figlet.text);
|
|
7
|
+
|
|
8
|
+
async function heading() {
|
|
9
|
+
try {
|
|
10
|
+
const text = await figletText("WELCOME", { font: "Dancing Font" });
|
|
11
|
+
const neon = chalkAnimation.neon(text);
|
|
12
|
+
|
|
13
|
+
await sleep(3000);
|
|
14
|
+
|
|
15
|
+
neon.stop();
|
|
16
|
+
console.clear();
|
|
17
|
+
} catch (err) {
|
|
18
|
+
console.log(chalkAnimation.neon("WELCOME TO SETUP").start().text);
|
|
19
|
+
await sleep(2000);
|
|
20
|
+
console.clear();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
module.exports = { heading };
|
package/index.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#!usr/bin/env node
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
const inquire=require("inquirer").default;
|
|
5
|
+
const chalk =require("chalk");
|
|
6
|
+
let {createFoldder}=require("./components/folderCreate");
|
|
7
|
+
let {nodejs}=require("./components/nodejs");
|
|
8
|
+
const {heading} =require("./components/welcomeHeading");
|
|
9
|
+
const {createNestJs}=require("./components/nestjs");
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
async function main() {
|
|
13
|
+
await heading();
|
|
14
|
+
|
|
15
|
+
const answer = await inquire.prompt([
|
|
16
|
+
{
|
|
17
|
+
name:"folderName",
|
|
18
|
+
type:"input",
|
|
19
|
+
message:"Enter your folder name or . = ",
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
type: "rawlist",
|
|
23
|
+
name:"framework",
|
|
24
|
+
message:(m)=> `Which node js framework you want to use inside this folder = ${(m.folderName!=".")?m.folderName:"default folder we take"}?`,
|
|
25
|
+
choices: ["nodejs", "nestjs","reactjs","nextjs"],
|
|
26
|
+
default: ["nodejs"]
|
|
27
|
+
},
|
|
28
|
+
]);
|
|
29
|
+
|
|
30
|
+
if(answer.folderName!="."){
|
|
31
|
+
await createFoldder(answer.folderName);
|
|
32
|
+
if(answer.framework=="nodejs"){
|
|
33
|
+
await nodejs(answer.folderName);
|
|
34
|
+
}else if(answer.framework=="nestjs"){
|
|
35
|
+
await createNestJs(answer.folderName)
|
|
36
|
+
}else if(answer.framework=="reactjs"){
|
|
37
|
+
console.log("This react js is not come yet coming soon developer");
|
|
38
|
+
}else if(answer.framework=="nextjs"){
|
|
39
|
+
console.log("This react js is not come yet coming soon developer");
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
main();
|
|
48
|
+
|
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@usercli/clideveloper",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"start": "nodemon index.js"
|
|
8
|
+
},
|
|
9
|
+
"bin": {
|
|
10
|
+
"@usercli/clideveloper": "index.js"
|
|
11
|
+
},
|
|
12
|
+
"keywords": [],
|
|
13
|
+
"author": "",
|
|
14
|
+
"license": "ISC",
|
|
15
|
+
"type": "commonjs",
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"chalk": "^5.6.2",
|
|
18
|
+
"chalk-animation": "^2.0.3",
|
|
19
|
+
"figlet": "^1.9.4",
|
|
20
|
+
"inquirer": "^13.1.0",
|
|
21
|
+
"nanospinner": "^1.2.2"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"nodemon": "^3.1.11"
|
|
25
|
+
}
|
|
26
|
+
}
|