@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.
@@ -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
+ }