katax-cli 1.0.0 → 1.1.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 +241 -29
- package/dist/commands/add-endpoint.d.ts +1 -0
- package/dist/commands/add-endpoint.d.ts.map +1 -0
- package/dist/commands/add-endpoint.js +18 -39
- package/dist/commands/add-endpoint.js.map +1 -0
- package/dist/commands/deploy.d.ts +14 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +416 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/generate-crud.d.ts +1 -0
- package/dist/commands/generate-crud.d.ts.map +1 -0
- package/dist/commands/generate-crud.js +1 -8
- package/dist/commands/generate-crud.js.map +1 -0
- package/dist/commands/generate-crud.refactored.d.ts +6 -0
- package/dist/commands/generate-crud.refactored.d.ts.map +1 -0
- package/dist/commands/generate-crud.refactored.js +139 -0
- package/dist/commands/generate-crud.refactored.js.map +1 -0
- package/dist/commands/info.d.ts +1 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +1 -5
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +9 -40
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/init.refactored.d.ts +6 -0
- package/dist/commands/init.refactored.d.ts.map +1 -0
- package/dist/commands/init.refactored.js +224 -0
- package/dist/commands/init.refactored.js.map +1 -0
- package/dist/core/errors.d.ts +77 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +130 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/result.d.ts +26 -0
- package/dist/core/result.d.ts.map +1 -0
- package/dist/core/result.js +76 -0
- package/dist/core/result.js.map +1 -0
- package/dist/generators/controller-generator.d.ts +1 -0
- package/dist/generators/controller-generator.d.ts.map +1 -0
- package/dist/generators/controller-generator.js +1 -2
- package/dist/generators/controller-generator.js.map +1 -0
- package/dist/generators/handler-generator.d.ts +1 -0
- package/dist/generators/handler-generator.d.ts.map +1 -0
- package/dist/generators/handler-generator.js +35 -22
- package/dist/generators/handler-generator.js.map +1 -0
- package/dist/generators/route-generator.d.ts +1 -0
- package/dist/generators/route-generator.d.ts.map +1 -0
- package/dist/generators/route-generator.js +1 -2
- package/dist/generators/route-generator.js.map +1 -0
- package/dist/generators/router-updater.d.ts +1 -0
- package/dist/generators/router-updater.d.ts.map +1 -0
- package/dist/generators/router-updater.js +1 -6
- package/dist/generators/router-updater.js.map +1 -0
- package/dist/generators/validator-generator.d.ts +1 -0
- package/dist/generators/validator-generator.d.ts.map +1 -0
- package/dist/generators/validator-generator.improved.d.ts +3 -0
- package/dist/generators/validator-generator.improved.d.ts.map +1 -0
- package/dist/generators/validator-generator.improved.js +184 -0
- package/dist/generators/validator-generator.improved.js.map +1 -0
- package/dist/generators/validator-generator.js +1 -10
- package/dist/generators/validator-generator.js.map +1 -0
- package/dist/index.d.ts +1 -6
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -19
- package/dist/index.js.map +1 -0
- package/dist/services/ast-router-updater.d.ts +16 -0
- package/dist/services/ast-router-updater.d.ts.map +1 -0
- package/dist/services/ast-router-updater.js +130 -0
- package/dist/services/ast-router-updater.js.map +1 -0
- package/dist/services/code-generation.service.d.ts +15 -0
- package/dist/services/code-generation.service.d.ts.map +1 -0
- package/dist/services/code-generation.service.js +110 -0
- package/dist/services/code-generation.service.js.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +4 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/project-structure-generator.d.ts +30 -0
- package/dist/services/project-structure-generator.d.ts.map +1 -0
- package/dist/services/project-structure-generator.js +884 -0
- package/dist/services/project-structure-generator.js.map +1 -0
- package/dist/templates/base/code-builder.d.ts +34 -0
- package/dist/templates/base/code-builder.d.ts.map +1 -0
- package/dist/templates/base/code-builder.js +154 -0
- package/dist/templates/base/code-builder.js.map +1 -0
- package/dist/templates/base/template-engine.d.ts +28 -0
- package/dist/templates/base/template-engine.d.ts.map +1 -0
- package/dist/templates/base/template-engine.js +47 -0
- package/dist/templates/base/template-engine.js.map +1 -0
- package/dist/templates/generators/controller-template.d.ts +15 -0
- package/dist/templates/generators/controller-template.d.ts.map +1 -0
- package/dist/templates/generators/controller-template.js +185 -0
- package/dist/templates/generators/controller-template.js.map +1 -0
- package/dist/templates/generators/di-container.d.ts +6 -0
- package/dist/templates/generators/di-container.d.ts.map +1 -0
- package/dist/templates/generators/di-container.js +121 -0
- package/dist/templates/generators/di-container.js.map +1 -0
- package/dist/templates/generators/handler-template.d.ts +15 -0
- package/dist/templates/generators/handler-template.d.ts.map +1 -0
- package/dist/templates/generators/handler-template.js +208 -0
- package/dist/templates/generators/handler-template.js.map +1 -0
- package/dist/templates/generators/repository-template.d.ts +23 -0
- package/dist/templates/generators/repository-template.d.ts.map +1 -0
- package/dist/templates/generators/repository-template.js +237 -0
- package/dist/templates/generators/repository-template.js.map +1 -0
- package/dist/templates/generators/response-utils-template.d.ts +2 -0
- package/dist/templates/generators/response-utils-template.d.ts.map +1 -0
- package/dist/templates/generators/response-utils-template.js +112 -0
- package/dist/templates/generators/response-utils-template.js.map +1 -0
- package/dist/templates/generators/test-generator.d.ts +11 -0
- package/dist/templates/generators/test-generator.d.ts.map +1 -0
- package/dist/templates/generators/test-generator.js +206 -0
- package/dist/templates/generators/test-generator.js.map +1 -0
- package/dist/templates/index.d.ts +8 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +8 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/file-utils.d.ts +1 -30
- package/dist/utils/file-utils.d.ts.map +1 -0
- package/dist/utils/file-utils.js +1 -32
- package/dist/utils/file-utils.js.map +1 -0
- package/dist/utils/logger.d.ts +1 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +1 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +1 -1
- package/dist/database/mongodb.ts +0 -46
- package/dist/database/mysql.ts +0 -26
- package/dist/database/postgresql.ts +0 -52
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Katax CLI
|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/katax-cli)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
|
|
6
6
|
🚀 CLI tool to generate Express REST APIs with TypeScript and [katax-core](https://github.com/LOPIN6FARRIER/katax-core) validation.
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
- 🔧 **Code Generation** - Generate endpoints, CRUD operations, and routes
|
|
13
13
|
- 📦 **Database Support** - PostgreSQL, MySQL, MongoDB, or none
|
|
14
14
|
- 🔐 **JWT Authentication** - Optional JWT auth scaffolding
|
|
15
|
+
- 🚀 **PM2 Deployment** - Deploy to Ubuntu VPS with PM2 integration
|
|
15
16
|
- 📝 **TypeScript First** - Full type safety and IntelliSense support
|
|
16
17
|
- 🎨 **Interactive CLI** - Beautiful prompts and feedback
|
|
17
18
|
|
|
@@ -19,10 +20,10 @@
|
|
|
19
20
|
|
|
20
21
|
```bash
|
|
21
22
|
# Global installation
|
|
22
|
-
npm install -g
|
|
23
|
+
npm install -g katax-cli
|
|
23
24
|
|
|
24
25
|
# Or use with npx (no installation needed)
|
|
25
|
-
npx
|
|
26
|
+
npx katax-cli init my-api
|
|
26
27
|
```
|
|
27
28
|
|
|
28
29
|
## 🚀 Quick Start
|
|
@@ -54,50 +55,261 @@ Interactive prompts will guide you through:
|
|
|
54
55
|
- Request fields and validation rules
|
|
55
56
|
- Async validators (unique checks, etc.)
|
|
56
57
|
|
|
57
|
-
|
|
58
|
-
|
|
58
|
+
This generates:
|
|
59
|
+
- `users.validator.ts` - katax-core validation schemas
|
|
60
|
+
- `users.controller.ts` - Business logic
|
|
61
|
+
- `users.handler.ts` - Express handlers with sendResponse
|
|
62
|
+
- `users.routes.ts` - Express routes
|
|
63
|
+
- Updates main router automatically
|
|
59
64
|
|
|
60
|
-
|
|
65
|
+
### 3. Generate CRUD Resource
|
|
61
66
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
- 📝 **TypeScript First** - Full type safety and IntelliSense support
|
|
66
|
-
- 🎨 **Interactive CLI** - Beautiful prompts and feedback
|
|
67
|
+
```bash
|
|
68
|
+
katax generate crud products
|
|
69
|
+
```
|
|
67
70
|
|
|
68
|
-
|
|
71
|
+
Creates a complete CRUD API with 5 endpoints:
|
|
72
|
+
- `GET /api/products` - List all
|
|
73
|
+
- `GET /api/products/:id` - Get one
|
|
74
|
+
- `POST /api/products` - Create
|
|
75
|
+
- `PUT /api/products/:id` - Update
|
|
76
|
+
- `DELETE /api/products/:id` - Delete
|
|
77
|
+
|
|
78
|
+
### 4. Deploy to Ubuntu VPS with PM2
|
|
69
79
|
|
|
70
80
|
```bash
|
|
71
|
-
#
|
|
72
|
-
|
|
81
|
+
# On your Ubuntu VPS
|
|
82
|
+
katax deploy init
|
|
73
83
|
|
|
74
|
-
#
|
|
75
|
-
|
|
84
|
+
# When you have updates
|
|
85
|
+
katax deploy update
|
|
86
|
+
|
|
87
|
+
# Monitor your app
|
|
88
|
+
katax deploy status
|
|
89
|
+
katax deploy logs -f
|
|
76
90
|
```
|
|
77
91
|
|
|
78
|
-
|
|
92
|
+
See [DEPLOY_GUIDE.md](./DEPLOY_GUIDE.md) for complete deployment documentation.
|
|
79
93
|
|
|
80
|
-
|
|
94
|
+
## 📖 Commands
|
|
81
95
|
|
|
96
|
+
### `katax init [project-name]`
|
|
97
|
+
|
|
98
|
+
Initialize a new Express API project.
|
|
99
|
+
|
|
100
|
+
**Options:**
|
|
101
|
+
- `-f, --force` - Overwrite existing directory
|
|
102
|
+
|
|
103
|
+
**Example:**
|
|
82
104
|
```bash
|
|
83
|
-
katax init my-api
|
|
105
|
+
katax init my-awesome-api
|
|
84
106
|
```
|
|
85
107
|
|
|
86
|
-
|
|
87
|
-
- Create project structure
|
|
88
|
-
- Setup TypeScript + Express
|
|
89
|
-
- Install dependencies
|
|
90
|
-
- Configure katax-core validation
|
|
91
|
-
- Add database connection (optional)
|
|
92
|
-
- Setup JWT authentication (optional)
|
|
108
|
+
### `katax add endpoint <name>`
|
|
93
109
|
|
|
94
|
-
|
|
110
|
+
Add a new endpoint with validation.
|
|
111
|
+
|
|
112
|
+
**Options:**
|
|
113
|
+
- `-m, --method <method>` - HTTP method (GET, POST, PUT, DELETE)
|
|
114
|
+
- `-p, --path <path>` - Route path
|
|
95
115
|
|
|
116
|
+
**Example:**
|
|
96
117
|
```bash
|
|
97
|
-
|
|
98
|
-
|
|
118
|
+
katax add endpoint users -m POST -p /api/users
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### `katax generate crud <resource-name>`
|
|
122
|
+
|
|
123
|
+
Generate a complete CRUD resource.
|
|
124
|
+
|
|
125
|
+
**Options:**
|
|
126
|
+
- `--no-auth` - Skip authentication middleware
|
|
127
|
+
|
|
128
|
+
**Example:**
|
|
129
|
+
```bash
|
|
130
|
+
katax generate crud products
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### `katax info`
|
|
134
|
+
|
|
135
|
+
Show current project structure and routes.
|
|
136
|
+
|
|
137
|
+
**Aliases:** `status`, `ls`
|
|
138
|
+
|
|
139
|
+
**Example:**
|
|
140
|
+
```bash
|
|
141
|
+
katax info
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### `katax deploy init`
|
|
145
|
+
|
|
146
|
+
Initial deployment to Ubuntu VPS - Clone repo and setup PM2.
|
|
147
|
+
|
|
148
|
+
**Example:**
|
|
149
|
+
```bash
|
|
150
|
+
katax deploy init
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### `katax deploy update`
|
|
154
|
+
|
|
155
|
+
Update existing deployment - Pull changes and restart.
|
|
156
|
+
|
|
157
|
+
**Options:**
|
|
158
|
+
- `-b, --branch <branch>` - Branch to deploy
|
|
159
|
+
- `--hard` - Hard reset (discard local changes)
|
|
160
|
+
|
|
161
|
+
**Example:**
|
|
162
|
+
```bash
|
|
163
|
+
katax deploy update --hard
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### `katax deploy rollback`
|
|
167
|
+
|
|
168
|
+
Rollback to previous version.
|
|
169
|
+
|
|
170
|
+
**Options:**
|
|
171
|
+
- `-c, --commits <number>` - Number of commits to rollback
|
|
172
|
+
|
|
173
|
+
**Example:**
|
|
174
|
+
```bash
|
|
175
|
+
katax deploy rollback -c 2
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### `katax deploy logs`
|
|
179
|
+
|
|
180
|
+
View PM2 application logs.
|
|
181
|
+
|
|
182
|
+
**Options:**
|
|
183
|
+
- `-l, --lines <number>` - Number of lines to display
|
|
184
|
+
- `-f, --follow` - Follow log output
|
|
185
|
+
|
|
186
|
+
**Example:**
|
|
187
|
+
```bash
|
|
188
|
+
katax deploy logs -f
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### `katax deploy status`
|
|
192
|
+
|
|
193
|
+
Show PM2 applications status.
|
|
194
|
+
|
|
195
|
+
**Example:**
|
|
196
|
+
```bash
|
|
197
|
+
katax deploy status
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## 🎯 Generated Code Example
|
|
201
|
+
|
|
202
|
+
When you run `katax add endpoint users`, it generates:
|
|
203
|
+
|
|
204
|
+
**users.validator.ts:**
|
|
205
|
+
```typescript
|
|
206
|
+
import { k, kataxInfer } from 'katax-core';
|
|
207
|
+
|
|
208
|
+
export const userSchema = k.object({
|
|
209
|
+
username: k.string()
|
|
210
|
+
.minLength(3, 'Username must be at least 3 characters')
|
|
211
|
+
.maxLength(50, 'Username cannot exceed 50 characters'),
|
|
212
|
+
email: k.string().email('Must be a valid email'),
|
|
213
|
+
age: k.number().min(0, 'Age must be positive').optional()
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
export type UserData = kataxInfer<typeof userSchema>;
|
|
217
|
+
|
|
218
|
+
export async function validateUser(data: unknown) {
|
|
219
|
+
return await userSchema.safeParse(data);
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
**users.handler.ts:**
|
|
224
|
+
```typescript
|
|
225
|
+
import { Request, Response } from 'express';
|
|
226
|
+
import { validateUser } from './users.validator.js';
|
|
227
|
+
import { createUser } from './users.controller.js';
|
|
228
|
+
import { sendResponse } from '../../shared/response.utils.js';
|
|
229
|
+
|
|
230
|
+
export async function createUserHandler(req: Request, res: Response): Promise<void> {
|
|
231
|
+
await sendResponse(req, res, {
|
|
232
|
+
validator: validateUser,
|
|
233
|
+
controller: (data) => createUser(data),
|
|
234
|
+
dataSource: 'body',
|
|
235
|
+
successStatus: 201
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## 🗂️ Project Structure
|
|
241
|
+
|
|
242
|
+
```
|
|
243
|
+
my-api/
|
|
244
|
+
├── src/
|
|
245
|
+
│ ├── index.ts # Entry point
|
|
246
|
+
│ ├── routes/
|
|
247
|
+
│ │ ├── index.ts # Main router
|
|
248
|
+
│ │ └── users/
|
|
249
|
+
│ │ ├── users.validator.ts
|
|
250
|
+
│ │ ├── users.controller.ts
|
|
251
|
+
│ │ ├── users.handler.ts
|
|
252
|
+
│ │ └── users.routes.ts
|
|
253
|
+
│ ├── shared/
|
|
254
|
+
│ │ ├── response.utils.ts # sendResponse utilities
|
|
255
|
+
│ │ ├── api.utils.ts # API utilities
|
|
256
|
+
│ │ └── jwt.utils.ts # JWT utilities (optional)
|
|
257
|
+
│ ├── database/
|
|
258
|
+
│ │ └── connection.ts # Database connection
|
|
259
|
+
│ └── config/
|
|
260
|
+
│ └── di-container.ts # Dependency injection
|
|
261
|
+
├── package.json
|
|
262
|
+
├── tsconfig.json
|
|
263
|
+
├── ecosystem.config.cjs # PM2 configuration (after deploy)
|
|
264
|
+
└── .env
|
|
99
265
|
```
|
|
100
266
|
|
|
267
|
+
## 🔧 Development
|
|
268
|
+
|
|
269
|
+
Run development server:
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
npm run dev
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
Build and start:
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
npm run build
|
|
279
|
+
npm start
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
## 🚀 Deployment Workflow
|
|
283
|
+
|
|
284
|
+
1. **Develop locally** - `katax init` + `katax add endpoint`
|
|
285
|
+
2. **Push to GitHub** - Commit and push your code
|
|
286
|
+
3. **SSH to VPS** - `ssh ubuntu@your-vps-ip`
|
|
287
|
+
4. **Initial deploy** - `katax deploy init`
|
|
288
|
+
5. **Make changes** - Update code, commit, push
|
|
289
|
+
6. **Redeploy** - `katax deploy update`
|
|
290
|
+
|
|
291
|
+
See [DEPLOY_GUIDE.md](./DEPLOY_GUIDE.md) for detailed deployment instructions.
|
|
292
|
+
|
|
293
|
+
## 📚 Documentation
|
|
294
|
+
|
|
295
|
+
- [Deployment Guide](./DEPLOY_GUIDE.md) - Complete PM2 deployment workflow
|
|
296
|
+
- [katax-core](https://github.com/LOPIN6FARRIER/katax-core) - Validation library
|
|
297
|
+
|
|
298
|
+
## 🤝 Contributing
|
|
299
|
+
|
|
300
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
301
|
+
|
|
302
|
+
## 📝 License
|
|
303
|
+
|
|
304
|
+
MIT © Vinicio Esparza
|
|
305
|
+
|
|
306
|
+
## 🔗 Links
|
|
307
|
+
|
|
308
|
+
- Repository: https://github.com/LOPIN6FARRIER/katax-cli
|
|
309
|
+
- katax-core: https://github.com/LOPIN6FARRIER/katax-core
|
|
310
|
+
- Issues: https://github.com/LOPIN6FARRIER/katax-cli/issues
|
|
311
|
+
|
|
312
|
+
|
|
101
313
|
Interactive prompts will guide you through:
|
|
102
314
|
- HTTP method (GET, POST, PUT, DELETE)
|
|
103
315
|
- Route path
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-endpoint.d.ts","sourceRoot":"","sources":["../../src/commands/add-endpoint.ts"],"names":[],"mappings":"AAoBA,UAAU,kBAAkB;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,iBA2OtF"}
|
|
@@ -2,21 +2,15 @@ import inquirer from 'inquirer';
|
|
|
2
2
|
import ora from 'ora';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import { success, error, warning, gray, title, info } from '../utils/logger.js';
|
|
5
|
-
import { fileExists
|
|
6
|
-
import {
|
|
7
|
-
import { generateController } from '../generators/controller-generator.js';
|
|
8
|
-
import { generateHandler } from '../generators/handler-generator.js';
|
|
9
|
-
import { generateRoute } from '../generators/route-generator.js';
|
|
10
|
-
import { updateMainRouter } from '../generators/router-updater.js';
|
|
5
|
+
import { fileExists } from '../utils/file-utils.js';
|
|
6
|
+
import { codeGenerationService } from '../services/code-generation.service.js';
|
|
11
7
|
export async function addEndpointCommand(name, options = {}) {
|
|
12
8
|
title(`🎯 Add Endpoint: ${name}`);
|
|
13
|
-
// Check if we're in a Katax project
|
|
14
9
|
if (!fileExists(path.join(process.cwd(), 'package.json'))) {
|
|
15
10
|
error('Not in a project directory!');
|
|
16
11
|
gray('Run this command from your project root\n');
|
|
17
12
|
process.exit(1);
|
|
18
13
|
}
|
|
19
|
-
// Check if katax-core is installed
|
|
20
14
|
const packageJsonPath = path.join(process.cwd(), 'package.json');
|
|
21
15
|
const packageJson = JSON.parse(await import('fs').then(fs => fs.promises.readFile(packageJsonPath, 'utf-8')));
|
|
22
16
|
const hasKataxCore = packageJson.dependencies?.['katax-core'];
|
|
@@ -34,13 +28,11 @@ export async function addEndpointCommand(name, options = {}) {
|
|
|
34
28
|
error('Cannot create endpoint without validation library');
|
|
35
29
|
process.exit(1);
|
|
36
30
|
}
|
|
37
|
-
// Install katax-core
|
|
38
31
|
const spinner = ora('Installing katax-core...').start();
|
|
39
32
|
const { execa } = await import('execa');
|
|
40
33
|
await execa('npm', ['install', 'katax-core'], { cwd: process.cwd() });
|
|
41
34
|
spinner.succeed('katax-core installed');
|
|
42
35
|
}
|
|
43
|
-
// Interactive prompts
|
|
44
36
|
const answers = await inquirer.prompt([
|
|
45
37
|
{
|
|
46
38
|
type: 'list',
|
|
@@ -79,7 +71,6 @@ export async function addEndpointCommand(name, options = {}) {
|
|
|
79
71
|
addAsyncValidators: false,
|
|
80
72
|
dbOperations: []
|
|
81
73
|
};
|
|
82
|
-
// If validation is enabled, collect fields
|
|
83
74
|
if (config.addValidation && config.method !== 'GET' && config.method !== 'DELETE') {
|
|
84
75
|
info('\nDefine request body fields:');
|
|
85
76
|
let addingFields = true;
|
|
@@ -121,7 +112,6 @@ export async function addEndpointCommand(name, options = {}) {
|
|
|
121
112
|
required: fieldConfig.required,
|
|
122
113
|
rules: []
|
|
123
114
|
};
|
|
124
|
-
// Add type-specific rules
|
|
125
115
|
if (fieldConfig.type === 'string' || fieldConfig.type === 'email') {
|
|
126
116
|
const stringRules = await inquirer.prompt([
|
|
127
117
|
{
|
|
@@ -181,34 +171,22 @@ export async function addEndpointCommand(name, options = {}) {
|
|
|
181
171
|
config.addAsyncValidators = addAsync;
|
|
182
172
|
}
|
|
183
173
|
}
|
|
184
|
-
// Generate files
|
|
185
174
|
const spinner = ora('Generating endpoint files...').start();
|
|
186
175
|
try {
|
|
187
|
-
const
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
const
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
176
|
+
const packageJsonPath = path.join(process.cwd(), 'package.json');
|
|
177
|
+
let database;
|
|
178
|
+
try {
|
|
179
|
+
const packageJson = JSON.parse(await import('fs').then(fs => fs.promises.readFile(packageJsonPath, 'utf-8')));
|
|
180
|
+
if (packageJson.dependencies?.pg)
|
|
181
|
+
database = 'postgresql';
|
|
182
|
+
else if (packageJson.dependencies?.mysql2)
|
|
183
|
+
database = 'mysql';
|
|
184
|
+
else if (packageJson.dependencies?.mongodb)
|
|
185
|
+
database = 'mongodb';
|
|
194
186
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
const
|
|
198
|
-
await writeFile(controllerPath, controllerContent);
|
|
199
|
-
spinner.text = `Generated ${name.toLowerCase()}.controller.ts`;
|
|
200
|
-
// Generate handler
|
|
201
|
-
const handlerPath = path.join(basePath, `${name.toLowerCase()}.handler.ts`);
|
|
202
|
-
const handlerContent = generateHandler(config);
|
|
203
|
-
await writeFile(handlerPath, handlerContent);
|
|
204
|
-
spinner.text = `Generated ${name.toLowerCase()}.handler.ts`;
|
|
205
|
-
// Generate route
|
|
206
|
-
const routePath = path.join(basePath, `${name.toLowerCase()}.routes.ts`);
|
|
207
|
-
const routeContent = generateRoute(config);
|
|
208
|
-
await writeFile(routePath, routeContent);
|
|
209
|
-
spinner.text = `Generated ${name.toLowerCase()}.routes.ts`;
|
|
210
|
-
// Update main router
|
|
211
|
-
await updateMainRouter(name, config);
|
|
187
|
+
catch (err) {
|
|
188
|
+
}
|
|
189
|
+
const files = await codeGenerationService.generateEndpoint(config, process.cwd(), database);
|
|
212
190
|
spinner.succeed('Endpoint files generated');
|
|
213
191
|
success(`\n✨ Endpoint "${name}" created successfully!\n`);
|
|
214
192
|
info('Generated files:');
|
|
@@ -222,8 +200,9 @@ export async function addEndpointCommand(name, options = {}) {
|
|
|
222
200
|
gray(` ${config.method} ${config.path}\n`);
|
|
223
201
|
}
|
|
224
202
|
catch (err) {
|
|
225
|
-
|
|
226
|
-
error(err
|
|
203
|
+
error('Failed to add endpoint');
|
|
204
|
+
console.error(err);
|
|
227
205
|
process.exit(1);
|
|
228
206
|
}
|
|
229
207
|
}
|
|
208
|
+
//# sourceMappingURL=add-endpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-endpoint.js","sourceRoot":"","sources":["../../src/commands/add-endpoint.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EACL,OAAO,EACP,KAAK,EACL,OAAO,EACP,IAAI,EACJ,KAAK,EACL,IAAI,EACL,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,UAAU,EAGX,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAO/E,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY,EAAE,UAA8B,EAAE;IACrF,KAAK,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;IAGlC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;QAC1D,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACrC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAGD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9G,MAAM,YAAY,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC,YAAY,CAAC,CAAC;IAE9D,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,CAAC,6CAA6C,CAAC,CAAC;QACvD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACxC;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,uCAAuC;gBAChD,OAAO,EAAE,IAAI;aACd;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,KAAK,CAAC,mDAAmD,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAGD,MAAM,OAAO,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC;QACxD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACtE,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAGD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACpC;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC;YAClD,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,MAAM;YAChD,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM;SACtB;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,QAAQ,IAAI,CAAC,WAAW,EAAE,EAAE;YACrC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI;YACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC3B,OAAO,wBAAwB,CAAC;gBAClC,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;SACF;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,iBAAiB;YAC1B,OAAO,EAAE,IAAI;SACd;KACF,CAAC,CAAC;IAEH,MAAM,MAAM,GAAmB;QAC7B,IAAI;QACJ,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,OAAO,CAAC,MAAM,CAAQ;QAChE,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI;QAClC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,MAAM,EAAE,EAAE;QACV,kBAAkB,EAAE,KAAK;QACzB,YAAY,EAAE,EAAE;KACjB,CAAC;IAGF,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAClF,IAAI,CAAC,+BAA+B,CAAC,CAAC;QACtC,IAAI,YAAY,GAAG,IAAI,CAAC;QAExB,OAAO,YAAY,EAAE,CAAC;YACpB,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACzC;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,qCAAqC;oBAC9C,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClB,IAAI,KAAK,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;4BACrD,OAAO,uCAAuC,CAAC;wBACjD,CAAC;wBACD,OAAO,IAAI,CAAC;oBACd,CAAC;iBACF;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;gBAC5B,YAAY,GAAG,KAAK,CAAC;gBACrB,MAAM;YACR,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACxC;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,aAAa,YAAY,CAAC,SAAS,IAAI;oBAChD,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;iBAC7E;gBACD;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,WAAW;oBACpB,OAAO,EAAE,IAAI;iBACd;aACF,CAAC,CAAC;YAEH,MAAM,KAAK,GAAgB;gBACzB,IAAI,EAAE,YAAY,CAAC,SAAS;gBAC5B,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,KAAK,EAAE,EAAE;aACV,CAAC;YAGF,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAClE,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;oBACxC;wBACE,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,uCAAuC;wBAChD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,kBAAkB;qBAC7E;oBACD;wBACE,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,uCAAuC;wBAChD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,kBAAkB;qBAC7E;iBACF,CAAC,CAAC;gBAEH,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;oBAC1B,KAAK,CAAC,KAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACnF,CAAC;gBACD,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;oBAC1B,KAAK,CAAC,KAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACnF,CAAC;YACH,CAAC;YAED,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAClC,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;oBACxC;wBACE,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,KAAK;wBACX,OAAO,EAAE,sCAAsC;wBAC/C,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,kBAAkB;qBAC/E;oBACD;wBACE,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,KAAK;wBACX,OAAO,EAAE,sCAAsC;wBAC/C,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,kBAAkB;qBAC/E;iBACF,CAAC,CAAC;gBAEH,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC;oBACpB,KAAK,CAAC,KAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACzE,CAAC;gBACD,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC;oBACpB,KAAK,CAAC,KAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;YAED,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,CAAC,oBAAoB,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,MAAM,CAAC,MAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACzC;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,4CAA4C;oBACrD,OAAO,EAAE,KAAK;iBACf;aACF,CAAC,CAAC;YACH,MAAM,CAAC,kBAAkB,GAAG,QAAQ,CAAC;QACvC,CAAC;IACH,CAAC;IAGD,MAAM,OAAO,GAAG,GAAG,CAAC,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAAC;IAE5D,IAAI,CAAC;QAEH,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;QACjE,IAAI,QAAwD,CAAC;QAE7D,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9G,IAAI,WAAW,CAAC,YAAY,EAAE,EAAE;gBAAE,QAAQ,GAAG,YAAY,CAAC;iBACrD,IAAI,WAAW,CAAC,YAAY,EAAE,MAAM;gBAAE,QAAQ,GAAG,OAAO,CAAC;iBACzD,IAAI,WAAW,CAAC,YAAY,EAAE,OAAO;gBAAE,QAAQ,GAAG,SAAS,CAAC;QACnE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;QAEf,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,gBAAgB,CACxD,MAAM,EACN,OAAO,CAAC,GAAG,EAAE,EACb,QAAQ,CACT,CAAC;QAEF,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;QAE5C,OAAO,CAAC,iBAAiB,IAAI,2BAA2B,CAAC,CAAC;QAE1D,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACzB,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAC3E,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;QAC5E,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACzE,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACxE,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACvC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAEvC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;IAE9C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare function deployInitCommand(): Promise<void>;
|
|
2
|
+
export declare function deployUpdateCommand(options: {
|
|
3
|
+
branch?: string;
|
|
4
|
+
hard?: boolean;
|
|
5
|
+
}): Promise<void>;
|
|
6
|
+
export declare function deployRollbackCommand(options: {
|
|
7
|
+
commits?: number;
|
|
8
|
+
}): Promise<void>;
|
|
9
|
+
export declare function deployLogsCommand(options: {
|
|
10
|
+
lines?: number;
|
|
11
|
+
follow?: boolean;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
export declare function deployStatusCommand(): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=deploy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAuBA,wBAAsB,iBAAiB,kBAgHtC;AAKD,wBAAsB,mBAAmB,CAAC,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,iBAqDrF;AAKD,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,iBA8BxE;AAKD,wBAAsB,iBAAiB,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,iBAoBpF;AAKD,wBAAsB,mBAAmB,kBASxC"}
|