speedrun-cli 2.7.10 → 2.8.0

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 CHANGED
@@ -1,6 +1,9 @@
1
1
  <div align="center">
2
2
 
3
- # @astralicc/create-nestjs-auth-swagger
3
+ # 🚀 speedrun-cli
4
+
5
+ > **📖 Looking for full interactive flows, input/output terminal sessions, and generated code examples?**
6
+ > Check out the complete [**USAGE.md (Command & Interactive Flow Guide)**](./USAGE.md).
4
7
 
5
8
  ### The Zero-Config Way to Build Secure Authentication & CRUD APIs
6
9
 
@@ -17,22 +20,80 @@ Get a battle-tested, production-ready NestJS auth system and Swagger-documented
17
20
  [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](CONTRIBUTING.md)
18
21
 
19
22
  ```bash
20
- npx @astralicc/create-nestjs-auth-swagger@latest
23
+ npx speedrun-cli create my-app
21
24
  ```
22
25
 
23
- [Quick Start](#quick-start) | [ORM & Database Options](#orm--database-options) | [Features](#what-you-get) | [Docs](#links--resources)
26
+ [Quick Start](#getting-started--quick-start) | [Commands](#cli-command-quick-reference) | [Features](#core-feature-highlights) | [Usage Guide](./USAGE.md)
24
27
 
25
28
  ---
26
29
 
27
- **v2.4.0** | **Interactive Module Generator** | **Swagger UI Included** | **4 ORMs** | **4 Databases**
30
+ **v2.7.14** | **Interactive Module Generator** | **Field Manager** | **4 ORMs** | **4 Databases**
28
31
 
29
32
  </div>
30
33
 
31
34
  ---
32
35
 
33
- ## Why This Exists
36
+ ## 🌟 Core Feature Highlights
37
+
38
+ * ⚡ **Instant NestJS Boilerplate Scaffolding:** Choose your ORM (Prisma, TypeORM, Mongoose, Drizzle) and Database (PostgreSQL, MySQL, SQLite, MongoDB).
39
+ * 🔑 **Custom Primary Key Naming:** Choose between `id`, `snake_case` (`order_id`), `camelCase` (`orderId`), or custom PK formats synced seamlessly across ORM schemas, DTOs, response models, and Controller `@Param()` annotations.
40
+ * 🔤 **ORM-Native Field Types:** The field builder dynamically tailors field type options based on the detected ORM (e.g., Prisma `Int`/`Float`/`DateTime`, TypeORM `decimal`/`timestamp`, Drizzle `numeric`) and applies matching TypeScript types and `class-validator` rules.
41
+ * 🔐 **Auth & Role Guard Injection:** Protect write operations (`POST`, `PUT`, `DELETE`) automatically with pre-configured `@UseGuards(JwtAuthGuard, RolesGuard)` and `@Roles('ADMIN', 'SUPERADMIN')` decorators.
42
+ * 🔗 **Relationship Builder:** Add `Many-to-One` or `One-to-Many` relationships to other modules directly from the terminal with automatic foreign key wiring.
43
+ * ✏️ **Sub-Menu Interactive Field Manager (`speedrun-cli field` / `f`):** Modify existing generated modules on the fly. Selectively edit specific field attributes (Name, Type, or Optional status), add new fields, or delete fields with automated DTO and ORM schema re-sync.
44
+ * ⚙️ **Dynamic Module Configurator (`speedrun-cli config` / `c`):** Customize Auth Guards, change role permissions (`@Roles('ADMIN', 'SUPERADMIN')`), and enable/disable active CRUD endpoints on existing controllers without rewriting code.
45
+ * 🏗️ **Automated Base Architecture:** Ensures `src/common/base` (`BaseController`, `BaseService`, and Swagger helpers) exists to eliminate missing import compilation errors (`TS2307`/`TS4112`).
46
+ * 🔄 **Auto AppModule Registration:** Automatically injects generated modules into `src/app.module.ts`.
47
+
48
+ ---
49
+
50
+ ## 📌 CLI Command Quick Reference
51
+
52
+ | Command | Alias | Description |
53
+ | --- | --- | --- |
54
+ | `speedrun-cli create [app-name]` | *(default)* | Scaffolds a new production-ready NestJS Auth project. |
55
+ | `speedrun-cli generate [module]` | `g` | Generates a new CRUD module with PKs, fields, ORM sync, and Auth Guards. |
56
+ | `speedrun-cli field [module]` | `f` | Interactive Field Manager to Add, Edit (sub-menu), or Delete fields on existing modules. |
57
+ | `speedrun-cli config [module]` | `c` | Customize role guards (`@Roles`), auth protection, and active CRUD operations. |
58
+
59
+ ---
60
+
61
+ ## 🚀 Getting Started & Quick Start
62
+
63
+ ### 1. Scaffold a New Project
64
+ ```bash
65
+ # Interactive setup: choose ORM, Database, Swagger, Base CRUD & Package Manager
66
+ npx speedrun-cli create my-awesome-api
34
67
 
35
- Building secure JWT authentication and standard CRUD operations isn't trivial. You need:
68
+ # Or use non-interactive mode with default options
69
+ npx speedrun-cli create my-awesome-api --yes
70
+ ```
71
+
72
+ ### 2. Generate a New CRUD Module
73
+ ```bash
74
+ cd my-awesome-api
75
+
76
+ # Interactively generate a module with custom PK, fields, relations & guards
77
+ npx speedrun-cli g orders
78
+ ```
79
+
80
+ ### 3. Modify Fields of an Existing Module
81
+ ```bash
82
+ # Manage fields: Add new field, Edit field (via sub-menu), or Delete field
83
+ npx speedrun-cli f orders
84
+ ```
85
+
86
+ ### 4. Configure Roles & Toggle Active Endpoints
87
+ ```bash
88
+ # Customize Auth Guards, update role permissions, or enable/disable routes
89
+ npx speedrun-cli c orders
90
+ ```
91
+
92
+ ---
93
+
94
+ ## 💡 Why This Exists
95
+
96
+ Building secure JWT authentication and standard CRUD operations from scratch usually takes **34-46 hours**. You need:
36
97
  - Access tokens + refresh token rotation
37
98
  - HttpOnly cookies (not localStorage)
38
99
  - Multi-device session management
@@ -44,92 +105,66 @@ Building secure JWT authentication and standard CRUD operations isn't trivial. Y
44
105
  - **Consistent, secure CRUD boilerplate with strict validation**
45
106
  - **Automated API Documentation (Swagger)**
46
107
 
47
- **This CLI gives you all of that.** Production-ready, security-hardened, tested patterns - instantly.
108
+ **`speedrun-cli` gives you all of that in under 3 minutes.**
48
109
 
49
110
  <div align="center">
50
111
 
51
- ### The Problem with Building APIs From Scratch
112
+ ### Time Savings Matrix
52
113
 
53
- | Task | Time Required | Complexity |
54
- |------|---------------|------------|
55
- | JWT access/refresh setup | 6-8 hours | High |
56
- | Token rotation logic | 4-6 hours | Very High |
57
- | RBAC implementation | 3-4 hours | Medium |
58
- | Rate limiting | 2-3 hours | Medium |
59
- | Security hardening | 8-10 hours | Very High |
60
- | Base CRUD & Swagger setup | 5-7 hours | Medium |
61
- | Testing & debugging | 6-8 hours | High |
62
- | **Total** | **34-46 hours** | **** |
114
+ | Task | From Scratch | With `speedrun-cli` |
115
+ |------|---------------|-------------------|
116
+ | Project Scaffolding & Auth | 34-46 hours | **3 minutes** |
117
+ | Module Generation & Schema Sync | 4-6 hours | **10 seconds** |
118
+ | Field Editing & Migration | 2-3 hours | **5 seconds** |
63
119
 
64
- ### With @astralicc/create-nestjs-auth-swagger
120
+ </div>
65
121
 
66
- | Task | Time Required | Complexity |
67
- |------|---------------|------------|
68
- | Run one command | 3 minutes | **Zero** |
69
- | Generate new modules | 10 seconds | **Zero** |
70
- | **Total** | **~3 minutes** | **** |
122
+ ---
71
123
 
72
- *Save 40+ hours and get battle-tested code that just works.*
124
+ ## ⚙️ How It Works Behind the Scenes
73
125
 
74
- </div>
126
+ `speedrun-cli` isn't just a simple template copier — it's an intelligent code generation engine that dynamically compiles ORM schemas, NestJS DTOs, Controllers, and Services based on interactive inputs.
75
127
 
76
- ## Quick Start
128
+ ```mermaid
129
+ graph TD
130
+ A[npx speedrun-cli create / g / f] --> B[1. Prompt Engine & Package Manager Detection]
131
+ B --> C[2. Template Fusion & Base Architecture Scaffolding]
132
+ C --> D[3. ORM Schema & Entity Synchronization]
133
+ D --> E[4. Type-Safe DTO & Swagger Schema Generator]
134
+ E --> F[5. Controller & Service Code Compilation]
135
+ F --> G[6. Auto AppModule Registration & DB Migration/Seed]
136
+
137
+ style A fill:#667eea,color:#fff
138
+ style G fill:#48bb78,color:#fff
139
+ ```
77
140
 
78
- **30 seconds to a running auth API with Swagger Docs:**
141
+ ### 1. Template Fusion & Base Architecture (`src/generator.js`)
142
+ When running `create`, the CLI dynamically merges modular template layers based on your chosen ORM (`Prisma`, `TypeORM`, `Drizzle`, `Mongoose`) and Database (`PostgreSQL`, `MySQL`, `SQLite`, `MongoDB`). It automatically injects the `src/common/base` architecture containing abstract `BaseController`, `BaseService`, and Swagger response wrappers.
79
143
 
80
- ```bash
81
- # Run the CLI
82
- npx @astralicc/create-nestjs-auth-swagger@latest
83
-
84
- # Answer quick questions
85
- # Project name
86
- # ORM (Prisma, Drizzle, TypeORM, or Mongoose)
87
- # Database (PostgreSQL, MySQL, SQLite, or MongoDB)
88
- # Enable Base CRUD Architecture? (Yes/No)
89
- # Package manager
90
- # Install dependencies
91
- # Setup database
92
- # Initialize git
93
-
94
- # Done! Your API is running at http://localhost:8080/api/v1
95
- # Swagger UI is available at http://localhost:8080/api/docs
96
- ```
144
+ ### 2. Custom Primary Key & ORM Schema Sync (`src/moduleGenerator.js`)
145
+ When generating a module (`speedrun-cli g [module]`), your primary key selection (`id`, `order_id`, `orderId`, etc.) is bound across the entire stack:
146
+ - **Database Layer:** Marks the custom primary key column in Prisma (`@id`), TypeORM (`@PrimaryGeneratedColumn`), Drizzle (`primaryKey()`), or Mongoose (`@Prop`).
147
+ - **Service Layer:** Binds database query filters (`where: { order_id }`) for all CRUD methods.
148
+ - **Controller Layer:** Generates route params `@Param('order_id', ParseUUIDPipe)` matching OpenAPI `@ApiParam()` documentation.
97
149
 
98
- <details>
99
- <summary><b>See it in action (GIF/Video coming soon)</b></summary>
150
+ ### 3. ORM-Native Type Mapping & DTO Compilation
151
+ Field types selected in the interactive prompt (`Int`, `Float`, `Decimal`, `DateTime`, `varchar`, `timestamp`, `numeric`) are automatically converted into:
152
+ - **TypeScript Types:** `string`, `number`, `boolean`, `Date`, `object`.
153
+ - **Validation Rules:** `@IsString()`, `@IsInt()`, `@IsNumber()`, `@IsBoolean()`, `@IsDate()`, `@Type(() => Date)`.
154
+ - **Swagger Documentation:** `@ApiProperty()` / `@ApiPropertyOptional()` metadata with realistic example values.
100
155
 
101
- ```
102
- create-nestjs-auth-swagger
103
-
104
- ? What is your project name? my-awesome-api
105
- ? Which ORM would you like to use? Prisma
106
- ? Which database would you like to use? PostgreSQL
107
- ? Enable Base CRUD Architecture? Yes
108
- ? Which package manager? pnpm (detected)
109
- ? Install dependencies? Yes
110
- ? Initialize git repository? Yes
111
-
112
- Creating my-awesome-api...
113
- Installing dependencies...
114
- Success! Created my-awesome-api
115
-
116
- ? Complete setup now? Yes
117
- Generating JWT secrets...
118
- ? Enter PostgreSQL URL: postgresql://localhost:5432/mydb
119
- ? Set up database now? Yes
120
- Running migrations & seed...
121
- Default admin: admin@example.com / Admin@123
122
-
123
- ? Start dev server? Yes
124
- Server running at http://localhost:8080/api/v1
125
- Swagger UI at http://localhost:8080/api/docs
126
- ```
156
+ ### 4. Automatic `AppModule` Injection
157
+ The CLI parses `src/app.module.ts` using static analysis, adding the new module's import statement at the top and registering it inside `@Module({ imports: [...] })` so your API routes are active instantly.
127
158
 
128
- </details>
159
+ ### 5. Interactive Field Manager Engine (`src/fieldManager.js`)
160
+ When managing fields on an existing module (`speedrun-cli f [module]`):
161
+ - **Parser Engine:** Reads `create-[module].dto.ts` and decodes `class-validator` decorators to accurately reconstruct existing fields and ORM types without precision loss.
162
+ - **Sub-Menu Property Editor:** Allows isolated changes to field name, field type, or optional status without touching adjacent properties.
163
+ - **Re-Sync Engine:** Updates all 3 DTOs (`create`, `update`, `response`), updates the ORM model definition in-place, and prompts to trigger immediate database migration and seeding.
129
164
 
130
165
  ---
131
166
 
132
- ## What You Get
167
+ ## 🛡️ What You Get
133
168
 
134
169
  <table>
135
170
  <tr>
@@ -143,7 +178,7 @@ create-nestjs-auth-swagger
143
178
  - **Rate Limiting** - 5 auth attempts/min
144
179
  - **PII-Safe Logs** - Passwords/tokens auto-redacted
145
180
  - **Mass Assignment Protection** - `ValidationPipe` with `whitelist: true` & `forbidNonWhitelisted: true`
146
- - **Strict Parameter Parsing** - `@ParseUUIDPipe` / `@ParseIntPipe` on ID parameters.
181
+ - **Strict Parameter Parsing** - `@ParseUUIDPipe` on ID parameters
147
182
 
148
183
  </td>
149
184
  <td width="50%">
@@ -151,11 +186,11 @@ create-nestjs-auth-swagger
151
186
  ### Developer Experience
152
187
 
153
188
  - **Interactive Module Generator** - Scaffold CRUD in seconds
189
+ - **Sub-Menu Field Manager** - Modify fields safely anytime
154
190
  - **Auto-Generated Swagger Docs** - Out-of-the-box UI at `/api/docs`
155
- - **TypeScript** - Full type safety
156
191
  - **Base CRUD Architecture** - Abstract `BaseService` & `BaseController`
157
- - **Hot Reload** - Instant feedback
158
- - **Prisma Studio** - Visual database UI
192
+ - **TypeScript** - 100% type safety across DTOs and ORM schemas
193
+ - **Prisma Studio** - Visual database UI support
159
194
 
160
195
  </td>
161
196
  </tr>
@@ -164,12 +199,12 @@ create-nestjs-auth-swagger
164
199
 
165
200
  ### Production-Ready
166
201
 
167
- - **RBAC in 2 Lines** - `@Roles(UserRole.ADMIN)`
202
+ - **RBAC in 1 Line** - `@Roles('ADMIN', 'SUPERADMIN')`
168
203
  - **Multi-Device Sessions** - Track 5 devices/user
169
204
  - **Structured Logging** - Pino JSON logs
170
- - **Input Validation** - Zod + class-validator
205
+ - **Input Validation** - class-validator + class-transformer
171
206
  - **CORS & Helmet** - Security headers included
172
- - **Global Error Handling** - Handled `NotFoundException` and Soft-Deletes.
207
+ - **Global Error Handling** - Handled `NotFoundException` & Soft-Deletes
173
208
 
174
209
  </td>
175
210
  <td width="50%">
@@ -179,311 +214,15 @@ create-nestjs-auth-swagger
179
214
  - **4 ORMs** - Prisma, Drizzle, TypeORM, Mongoose
180
215
  - **4 Databases** - PostgreSQL, MySQL, SQLite, MongoDB
181
216
  - **Type-Safe** - Full TypeScript support across all ORMs
182
- - **Migrations** - Version control for your database
183
- - **Seeding** - Default admin user included
217
+ - **Migrations & Seeds** - Automated schema push/migration and table seeding
184
218
 
185
219
  </td>
186
220
  </tr>
187
- </table>
188
-
189
- ---
190
-
191
- ## Interactive Module Generator
192
-
193
- Add new CRUD modules dynamically to your running project anytime using the `generate` (or `g`) sub-command!
194
-
195
- ```bash
196
- # Inside your project directory
197
- npx @astralicc/create-nestjs-auth-swagger g [module-name]
198
- # OR
199
- npx @astralicc/create-nestjs-auth-swagger generate [module-name]
200
- ```
201
-
202
- ### Interactive Prompts
203
- 1. **Module Name:** If not provided via CLI args, you'll be prompted: `"What module do you want to generate?"`
204
- 2. **CRUD Mode Selection:**
205
- - `Full CRUD (Create, Read All, Read One, Update, Delete)`
206
- - `Custom Selection...`
207
- 3. **Cherry-Pick Operations:** If you select "Custom Selection", you can use a multiselect checkbox to pick exactly what you need (e.g., just `Create` and `Read All`).
208
-
209
- ### Auto-Generated Files & Swagger Integration
210
- The generator intelligently creates ORM-aware files for your module, fully wired with Swagger decorators:
211
- - `module-name.controller.ts` (Decorated with `@ApiTags`, `@ApiOperation`, `@ApiResponse`, etc.)
212
- - `module-name.service.ts` (Uses the correct Repository implementation based on your active ORM)
213
- - `module-name.module.ts`
214
- - `dto/create-module-name.dto.ts` & `update-module-name.dto.ts`
215
- - `dto/module-name.dto.ts` (With `@ApiProperty` decorators for Swagger schemas)
216
-
217
- ---
218
-
219
- ## Base CRUD Architecture & Security-Safe Features
220
-
221
- During initial setup, if you select **"Enable Base CRUD Architecture? (Y/n)"**, your project is scaffolded with a robust, abstract generic base for controllers and services.
222
-
223
- - **`BaseService` & `BaseController`**: Extensible classes that handle standard operations.
224
- - **Security-First**:
225
- - Protects against Mass Assignment via strict `ValidationPipe` settings (`whitelist: true`, `forbidNonWhitelisted: true`).
226
- - Ensures valid inputs via strict parameter parsing (e.g., `@ParseUUIDPipe`).
227
- - **Resilient**: Built-in Soft-delete support and global `NotFoundException` handling.
228
-
229
- ---
230
-
231
- ## Auto-Generated Swagger Docs (@nestjs/swagger)
232
-
233
- Say goodbye to manual API documentation!
234
-
235
- - **Swagger UI** is enabled out-of-the-box and accessible at `/api/docs`.
236
- - Every route scaffolded by the initial CLI setup or the `g` sub-command comes pre-configured with `@nestjs/swagger` decorators.
237
- - DTOs automatically generate OpenAPI schemas using `@ApiProperty` and `@ApiPropertyOptional`.
238
- - Endpoint descriptions, expected parameters, and HTTP response codes are fully documented instantly.
239
-
240
- ---
241
-
242
- ## See It in Action
243
-
244
- ### 60-Second Complete Setup
245
-
246
- ```bash
247
- # 1. Create project (10 seconds)
248
- npx @astralicc/create-nestjs-auth-swagger@latest my-api
249
-
250
- # 2. Answer prompts (20 seconds)
251
- # Project name: my-api
252
- # ORM: Prisma (or Drizzle, TypeORM, Mongoose)
253
- # Database: PostgreSQL (or MySQL, SQLite, MongoDB)
254
- # Enable Base CRUD: Yes
255
- # Package manager: pnpm
256
- # Install dependencies: Yes
257
- # Database URL: postgresql://localhost:5432/mydb
258
- # Setup database: Yes
259
- # Start server: Yes
260
-
261
- # 3. Your API is live! (30 seconds)
262
- # http://localhost:8080/api/v1
263
- # http://localhost:8080/api/docs (Swagger UI)
264
- ```
265
-
266
- ### Live Example
267
-
268
- ```bash
269
- # Login
270
- curl -X POST http://localhost:8080/api/v1/auth/login \
271
- -H "Content-Type: application/json" \
272
- -c cookies.txt \
273
- -d '{"email":"admin@example.com","password":"Admin@123"}'
274
-
275
- # Access protected route
276
- curl http://localhost:8080/api/v1/auth/me -b cookies.txt
277
- ```
278
-
279
- ### What the Code Looks Like
280
-
281
- **Adding a protected admin endpoint** (2 lines):
282
-
283
- ```typescript
284
- @Roles(UserRole.ADMIN) // Just add this decorator
285
- @Delete('posts/:id')
286
- deletePost() {
287
- return { message: 'Deleted' };
288
- }
289
- ```
290
-
291
- **Getting the current user** (1 line):
292
-
293
- ```typescript
294
- @Get('my-profile')
295
- getProfile(@GetUser() user) { // User automatically injected
296
- return { profile: user };
297
- }
298
- ```
299
-
300
- **Making an endpoint public** (1 line):
301
-
302
- ```typescript
303
- @Public() // Skip authentication
304
- @Get('posts')
305
- findAll() {
306
- return { posts: [] };
307
- }
308
- ```
309
-
310
- That's it. No boilerplate. No configuration. Just decorators.
311
-
312
- ---
313
-
314
- ## How It Works
315
-
316
- ### The Magic Behind the CLI
317
-
318
- ```mermaid
319
- graph LR
320
- A[Run CLI] --> B[Interactive Setup]
321
- B --> C[Generate Project]
322
- C --> D[Install Dependencies]
323
- D --> E[Generate JWT Secrets]
324
- E --> F[Configure Database]
325
- F --> G[Run Migrations]
326
- G --> H[Seed Admin User]
327
- H --> I[Start Dev Server & Swagger]
328
-
329
- style A fill:#667eea
330
- style I fill:#48bb78
331
- ```
332
-
333
- ### What Gets Created
334
-
335
- ```
336
- my-app/
337
- ├── src/
338
- │ ├── modules/
339
- │ │ ├── auth/ # JWT + Refresh token logic
340
- │ │ ├── users/ # User CRUD + profile
341
- │ │ └── health/ # Health check endpoints
342
- │ ├── common/
343
- │ │ ├── base/ # Abstract BaseController & BaseService
344
- │ │ ├── guards/ # JWT & RBAC guards
345
- │ │ ├── decorators/ # @Roles(), @Public(), @GetUser()
346
- │ │ └── filters/ # Exception handling
347
- │ └── config/ # Environment & logging config
348
- ├── prisma/ # (Prisma) Schema + migrations + seed
349
- ├── drizzle/ # (Drizzle) Schema + migrations
350
- ├── test/ # E2E test suite
351
- ├── .env # Auto-configured secrets
352
- └── package.json # All dependencies ready
353
- ```
221
+ </table>
354
222
 
355
223
  ---
356
224
 
357
- ## Usage Examples
358
-
359
- ### 1. Interactive Mode (Recommended)
360
-
361
- **Zero configuration. Just answer questions:**
362
-
363
- ```bash
364
- npx @astralicc/create-nestjs-auth-swagger@latest
365
- ```
366
-
367
- ### 2. Automation Mode
368
-
369
- **For CI/CD and scripts:**
370
-
371
- ```bash
372
- # Skip all prompts, use defaults
373
- npx @astralicc/create-nestjs-auth-swagger@latest my-app --yes
374
-
375
- # Specify ORM and database
376
- npx @astralicc/create-nestjs-auth-swagger@latest my-app --orm drizzle --database postgres --yes
377
- ```
378
-
379
- ---
380
-
381
- ## Complete API Reference
382
-
383
- Your generated API includes these endpoints out of the box (fully documented in Swagger):
384
-
385
- ### Authentication
386
-
387
- | Endpoint | Method | Description | Auth |
388
- |----------|--------|-------------|------|
389
- | `/auth/signup` | POST | Register new user | |
390
- | `/auth/login` | POST | Login with credentials | |
391
- | `/auth/refresh` | POST | Refresh access token | Refresh token |
392
- | `/auth/logout` | POST | Logout & invalidate tokens | |
393
- | `/auth/me` | GET | Get current user | |
394
-
395
- ### Users (Admin Only)
396
-
397
- | Endpoint | Method | Description | Auth |
398
- |----------|--------|-------------|------|
399
- | `/users` | GET | List all users (paginated) | ADMIN |
400
- | `/users/:id` | GET | Get user by ID | ADMIN |
401
- | `/users/:id` | PATCH | Update user | ADMIN |
402
- | `/users/:id` | DELETE | Soft delete user | ADMIN |
403
-
404
- ### Profile
405
-
406
- | Endpoint | Method | Description | Auth |
407
- |----------|--------|-------------|------|
408
- | `/users/profile` | GET | Get own profile | |
409
- | `/users/profile` | PATCH | Update own profile | |
410
-
411
- <details>
412
- <summary><b> Example: Add RBAC to Your Endpoint</b></summary>
413
-
414
- ```typescript
415
- import { Controller, Get } from '@nestjs/common';
416
- import { Roles } from '@/common/decorators/roles.decorator';
417
- import { UserRole } from '@prisma/client';
418
-
419
- @Controller('posts')
420
- export class PostsController {
421
- // Public endpoint - anyone can access
422
- @Public()
423
- @Get()
424
- findAll() {
425
- return { posts: [] };
426
- }
427
-
428
- // Protected endpoint - any authenticated user
429
- @Get('my-posts')
430
- getMyPosts(@GetUser() user) {
431
- return { posts: [], userId: user.id };
432
- }
433
-
434
- // Admin only - requires ADMIN role
435
- @Roles(UserRole.ADMIN)
436
- @Delete(':id')
437
- deletePost() {
438
- return { message: 'Post deleted' };
439
- }
440
- }
441
- ```
442
-
443
- **That's it!** No manual guard setup. Just decorators.
444
-
445
- </details>
446
-
447
- ---
448
-
449
- ## CLI Options Reference
450
-
451
- | Option | Description | Example |
452
- |--------|-------------|---------|
453
- | `g [module]` | Generate new CRUD module | `npx @astralicc/create-nestjs-auth-swagger g products` |
454
- | `--orm <orm>` | Select ORM (prisma, drizzle, typeorm, mongoose) | `npx @astralicc/create-nestjs-auth-swagger@latest my-app --orm drizzle` |
455
- | `--database <db>` | Select database (postgres, mysql, sqlite, mongodb) | `npx @astralicc/create-nestjs-auth-swagger@latest my-app --database mysql` |
456
- | `--yes` | Skip all prompts, use defaults | `npx @astralicc/create-nestjs-auth-swagger@latest my-app --yes` |
457
- | `--skip-install` | Don't install dependencies | `npx @astralicc/create-nestjs-auth-swagger@latest my-app --skip-install` |
458
- | `--package-manager <pm>` | Force package manager (npm, pnpm, yarn, bun) | `npx @astralicc/create-nestjs-auth-swagger@latest my-app --package-manager pnpm` |
459
- | `--help` | Show help message | `npx @astralicc/create-nestjs-auth-swagger@latest --help` |
460
-
461
- ---
462
-
463
- ## System Requirements
464
-
465
- | Requirement | Version | Why? |
466
- |------------|---------|------|
467
- | **Node.js** | >= 20.x | Native fetch, improved performance |
468
- | **Database** | PostgreSQL 16+, MySQL 8+, SQLite 3+, or MongoDB 6+ | Your choice! |
469
- | **Package Manager** | npm/pnpm/yarn/bun | Any works, auto-detected |
470
-
471
- ---
472
-
473
- ## ORM & Database Options
474
-
475
- Choose the combination that fits your project:
476
-
477
- ### Supported ORMs
478
-
479
- | ORM | Best For | Features |
480
- |-----|----------|----------|
481
- | **[Prisma](https://www.prisma.io)** | Most projects | Type-safe queries, visual studio, migrations |
482
- | **[Drizzle](https://orm.drizzle.team)** | SQL lovers | Lightweight, SQL-like syntax, fast |
483
- | **[TypeORM](https://typeorm.io)** | Enterprise apps | Decorators, Active Record & Data Mapper |
484
- | **[Mongoose](https://mongoosejs.com)** | MongoDB users | Schema validation, middleware, populate |
485
-
486
- ### ORM + Database Compatibility
225
+ ## 🗄️ Multi-ORM & Database Matrix
487
226
 
488
227
  ```
489
228
  ┌─────────────┬────────────┬───────┬────────┬─────────┐
@@ -498,123 +237,29 @@ Choose the combination that fits your project:
498
237
 
499
238
  ---
500
239
 
501
- ## Comparison with Alternatives
502
-
503
- ### vs. Building from Scratch
504
-
505
- | Feature | From Scratch | @astralicc/create-nestjs-auth-swagger |
506
- |---------|-------------|-------------------|
507
- | **Time to setup** | 34-46 hours | 3 minutes |
508
- | **Security audit** | You do it (risky) | Battle-tested |
509
- | **Token rotation** | Implement yourself | Included |
510
- | **RBAC** | Build guards | Decorator-based |
511
- | **Rate limiting** | Manual setup | Pre-configured |
512
- | **CRUD Generator** | DIY | Included (`g` command) |
513
- | **Swagger Docs** | Manual annotations | Auto-generated |
514
-
515
- ---
516
-
517
- ## Troubleshooting
518
-
519
- <details>
520
- <summary><b> "Command not found: @astralicc/create-nestjs-auth-swagger"</b></summary>
521
-
522
- Use `npx` with `@latest` tag:
523
- ```bash
524
- npx @astralicc/create-nestjs-auth-swagger@latest my-app
525
- ```
526
-
527
- </details>
528
-
529
- <details>
530
- <summary><b> "Template directory not found"</b></summary>
531
-
532
- Reinstall the CLI:
533
- ```bash
534
- npm uninstall -g @astralicc/create-nestjs-auth-swagger
535
- npm cache clean --force
536
- npm install -g @astralicc/create-nestjs-auth-swagger
537
- ```
538
-
539
- </details>
540
-
541
- <details>
542
- <summary><b> Database connection fails</b></summary>
543
-
544
- Check your PostgreSQL is running:
545
- ```bash
546
- pg_isready
547
- psql postgresql://user:password@localhost:5432/mydb
548
- ```
549
- </details>
550
-
551
- <details>
552
- <summary><b> Port 8080 already in use</b></summary>
553
-
554
- Option 1: Change port in `.env`:
555
- ```env
556
- PORT=3000
557
- ```
558
- </details>
559
-
560
- ---
561
-
562
- ## Contributing
563
-
564
- We love contributions! Here's how you can help:
565
-
566
- 1. Fork the repository
567
- 2. Create a feature branch: `git checkout -b feature/amazing-feature`
568
- 3. Make your changes
569
- 4. Test thoroughly: `npm test`
570
- 5. Commit: `git commit -m 'Add amazing feature'`
571
- 6. Push: `git push origin feature/amazing-feature`
572
- 7. Open a Pull Request
573
-
574
- See [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines.
575
-
576
- ---
577
-
578
- ## Tech Stack
579
-
580
- <div align="center">
581
-
582
- | Technology | Version | Purpose |
583
- |------------|---------|---------|
584
- | [NestJS](https://nestjs.com) | 11.0 | Progressive Node.js framework |
585
- | [TypeScript](https://www.typescriptlang.org) | 5.7 | Type safety |
586
- | [Prisma](https://www.prisma.io) | 6.x | Type-safe ORM (option 1) |
587
- | [Drizzle](https://orm.drizzle.team) | Latest | Lightweight ORM (option 2) |
588
- | [TypeORM](https://typeorm.io) | 0.3.x | Decorator-based ORM (option 3) |
589
- | [Mongoose](https://mongoosejs.com) | 8.x | MongoDB ODM (option 4) |
590
- | [Swagger](https://swagger.io/) | - | API Documentation |
591
- | [Passport JWT](https://www.passportjs.org) | - | JWT authentication |
240
+ ## 📋 CLI Flags & Options
592
241
 
593
- </div>
242
+ | Option | Description | Example |
243
+ |--------|-------------|---------|
244
+ | `g [module]` / `generate` | Generate a new CRUD module | `npx speedrun-cli g products` |
245
+ | `f [module]` / `field` | Manage fields on an existing module | `npx speedrun-cli f products` |
246
+ | `--orm <orm>` | Select ORM (prisma, drizzle, typeorm, mongoose) | `npx speedrun-cli create my-app --orm drizzle` |
247
+ | `--database <db>` | Select database (postgres, mysql, sqlite, mongodb) | `npx speedrun-cli create my-app --database mysql` |
248
+ | `--yes` | Skip all prompts, use defaults | `npx speedrun-cli create my-app --yes` |
249
+ | `--skip-install` | Skip dependency installation | `npx speedrun-cli create my-app --skip-install` |
250
+ | `--package-manager <pm>` | Force package manager (npm, pnpm, yarn, bun) | `npx speedrun-cli create my-app --package-manager pnpm` |
251
+ | `--help` | Show CLI help message | `npx speedrun-cli --help` |
594
252
 
595
253
  ---
596
254
 
597
- ## License
255
+ ## 📖 Full Interactive Flow & Code Output Guide
598
256
 
599
- **MIT License** - do whatever you want with it!
257
+ For detailed terminal walkthroughs, step-by-step interactive prompt sessions, generated code outputs, and multi-ORM schema matrices, please visit:
600
258
 
601
- See [LICENSE](LICENSE) for full details.
259
+ 👉 [**USAGE.md Command & Interactive Flow Guide**](./USAGE.md)
602
260
 
603
261
  ---
604
262
 
605
- <div align="center">
606
-
607
- ### Did this save you time?
263
+ ## 📄 License
608
264
 
609
- **Star this repository** to help others discover it!
610
-
611
- <sub>
612
- Generated projects follow <strong>NestJS best practices</strong> and <strong>OWASP security guidelines</strong><br>
613
- <strong>v2.4.0</strong> | Multi-ORM & Multi-Database Support | MIT License
614
- </sub>
615
-
616
- <br><br>
617
-
618
- **Now go build something amazing!**
619
-
620
- </div>
265
+ **MIT License** - free to use in personal and commercial projects. See [LICENSE](LICENSE) for details.