create-coreback 1.0.3 → 1.0.5
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/.github/workflows/publish.yml +13 -10
- package/README.md +30 -1
- package/dist/generators/docker.d.ts.map +1 -1
- package/dist/generators/docker.js +61 -4
- package/dist/generators/docker.js.map +1 -1
- package/dist/generators/envExample.d.ts.map +1 -1
- package/dist/generators/envExample.js +26 -0
- package/dist/generators/envExample.js.map +1 -1
- package/dist/generators/eslint.d.ts.map +1 -1
- package/dist/generators/eslint.js +25 -27
- package/dist/generators/eslint.js.map +1 -1
- package/dist/generators/index.js +1 -1
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/packageJson.d.ts.map +1 -1
- package/dist/generators/packageJson.js +41 -5
- package/dist/generators/packageJson.js.map +1 -1
- package/dist/generators/sourceFiles/controllers/index.d.ts +3 -0
- package/dist/generators/sourceFiles/controllers/index.d.ts.map +1 -0
- package/dist/generators/sourceFiles/controllers/index.js +147 -0
- package/dist/generators/sourceFiles/controllers/index.js.map +1 -0
- package/dist/generators/sourceFiles/core/configFiles.d.ts +3 -0
- package/dist/generators/sourceFiles/core/configFiles.d.ts.map +1 -0
- package/dist/generators/sourceFiles/core/configFiles.js +148 -0
- package/dist/generators/sourceFiles/core/configFiles.js.map +1 -0
- package/dist/generators/sourceFiles/core/index.d.ts +3 -0
- package/dist/generators/sourceFiles/core/index.d.ts.map +1 -0
- package/dist/generators/sourceFiles/core/index.js +17 -0
- package/dist/generators/sourceFiles/core/index.js.map +1 -0
- package/dist/generators/sourceFiles/core/indexFile.d.ts +3 -0
- package/dist/generators/sourceFiles/core/indexFile.d.ts.map +1 -0
- package/dist/generators/sourceFiles/core/indexFile.js +47 -0
- package/dist/generators/sourceFiles/core/indexFile.js.map +1 -0
- package/dist/generators/sourceFiles/core/middlewares.d.ts +3 -0
- package/dist/generators/sourceFiles/core/middlewares.d.ts.map +1 -0
- package/dist/generators/sourceFiles/core/middlewares.js +123 -0
- package/dist/generators/sourceFiles/core/middlewares.js.map +1 -0
- package/dist/generators/sourceFiles/core/routes.d.ts +3 -0
- package/dist/generators/sourceFiles/core/routes.d.ts.map +1 -0
- package/dist/generators/sourceFiles/core/routes.js +281 -0
- package/dist/generators/sourceFiles/core/routes.js.map +1 -0
- package/dist/generators/sourceFiles/core/tests.d.ts +3 -0
- package/dist/generators/sourceFiles/core/tests.d.ts.map +1 -0
- package/dist/generators/sourceFiles/core/tests.js +48 -0
- package/dist/generators/sourceFiles/core/tests.js.map +1 -0
- package/dist/generators/sourceFiles/core/types.d.ts +2 -0
- package/dist/generators/sourceFiles/core/types.d.ts.map +1 -0
- package/dist/generators/sourceFiles/core/types.js +13 -0
- package/dist/generators/sourceFiles/core/types.js.map +1 -0
- package/dist/generators/sourceFiles/core/utils.d.ts +2 -0
- package/dist/generators/sourceFiles/core/utils.d.ts.map +1 -0
- package/dist/generators/sourceFiles/core/utils.js +173 -0
- package/dist/generators/sourceFiles/core/utils.js.map +1 -0
- package/dist/generators/sourceFiles/core/validators.d.ts +3 -0
- package/dist/generators/sourceFiles/core/validators.d.ts.map +1 -0
- package/dist/generators/sourceFiles/core/validators.js +37 -0
- package/dist/generators/sourceFiles/core/validators.js.map +1 -0
- package/dist/generators/sourceFiles/features/fileUpload.d.ts +3 -0
- package/dist/generators/sourceFiles/features/fileUpload.d.ts.map +1 -0
- package/dist/generators/sourceFiles/features/fileUpload.js +229 -0
- package/dist/generators/sourceFiles/features/fileUpload.js.map +1 -0
- package/dist/generators/sourceFiles/features/queue.d.ts +3 -0
- package/dist/generators/sourceFiles/features/queue.d.ts.map +1 -0
- package/dist/generators/sourceFiles/features/queue.js +211 -0
- package/dist/generators/sourceFiles/features/queue.js.map +1 -0
- package/dist/generators/sourceFiles/features/redis.d.ts +3 -0
- package/dist/generators/sourceFiles/features/redis.d.ts.map +1 -0
- package/dist/generators/sourceFiles/features/redis.js +68 -0
- package/dist/generators/sourceFiles/features/redis.js.map +1 -0
- package/dist/generators/sourceFiles/index.d.ts +3 -0
- package/dist/generators/sourceFiles/index.d.ts.map +1 -0
- package/dist/generators/sourceFiles/index.js +99 -0
- package/dist/generators/sourceFiles/index.js.map +1 -0
- package/dist/generators/sourceFiles/phase1/cliGenerators.d.ts +2 -0
- package/dist/generators/sourceFiles/phase1/cliGenerators.d.ts.map +1 -0
- package/dist/generators/sourceFiles/phase1/cliGenerators.js +336 -0
- package/dist/generators/sourceFiles/phase1/cliGenerators.js.map +1 -0
- package/dist/generators/sourceFiles/phase1/seedersFactories.d.ts +3 -0
- package/dist/generators/sourceFiles/phase1/seedersFactories.d.ts.map +1 -0
- package/dist/generators/sourceFiles/phase1/seedersFactories.js +89 -0
- package/dist/generators/sourceFiles/phase1/seedersFactories.js.map +1 -0
- package/dist/generators/sourceFiles/phase2/dtos.d.ts +2 -0
- package/dist/generators/sourceFiles/phase2/dtos.d.ts.map +1 -0
- package/dist/generators/sourceFiles/phase2/dtos.js +59 -0
- package/dist/generators/sourceFiles/phase2/dtos.js.map +1 -0
- package/dist/generators/sourceFiles/phase2/events.d.ts +2 -0
- package/dist/generators/sourceFiles/phase2/events.d.ts.map +1 -0
- package/dist/generators/sourceFiles/phase2/events.js +76 -0
- package/dist/generators/sourceFiles/phase2/events.js.map +1 -0
- package/dist/generators/sourceFiles/phase2/exceptionHandling.d.ts +2 -0
- package/dist/generators/sourceFiles/phase2/exceptionHandling.d.ts.map +1 -0
- package/dist/generators/sourceFiles/phase2/exceptionHandling.js +107 -0
- package/dist/generators/sourceFiles/phase2/exceptionHandling.js.map +1 -0
- package/dist/generators/sourceFiles/phase2/guards.d.ts +2 -0
- package/dist/generators/sourceFiles/phase2/guards.d.ts.map +1 -0
- package/dist/generators/sourceFiles/phase2/guards.js +98 -0
- package/dist/generators/sourceFiles/phase2/guards.js.map +1 -0
- package/dist/generators/sourceFiles/phase2/healthChecks.d.ts +3 -0
- package/dist/generators/sourceFiles/phase2/healthChecks.d.ts.map +1 -0
- package/dist/generators/sourceFiles/phase2/healthChecks.js +73 -0
- package/dist/generators/sourceFiles/phase2/healthChecks.js.map +1 -0
- package/dist/generators/sourceFiles/phase2/scheduledTasks.d.ts +2 -0
- package/dist/generators/sourceFiles/phase2/scheduledTasks.d.ts.map +1 -0
- package/dist/generators/sourceFiles/phase2/scheduledTasks.js +56 -0
- package/dist/generators/sourceFiles/phase2/scheduledTasks.js.map +1 -0
- package/dist/generators/sourceFiles/phase3/apiVersioning.d.ts +3 -0
- package/dist/generators/sourceFiles/phase3/apiVersioning.d.ts.map +1 -0
- package/dist/generators/sourceFiles/phase3/apiVersioning.js +72 -0
- package/dist/generators/sourceFiles/phase3/apiVersioning.js.map +1 -0
- package/dist/generators/sourceFiles/phase3/cliCommands.d.ts +2 -0
- package/dist/generators/sourceFiles/phase3/cliCommands.d.ts.map +1 -0
- package/dist/generators/sourceFiles/phase3/cliCommands.js +102 -0
- package/dist/generators/sourceFiles/phase3/cliCommands.js.map +1 -0
- package/dist/generators/sourceFiles/phase3/configSystem.d.ts +2 -0
- package/dist/generators/sourceFiles/phase3/configSystem.d.ts.map +1 -0
- package/dist/generators/sourceFiles/phase3/configSystem.js +57 -0
- package/dist/generators/sourceFiles/phase3/configSystem.js.map +1 -0
- package/dist/generators/sourceFiles/phase3/dependencyInjection.d.ts +2 -0
- package/dist/generators/sourceFiles/phase3/dependencyInjection.d.ts.map +1 -0
- package/dist/generators/sourceFiles/phase3/dependencyInjection.js +153 -0
- package/dist/generators/sourceFiles/phase3/dependencyInjection.js.map +1 -0
- package/dist/generators/sourceFiles/phase3/moduleSystem.d.ts +2 -0
- package/dist/generators/sourceFiles/phase3/moduleSystem.d.ts.map +1 -0
- package/dist/generators/sourceFiles/phase3/moduleSystem.js +166 -0
- package/dist/generators/sourceFiles/phase3/moduleSystem.js.map +1 -0
- package/dist/generators/sourceFiles/phase3/structuredLogging.d.ts +3 -0
- package/dist/generators/sourceFiles/phase3/structuredLogging.d.ts.map +1 -0
- package/dist/generators/sourceFiles/phase3/structuredLogging.js +155 -0
- package/dist/generators/sourceFiles/phase3/structuredLogging.js.map +1 -0
- package/dist/generators/sourceFiles/repositories/index.d.ts +3 -0
- package/dist/generators/sourceFiles/repositories/index.d.ts.map +1 -0
- package/dist/generators/sourceFiles/repositories/index.js +109 -0
- package/dist/generators/sourceFiles/repositories/index.js.map +1 -0
- package/dist/generators/sourceFiles/services/index.d.ts +3 -0
- package/dist/generators/sourceFiles/services/index.d.ts.map +1 -0
- package/dist/generators/sourceFiles/services/index.js +353 -0
- package/dist/generators/sourceFiles/services/index.js.map +1 -0
- package/dist/generators/sourceFiles.d.ts +1 -2
- package/dist/generators/sourceFiles.d.ts.map +1 -1
- package/dist/generators/sourceFiles.js +2 -1238
- package/dist/generators/sourceFiles.js.map +1 -1
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +35 -0
- package/dist/prompts.js.map +1 -1
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -1
- package/jest.config.js +21 -0
- package/package.json +4 -1
- package/src/generators/docker.ts +61 -4
- package/src/generators/envExample.ts +28 -0
- package/src/generators/eslint.ts +21 -24
- package/src/generators/index.ts +1 -1
- package/src/generators/packageJson.ts +45 -6
- package/src/generators/sourceFiles/controllers/index.ts +157 -0
- package/src/generators/sourceFiles/core/configFiles.ts +158 -0
- package/src/generators/sourceFiles/core/index.ts +28 -0
- package/src/generators/sourceFiles/core/indexFile.ts +49 -0
- package/src/generators/sourceFiles/core/middlewares.ts +129 -0
- package/src/generators/sourceFiles/core/routes.ts +295 -0
- package/src/generators/sourceFiles/core/tests.ts +62 -0
- package/src/generators/sourceFiles/core/types.ts +14 -0
- package/src/generators/sourceFiles/core/utils.ts +178 -0
- package/src/generators/sourceFiles/core/validators.ts +39 -0
- package/src/generators/sourceFiles/features/fileUpload.ts +241 -0
- package/src/generators/sourceFiles/features/queue.ts +226 -0
- package/src/generators/sourceFiles/features/redis.ts +73 -0
- package/src/generators/sourceFiles/index.ts +125 -0
- package/src/generators/sourceFiles/phase1/cliGenerators.ts +338 -0
- package/src/generators/sourceFiles/phase1/seedersFactories.ts +97 -0
- package/src/generators/sourceFiles/phase2/dtos.ts +60 -0
- package/src/generators/sourceFiles/phase2/events.ts +80 -0
- package/src/generators/sourceFiles/phase2/exceptionHandling.ts +111 -0
- package/src/generators/sourceFiles/phase2/guards.ts +99 -0
- package/src/generators/sourceFiles/phase2/healthChecks.ts +81 -0
- package/src/generators/sourceFiles/phase2/scheduledTasks.ts +58 -0
- package/src/generators/sourceFiles/phase3/apiVersioning.ts +77 -0
- package/src/generators/sourceFiles/phase3/cliCommands.ts +110 -0
- package/src/generators/sourceFiles/phase3/configSystem.ts +64 -0
- package/src/generators/sourceFiles/phase3/dependencyInjection.ts +155 -0
- package/src/generators/sourceFiles/phase3/moduleSystem.ts +170 -0
- package/src/generators/sourceFiles/phase3/structuredLogging.ts +160 -0
- package/src/generators/sourceFiles/repositories/index.ts +114 -0
- package/src/generators/sourceFiles/services/index.ts +363 -0
- package/src/generators/sourceFiles.ts +2 -1317
- package/src/prompts.ts +36 -1
- package/src/types.ts +5 -0
- package/tests/integration.test.ts +233 -0
|
@@ -64,19 +64,22 @@ jobs:
|
|
|
64
64
|
id: pkg-manager
|
|
65
65
|
run: |
|
|
66
66
|
if [ -f "pnpm-lock.yaml" ]; then
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
67
|
+
MANAGER="pnpm"
|
|
68
|
+
INSTALL_CMD="pnpm install --frozen-lockfile"
|
|
69
|
+
BUILD_CMD="pnpm run build"
|
|
70
70
|
elif [ -f "yarn.lock" ]; then
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
MANAGER="yarn"
|
|
72
|
+
INSTALL_CMD="yarn install --frozen-lockfile"
|
|
73
|
+
BUILD_CMD="yarn run build"
|
|
74
74
|
else
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
75
|
+
MANAGER="npm"
|
|
76
|
+
INSTALL_CMD="npm ci"
|
|
77
|
+
BUILD_CMD="npm run build"
|
|
78
78
|
fi
|
|
79
|
-
echo "
|
|
79
|
+
echo "manager=$MANAGER" >> $GITHUB_OUTPUT
|
|
80
|
+
echo "install_cmd=$INSTALL_CMD" >> $GITHUB_OUTPUT
|
|
81
|
+
echo "build_cmd=$BUILD_CMD" >> $GITHUB_OUTPUT
|
|
82
|
+
echo "Detected package manager: $MANAGER"
|
|
80
83
|
|
|
81
84
|
- name: Setup package manager
|
|
82
85
|
if: steps.pkg-manager.outputs.manager == 'pnpm'
|
package/README.md
CHANGED
|
@@ -24,16 +24,45 @@ pnpm create coreback my-project
|
|
|
24
24
|
|
|
25
25
|
## Features
|
|
26
26
|
|
|
27
|
+
### Core Features
|
|
27
28
|
- 🚀 **Production-ready** - Includes all best practices and security measures
|
|
28
29
|
- 🎯 **Interactive CLI** - Easy setup with guided prompts
|
|
29
30
|
- 🗄️ **Multiple Databases** - PostgreSQL, MySQL, MongoDB, SQLite support
|
|
30
|
-
- 🔐 **JWT Authentication** -
|
|
31
|
+
- 🔐 **JWT Authentication** - Complete authentication system with email verification and password reset
|
|
31
32
|
- 🐳 **Docker Support** - Ready-to-use Docker configuration
|
|
32
33
|
- 📚 **Swagger/OpenAPI** - Auto-generated API documentation
|
|
33
34
|
- 🧪 **Testing Setup** - Jest configured with examples
|
|
34
35
|
- 🔧 **TypeScript** - Strict TypeScript configuration
|
|
35
36
|
- 📦 **Clean Architecture** - Organized folder structure
|
|
36
37
|
|
|
38
|
+
### Optional Features
|
|
39
|
+
- 📤 **File Upload System** - Local storage or AWS S3 integration
|
|
40
|
+
- ⚡ **Redis Cache** - Advanced caching and rate limiting
|
|
41
|
+
- 🔄 **Queue System** - Background jobs with Bull/BullMQ and dashboard
|
|
42
|
+
- 📊 **Queue Dashboard** - Visual interface for monitoring queues
|
|
43
|
+
|
|
44
|
+
### Phase 1: Core Infrastructure
|
|
45
|
+
- 🛠️ **CLI Generators** - Generate controllers, services, repositories, and routes with `make:*` commands
|
|
46
|
+
- 📄 **API Resources/Transformers** - Standardized response formatting
|
|
47
|
+
- 📑 **Pagination Helpers** - Built-in pagination utilities
|
|
48
|
+
- 🌱 **Database Seeders & Factories** - Data seeding and factory patterns
|
|
49
|
+
|
|
50
|
+
### Phase 2: Advanced Features
|
|
51
|
+
- ✅ **DTOs with Validation** - Zod-based Data Transfer Objects
|
|
52
|
+
- 📢 **Events & Listeners** - Event-driven architecture
|
|
53
|
+
- ⏰ **Scheduled Tasks** - Cron jobs with node-cron
|
|
54
|
+
- 🏥 **Advanced Health Checks** - Database and Redis status monitoring
|
|
55
|
+
- ⚠️ **Exception Handling** - Custom error classes and centralized error handling
|
|
56
|
+
- 🛡️ **Guards & Policies** - Role-based access control (RBAC)
|
|
57
|
+
|
|
58
|
+
### Phase 3: Enterprise Features
|
|
59
|
+
- 💉 **Dependency Injection** - Container-based DI system
|
|
60
|
+
- 📦 **Module System** - Modular project architecture
|
|
61
|
+
- ⌨️ **CLI Commands** - Custom CLI commands (`cache:clear`, `queue:work`, etc.)
|
|
62
|
+
- ⚙️ **Config System** - Centralized configuration management
|
|
63
|
+
- 🔢 **API Versioning** - Version management for your API
|
|
64
|
+
- 📝 **Structured Logging** - Multi-channel logging with Winston
|
|
65
|
+
|
|
37
66
|
## Generated Project Structure
|
|
38
67
|
|
|
39
68
|
```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/generators/docker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/generators/docker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAmLf"}
|
|
@@ -29,8 +29,11 @@ services:
|
|
|
29
29
|
- "3000:3000"
|
|
30
30
|
environment:
|
|
31
31
|
- NODE_ENV=production
|
|
32
|
-
- DATABASE_URL=\${DATABASE_URL}
|
|
33
|
-
|
|
32
|
+
- DATABASE_URL=\${DATABASE_URL}${config.includeRedis ? `
|
|
33
|
+
- REDIS_HOST=redis
|
|
34
|
+
- REDIS_PORT=6379` : ''}
|
|
35
|
+
depends_on:${config.includeRedis ? `
|
|
36
|
+
- redis` : ''}
|
|
34
37
|
`;
|
|
35
38
|
switch (config.database) {
|
|
36
39
|
case 'postgresql':
|
|
@@ -51,8 +54,21 @@ services:
|
|
|
51
54
|
networks:
|
|
52
55
|
- backend
|
|
53
56
|
|
|
57
|
+
volumes:
|
|
58
|
+
postgres_data:${config.includeRedis ? `
|
|
59
|
+
|
|
60
|
+
redis:
|
|
61
|
+
image: redis:7-alpine
|
|
62
|
+
ports:
|
|
63
|
+
- "6379:6379"
|
|
64
|
+
volumes:
|
|
65
|
+
- redis_data:/data
|
|
66
|
+
networks:
|
|
67
|
+
- backend
|
|
68
|
+
|
|
54
69
|
volumes:
|
|
55
70
|
postgres_data:
|
|
71
|
+
redis_data:` : ''}
|
|
56
72
|
|
|
57
73
|
networks:
|
|
58
74
|
backend:
|
|
@@ -77,8 +93,21 @@ networks:
|
|
|
77
93
|
networks:
|
|
78
94
|
- backend
|
|
79
95
|
|
|
96
|
+
volumes:
|
|
97
|
+
mysql_data:${config.includeRedis ? `
|
|
98
|
+
|
|
99
|
+
redis:
|
|
100
|
+
image: redis:7-alpine
|
|
101
|
+
ports:
|
|
102
|
+
- "6379:6379"
|
|
103
|
+
volumes:
|
|
104
|
+
- redis_data:/data
|
|
105
|
+
networks:
|
|
106
|
+
- backend
|
|
107
|
+
|
|
80
108
|
volumes:
|
|
81
109
|
mysql_data:
|
|
110
|
+
redis_data:` : ''}
|
|
82
111
|
|
|
83
112
|
networks:
|
|
84
113
|
backend:
|
|
@@ -98,21 +127,49 @@ networks:
|
|
|
98
127
|
networks:
|
|
99
128
|
- backend
|
|
100
129
|
|
|
130
|
+
volumes:
|
|
131
|
+
mongo_data:${config.includeRedis ? `
|
|
132
|
+
|
|
133
|
+
redis:
|
|
134
|
+
image: redis:7-alpine
|
|
135
|
+
ports:
|
|
136
|
+
- "6379:6379"
|
|
137
|
+
volumes:
|
|
138
|
+
- redis_data:/data
|
|
139
|
+
networks:
|
|
140
|
+
- backend
|
|
141
|
+
|
|
101
142
|
volumes:
|
|
102
143
|
mongo_data:
|
|
144
|
+
redis_data:` : ''}
|
|
103
145
|
|
|
104
146
|
networks:
|
|
105
147
|
backend:
|
|
106
148
|
`;
|
|
107
149
|
break;
|
|
108
150
|
default:
|
|
109
|
-
dockerCompose += ` -
|
|
151
|
+
dockerCompose += `${config.includeRedis ? ` - redis
|
|
152
|
+
` : ''} networks:
|
|
153
|
+
- backend
|
|
154
|
+
${config.includeRedis ? `
|
|
155
|
+
redis:
|
|
156
|
+
image: redis:7-alpine
|
|
157
|
+
ports:
|
|
158
|
+
- "6379:6379"
|
|
159
|
+
volumes:
|
|
160
|
+
- redis_data:/data
|
|
110
161
|
networks:
|
|
111
162
|
- backend
|
|
112
163
|
|
|
164
|
+
volumes:
|
|
165
|
+
redis_data:
|
|
166
|
+
|
|
113
167
|
networks:
|
|
114
168
|
backend:
|
|
115
|
-
|
|
169
|
+
` : `
|
|
170
|
+
networks:
|
|
171
|
+
backend:
|
|
172
|
+
`}`;
|
|
116
173
|
}
|
|
117
174
|
await fs.writeFile(path.join(projectPath, 'docker-compose.yml'), dockerCompose);
|
|
118
175
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/generators/docker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAmB,EACnB,MAAqB;IAErB,aAAa;IACb,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;CAepB,CAAC;IAEA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,UAAU,CAAC,CAAC;IAErE,qBAAqB;IACrB,IAAI,aAAa,GAAG
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/generators/docker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAmB,EACnB,MAAqB;IAErB,aAAa;IACb,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;CAepB,CAAC;IAEA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,UAAU,CAAC,CAAC;IAErE,qBAAqB;IACrB,IAAI,aAAa,GAAG;;;;;;;;;uCASiB,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;;wBAErC,CAAC,CAAC,CAAC,EAAE;iBACZ,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;cACzB,CAAC,CAAC,CAAC,EAAE;CAClB,CAAC;IAEA,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,YAAY;YACf,aAAa,IAAI;;;;;;;;;;;;;;;;;;kBAkBL,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;;;;;;;;;;;;;cAa1B,CAAC,CAAC,CAAC,EAAE;;;;CAIlB,CAAC;YACI,MAAM;QACR,KAAK,OAAO;YACV,aAAa,IAAI;;;;;;;;;;;;;;;;;;;eAmBR,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;;;;;;;;;;;;;cAavB,CAAC,CAAC,CAAC,EAAE;;;;CAIlB,CAAC;YACI,MAAM;QACR,KAAK,SAAS;YACZ,aAAa,IAAI;;;;;;;;;;;;;;eAcR,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;;;;;;;;;;;;;cAavB,CAAC,CAAC,CAAC,EAAE;;;;CAIlB,CAAC;YACI,MAAM;QACR;YACE,aAAa,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;CAC/C,CAAC,CAAC,CAAC,EAAE;;EAEJ,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;CAevB,CAAC,CAAC,CAAC;;;CAGH,EAAE,CAAC;IACF,CAAC;IAED,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,EAC5C,aAAa,CACd,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envExample.d.ts","sourceRoot":"","sources":["../../src/generators/envExample.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"envExample.d.ts","sourceRoot":"","sources":["../../src/generators/envExample.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CA6Ef"}
|
|
@@ -43,6 +43,32 @@ APP_URL=http://localhost:3000
|
|
|
43
43
|
RATE_LIMIT_WINDOW_MS=900000
|
|
44
44
|
RATE_LIMIT_MAX=100
|
|
45
45
|
`;
|
|
46
|
+
if (config.includeFileUpload) {
|
|
47
|
+
envContent += `
|
|
48
|
+
# File Upload
|
|
49
|
+
MAX_FILE_SIZE=5242880
|
|
50
|
+
ALLOWED_FILE_TYPES=image/jpeg,image/png,image/gif,application/pdf
|
|
51
|
+
UPLOAD_DIR=uploads
|
|
52
|
+
`;
|
|
53
|
+
if (config.fileStorage === 's3') {
|
|
54
|
+
envContent += `
|
|
55
|
+
# AWS S3 (if using S3 storage)
|
|
56
|
+
AWS_REGION=us-east-1
|
|
57
|
+
AWS_ACCESS_KEY_ID=your-access-key-id
|
|
58
|
+
AWS_SECRET_ACCESS_KEY=your-secret-access-key
|
|
59
|
+
AWS_S3_BUCKET=your-bucket-name
|
|
60
|
+
`;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (config.includeRedis) {
|
|
64
|
+
envContent += `
|
|
65
|
+
# Redis
|
|
66
|
+
REDIS_HOST=localhost
|
|
67
|
+
REDIS_PORT=6379
|
|
68
|
+
REDIS_PASSWORD=
|
|
69
|
+
REDIS_DB=0
|
|
70
|
+
`;
|
|
71
|
+
}
|
|
46
72
|
await fs.writeFile(path.join(projectPath, '.env.example'), envContent);
|
|
47
73
|
}
|
|
48
74
|
//# sourceMappingURL=envExample.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envExample.js","sourceRoot":"","sources":["../../src/generators/envExample.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAAmB,EACnB,MAAqB;IAErB,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,YAAY;YACf,WAAW,GAAG,gDAAgD,CAAC;YAC/D,MAAM;QACR,KAAK,OAAO;YACV,WAAW,GAAG,2CAA2C,CAAC;YAC1D,MAAM;QACR,KAAK,SAAS;YACZ,WAAW,GAAG,gCAAgC,CAAC;YAC/C,MAAM;QACR,KAAK,QAAQ;YACX,WAAW,GAAG,eAAe,CAAC;YAC9B,MAAM;IACV,CAAC;IAED,IAAI,UAAU,GAAG;;;;gBAIH,WAAW;CAC1B,CAAC;IAEA,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,UAAU,IAAI;;;;;;;;;;;;;CAajB,CAAC;IACA,CAAC;IAED,UAAU,IAAI;;;;CAIf,CAAC;IAEA,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,UAAU,CAAC,CAAC;AACzE,CAAC"}
|
|
1
|
+
{"version":3,"file":"envExample.js","sourceRoot":"","sources":["../../src/generators/envExample.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAAmB,EACnB,MAAqB;IAErB,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,YAAY;YACf,WAAW,GAAG,gDAAgD,CAAC;YAC/D,MAAM;QACR,KAAK,OAAO;YACV,WAAW,GAAG,2CAA2C,CAAC;YAC1D,MAAM;QACR,KAAK,SAAS;YACZ,WAAW,GAAG,gCAAgC,CAAC;YAC/C,MAAM;QACR,KAAK,QAAQ;YACX,WAAW,GAAG,eAAe,CAAC;YAC9B,MAAM;IACV,CAAC;IAED,IAAI,UAAU,GAAG;;;;gBAIH,WAAW;CAC1B,CAAC;IAEA,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,UAAU,IAAI;;;;;;;;;;;;;CAajB,CAAC;IACA,CAAC;IAED,UAAU,IAAI;;;;CAIf,CAAC;IAEA,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC7B,UAAU,IAAI;;;;;CAKjB,CAAC;QACE,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAChC,UAAU,IAAI;;;;;;CAMnB,CAAC;QACE,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,UAAU,IAAI;;;;;;CAMjB,CAAC;IACA,CAAC;IAED,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,UAAU,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eslint.d.ts","sourceRoot":"","sources":["../../src/generators/eslint.ts"],"names":[],"mappings":"AAGA,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"eslint.d.ts","sourceRoot":"","sources":["../../src/generators/eslint.ts"],"names":[],"mappings":"AAGA,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B7E"}
|
|
@@ -1,32 +1,30 @@
|
|
|
1
1
|
import fs from 'fs-extra';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
export async function generateEslintConfig(projectPath) {
|
|
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
|
-
await fs.writeJSON(path.join(projectPath, '.eslintrc.json'), eslintConfig, { spaces: 2 });
|
|
4
|
+
// ESLint 9 uses flat config format
|
|
5
|
+
const eslintConfig = `import js from '@eslint/js';
|
|
6
|
+
import tseslint from 'typescript-eslint';
|
|
7
|
+
|
|
8
|
+
export default tseslint.config(
|
|
9
|
+
js.configs.recommended,
|
|
10
|
+
...tseslint.configs.recommended,
|
|
11
|
+
{
|
|
12
|
+
languageOptions: {
|
|
13
|
+
ecmaVersion: 2022,
|
|
14
|
+
sourceType: 'module',
|
|
15
|
+
parserOptions: {
|
|
16
|
+
project: './tsconfig.json',
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
rules: {
|
|
20
|
+
'@typescript-eslint/no-explicit-any': 'warn',
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
ignores: ['dist', 'node_modules', '*.js'],
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
`;
|
|
28
|
+
await fs.writeFile(path.join(projectPath, 'eslint.config.js'), eslintConfig);
|
|
31
29
|
}
|
|
32
30
|
//# sourceMappingURL=eslint.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eslint.js","sourceRoot":"","sources":["../../src/generators/eslint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,WAAmB;IAC5D,
|
|
1
|
+
{"version":3,"file":"eslint.js","sourceRoot":"","sources":["../../src/generators/eslint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,WAAmB;IAC5D,mCAAmC;IACnC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsBtB,CAAC;IAEA,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,EAC1C,YAAY,CACb,CAAC;AACJ,CAAC"}
|
package/dist/generators/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import { generatePrettierConfig } from './prettier.js';
|
|
|
7
7
|
import { generateJestConfig } from './jest.js';
|
|
8
8
|
import { generateDockerFiles } from './docker.js';
|
|
9
9
|
import { generatePrismaSchema } from './prisma.js';
|
|
10
|
-
import { generateSourceFiles } from './sourceFiles.js';
|
|
10
|
+
import { generateSourceFiles } from './sourceFiles/index.js';
|
|
11
11
|
import { generateGitHubActions } from './githubActions.js';
|
|
12
12
|
import { generateCursorRules } from './cursorRules.js';
|
|
13
13
|
export async function generateProjectFiles(projectPath, config) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAIvD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,WAAmB,EACnB,MAAqB;IAErB,aAAa;IACb,MAAM,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACpC,MAAM,kBAAkB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACrC,MAAM,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACxC,MAAM,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACtC,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAEvC,SAAS;IACT,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,MAAM,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,SAAS;IACT,MAAM,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAEhD,eAAe;IACf,MAAM,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAE/C,iBAAiB;IACjB,MAAM,qBAAqB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageJson.d.ts","sourceRoot":"","sources":["../../src/generators/packageJson.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"packageJson.d.ts","sourceRoot":"","sources":["../../src/generators/packageJson.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAyHf"}
|
|
@@ -19,6 +19,25 @@ export async function generatePackageJson(projectPath, config) {
|
|
|
19
19
|
dependencies['bcrypt'] = '^5.1.1';
|
|
20
20
|
dependencies['nodemailer'] = '^6.9.8';
|
|
21
21
|
}
|
|
22
|
+
if (config.includeFileUpload) {
|
|
23
|
+
dependencies['multer'] = '^1.4.5-lts.1';
|
|
24
|
+
if (config.fileStorage === 's3') {
|
|
25
|
+
dependencies['@aws-sdk/client-s3'] = '^3.700.0';
|
|
26
|
+
dependencies['multer-s3'] = '^3.0.1';
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (config.includeRedis) {
|
|
30
|
+
dependencies['ioredis'] = '^5.4.1';
|
|
31
|
+
if (config.includeQueue) {
|
|
32
|
+
dependencies['bull'] = '^4.12.9';
|
|
33
|
+
dependencies['@bull-board/api'] = '^5.18.0';
|
|
34
|
+
dependencies['@bull-board/express'] = '^5.18.0';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Add node-cron for scheduled tasks
|
|
38
|
+
dependencies['node-cron'] = '^3.0.3';
|
|
39
|
+
// Add commander for CLI commands
|
|
40
|
+
dependencies['commander'] = '^12.1.0';
|
|
22
41
|
const devDependencies = {
|
|
23
42
|
'@types/express': '^4.17.25',
|
|
24
43
|
'@types/cors': '^2.8.19',
|
|
@@ -27,13 +46,16 @@ export async function generatePackageJson(projectPath, config) {
|
|
|
27
46
|
'@types/jsonwebtoken': '^9.0.10',
|
|
28
47
|
'@types/bcrypt': '^5.0.2',
|
|
29
48
|
'@types/nodemailer': '^6.4.14',
|
|
49
|
+
'@types/multer': '^1.4.12',
|
|
50
|
+
'@types/node-cron': '^3.0.11',
|
|
51
|
+
'@types/commander': '^2.15.2',
|
|
30
52
|
'@types/swagger-jsdoc': '^6.0.4',
|
|
31
53
|
'@types/swagger-ui-express': '^4.1.8',
|
|
32
54
|
'@types/jest': '^29.5.14',
|
|
33
55
|
'@types/supertest': '^6.0.3',
|
|
34
|
-
'
|
|
35
|
-
'@
|
|
36
|
-
eslint: '^
|
|
56
|
+
'typescript-eslint': '^8.50.1',
|
|
57
|
+
'@eslint/js': '^9.39.2',
|
|
58
|
+
eslint: '^9.39.2',
|
|
37
59
|
prettier: '^3.7.4',
|
|
38
60
|
'ts-jest': '^29.4.6',
|
|
39
61
|
jest: '^30.2.0',
|
|
@@ -47,12 +69,15 @@ export async function generatePackageJson(projectPath, config) {
|
|
|
47
69
|
version: '1.0.0',
|
|
48
70
|
description: 'Production-ready backend API',
|
|
49
71
|
main: 'dist/index.js',
|
|
72
|
+
prisma: {
|
|
73
|
+
seed: 'tsx prisma/seed.ts',
|
|
74
|
+
},
|
|
50
75
|
scripts: {
|
|
51
76
|
dev: 'tsx watch src/index.ts',
|
|
52
77
|
build: 'tsc',
|
|
53
78
|
start: 'node dist/index.js',
|
|
54
|
-
lint: 'eslint src
|
|
55
|
-
'lint:fix': 'eslint src --
|
|
79
|
+
lint: 'eslint src',
|
|
80
|
+
'lint:fix': 'eslint src --fix',
|
|
56
81
|
format: 'prettier --write "src/**/*.ts"',
|
|
57
82
|
test: 'jest',
|
|
58
83
|
'test:watch': 'jest --watch',
|
|
@@ -61,6 +86,17 @@ export async function generatePackageJson(projectPath, config) {
|
|
|
61
86
|
'db:migrate': 'prisma migrate dev',
|
|
62
87
|
'db:studio': 'prisma studio',
|
|
63
88
|
'db:generate': 'prisma generate',
|
|
89
|
+
'db:seed': 'tsx prisma/seed.ts',
|
|
90
|
+
'make:controller': 'tsx scripts/make.ts controller',
|
|
91
|
+
'make:service': 'tsx scripts/make.ts service',
|
|
92
|
+
'make:repository': 'tsx scripts/make.ts repository',
|
|
93
|
+
'make:route': 'tsx scripts/make.ts route',
|
|
94
|
+
'cli': 'tsx scripts/commands/index.ts',
|
|
95
|
+
'cache:clear': 'tsx scripts/commands/index.ts cache:clear',
|
|
96
|
+
'queue:work': 'tsx scripts/commands/index.ts queue:work',
|
|
97
|
+
...(config.includeQueue && {
|
|
98
|
+
'queue:dashboard': 'tsx src/queue/dashboard.ts',
|
|
99
|
+
}),
|
|
64
100
|
...(config.includeDocker && {
|
|
65
101
|
'docker:up': 'docker-compose up -d',
|
|
66
102
|
'docker:down': 'docker-compose down',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageJson.js","sourceRoot":"","sources":["../../src/generators/packageJson.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAmB,EACnB,MAAqB;IAErB,MAAM,YAAY,GAA2B;QAC3C,OAAO,EAAE,SAAS;QAClB,oBAAoB,EAAE,QAAQ;QAC9B,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,QAAQ;QACrB,MAAM,EAAE,SAAS;QACjB,GAAG,EAAE,UAAU;QACf,OAAO,EAAE,SAAS;QAClB,gBAAgB,EAAE,SAAS;QAC3B,eAAe,EAAE,QAAQ;QACzB,oBAAoB,EAAE,QAAQ;KAC/B,CAAC;IAEF,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,YAAY,CAAC,cAAc,CAAC,GAAG,QAAQ,CAAC;QACxC,YAAY,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;QAClC,YAAY,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC;IACxC,CAAC;IAED,MAAM,eAAe,GAA2B;QAC9C,gBAAgB,EAAE,UAAU;QAC5B,aAAa,EAAE,SAAS;QACxB,oBAAoB,EAAE,QAAQ;QAC9B,aAAa,EAAE,WAAW;QAC1B,qBAAqB,EAAE,SAAS;QAChC,eAAe,EAAE,QAAQ;QACzB,mBAAmB,EAAE,SAAS;QAC9B,sBAAsB,EAAE,QAAQ;QAChC,2BAA2B,EAAE,QAAQ;QACrC,aAAa,EAAE,UAAU;QACzB,kBAAkB,EAAE,QAAQ;QAC5B,
|
|
1
|
+
{"version":3,"file":"packageJson.js","sourceRoot":"","sources":["../../src/generators/packageJson.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/generators/sourceFiles/controllers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIlD,wBAAsB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAwJtG"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
export async function generateControllers(controllersDir, config) {
|
|
4
|
+
// health.controller.ts
|
|
5
|
+
const healthControllerContent = `import { Request, Response } from 'express';
|
|
6
|
+
|
|
7
|
+
export const healthController = {
|
|
8
|
+
check: (_req: Request, res: Response) => {
|
|
9
|
+
res.json({
|
|
10
|
+
status: 'ok',
|
|
11
|
+
timestamp: new Date().toISOString(),
|
|
12
|
+
});
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
`;
|
|
16
|
+
await fs.writeFile(path.join(controllersDir, 'health.controller.ts'), healthControllerContent);
|
|
17
|
+
if (config.includeAuth) {
|
|
18
|
+
// auth.controller.ts
|
|
19
|
+
const authControllerContent = `import { Response } from 'express';
|
|
20
|
+
import { AuthRequest } from '../middlewares/auth.js';
|
|
21
|
+
import { authService } from '../services/auth.service.js';
|
|
22
|
+
import { AppError } from '../middlewares/errorHandler.js';
|
|
23
|
+
|
|
24
|
+
export const authController = {
|
|
25
|
+
register: async (req: AuthRequest, res: Response) => {
|
|
26
|
+
try {
|
|
27
|
+
const { email, password, name } = req.body;
|
|
28
|
+
const user = await authService.register(email, password, name);
|
|
29
|
+
res.status(201).json({
|
|
30
|
+
status: 'success',
|
|
31
|
+
data: user,
|
|
32
|
+
});
|
|
33
|
+
} catch (error) {
|
|
34
|
+
if (error instanceof AppError) {
|
|
35
|
+
throw error;
|
|
36
|
+
}
|
|
37
|
+
throw new AppError(500, 'Failed to register user');
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
login: async (req: AuthRequest, res: Response) => {
|
|
42
|
+
try {
|
|
43
|
+
const { email, password } = req.body;
|
|
44
|
+
const result = await authService.login(email, password);
|
|
45
|
+
res.json({
|
|
46
|
+
status: 'success',
|
|
47
|
+
data: result,
|
|
48
|
+
});
|
|
49
|
+
} catch (error) {
|
|
50
|
+
if (error instanceof AppError) {
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
throw new AppError(500, 'Failed to login');
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
me: async (req: AuthRequest, res: Response) => {
|
|
58
|
+
try {
|
|
59
|
+
const user = await authService.getUserById(req.user!.id);
|
|
60
|
+
res.json({
|
|
61
|
+
status: 'success',
|
|
62
|
+
data: user,
|
|
63
|
+
});
|
|
64
|
+
} catch (error) {
|
|
65
|
+
if (error instanceof AppError) {
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
throw new AppError(500, 'Failed to get user');
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
|
|
72
|
+
verifyEmail: async (req: AuthRequest, res: Response) => {
|
|
73
|
+
try {
|
|
74
|
+
const { token } = req.query;
|
|
75
|
+
if (!token || typeof token !== 'string') {
|
|
76
|
+
throw new AppError(400, 'Verification token is required');
|
|
77
|
+
}
|
|
78
|
+
const result = await authService.verifyEmail(token);
|
|
79
|
+
res.json({
|
|
80
|
+
status: 'success',
|
|
81
|
+
data: result,
|
|
82
|
+
});
|
|
83
|
+
} catch (error) {
|
|
84
|
+
if (error instanceof AppError) {
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
throw new AppError(500, 'Failed to verify email');
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
resendVerification: async (req: AuthRequest, res: Response) => {
|
|
92
|
+
try {
|
|
93
|
+
const { email } = req.body;
|
|
94
|
+
const result = await authService.resendVerificationEmail(email);
|
|
95
|
+
res.json({
|
|
96
|
+
status: 'success',
|
|
97
|
+
data: result,
|
|
98
|
+
});
|
|
99
|
+
} catch (error) {
|
|
100
|
+
if (error instanceof AppError) {
|
|
101
|
+
throw error;
|
|
102
|
+
}
|
|
103
|
+
throw new AppError(500, 'Failed to resend verification email');
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
|
|
107
|
+
forgotPassword: async (req: AuthRequest, res: Response) => {
|
|
108
|
+
try {
|
|
109
|
+
const { email } = req.body;
|
|
110
|
+
const result = await authService.requestPasswordReset(email);
|
|
111
|
+
res.json({
|
|
112
|
+
status: 'success',
|
|
113
|
+
data: result,
|
|
114
|
+
});
|
|
115
|
+
} catch (error) {
|
|
116
|
+
if (error instanceof AppError) {
|
|
117
|
+
throw error;
|
|
118
|
+
}
|
|
119
|
+
throw new AppError(500, 'Failed to send password reset email');
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
|
|
123
|
+
resetPassword: async (req: AuthRequest, res: Response) => {
|
|
124
|
+
try {
|
|
125
|
+
const { token } = req.query;
|
|
126
|
+
const { password } = req.body;
|
|
127
|
+
if (!token || typeof token !== 'string') {
|
|
128
|
+
throw new AppError(400, 'Reset token is required');
|
|
129
|
+
}
|
|
130
|
+
const result = await authService.resetPassword(token, password);
|
|
131
|
+
res.json({
|
|
132
|
+
status: 'success',
|
|
133
|
+
data: result,
|
|
134
|
+
});
|
|
135
|
+
} catch (error) {
|
|
136
|
+
if (error instanceof AppError) {
|
|
137
|
+
throw error;
|
|
138
|
+
}
|
|
139
|
+
throw new AppError(500, 'Failed to reset password');
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
`;
|
|
144
|
+
await fs.writeFile(path.join(controllersDir, 'auth.controller.ts'), authControllerContent);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/generators/sourceFiles/controllers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,cAAsB,EAAE,MAAqB;IACrF,uBAAuB;IACvB,MAAM,uBAAuB,GAAG;;;;;;;;;;CAUjC,CAAC;IAEA,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,sBAAsB,CAAC,EACjD,uBAAuB,CACxB,CAAC;IAEF,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,qBAAqB;QACrB,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4HjC,CAAC;QAEE,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,oBAAoB,CAAC,EAC/C,qBAAqB,CACtB,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configFiles.d.ts","sourceRoot":"","sources":["../../../../src/generators/sourceFiles/core/configFiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIlD,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAyJjG"}
|