nestjs-prisma-cli 1.0.6 → 1.0.7
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/README.md +45 -23
- package/bin/index.js +65 -60
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -21,49 +21,71 @@ Compatible with **Node.js >=18** and **NestJS v10+**.
|
|
|
21
21
|
|
|
22
22
|
## 📥 Installation
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
### ⚡ Quick Start Guide
|
|
25
25
|
|
|
26
26
|
Once the CLI is installed, you can use the following commands:
|
|
27
27
|
|
|
28
28
|
### 1️⃣ Install CLI globally
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
|
-
|
|
32
31
|
npm install -g nestjs-prisma-cli
|
|
33
|
-
|
|
34
32
|
```
|
|
35
33
|
|
|
34
|
+
|
|
36
35
|
### 2️⃣ Check CLI version
|
|
37
36
|
|
|
38
37
|
```bash
|
|
39
|
-
|
|
40
38
|
nestgen -v
|
|
39
|
+
```
|
|
41
40
|
# or
|
|
41
|
+
```bash
|
|
42
42
|
nestgen --version
|
|
43
|
-
|
|
44
43
|
```
|
|
45
44
|
|
|
46
|
-
### 3️⃣ Generate a new project
|
|
47
45
|
|
|
46
|
+
### 3️⃣ Generate a new project
|
|
48
47
|
```bash
|
|
49
|
-
|
|
50
48
|
nestgen
|
|
49
|
+
```
|
|
51
50
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
Step 2
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
Step 3
|
|
62
|
-
|
|
63
|
-
Check .env
|
|
64
|
-
npx prisma generate
|
|
65
|
-
npx prisma migrate dev --name init
|
|
66
|
-
npx ts-node prisma/seed.ts
|
|
67
|
-
npm run start:dev
|
|
51
|
+
```text
|
|
52
|
+
? Enter your project name: my-app
|
|
53
|
+
Step 2: ? Select your database: (Use arrow keys)
|
|
54
|
+
MySQL
|
|
55
|
+
PostgreSQL
|
|
56
|
+
SQLite
|
|
57
|
+
MongoDB
|
|
58
|
+
CockroachDB
|
|
59
|
+
SQLServer
|
|
60
|
+
Step 3: 🎉 Project ready! Next steps:
|
|
61
|
+
```
|
|
68
62
|
|
|
63
|
+
### Navigate into your project
|
|
64
|
+
```bash
|
|
65
|
+
cd my-app
|
|
69
66
|
```
|
|
67
|
+
### Update .env
|
|
68
|
+
```bash
|
|
69
|
+
DATABASE_URL="your_database_connection_string"
|
|
70
|
+
```
|
|
71
|
+
```bash
|
|
72
|
+
npx prisma generate
|
|
73
|
+
```
|
|
74
|
+
### SQL Databases
|
|
75
|
+
### (PostgreSQL, MySQL, SQLite, CockroachDB, SQLServer)
|
|
76
|
+
```bash
|
|
77
|
+
npx prisma migrate dev --name init
|
|
78
|
+
```
|
|
79
|
+
### NoSQL Database
|
|
80
|
+
### (MongoDB)
|
|
81
|
+
```bash
|
|
82
|
+
npx prisma db push
|
|
83
|
+
```
|
|
84
|
+
### Then, follow this
|
|
85
|
+
```bash
|
|
86
|
+
npx ts-node prisma/seed.ts
|
|
87
|
+
```
|
|
88
|
+
```bash
|
|
89
|
+
npm run start:dev
|
|
90
|
+
```
|
|
91
|
+
|
package/bin/index.js
CHANGED
|
@@ -39,6 +39,62 @@ const detectPackageManager = () => {
|
|
|
39
39
|
}
|
|
40
40
|
};
|
|
41
41
|
|
|
42
|
+
export async function generatePrismaSchema(selectedProvider, templatePrismaPath) {
|
|
43
|
+
if (selectedProvider === "mongodb") {
|
|
44
|
+
return `generator client {
|
|
45
|
+
provider = "prisma-client-js"
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
datasource db {
|
|
49
|
+
provider = "mongodb"
|
|
50
|
+
url = env("DATABASE_URL")
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
model User {
|
|
54
|
+
id String @id @default(auto()) @map("_id") @db.ObjectId
|
|
55
|
+
userId String @unique
|
|
56
|
+
name String?
|
|
57
|
+
email String
|
|
58
|
+
password String
|
|
59
|
+
isActive Boolean @default(true)
|
|
60
|
+
createdAt DateTime @default(now())
|
|
61
|
+
updatedAt DateTime @updatedAt
|
|
62
|
+
@@map("tbl_user")
|
|
63
|
+
}
|
|
64
|
+
`;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
try {
|
|
68
|
+
let prismaContent = await fs.readFile(templatePrismaPath, "utf-8");
|
|
69
|
+
return prismaContent.replace(
|
|
70
|
+
/datasource\s+db\s*{[^}]*provider\s*=\s*".*"/,
|
|
71
|
+
`datasource db {\n provider = "${selectedProvider}"`
|
|
72
|
+
);
|
|
73
|
+
} catch {
|
|
74
|
+
return `generator client {
|
|
75
|
+
provider = "prisma-client-js"
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
datasource db {
|
|
79
|
+
provider = "${selectedProvider}"
|
|
80
|
+
url = env("DATABASE_URL")
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
model User {
|
|
84
|
+
id Int @id @default(autoincrement())
|
|
85
|
+
userId String @unique
|
|
86
|
+
name String?
|
|
87
|
+
email String
|
|
88
|
+
password String
|
|
89
|
+
isActive Boolean @default(true)
|
|
90
|
+
createdAt DateTime @default(now())
|
|
91
|
+
updatedAt DateTime @updatedAt
|
|
92
|
+
@@map("tbl_user")
|
|
93
|
+
}
|
|
94
|
+
`;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
42
98
|
async function main() {
|
|
43
99
|
console.log(chalk.blue("🚀 Welcome to NestJS + Prisma Project Generator!"));
|
|
44
100
|
|
|
@@ -94,36 +150,11 @@ async function main() {
|
|
|
94
150
|
|
|
95
151
|
const templatePath = path.resolve(__dirname, "../template");
|
|
96
152
|
const projectPrismaPath = path.join(projectPath, "prisma/schema.prisma");
|
|
97
|
-
|
|
98
|
-
const extraItems = [
|
|
99
|
-
{ src: path.resolve(__dirname, "../.github"), dest: path.join(projectPath, ".github") },
|
|
100
|
-
{ src: path.resolve(__dirname, "../Dockerfile"), dest: path.join(projectPath, "Dockerfile") },
|
|
101
|
-
];
|
|
102
|
-
|
|
103
|
-
async function safeCopy(src, dest, label) {
|
|
104
|
-
try {
|
|
105
|
-
if (await fs.pathExists(src)) {
|
|
106
|
-
await fs.copy(src, dest, { overwrite: true });
|
|
107
|
-
console.log(chalk.green(`✅ ${label} copied!`));
|
|
108
|
-
} else {
|
|
109
|
-
console.log(chalk.yellow(`⚠️ ${label} not found, skipped.`));
|
|
110
|
-
}
|
|
111
|
-
} catch (err) {
|
|
112
|
-
console.log(chalk.red(`❌ Failed to copy ${label}:`), err.message);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
for (const item of extraItems) {
|
|
117
|
-
const label = path.basename(item.dest);
|
|
118
|
-
await safeCopy(item.src, item.dest, label);
|
|
119
|
-
}
|
|
153
|
+
const templatePrismaPath = path.join(templatePath, "prisma/schema.prisma");
|
|
120
154
|
|
|
121
155
|
if (await fs.pathExists(templatePath)) {
|
|
122
|
-
console.log(chalk.blue("📄 Copying template files..."));
|
|
123
156
|
await fs.copy(templatePath, projectPath, { overwrite: true });
|
|
124
157
|
console.log(chalk.green("✅ Template files copied!"));
|
|
125
|
-
} else {
|
|
126
|
-
console.log(chalk.yellow("⚠️ Template folder not found. Skipping copy."));
|
|
127
158
|
}
|
|
128
159
|
|
|
129
160
|
const providerMap = {
|
|
@@ -136,38 +167,7 @@ async function main() {
|
|
|
136
167
|
};
|
|
137
168
|
const selectedProvider = providerMap[database.toLowerCase()] || "mysql";
|
|
138
169
|
|
|
139
|
-
|
|
140
|
-
const templatePrismaPath = path.join(templatePath, "prisma/schema.prisma");
|
|
141
|
-
if (fs.existsSync(templatePrismaPath)) {
|
|
142
|
-
prismaContent = await fs.readFile(templatePrismaPath, "utf-8");
|
|
143
|
-
prismaContent = prismaContent.replace(
|
|
144
|
-
/datasource\s+db\s*{[^}]*provider\s*=\s*".*"/,
|
|
145
|
-
`datasource db {\n provider = "${selectedProvider}"`
|
|
146
|
-
);
|
|
147
|
-
} else {
|
|
148
|
-
prismaContent = `generator client {
|
|
149
|
-
provider = "prisma-client-js"
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
datasource db {
|
|
153
|
-
provider = "${selectedProvider}"
|
|
154
|
-
url = env("DATABASE_URL")
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
model User {
|
|
158
|
-
id Int @id @default(autoincrement())
|
|
159
|
-
userId String @unique
|
|
160
|
-
name String?
|
|
161
|
-
email String
|
|
162
|
-
password String
|
|
163
|
-
isActive Boolean @default(true)
|
|
164
|
-
createdAt DateTime @default(now())
|
|
165
|
-
updatedAt DateTime @updatedAt
|
|
166
|
-
@@map("tbl_user")
|
|
167
|
-
}
|
|
168
|
-
`;
|
|
169
|
-
}
|
|
170
|
-
|
|
170
|
+
const prismaContent = await generatePrismaSchema(selectedProvider, templatePrismaPath);
|
|
171
171
|
await fs.outputFile(projectPrismaPath, prismaContent);
|
|
172
172
|
|
|
173
173
|
const defaultUrlMap = {
|
|
@@ -205,8 +205,13 @@ PORT=3000
|
|
|
205
205
|
console.log(chalk.yellow("🔧 Next steps (run manually):"));
|
|
206
206
|
console.log(chalk.cyan(`1. Generate Prisma Client:`));
|
|
207
207
|
console.log(chalk.cyan(` npx prisma generate`));
|
|
208
|
-
|
|
209
|
-
|
|
208
|
+
if (selectedProvider === "mongodb") {
|
|
209
|
+
console.log(chalk.cyan(`2. Push schema to MongoDB:`));
|
|
210
|
+
console.log(chalk.cyan(` npx prisma db push`));
|
|
211
|
+
} else {
|
|
212
|
+
console.log(chalk.cyan(`2. Apply Prisma Migrations:`));
|
|
213
|
+
console.log(chalk.cyan(` npx prisma migrate dev --name init`));
|
|
214
|
+
}
|
|
210
215
|
console.log(chalk.cyan(`3. Run Seed Script:`));
|
|
211
216
|
console.log(chalk.cyan(` npx ts-node prisma/seed.ts`));
|
|
212
217
|
|